[test-suite] r311413 - [test-suite] Adding the Pathfinder Benchmark

Hal Finkel via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 22 07:49:42 PDT 2017


On 08/22/2017 09:28 AM, Hal Finkel via llvm-commits wrote:
>
> Sure. I'll fix it.
>

r311458 should fix this.

  -Hal

>  -Hal
>
> On 08/22/2017 09:25 AM, Adrian Prantl wrote:
>> Hal, it looks like this benchmark is failing to build on green dragon 
>> because of a warning, could you please take a look?
>>
>> http://green.lab.llvm.org/green/job/Compiler_Verifiers_GlobalISEL/8407/consoleFull#139682078949ba4694-19c4-4d7e-bec5-911270d8a58c
>>
>> /Users/buildslave/jenkins/workspace/Compiler_Verifiers_GlobalISEL/test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c:175:22: 
>> warning: comparison of array 'commandLine' not equal to a null 
>> pointer is always true [-Wtautological-pointer-compare] if ( 
>> commandLine != NULL ) ^~~~~~~~~~~ ~~~~ 
>> /Users/buildslave/jenkins/workspace/Compiler_Verifiers_GlobalISEL/test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c:177:21: 
>> error: implicit declaration of function 'YAMLOpen' is invalid in C99 
>> [-Werror,-Wimplicit-function-declaration] YAMLOpen(); ^ 
>> /Users/buildslave/jenkins/workspace/Compiler_Verifiers_GlobalISEL/test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c:181:21: 
>> error: implicit declaration of function 'YAMLWriteString' is invalid 
>> in C99 [-Werror,-Wimplicit-function-declaration] 
>> YAMLWriteString("Command", commandLine+1); ^ 
>> /Users/buildslave/jenkins/workspace/Compiler_Verifiers_GlobalISEL/test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c:227:5: 
>> error: implicit declaration of function 'YAMLClose' is invalid in C99 
>> [-Werror,-Wimplicit-function-declaration] YAMLClose(); /* works even 
>> if YAML logging isn't present */ ^ 
>> /Users/buildslave/jenkins/workspace/Compiler_Verifiers_GlobalISEL/test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c:271:9: 
>> error: implicit declaration of function 'doMultiSearches' is invalid 
>> in C99 [-Werror,-Wimplicit-function-declaration] 
>> doMultiSearches(config); ^ 
>> /Users/buildslave/jenkins/workspace/Compiler_Verifiers_GlobalISEL/test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c:271:9: 
>> note: did you mean 'doMultiSearchesQT'? 
>> /Users/buildslave/jenkins/workspace/Compiler_Verifiers_GlobalISEL/test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.h:104:6: 
>> note: 'doMultiSearchesQT' declared here void 
>> doMultiSearchesQT(Configuration *config); ^ 1 warning and 4 errors 
>> generated.
>>> On Aug 21, 2017, at 5:38 PM, Hal Finkel via llvm-commits 
>>> <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> 
>>> wrote:
>>>
>>> Author: hfinkel
>>> Date: Mon Aug 21 17:38:53 2017
>>> New Revision: 311413
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=311413&view=rev
>>> Log:
>>> [test-suite] Adding the Pathfinder Benchmark
>>>
>>> PathFinder searches for "signatures" within graphs. Graphs being 
>>> searched are
>>> directed and cyclic. Many, but not all nodes within the graph have 
>>> labels. Any
>>> given node may have more than one label, and any label may be 
>>> applied to more
>>> than one node. A signature is an orderd list of labels. PathFinder 
>>> searches for
>>> paths between labels within the signature. PathFinder returns 
>>> success if there
>>> is a path from a node with the first label in the signature that 
>>> passes through
>>> nodes with each label in order, ultimately reaching a node with the 
>>> last label
>>> in the signature. Labeled nodes need not be contiguous on any given 
>>> path.
>>>
>>> At the current time, PathFinder does not do any pathway analysis 
>>> (e.g. shortest
>>> path) for discovered signatures. PathFinder simply searches until a 
>>> signature
>>> is satisfied or all pathways have been exhausted.
>>>
>>> Web: https://mantevo.org/packages/
>>> Github: https://github.com/Mantevo/PathFinder
>>>
>>> When run on an Intel Xeon CPU E5-2699 v4 @ 2.20GHz:
>>> compile_time: 13.3092
>>> exec_time: 3.1158
>>> Maximum resident set size (kbytes): 6256
>>>
>>> Patch by Brian Homerding, thanks!
>>>
>>> Differential Revision: https://reviews.llvm.org/D36680
>>>
>>> Added:
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/CMakeLists.txt
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING.LESSER
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/Makefile
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/PathFinder.reference_output
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/README
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/gettime.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/medsmall1.adj_list
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.h
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.c
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.h
>>> Modified:
>>>    test-suite/trunk/LICENSE.TXT
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/CMakeLists.txt
>>>    test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Makefile
>>>
>>> Modified: test-suite/trunk/LICENSE.TXT
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/LICENSE.TXT?rev=311413&r1=311412&r2=311413&view=diff
>>> ==============================================================================
>>> --- test-suite/trunk/LICENSE.TXT (original)
>>> +++ test-suite/trunk/LICENSE.TXT Mon Aug 21 17:38:53 2017
>>> @@ -84,6 +84,7 @@ ASC Sequoia:        llvm-test/MultiSourc
>>>                     llvm-test/MultiSource/Benchmarks/ASC_Sequoia/sphot
>>> smg2000:            llvm-test/MultiSource/Benchmarks/ASCI_Purple/SMG2000
>>> miniAMR: 
>>>            llvm-test/MultiSource/Benchmarks/DOE-ProxyApps-C/miniAMR
>>> +Pathfinder: 
>>>         llvm-test/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder
>>> XSBench: 
>>>            llvm-test/MultiSource/Benchmarks/DOE-ProxyApps-C/XSBench
>>> HPCCG: 
>>>              llvm-test/MultiSource/Benchmarks/DOE-ProxyApps-C++/HPCCG
>>> PENNANT: 
>>>            llvm-test/MultiSource/Benchmarks/DOE-ProxyApps-C++/PENNANT
>>>
>>> Modified: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/CMakeLists.txt
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/CMakeLists.txt?rev=311413&r1=311412&r2=311413&view=diff
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/CMakeLists.txt 
>>> (original)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/CMakeLists.txt 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -1,2 +1,3 @@
>>> add_subdirectory(XSBench)
>>> +add_subdirectory(Pathfinder)
>>> add_subdirectory(miniAMR)
>>>
>>> Modified: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Makefile
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Makefile?rev=311413&r1=311412&r2=311413&view=diff
>>> ==============================================================================
>>> --- test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Makefile 
>>> (original)
>>> +++ test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Makefile 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -2,7 +2,7 @@
>>>
>>> LEVEL = ../../..
>>> PARALLEL_DIRS = XSBench    \
>>> -                miniAMR
>>> -
>>> +                miniAMR    \
>>> +                Pathfinder
>>>
>>> include $(LEVEL)/Makefile.programs
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/CMakeLists.txt
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/CMakeLists.txt?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/CMakeLists.txt 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/CMakeLists.txt 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,4 @@
>>> +set(PROG PathFinder)
>>> +list(APPEND LDFLAGS -lm)
>>> +set(RUN_OPTIONS -x ${CMAKE_CURRENT_SOURCE_DIR}/medsmall1.adj_list)
>>> +llvm_multisource()
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,674 @@
>>> +                    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>.
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING.LESSER
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING.LESSER?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING.LESSER 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/COPYING.LESSER 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,165 @@
>>> +                   GNU LESSER 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.
>>> +
>>> +
>>> +  This version of the GNU Lesser General Public License incorporates
>>> +the terms and conditions of version 3 of the GNU General Public
>>> +License, supplemented by the additional permissions listed below.
>>> +
>>> +  0. Additional Definitions.
>>> +
>>> +  As used herein, "this License" refers to version 3 of the GNU Lesser
>>> +General Public License, and the "GNU GPL" refers to version 3 of 
>>> the GNU
>>> +General Public License.
>>> +
>>> +  "The Library" refers to a covered work governed by this License,
>>> +other than an Application or a Combined Work as defined below.
>>> +
>>> +  An "Application" is any work that makes use of an interface provided
>>> +by the Library, but which is not otherwise based on the Library.
>>> +Defining a subclass of a class defined by the Library is deemed a mode
>>> +of using an interface provided by the Library.
>>> +
>>> +  A "Combined Work" is a work produced by combining or linking an
>>> +Application with the Library.  The particular version of the Library
>>> +with which the Combined Work was made is also called the "Linked
>>> +Version".
>>> +
>>> +  The "Minimal Corresponding Source" for a Combined Work means the
>>> +Corresponding Source for the Combined Work, excluding any source code
>>> +for portions of the Combined Work that, considered in isolation, are
>>> +based on the Application, and not on the Linked Version.
>>> +
>>> +  The "Corresponding Application Code" for a Combined Work means the
>>> +object code and/or source code for the Application, including any data
>>> +and utility programs needed for reproducing the Combined Work from the
>>> +Application, but excluding the System Libraries of the Combined Work.
>>> +
>>> +  1. Exception to Section 3 of the GNU GPL.
>>> +
>>> +  You may convey a covered work under sections 3 and 4 of this License
>>> +without being bound by section 3 of the GNU GPL.
>>> +
>>> +  2. Conveying Modified Versions.
>>> +
>>> +  If you modify a copy of the Library, and, in your modifications, a
>>> +facility refers to a function or data to be supplied by an Application
>>> +that uses the facility (other than as an argument passed when the
>>> +facility is invoked), then you may convey a copy of the modified
>>> +version:
>>> +
>>> +   a) under this License, provided that you make a good faith effort to
>>> +   ensure that, in the event an Application does not supply the
>>> +   function or data, the facility still operates, and performs
>>> +   whatever part of its purpose remains meaningful, or
>>> +
>>> +   b) under the GNU GPL, with none of the additional permissions of
>>> +   this License applicable to that copy.
>>> +
>>> +  3. Object Code Incorporating Material from Library Header Files.
>>> +
>>> +  The object code form of an Application may incorporate material from
>>> +a header file that is part of the Library.  You may convey such object
>>> +code under terms of your choice, provided that, if the incorporated
>>> +material is not limited to numerical parameters, data structure
>>> +layouts and accessors, or small macros, inline functions and templates
>>> +(ten or fewer lines in length), you do both of the following:
>>> +
>>> +   a) Give prominent notice with each copy of the object code that the
>>> +   Library is used in it and that the Library and its use are
>>> +   covered by this License.
>>> +
>>> +   b) Accompany the object code with a copy of the GNU GPL and this 
>>> license
>>> +   document.
>>> +
>>> +  4. Combined Works.
>>> +
>>> +  You may convey a Combined Work under terms of your choice that,
>>> +taken together, effectively do not restrict modification of the
>>> +portions of the Library contained in the Combined Work and reverse
>>> +engineering for debugging such modifications, if you also do each of
>>> +the following:
>>> +
>>> +   a) Give prominent notice with each copy of the Combined Work that
>>> +   the Library is used in it and that the Library and its use are
>>> +   covered by this License.
>>> +
>>> +   b) Accompany the Combined Work with a copy of the GNU GPL and 
>>> this license
>>> +   document.
>>> +
>>> +   c) For a Combined Work that displays copyright notices during
>>> +   execution, include the copyright notice for the Library among
>>> +   these notices, as well as a reference directing the user to the
>>> +   copies of the GNU GPL and this license document.
>>> +
>>> +   d) Do one of the following:
>>> +
>>> +       0) Convey the Minimal Corresponding Source under the terms 
>>> of this
>>> +       License, and the Corresponding Application Code in a form
>>> +       suitable for, and under terms that permit, the user to
>>> +       recombine or relink the Application with a modified version of
>>> +       the Linked Version to produce a modified Combined Work, in the
>>> +       manner specified by section 6 of the GNU GPL for conveying
>>> +       Corresponding Source.
>>> +
>>> +       1) Use a suitable shared library mechanism for linking with the
>>> +       Library.  A suitable mechanism is one that (a) uses at run time
>>> +       a copy of the Library already present on the user's computer
>>> +       system, and (b) will operate properly with a modified version
>>> +       of the Library that is interface-compatible with the Linked
>>> +       Version.
>>> +
>>> +   e) Provide Installation Information, but only if you would otherwise
>>> +   be required to provide such information under section 6 of the
>>> +   GNU GPL, and only to the extent that such information is
>>> +   necessary to install and execute a modified version of the
>>> +   Combined Work produced by recombining or relinking the
>>> +   Application with a modified version of the Linked Version. (If
>>> +   you use option 4d0, the Installation Information must accompany
>>> +   the Minimal Corresponding Source and Corresponding Application
>>> +   Code. If you use option 4d1, you must provide the Installation
>>> +   Information in the manner specified by section 6 of the GNU GPL
>>> +   for conveying Corresponding Source.)
>>> +
>>> +  5. Combined Libraries.
>>> +
>>> +  You may place library facilities that are a work based on the
>>> +Library side by side in a single library together with other library
>>> +facilities that are not Applications and are not covered by this
>>> +License, and convey such a combined library under terms of your
>>> +choice, if you do both of the following:
>>> +
>>> +   a) Accompany the combined library with a copy of the same work based
>>> +   on the Library, uncombined with any other library facilities,
>>> +   conveyed under the terms of this License.
>>> +
>>> +   b) Give prominent notice with the combined library that part of it
>>> +   is a work based on the Library, and explaining where to find the
>>> +   accompanying uncombined form of the same work.
>>> +
>>> +  6. Revised Versions of the GNU Lesser General Public License.
>>> +
>>> +  The Free Software Foundation may publish revised and/or new versions
>>> +of the GNU Lesser 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
>>> +Library as you received it specifies that a certain numbered version
>>> +of the GNU Lesser General Public License "or any later version"
>>> +applies to it, you have the option of following the terms and
>>> +conditions either of that published version or of any later version
>>> +published by the Free Software Foundation. If the Library as you
>>> +received it does not specify a version number of the GNU Lesser
>>> +General Public License, you may choose any version of the GNU Lesser
>>> +General Public License ever published by the Free Software Foundation.
>>> +
>>> +  If the Library as you received it specifies that a proxy can decide
>>> +whether future versions of the GNU Lesser General Public License shall
>>> +apply, that proxy's public statement of acceptance of any version is
>>> +permanent authorization for you to choose that version for the
>>> +Library.
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/Makefile
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/Makefile?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/Makefile 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/Makefile 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,6 @@
>>> +LEVEL = ../../../..
>>> +
>>> +PROG = PathFinder
>>> +LDFLAGS = -lm
>>> +RUN_OPTIONS = -x $(PROJ_SRC_DIR)/medsmall1.adj_list
>>> +include $(LEVEL)/MultiSource/Makefile.multisrc
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/PathFinder.reference_output
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/PathFinder.reference_output?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/PathFinder.reference_output 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/PathFinder.reference_output 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,28 @@
>>> +
>>> +
>>> +        PathFinder: finding a series of labeled nodes within a
>>> +                two-layer directed, cyclic graph.
>>> +               Copyright (2013) Sandia Corporation
>>> +
>>> + Sandia National Laboratories is a multi-program laboratory managed and
>>> + operated by Sandia Corporation, a wholly owned subsidiary of Lockheed
>>> + Martin Corporation, for the U.S. Department of Energy's National 
>>> Nuclear
>>> + Security Administration under terms of Contract DE-AC04-94AL85000,
>>> + there is a non-exclusive license for use of this work by or on behalf
>>> + of the U.S. Government. Export of this program may require a license
>>> + from the United States Government.
>>> +
>>> +
>>> +500 functions specified
>>> +3463 basic blocks specified
>>> +371 total System Call Map elements
>>> +...parsing complete.
>>> +Immediately before parallel
>>> +
>>> +
>>> +44669 found out of 137641 searches. Overall Time: 0:0:0.000
>>> +
>>> +
>>> +Total 44669 legs found
>>> +
>>> +exit 0
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/README
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/README?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/README 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/README 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,220 @@
>>> +**************************************************************************
>>> +LLVM Test-suite Note:
>>> +**************************************************************************
>>> +The original source is located at 
>>> https://github.com/Mantevo/PathFinder.
>>> +Beyond this paragraph is the original README contained with the source
>>> +code.  The Makefile refered to within is not utilized within the
>>> +test-suite.  The test-suite builds a serial version (openmp and
>>> +mpi disabled) with its own cmake and make build system.
>>> +**************************************************************************
>>> +
>>> +PathFinder graph pathway analysis mini-application
>>> +
>>> +------------------------------------
>>> +Contents of this README file:
>>> +1. PathFinder overview
>>> +2. PathFinder versions
>>> +3. Building PathFinder
>>> +4. Running PathFinder
>>> +5. PathFinder search algorithm/pseudo code
>>> +------------------------------------
>>> +
>>> +------------------------------------
>>> +1. PathFinder overview:
>>> +
>>> +PathFinder searches for "signatures" within graphs. Graphs being 
>>> searched are
>>> +directed and cyclic. Many, but not all nodes within the graph have 
>>> labels. Any
>>> +given node may have more than one label, and any label may be 
>>> applied to more
>>> +than one node. A signature is an orderd list of labels. PathFinder 
>>> searches for
>>> +paths between labels within the signature. PathFinder returns 
>>> success if there
>>> +is a path from a node with the first label in the signature that 
>>> passes through
>>> +nodes with each label in order, ultimately reaching a node with the 
>>> last label
>>> +in the signature. Labeled nodes need not be contiguous on any given 
>>> path.
>>> +
>>> +At the current time, PathFinder does not do any pathway analysis 
>>> (e.g. shortest
>>> +path) for discovered signatures. PathFinder simply searches until a 
>>> signature is
>>> +satisfied or all pathways have been exhausted.
>>> +
>>> +------------------------------------
>>> +2. PathFinder versions:
>>> +
>>> +- PathFinder_ref:
>>> +    reference version: self-contained. Includes serial and OpenMP 
>>> parallel
>>> +    implementations. MPI is not yet supported.
>>> +
>>> +------------------------------------
>>> +3. Building PathFinder:
>>> +
>>> +The standard build is to cd into the 'PathFinder_ref' directory and 
>>> type 'make'.
>>> +Doing so builds an OpenMP enabled version of PathFinder (named 
>>> PathFinder.x). For
>>> +serial execution, run it with the OMP_NUM_THREADS environment 
>>> variable set to 1.
>>> +
>>> +Alternative build targets:
>>> +    * clean -- removes all .o files
>>> +    * realclean -- removes all .o and .x files
>>> +    * debug -- PathFinder.x+dbg - serial executable with debug 
>>> information
>>> +    * mpi -- currently not implemented; prints an error message
>>> +
>>> +To verify execution, type 'make check' which builds a serial 
>>> version, runs it
>>> +against one of the known data sets and compares the results.
>>> +
>>> +------------------------------------
>>> +4. Running PathFinder:
>>> +
>>> +The simplest execution is to simply type './PathFinder.x'. This 
>>> will run
>>> +PathFinder with a trivial graph (MicroTestData.adj_list in the source
>>> +directory). It will find 6 legs out of 9 searches, by doing an 
>>> "exhaustive"
>>> +search on that graph.
>>> +
>>> +An exhaustive search is PathFinder determining if paths exist 
>>> between any pair
>>> +of labels for every label existing in the graph. Exhaustive 
>>> searches are
>>> +embarrassingly parallel, and can be quite time consuming depending 
>>> on the size
>>> +of the graph and number of labels. Running PathFinder exhaustively 
>>> is done with
>>> +the -x switch:
>>> +    PathFinder.x -x <data file>
>>> +    e.g. PathFinder.x -x ../scaleData/1kx750.adj_list
>>> +
>>> +To search for specific signatures, PathFinder can be run 
>>> interactively or with
>>> +a configuration file. To run interactively, use the -i switch:
>>> +    PathFinder.x -i <data file>
>>> +PathFinder will prompt the operator for a series of labels to 
>>> define the
>>> +signature for which PathFinder will search.
>>> +
>>> +Multiple data files and multiple signatures can be specified to 
>>> PathFinder in a
>>> +configuration file. A python script (config_builder.py) exists to 
>>> assist the
>>> +operator in creating a configuration file. A sample configuration 
>>> file is
>>> +included in the PathFinder source directory. To run PathFinder with 
>>> a config
>>> +file, use the -c switch:
>>> +    PathFinder.x -c <config file>
>>> +    e.g. PathFinder.x -c sampleConfig
>>> +
>>> +Typing 'PathFinder -h' will print a help message describing the 
>>> available
>>> +execution switches. Sample data files are provided in the 'data' and
>>> +'generatedData' directories. The python script used to generate 
>>> representative
>>> +graph data is in the PathFinder_ref directory. It is named 
>>> graph_gen.py.
>>> +
>>> +YAML output files can be generated by using the -y switch.
>>> +
>>> +Sample data sets are included in the "generatedData" and "scaleData"
>>> +subdirectories. The scaleData files are intended for performance
>>> +characterization. They are named with the convention:
>>> +    <NodeCount>x<LabelCount>.adj_list
>>> +For expected results, see scaleData/README
>>> +
>>> +------------------------------------
>>> +5. PathFinder search algorithm / pseudo code
>>> +
>>> +PathFinder does a modified depth-first search through the graph. 
>>> For each
>>> +signature, PathFinder begins searching from the set of nodes which 
>>> have the
>>> +first label in the signature. From these nodes, it finds a path to 
>>> any node that
>>> +is labeled with the second label in the signature. This is repeated 
>>> until a path
>>> +is found to the last label in the signature. If at any point in the 
>>> search a
>>> +path to a label is not found, that search fails.
>>> +
>>> +Searches are done recursively. At each node, the target of each 
>>> edge is checked
>>> +to see if it is labeled with the next label in the signature. If a 
>>> match is
>>> +made, The search continues from the matched node and the subsequent 
>>> label in the
>>> +signature. If there are no remaining labels in the signature, the 
>>> search has
>>> +succeeded. If no direct edge from the current node matches, then 
>>> the search
>>> +continues recursively for the current label along each edge from 
>>> the current
>>> +node. If no match exists along any edge, the search fails.
>>> +
>>> +Pseudo code:
>>> +
>>> +For each file in config file:
>>> +    Parse file into a Graph
>>> +
>>> +For each signature in config file:
>>> +    Store for processing
>>> +
>>> +For each signature
>>> +{
>>> +    For each Graph
>>> +    {
>>> +        Make sure the graph contains at least one node labeled with 
>>> every label
>>> +            in the signature
>>> +
>>> +        Get set of nodes with signature[0], the first label in 
>>> signature
>>> +        for each “Start” node
>>> +        {
>>> +            // Recursive procedure to find remaining signature. 
>>> Requires
>>> +            // current node, the remaining “unfound” signature legs
>>> +            // a result stack of nodes to store path traversed and
>>> +            // a stack of nodes visited so far to detect cycles and
>>> +            // redundant searches
>>> +            Create empty result stack
>>> +            Create empty visited stack
>>> +            success = FindRemainingSignatureFromCurrentNode ( 
>>> startNode,
>>> +                                                &signature[1], 
>>> result, visited )
>>> +        } // end of for each “Start” node
>>> +    } // end of for each Graph
>>> +} // end of for each Signature
>>> +
>>> +
>>> +// Recursive procedure to find remaining signature.
>>> +//      currentNode – the node whose edges *might* reach the
>>> +//                    next label in the signature
>>> +//      signature – an array of pointers to C strings. These strings
>>> +//                  are the labels being matched by the nodes being
>>> +//                  searched. Each sequential pair of labels is a
>>> +//                  “leg” of the search. The last pointer is NULL to
>>> +//                  terminate the array.
>>> +//      result – a stack of nodes containing the path currently
>>> +//               traversed to reach this node
>>> +//      visited – a stack of ALL nodes searched during the attempt
>>> +//                to find the current label
>>> +
>>> +boolean FindRemainingSignatureFromCurrentNode ( currentNode, 
>>> signature, result,
>>> +                                                    visited )
>>> +{
>>> +    If currentNode is in visited
>>> +        return FALSE – we have reached a cycle or a subgraph that has
>>> +                       already been searched
>>> +    else
>>> +        push currentNode onto visited stack
>>> +
>>> +    push currentNode onto result stack
>>> +    For each edge from currentNode
>>> +    {
>>> +        If edge->targetNode->label == signature[0]
>>> +        {
>>> +            If signature[1] != NULL we have more legs in the search
>>> +                Create nextResult for next leg search
>>> +                Create nextVisited for next leg search
>>> +                success = FindRemainingSignatureFromCurrentNode
>>> +                                    ( edge->targetNode, &signature[1],
>>> +                                      nextResult, nextVisited )
>>> +                if success
>>> +                    result += nextResult
>>> +                    delete nextVisited
>>> +                    return TRUE, weÂ’ve found the path
>>> +                else
>>> +                    continue through edge checking
>>> +            else signature[1] == NULL
>>> +                push edge->targetNode onto result
>>> +                return true, weÂ’ve found the path
>>> +        }
>>> +        else
>>> +            continue through edge checking
>>> +    } // end of for each edge target compared against signature [0]
>>> +
>>> +    // If weÂ’ve made it this far, none of the edges is a direct
>>> +    // match to the current label, do a deeper search
>>> +    For each edge from current node
>>> +    {
>>> +        success = FindRemainingSignatureFromCurrentNode ( 
>>> edge->targetNode,
>>> +                                    &signature[0], result, visited )
>>> +        if success
>>> +            return TRUE, weÂ’ve found the path
>>> +        else
>>> +            continue through edge searching loop
>>> +    }
>>> +
>>> +    // If weÂ’ve made it this far, we have no path
>>> +    pop currentNode off of result (but not off of visited)
>>> +    return FALSE;
>>> +} // end of find remaining signature
>>> +
>>> +
>>> +
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,114 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +#include "bitfield.h"
>>> +#include "node.h"
>>> +#include <stdio.h>
>>> +
>>> +
>>> +/* --------
>>> + * Bitfield is a mask around a character pointer. An array of character
>>> + * pointers is allocated such that there is a sequence of available 
>>> bits
>>> + * equal in length to the number of nodes in a given graph. Bitfield
>>> + * defines operations that check if a bit corresponding to a node index
>>> + * is set. This is used by the graph traversal path finding algorithms
>>> + * to determine if a node has been visited.
>>> + */
>>> +
>>> +
>>> +/* constructor */
>>> +Bitfield *Bitfield_new(int bitsNeeded)
>>> +{
>>> +    int size = (bitsNeeded+7) / 8; /* CHAR_BIT; */
>>> +    Bitfield *new = malloc(sizeof(Bitfield));
>>> +    if ( !new )
>>> +        return(NULL);
>>> +    new->bitfield = calloc(size, sizeof(char));
>>> +    if ( !new->bitfield )
>>> +    {
>>> +        free(new);
>>> +        return(NULL);
>>> +    }
>>> +
>>> +    new->bitsNeeded = bitsNeeded;
>>> +    return new;
>>> +}
>>> +
>>> +/* destructor */
>>> +void Bitfield_delete(Bitfield *this)
>>> +{
>>> +    if ( this )
>>> +    {
>>> +        if ( this->bitfield )
>>> +            free(this->bitfield);
>>> +        free(this);
>>> +    }
>>> +}
>>> +
>>> +/* Returns true if the specified node has been visited */
>>> +bool Bitfield_nodeVisited(Bitfield *this, struct NodeStruct *node)
>>> +{
>>> +    int index = node->nodeCount >> 3;
>>> +    char byte = this->bitfield[index];
>>> +    char bit = 1 << (node->nodeCount & 0x07);
>>> +    bool set = byte & bit;
>>> +
>>> +    this->bitfield[index] |= bit;
>>> +
>>> +    /* printf ( "Inside Bitfield nodeVisited: Node: %d, index %d, 
>>> byte %x, bit: %x\n",
>>> +             node->nodeCount, index, byte, bit ); */
>>> +    return(set);
>>> +}
>>> +
>>> +
>>> +/* Makes a byte-by-byte copy of the "from" bitfield */
>>> +Bitfield *Bitfield_copy(Bitfield *from)
>>> +{
>>> +    int i;
>>> +
>>> +    if ( !from )
>>> +        return(NULL);
>>> +
>>> +    Bitfield *new = Bitfield_new(from->bitsNeeded);
>>> +    if ( new )
>>> +    {
>>> +        for ( i = 0; i*8 < from->bitsNeeded; ++i )
>>> +            new->bitfield[i] = from->bitfield[i];
>>> +        return(new);
>>> +    }
>>> +    else
>>> +        return(NULL);
>>> +}
>>> +
>>> +
>>> +void Bitfield_clear(Bitfield *this)
>>> +{
>>> +    int size = (this->bitsNeeded+7) / 8;
>>> +    memset(this->bitfield, 0, size);
>>> +}
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/bitfield.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,69 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +#ifndef BITFIELD_H
>>> +#define BITFIELD_H
>>> +
>>> +#include <stdbool.h>
>>> +#include <stdlib.h>
>>> +#include <string.h>
>>> +
>>> +struct NodeStruct;
>>> +
>>> +/* --------
>>> + * Bitfield is a mask around a character pointer. An array of character
>>> + * pointers is allocated such that there is a sequence of available 
>>> bits
>>> + * equal in length to the number of nodes in a given graph. Bitfield
>>> + * defines operations that check if a bit corresponding to a node index
>>> + * is set. This is used by the graph traversal path finding algorithms
>>> + * to determine if a node has been visited.
>>> + */
>>> +
>>> +typedef struct BitfieldStruct Bitfield;
>>> +
>>> +struct BitfieldStruct
>>> +{
>>> +    int bitsNeeded; /* in BYTES!!! */
>>> +    char *bitfield;
>>> +};
>>> +
>>> +
>>> +Bitfield *Bitfield_new(int bitsNeeded); /* constructor */
>>> +void Bitfield_delete(Bitfield *this); /* destructor */
>>> +
>>> +/* Returns true if the specified node has been visited */
>>> +bool Bitfield_nodeVisited(Bitfield *this, struct NodeStruct *node);
>>> +
>>> +/* Makes a byte-by-byte copy of the "from" bitfield */
>>> +Bitfield *Bitfield_copy(Bitfield *from);
>>> +
>>> +void Bitfield_clear();
>>> +
>>> +#endif
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,69 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * configuration.c
>>> + *
>>> + *  Created on: October 1, 2013
>>> + *      Author: Brian "Rig" Rigdon
>>> + */
>>> +
>>> +#include <stdio.h>
>>> + #include "configuration.h"
>>> +
>>> + SearchOptions* SearchOptions_new()
>>> + {
>>> +    SearchOptions *options = malloc(sizeof(SearchOptions));
>>> +    if ( !options )
>>> +        return(NULL);
>>> +    options->searchType = treeSearch;
>>> +    options->multiThreaded = false;
>>> +    options->doStatistics = false;
>>> +    options->writeOutputFile = false;
>>> +    options->outputFile = NULL;
>>> +    options->buildType = endNodesOnly;
>>> +    return(options);
>>> + }
>>> +
>>> + Configuration* Configuration_new()
>>> + {
>>> +    Configuration *new = malloc(sizeof(Configuration));
>>> +    SearchOptions *options = malloc(sizeof(SearchOptions));
>>> +    if ( !new || !options )
>>> +    {
>>> +        if ( new ) free(new);
>>> +        if ( options ) free(options);
>>> +        return(NULL);
>>> +    }
>>> +    new->graphs = NULL;
>>> +    new->signatures = NULL;
>>> +    new->searchOptions = options;
>>> +    new->qThreadCount = 0;
>>> +    return(new);
>>> + }
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/configuration.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,80 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +
>>> +/*
>>> + * configuration.h
>>> + *
>>> + *  Created on: October 1, 2013
>>> + *      Author: Brian "Rig" Rigdon
>>> + */
>>> +
>>> +#ifndef CONFIGURATION_H_
>>> +#define CONFIGURATION_H_
>>> +
>>> +#include <stdbool.h>
>>> +#include "graph.h"
>>> +#include "graphGen.h"
>>> +
>>> +/* I was hoping to avoid this - however because we are dealing with
>>> + * pointers to arrays of pointers, passing the address of an such
>>> + * a beast becomes really confusing: Graph *(**pointer)[]
>>> + * Ergo, I am building a structure to contain all the information
>>> + * necessary for a given running of this software. For lack of
>>> + * a better name, we are calling it the "configuration".
>>> + */
>>> +
>>> +/* A simple enum to define which search is to be done */
>>> +typedef enum { treeSearch, diagramSearch } SearchType;
>>> +
>>> +typedef struct SearchOptionsStruct SearchOptions;
>>> +struct SearchOptionsStruct
>>> +{
>>> +    SearchType searchType;
>>> +    bool multiThreaded;
>>> +    bool doStatistics;
>>> +    bool writeOutputFile;
>>> +    char *outputFile;
>>> +    BuildType buildType;
>>> +};
>>> +
>>> +SearchOptions * SearchOptions_new();
>>> +
>>> +typedef struct ConfigurationStruct Configuration;
>>> +struct ConfigurationStruct
>>> +{
>>> +    Graph **graphs; /* a pointer to a NULL terminated array of 
>>> pointers */
>>> +    Signature *signatures; /* a pointer to a NULL terminated array 
>>> of Signatures */
>>> +    SearchOptions *searchOptions;
>>> +    int qThreadCount; /* recursion depth to STOP spawning new tasks */
>>> +};
>>> +
>>> +Configuration* Configuration_new();
>>> +
>>> +#endif /*  CONFIGURATION_H_  */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/gettime.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/gettime.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/gettime.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/gettime.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,43 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +#include <sys/time.h>
>>> +#ifdef USE_OMP
>>> +#include <omp.h>
>>> +#endif
>>> +
>>> +extern double currentTime()
>>> +{
>>> +#ifdef USE_OMP
>>> +    return omp_get_wtime();
>>> +#else
>>> +    return 0;
>>> +#endif
>>> +}
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,186 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * graph.c
>>> + *
>>> + *  Created on: Jan 9, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +/* --------
>>> + * Graphs are made up of nodes and edges. Nodes hold data and edges
>>> + * connect nodes to each other. In this representation, edges are
>>> + * directional (they lead from one node to the next) and may create
>>> + * looped paths. The data sets from which these graphs are defined
>>> + * define two-layered graphs. The outer layer may contain one or
>>> + * more interior nodes. These interior nodes may be linked among each
>>> + * other. Each containing node may have up to two "entrance" nodes;
>>> + * that is, an edge goes from the containing node to its entrance node.
>>> + *
>>> + * As mentioned above, the graphs are defined in data files. The graph
>>> + * data structure contains the file name, a count of nodes, a list of
>>> + * exterior nodes, and structures that assist in the searching through
>>> + * the graph for "signatures"
>>> + */
>>> +
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +#include <string.h>
>>> +#include <time.h>
>>> +#include <math.h>
>>> +
>>> +#ifdef USE_OMP
>>> +#include <omp.h>
>>> +#endif
>>> +
>>> +#include "graph.h"
>>> +#include "systemCallMap.h"
>>> +#include "bitfield.h"
>>> +#include "utils.h"
>>> +
>>> +
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Graph Method Definitions
>>> + *
>>> + */
>>> +/* We deleted the code that made a graph singleton. Now we may have
>>> + * more than one graph. Ergo, the main method (or whatever) will 
>>> maintain
>>> + * the graph pointer.
>>> + */
>>> +
>>> +Graph *Graph_new()
>>> +{
>>> +    Graph *graph= NULL;
>>> +    graph = malloc( sizeof( Graph ));
>>> +    if ( graph )
>>> +    {
>>> +        /* The malloc worked! */
>>> +        graph->fileName = NULL;
>>> +        graph->totalNodes = 0;
>>> +        graph->outerNodes = NULL;
>>> +        graph->searchDiagram = NULL;
>>> +    }
>>> +
>>> +    return( graph );
>>> +}
>>> +
>>> +/* Destructor - erases current graph, sets singleton to NULL */
>>> +void Graph_delete( Graph *trash )
>>> +{
>>> +    SearchDiagram *element;
>>> +    if ( trash )
>>> +    {
>>> +        free( trash->fileName );
>>> +        NodeList_clear( trash->outerNodes, true );
>>> +        if ( trash->searchDiagram ) {
>>> +            for ( element = trash->searchDiagram; element->node != 
>>> NULL; ++element )
>>> +            {
>>> +                free( element->edgeReferenceArray );
>>> +            }
>>> +            free( trash->searchDiagram );
>>> +        }
>>> +        free( trash );
>>> +    }
>>> +}
>>> +
>>> +bool Graph_addOuterNode( Graph *graph, Node *newOuterNode )
>>> +{
>>> +    /* a little basic error checking */
>>> +    if ( !graph || !newOuterNode )
>>> +        return (false);
>>> +
>>> +    /* Is this the first outer node? */
>>> +    if ( graph->outerNodes == NULL ) /* Allocates singletonGraph if 
>>> it's not there */
>>> +        {
>>> +        graph->outerNodes = NodeList_new();
>>> +            if ( !graph->outerNodes )
>>> +                return( false ); /* the malloc failed */
>>> +            graph->outerNodes->node = newOuterNode;
>>> +            return( true );
>>> +        }
>>> +
>>> +    /* Otherwise, insert the new node at the tail of the singleton 
>>> graph */
>>> +    return( NodeList_insertBack( graph->outerNodes, newOuterNode ));
>>> +}
>>> +
>>> +
>>> +/* Finds a node within the graph. If deep is true, we check 
>>> interior nodes as well.
>>> + * If deep is false, we only check to see if the id is an outer 
>>> node. This does NOT
>>> + * find the path to the node.
>>> + */
>>> +Node *Graph_findNode( Graph *graph, int id, bool deep )
>>> +{
>>> +    NodeList *nodes;
>>> +    Node *node;
>>> +
>>> +    for ( nodes = graph->outerNodes; nodes != NULL; nodes = 
>>> nodes->nextNode )
>>> +    {
>>> +        if ( nodes->node->id == id )
>>> +            return( nodes->node );
>>> +        /* If that wasn't the node, and we're going deep, see if 
>>> it's there. */
>>> +        if ( deep )
>>> +        {
>>> +            node = Graph_findContainedNode( nodes->node, id );
>>> +            if ( node )
>>> +                return( node );
>>> +        }
>>> +    }
>>> +
>>> +    return( NULL );
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +/* Determine if a given node contains the node specified by id. If 
>>> this problem extended
>>> + * beyond two layers, this method would be recursive. Returns NULL 
>>> if node is not contained.
>>> + * This does NOT find the path to the node.
>>> + */
>>> +Node *Graph_findContainedNode( Node *node, int id )
>>> +{
>>> +    NodeList *nodes;
>>> +
>>> +    for ( nodes = node->interiorNodes; nodes != NULL; nodes = 
>>> nodes->nextNode )
>>> +    {
>>> +        if ( nodes->node->id == id )
>>> +            return( nodes->node );
>>> +    }
>>> +
>>> +    return( NULL );
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +/* Search Algorithms */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graph.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,101 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +
>>> +/*
>>> + * Graph.h
>>> + *
>>> + *  Created on: Jan 9, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +
>>> +/* --------
>>> + * Graphs are made up of nodes and edges. Nodes hold data and edges
>>> + * connect nodes to each other. In this representation, edges are
>>> + * directional (they lead from one node to the next) and may create
>>> + * looped paths. The data sets from which these graphs are defined
>>> + * define two-layered graphs. The outer layer may contain one or
>>> + * more interior nodes. These interior nodes may be linked among each
>>> + * other. Each containing node may have up to two "entrance" nodes;
>>> + * that is, an edge goes from the containing node to its entrance node.
>>> + *
>>> + * As mentioned above, the graphs are defined in data files. The graph
>>> + * data structure contains the file name, a count of nodes, a list of
>>> + * exterior nodes, and structures that assist in the searching through
>>> + * the graph for "signatures"
>>> + */
>>> +
>>> +#ifndef GRAPH_H_
>>> +#define GRAPH_H_
>>> +
>>> +#include <stdbool.h> /* bool is no longer part of the C language */
>>> +#include "node.h"
>>> +#include "searchDiagram.h"
>>> +#include "systemCallMap.h"
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Graph Definitions
>>> + *
>>> + */
>>> +
>>> +typedef struct GraphStruct Graph;
>>> +
>>> +struct GraphStruct
>>> +{
>>> +    char *fileName; /* the file parsed to give us this graph */
>>> +    int totalNodes; /* Nodes, both outer and interior */
>>> +    NodeList *outerNodes; /* The Linked-List capture of the node 
>>> data */
>>> +    SearchDiagram *searchDiagram; /* The compressed Node/Edge 
>>> search structures */
>>> +    SystemCallMap *systemCallMap;
>>> +};
>>> +
>>> +
>>> +/* "methods" */
>>> +
>>> +Graph *Graph_new(); /* Graph constructor */
>>> +void Graph_delete( Graph *trash ); /* Destructor - erases current 
>>> graph */
>>> +bool Graph_addOuterNode( Graph *graph, Node *newOuterNode );
>>> +/* Finds a node within the graph. If deep is true, we check 
>>> interior nodes as well.
>>> + * If deep is false, we only check to see if the id is an outer 
>>> node. This does NOT
>>> + * find the path to the node.
>>> + */
>>> +Node *Graph_findNode( Graph *graph, int id, bool deep );
>>> +
>>> +
>>> +
>>> +/* Determine if a given node contains the node specified by id. If 
>>> this problem extended
>>> + * beyond two layers, this method would be recursive. Returns NULL 
>>> if node is not contained.
>>> + * This does NOT find the path to the node.
>>> + */
>>> +Node *Graph_findContainedNode( Node *node, int id );
>>> +
>>> +
>>> +#endif /* GRAPH_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,195 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * graphGen.c
>>> + *
>>> + *  Created on: Aug 2, 2013
>>> + *      Author: jbrigdo
>>> + */
>>> +
>>> +#include <stdbool.h>
>>> +#include <stdio.h>
>>> +#include "graphGen.h"
>>> +#include "vectorUtils.h"
>>> +
>>> +
>>> +/* getDuplicateNodeForGraph takes a node from another graph and sees if
>>> + * a duplicate has previously been created for this graph. If not, 
>>> it tries
>>> + * to create and insert a new duplicate. If that fails, we're out 
>>> of memory.
>>> + * In that circumstance, we have a significant error condition. It is
>>> + * time to delete the graph being built and report that error to the
>>> + * calling method (buildGraphFromPaths).
>>> + */
>>> +static Node *getDuplicateNodeForGraph(Graph *graph, Node *from)
>>> +{
>>> +    Node *newNode = Graph_findNode(graph, from->id, true); /* true 
>>> == deep search */
>>> +    if ( newNode )
>>> +        return(newNode);
>>> +
>>> +    /* else */
>>> +    newNode = Node_duplicate(from, graph->totalNodes++ ); /* POST 
>>> increment */
>>> +    if ( newNode )
>>> +    {
>>> +        Graph_addOuterNode(graph,newNode); /* all nodes are 
>>> exterior in this graph */
>>> +        newNode->type = exteriorNode;
>>> +        return(newNode);
>>> +    }
>>> +
>>> +    /* else */
>>> +    Graph_delete(graph); /* Failure is DESTRUCTIVE at this point */
>>> +    return NULL;
>>> +}
>>> +
>>> +
>>> +Graph *buildGraphFromPaths(NodeVecVec **pathList, BuildType build)
>>> +{
>>> +    Graph *newGraph = Graph_new();
>>> +    Node *pathNode; /* The node we're looking at in the path */
>>> +    Node *currentNode;
>>> +    Node *nextNode;
>>> +    int i; /* Iterator through the path List array */
>>> +    int j; /* Iterator through each path List */
>>> +    int k; /* Iterator through each path in the path List */
>>> +
>>> +    if ( !pathList || !newGraph )
>>> +        return(NULL);
>>> +
>>> +    for ( i = 0; pathList[i] ; ++i )
>>> +    {
>>> +        for (j = 0; j < pathList[i]->contentSize; ++j)
>>> +        {
>>> +            pathNode = pathList[i]->vector[j]->vector[0];
>>> +            currentNode = getDuplicateNodeForGraph(newGraph, pathNode);
>>> +            if ( !currentNode )
>>> +                return(NULL); /* out of memory: crashing! newGraph 
>>> has already been cleaned up */
>>> +
>>> +            for ( k = 1; k < pathList[i]->vector[j]->contentSize; 
>>> ++k /*also incremented below*/ )
>>> +            {
>>> +                if ( build == endNodesOnly )
>>> +                {
>>> +                    k = pathList[i]->vector[j]->contentSize - 1;
>>> +                }
>>> +                else if ( build == labeledNodes )
>>> +                {
>>> +                    while ( 
>>> pathList[i]->vector[j]->vector[k]->labelIdx < 0 )
>>> +                        ++k;
>>> +                }
>>> +                /* else if ( build == completePath ) no-op */
>>> +
>>> +                pathNode = pathList[i]->vector[j]->vector[k];
>>> +                nextNode = getDuplicateNodeForGraph(newGraph, 
>>> pathNode);
>>> +                if ( !nextNode )
>>> +                    return(NULL); /* out of memory: crashing! 
>>> newGraph has already been cleaned up */
>>> +                Node_addEdgeToNode(currentNode, nextNode);
>>> +                // printf ( "Adding edge: %d ==> %d\n", 
>>> currentNode->id, nextNode->id );
>>> +                currentNode = nextNode;
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    return(newGraph);
>>> +}
>>> +
>>> +
>>> +/* Write the given graph to a file */
>>> +bool exportGraph(Graph *graph, char *fileName)
>>> +{
>>> +    FILE *out = NULL;
>>> +    NodeList *nodes = NULL;
>>> +    EdgeList *edges = NULL;
>>> +    int nodeCount = 0;
>>> +
>>> +    if ( !graph || !fileName ) /* A little basic error checking */
>>> +        return(false);
>>> +
>>> +    out = fopen(fileName, "w");
>>> +
>>> +    if ( !out ) /* A little more basic error checking */
>>> +        return(false);
>>> +
>>> +    /* Write out the header */
>>> +    /* ... find out how many functions (outer nodes) the graph holds */
>>> +    for ( nodes = graph->outerNodes; nodes != NULL; nodes = 
>>> nodes->nextNode )
>>> +    {
>>> +        ++nodeCount;
>>> +    }
>>> +    fprintf(out, "Functions: %d\n", nodeCount);
>>> +    fprintf(out, "Basic blocks: %d\n\n", graph->totalNodes);
>>> +
>>> +    /* First, write out the graph's outer nodes */
>>> +    for ( nodes = graph->outerNodes; nodes != NULL; nodes = 
>>> nodes->nextNode )
>>> +    {
>>> +        fprintf(out, "%d ", nodes->node->id);
>>> +        //printf("Node: %d ", nodes->node->id);
>>> +        if ( nodes->node->edges )
>>> +        {
>>> +            nodeCount = 0;
>>> +            /* Wow is this inefficient, but two passes is the 
>>> easiest way to do it. */
>>> +            for ( edges = nodes->node->edges; edges != NULL; edges 
>>> = edges->nextEdge )
>>> +            {
>>> +                if ( edges->targetNode->type == exteriorNode )
>>> +                    ++nodeCount;
>>> +            }
>>> +            fprintf(out, "%d ", nodeCount);
>>> +            //printf("has %d edges: ", nodeCount);
>>> +            for ( edges = nodes->node->edges; edges != NULL; edges 
>>> = edges->nextEdge )
>>> +                {
>>> +                    if ( edges->targetNode->type == exteriorNode )
>>> +                    {
>>> +                        fprintf(out, "%d ", edges->targetNodeId);
>>> +                        //printf("%d, ", edges->targetNodeId);
>>> +                    }
>>> +                }
>>> +            fprintf(out, "\n");
>>> +            //printf("\n");
>>> +        }
>>> +        else
>>> +        {
>>> +            fprintf(out, "0 \n" );
>>> +            //printf(" no edges.\n");
>>> +        }
>>> +    }
>>> +
>>> +    /* then, for each of the outer nodes, write out its interior 
>>> nodes (if any) */
>>> +    /* We are skipping this for the time being. This currently is 
>>> being called with flat graphs. */
>>> +
>>> +    /* Finally, write out the labels. */
>>> +    fprintf(out, "-------------------------------------------- 
>>> \nSYSTEM CALLS \n\n");
>>> +
>>> +    for ( nodes = graph->outerNodes; nodes != NULL; nodes = 
>>> nodes->nextNode )
>>> +    {
>>> +        if ( nodes->node->label != NULL )
>>> +            fprintf(out, "%d %s \n", nodes->node->id, 
>>> nodes->node->label );
>>> +        /* If we were worried about interior nodes, we'd need a 
>>> duplicate loop here. */
>>> +    }
>>> +
>>> +    return(true);
>>> +
>>> +}
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/graphGen.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,52 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * graphGen.h
>>> + *
>>> + *  Created on: Aug 2, 2013
>>> + *      Author: J. Brian Rigdon
>>> + */
>>> +
>>> +#ifndef GRAPHGEN_H
>>> +#define GRAPHGEN_H
>>> +
>>> +#include "graph.h"
>>> +
>>> +typedef enum { endNodesOnly, labeledNodes, completePath } BuildType;
>>> +
>>> +Graph *buildGraphFromPaths(NodeVecVec **pathList, BuildType build);
>>> +
>>> +/* Write the given graph to a file */
>>> +bool exportGraph(Graph *graph, char *fileName);
>>> +
>>> +
>>> +
>>> +
>>> +#endif /* GRAPHGEN_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/main.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,361 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * main.c
>>> + *
>>> + *  Created on: Jan 9, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +
>>> +#include <string.h>
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +#include <ctype.h>
>>> +#include <unistd.h>
>>> +#include <stdbool.h>
>>> +#include <math.h>
>>> +#include "parsing.h"
>>> +#include "utils.h"
>>> +#include "searchAlgorithms.h"
>>> +#include "vectorUtils.h"
>>> +#include "statistics.h"
>>> +#include "configuration.h"
>>> +
>>> +#ifdef QT
>>> +   #include "qThreadSearch.h"
>>> +#endif /* QT */
>>> +
>>> +extern double currentTime();
>>> +
>>> +#define helpString "\nUsage: PathFinder.exe [OPTIONS] [<fileName>]\n\n\
>>> +  Operation:\n\
>>> +    -c  <config file>   use configuration file\n\
>>> +    -i  <data file>     interactive search of specified data file\n\
>>> +    -x  <data file>     exhaustive leg search (any label to any 
>>> label) of data file\n\n\
>>> +  Other:\n\
>>> +    -o  <output file>   save optimized graph to file\n\
>>> +    -h,u                prints this help message.\n\
>>> +    -q  <depth>         use qthread parallelism (config file only). 
>>> The depth value\n\
>>> +                        specifies how deep in recursion to continue 
>>> spawning new tasks\n\
>>> +                        during searches\n\
>>> +    -y                  create YAML output\n"
>>> +
>>> +/* Forward declarations so that main is the first function we read */
>>> +void runBatch(char *configFile, Configuration *config);
>>> +void runInteractively(char *fileName, Configuration *config);
>>> +void exhaustiveLegSearch(char *fileName, Configuration *config);
>>> +
>>> +int main(int argc, char *argv[])
>>> +{
>>> +    char defaultFile[] = "MicroTestData.adj_list";
>>> +    char *fileName = NULL;
>>> +    Configuration *config = Configuration_new();
>>> +    signed char c;
>>> +    int cFlag = 0; // Why did I make these ints instead of bool? 
>>> JBR - 10/25/13
>>> +    int iFlag = 0;
>>> +    int xFlag = 0;
>>> +    int tFlag = 0;
>>> +    int dFlag = 0;
>>> +    int oFlag = 0;
>>> +    bool qFlag = 0;
>>> +    int qCount = 0;
>>> +    char commandLine[200];
>>> +    int i;
>>> +
>>> +        printf ( "\n\n"
>>> +    "        PathFinder: finding a series of labeled nodes within a\n"
>>> +    "                two-layer directed, cyclic graph.\n"
>>> +    "               Copyright (2013) Sandia Corporation\n"
>>> +    "\n"
>>> +    " Sandia National Laboratories is a multi-program laboratory 
>>> managed and\n"
>>> +    " operated by Sandia Corporation, a wholly owned subsidiary of 
>>> Lockheed\n"
>>> +    " Martin Corporation, for the U.S. Department of Energy's 
>>> National Nuclear\n"
>>> +    " Security Administration under terms of Contract 
>>> DE-AC04-94AL85000,\n"
>>> +    " there is a non-exclusive license for use of this work by or 
>>> on behalf\n"
>>> +    " of the U.S. Government. Export of this program may require a 
>>> license \n"
>>> +    " from the United States Government.\n\n\n" );
>>> +
>>> +    #ifdef DEBUG
>>> +        printf("\tRunning debug build\n\n");
>>> +    #endif
>>> +    #ifdef OPENMP
>>> +        printf("\tRunning Open MP build\n\n");
>>> +    #endif
>>> +    #ifdef QT
>>> +        printf("\tRunning Q Thread build\n\n");
>>> +    #endif
>>> +
>>> +    if ( !config )
>>> +    {
>>> +        printf("Error: Could not allocation configuration 
>>> structure.\n\n\t---Exiting\n\n");
>>> +        exit(0);
>>> +    }
>>> +
>>> +    if ( argc < 2 )
>>> +    {
>>> +        exhaustiveLegSearch(defaultFile, config);
>>> +    }
>>> +    else
>>> +    {
>>> +        while ( (c = getopt(argc, argv, "c:i:x:o:q:huy")) != -1 )
>>> +        {
>>> +            switch (c)
>>> +            {
>>> +            case '?': /* we had a problem */
>>> +                if ( optopt == 'c' )
>>> +                    fprintf(stderr, "\tPlease specify configuration 
>>> file.\n\n");
>>> +                else if ( optopt == 'i' || optopt == 'x' )
>>> +                    fprintf(stderr, "\tPlease specify data file.\n\n");
>>> +                else if ( optopt == 'o' )
>>> +                    fprintf(stderr, "\tPlease specify output graph 
>>> data file.\n\n");
>>> +                else if ( optopt == 'q' )
>>> +                    fprintf(stderr, "\tPlease specify recursion 
>>> depth to keep spawning tasks.\n\n");
>>> +                return(1);
>>> +                break; /* Superfluous, I know */
>>> +            case 'h':
>>> +            case 'u':
>>> +                printf ("\n%s\n\n", helpString);
>>> +                return(0); /* Nothing else matters */
>>> +                break; /* Superfluous, I know. */
>>> +            case 'c': /* configuration file */
>>> +                fileName = optarg;
>>> +                cFlag = 1;
>>> +                break;
>>> +            case 'i': /* interactive */
>>> +                fileName = optarg;
>>> +                iFlag = 1;
>>> +                break;
>>> +            case 'x': /* exhaustive leg search */
>>> +                fileName = optarg;
>>> +                xFlag = 1;
>>> +                break;
>>> +            case 'o': /* Save optimized paths in a new graph 
>>> definition data file */
>>> +                config->searchOptions->outputFile = optarg;
>>> +                config->searchOptions->writeOutputFile = true;
>>> +                oFlag = 1;
>>> +                break;
>>> +            case 's':
>>> +                config->searchOptions->doStatistics = true;
>>> +                break;
>>> +            case 'q':
>>> +                qCount = atoi(optarg);
>>> +                if ( qCount < 1 )
>>> +                    qCount =  1;
>>> +                config->qThreadCount = qCount;
>>> +                break;
>>> +            case 'y':
>>> +                if ( commandLine != NULL )
>>> +                {
>>> +                    YAMLOpen();
>>> +                    commandLine[0] = '\0';
>>> +                    for ( i = 0; i < argc; ++i )
>>> +                        sprintf(commandLine, "%s %s", commandLine, 
>>> argv[i] );
>>> +                    YAMLWriteString("Command", commandLine+1);
>>> +                }
>>> +                break;
>>> +            default :
>>> +                break;
>>> +            }
>>> +        }
>>> +
>>> +        /* Debug --* /
>>> +        if (cFlag) printf ("cFlag ");
>>> +        if (iFlag) printf ("iFlag ");
>>> +        if (xFlag) printf ("xFlag ");
>>> +        if (oFlag) printf ("oFlag ");
>>> +        if (fileName) printf ( " - %s", fileName );
>>> +        if (outFile) printf ( " - %s", outFile);
>>> +        printf ("\n");
>>> +        / *-- End Debug */
>>> +
>>> +        if ( (cFlag+iFlag+xFlag) > 1 )
>>> +        {
>>> +            fprintf(stderr, "-c -i and -x are mutually exclusive, 
>>> PathFinder can only do one of those.\n\n");
>>> +            return(1);
>>> +        }
>>> +
>>> +        if ( (cFlag+iFlag+xFlag) == 0 )
>>> +        {
>>> +            fprintf(stderr, "-c (config file) -i (interactive) or 
>>> -x (exhaustive) must be specified.\n\n");
>>> +            return(1);
>>> +        }
>>> +
>>> +        if ( oFlag && !xFlag )
>>> +        {
>>> +            fprintf(stderr, "-o (optimized graph output) is only 
>>> compatible with -x (exhaustive searches).\n\n");
>>> +            return(1);
>>> +        }
>>> +
>>> +        if ( cFlag )
>>> +            runBatch(fileName, config);
>>> +        else if ( iFlag )
>>> +            runInteractively(fileName, config);
>>> +        else
>>> +        {
>>> +            exhaustiveLegSearch(fileName, config);
>>> +        }
>>> +    }
>>> +
>>> +    YAMLClose(); /* works even if YAML logging isn't present */
>>> +    return(0); /* zero means no error */
>>> +}
>>> +
>>> +void runBatch(char *configFile, Configuration *config)
>>> +{
>>> +    bool success;
>>> +    int i;
>>> +    int j;
>>> +    double tick, tock;
>>> +    int hours;
>>> +    int min;
>>> +    double sec;
>>> +
>>> +    if ( !configFile )
>>> +    {
>>> +        printf("Error: No config file entered.\n\n\t---Exiting---");
>>> +        exit(0);
>>> +    }
>>> +
>>> +    // printf("config file: %s\n", configFile);
>>> +
>>> +    tick = currentTime();
>>> +    success = parseConfigFile(configFile, config);
>>> +    tock = currentTime();
>>> +    sec = tock-tick;
>>> +    hours = (int)sec/3600;
>>> +    sec = fmod( sec, 3600.0 );
>>> +    min = (int)sec/60;
>>> +    sec = fmod(sec, 60.0);
>>> +    printf ("\n\nOverall Parse Time: %02d:%02d:%02.3f\n", hours, 
>>> min, sec);
>>> +
>>> +    /* Debug --* /
>>> +    for ( i = 0; config->signatures[i] != NULL; ++i );
>>> +    for ( j = 0; config->graphs[j] != NULL; ++j );
>>> +    printf( "%d files, %d signatures \n", j, i );
>>> +    exit(1);
>>> +    / *-- End Debug */
>>> +
>>> +    if ( success )
>>> +    {
>>> +    #ifdef QT
>>> +        doMultiSearchesQT(config);
>>> +    #else
>>> +        doMultiSearches(config);
>>> +    #endif
>>> +    }
>>> +
>>> +    printf ("\n\nSearches complete.\n");
>>> +}
>>> +
>>> +
>>> +void runInteractively(char *fileName, Configuration *config)
>>> +{
>>> +    char stringBuffer[200];
>>> +    Graph *graph;
>>> +    char *labels[25]; /* Do we need an interactive signature bigger 
>>> than 25? */
>>> +    NodePtrVec *path = NULL;
>>> +    bool success = false;
>>> +    int i, j;
>>> +    int fullIntSignature[3] = { 0, 0, -1 };
>>> +
>>> +
>>> +    graph = parseFile(fileName);
>>> +
>>> +    if ( !graph )
>>> +        return;
>>> +
>>> +    while ( 1 )
>>> +    {
>>> +        i = 0;
>>> +        do {
>>> +
>>> +            printf("\nPlease insert a node label for this signature 
>>> (\"\" to complete, \"bail\" to exit):\n");
>>> +            gets(stringBuffer);
>>> +
>>> +            if ( strcmp (stringBuffer, "bail") == 0 )
>>> +                exit(1);
>>> +
>>> +            if ( strcmp(stringBuffer, "") != 0 )
>>> +            {
>>> +                labels[i] = strdup(stringBuffer);
>>> +                ++i;
>>> +            }
>>> +
>>> +        } while ( i < 25 && strcmp(stringBuffer, "") != 0 );
>>> +
>>> +        labels[i] = NULL;
>>> +
>>> +        /* Debug */
>>> +        printf("\nSignature: ");
>>> +        for ( j = 0; j < i; ++j )
>>> +        {
>>> +            printf("'%s'", labels[j]);
>>> +            if ( j < i-1 )
>>> +                printf(" -> ");
>>> +            else
>>> +                printf("\n\n");
>>> +        }
>>> +        /* end debug */
>>> +
>>> +        path = NodePtrVec_new(50);
>>> +        success = findLabelPath(graph, (Signature)labels, path, 
>>> config->searchOptions->searchType);
>>> +
>>> +        /* Sanity check to verify that a valid path exists */
>>> +        if( success )
>>> +        {
>>> +            /* printStack ( path ); */
>>> +            printf ("Found, resultant path has %d steps.\n", 
>>> path->contentSize);
>>> +        }
>>> +        else
>>> +            printf("\n\tPath not found for signature.\n");
>>> +
>>> +        NodePtrVec_delete(path);
>>> +    }
>>> +
>>> +}
>>> +
>>> +void exhaustiveLegSearch(char *fileName, Configuration *config)
>>> +{
>>> +    Graph *graph;
>>> +    int found;
>>> +
>>> +    graph = parseFile(fileName);
>>> +
>>> +    if ( !graph || !config )
>>> +        return;
>>> +
>>> +    if ( config->searchOptions->outputFile == NULL )
>>> +        found = findAllPossibleLegs(graph, 
>>> config->searchOptions->searchType);
>>> +    else
>>> +        found = findAndLogAllPossibleLegs(graph, 
>>> config->searchOptions);
>>> +    printf("\n\nTotal %d legs found\n\n", found);
>>> +    Graph_delete(graph);
>>> +}
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/medsmall1.adj_list
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/medsmall1.adj_list?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/medsmall1.adj_list 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/medsmall1.adj_list 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,6153 @@
>>> +Functions: 500
>>> +Basic blocks: 3463
>>> +
>>> +0 0
>>> +32000000 0
>>> +34900000 0
>>> +4600000 0
>>> +39500000 0
>>> +44100000 0
>>> +48700000 0
>>> +15700000 0
>>> +36800000 0
>>> +41400000 0
>>> +18600000 0
>>> +6300000 0
>>> +46000000 0
>>> +2300000 0
>>> +3800000 0
>>> +38700000 0
>>> +43300000 0
>>> +47900000 0
>>> +18000000 0
>>> +12600000 0
>>> +31400000 0
>>> +1100000 0
>>> +36000000 0
>>> +5700000 0
>>> +40600000 0
>>> +45200000 0
>>> +20900000 0
>>> +19500000 0
>>> +24100000 0
>>> +28700000 0
>>> +33300000 0
>>> +3000000 0
>>> +37900000 0
>>> +17400000 0
>>> +6100000 0
>>> +7600000 0
>>> +42500000 0
>>> +12200000 0
>>> +47100000 0
>>> +16800000 0
>>> +21400000 0
>>> +26000000 0
>>> +20300000 0
>>> +300000 0
>>> +35200000 0
>>> +4900000 0
>>> +39800000 0
>>> +43100000 0
>>> +9500000 0
>>> +44400000 0
>>> +14100000 0
>>> +49000000 0
>>> +18700000 0
>>> +23200000 0
>>> +22000000 0
>>> +23300000 0
>>> +27900000 0
>>> +2200000 0
>>> +37100000 0
>>> +49800000 0
>>> +6800000 0
>>> +30600000 0
>>> +21000000 0
>>> +11400000 0
>>> +1800000 0
>>> +19700000 0
>>> +46300000 0
>>> +16000000 0
>>> +20600000 0
>>> +25200000 0
>>> +29800000 0
>>> +34400000 0
>>> +22600000 0
>>> +5900000 0
>>> +4100000 0
>>> +39000000 0
>>> +8700000 0
>>> +43600000 0
>>> +13300000 0
>>> +48200000 0
>>> +17900000 0
>>> +22500000 0
>>> +25500000 0
>>> +27100000 0
>>> +31700000 0
>>> +1400000 0
>>> +36300000 0
>>> +6000000 1 37500000
>>> +40900000 0
>>> +10600000 0
>>> +45500000 0
>>> +15200000 0
>>> +9200000 0
>>> +5800000 0
>>> +19800000 0
>>> +24400000 0
>>> +29000000 0
>>> +33600000 0
>>> +3300000 0
>>> +38200000 0
>>> +24900000 0
>>> +7900000 0
>>> +42800000 0
>>> +12500000 1 33700000
>>> +47400000 0
>>> +17100000 19 1700000 6600000 41500000 27400000 23500000 37800000 
>>> 5500000 14800000 42700000 10100000 36500000 12700000 25200000 
>>> 31000000 26900000 32700000 28200000 6300000 29300000
>>> +21700000 0
>>> +26300000 0
>>> +30900000 0
>>> +27800000 0
>>> +28100000 0
>>> +600000 0
>>> +35500000 0
>>> +5200000 0
>>> +40100000 0
>>> +9800000 0
>>> +44700000 0
>>> +14400000 0
>>> +49300000 0
>>> +19000000 0
>>> +11500000 0
>>> +23600000 0
>>> +28200000 0
>>> +32800000 0
>>> +2500000 0
>>> +37400000 0
>>> +7100000 0
>>> +42000000 0
>>> +11700000 0
>>> +8000000 0
>>> +31200000 0
>>> +34700000 0
>>> +30100000 0
>>> +4400000 1 29100000
>>> +39300000 0
>>> +43900000 0
>>> +48500000 0
>>> +13800000 0
>>> +24700000 0
>>> +36600000 0
>>> +40200000 0
>>> +41200000 0
>>> +10900000 0
>>> +45800000 0
>>> +29500000 0
>>> +3600000 0
>>> +38500000 0
>>> +32400000 0
>>> +8600000 1 40800000
>>> +12800000 0
>>> +47700000 0
>>> +16100000 1 15400000
>>> +900000 0
>>> +35800000 0
>>> +40400000 0
>>> +10100000 0
>>> +45000000 0
>>> +14700000 0
>>> +49600000 0
>>> +19300000 0
>>> +31800000 0
>>> +14900000 1 30900000
>>> +28500000 0
>>> +33100000 0
>>> +2800000 0
>>> +37700000 0
>>> +7400000 0
>>> +42300000 0
>>> +12000000 0
>>> +46900000 0
>>> +15500000 0
>>> +16600000 0
>>> +21200000 0
>>> +25800000 0
>>> +30400000 0
>>> +100000 0
>>> +35000000 0
>>> +18400000 0
>>> +8400000 0
>>> +39600000 0
>>> +9300000 0
>>> +44200000 0
>>> +13900000 0
>>> +48800000 0
>>> +18500000 0
>>> +23100000 0
>>> +27700000 0
>>> +34100000 0
>>> +32300000 0
>>> +2000000 0
>>> +36900000 0
>>> +6600000 0
>>> +41500000 0
>>> +11200000 0
>>> +46100000 0
>>> +15800000 0
>>> +24200000 0
>>> +33900000 0
>>> +20400000 0
>>> +25000000 0
>>> +29600000 0
>>> +34200000 0
>>> +3900000 0
>>> +38800000 0
>>> +8500000 0
>>> +20700000 0
>>> +13100000 0
>>> +48000000 0
>>> +17700000 0
>>> +22300000 0
>>> +26900000 0
>>> +31500000 0
>>> +17200000 0
>>> +27400000 0
>>> +1200000 0
>>> +36100000 0
>>> +40700000 0
>>> +10400000 0
>>> +45300000 0
>>> +15000000 0
>>> +49900000 0
>>> +49500000 0
>>> +19600000 0
>>> +30300000 0
>>> +11100000 0
>>> +20100000 0
>>> +28800000 0
>>> +33400000 0
>>> +3100000 1 34600000
>>> +38000000 0
>>> +7700000 0
>>> +42600000 0
>>> +12300000 0
>>> +47200000 0
>>> +23000000 0
>>> +1700000 0
>>> +16900000 0
>>> +46600000 0
>>> +37000000 0
>>> +17800000 0
>>> +8200000 0
>>> +21500000 0
>>> +26100000 0
>>> +30700000 0
>>> +400000 0
>>> +35300000 0
>>> +5000000 0
>>> +39900000 0
>>> +9600000 0
>>> +44500000 0
>>> +14200000 0
>>> +49100000 0
>>> +18800000 0
>>> +23400000 0
>>> +28000000 0
>>> +22400000 0
>>> +27200000 0
>>> +37200000 0
>>> +6900000 0
>>> +41800000 0
>>> +46400000 0
>>> +25300000 0
>>> +34500000 1 8100000
>>> +39100000 0
>>> +43700000 0
>>> +9000000 1 7000000
>>> +1500000 0
>>> +48300000 0
>>> +5500000 0
>>> +36400000 0
>>> +41000000 0
>>> +45600000 0
>>> +27600000 0
>>> +7800000 0
>>> +33700000 0
>>> +3400000 0
>>> +38300000 0
>>> +42900000 0
>>> +41700000 0
>>> +47500000 0
>>> +11300000 0
>>> +21800000 1 1300000
>>> +26400000 0
>>> +31000000 0
>>> +700000 0
>>> +35600000 0
>>> +5300000 0
>>> +27000000 0
>>> +4500000 0
>>> +9900000 0
>>> +44800000 0
>>> +14500000 0
>>> +49400000 0
>>> +19100000 0
>>> +23700000 0
>>> +28300000 0
>>> +29900000 0
>>> +32900000 0
>>> +2600000 0
>>> +37500000 0
>>> +7200000 0
>>> +42100000 0
>>> +11800000 0
>>> +46700000 0
>>> +16400000 0
>>> +13600000 0
>>> +26800000 0
>>> +25600000 0
>>> +30200000 0
>>> +34800000 0
>>> +39400000 0
>>> +9100000 0
>>> +44000000 0
>>> +29300000 0
>>> +13700000 0
>>> +48600000 0
>>> +18300000 0
>>> +22900000 0
>>> +27500000 0
>>> +32100000 0
>>> +32200000 0
>>> +10700000 0
>>> +6400000 0
>>> +41300000 0
>>> +11000000 0
>>> +45900000 0
>>> +15600000 0
>>> +20200000 1 31600000
>>> +24800000 0
>>> +15900000 0
>>> +29400000 73 48400000 17800000 29100000 10700000 36800000 15100000 
>>> 30200000 10400000 2200000 18400000 26600000 35900000 32400000 
>>> 41700000 12600000 9100000 2100000 14900000 46900000 900000 23000000 
>>> 9000000 7800000 17100000 48500000 5400000 37100000 24000000 17000000 
>>> 13500000 10000000 21600000 30900000 36200000 10500000 46000000 
>>> 600000 40900000 34300000 2900000 21500000 43600000 27300000 45900000 
>>> 49800000 28400000 34200000 49300000 30500000 13200000 35300000 
>>> 6200000 28300000 34100000 1500000 37500000 22700000 4900000 36300000 
>>> 45600000 43700000 33800000 22300000 44400000 5900000 46700000 
>>> 47200000 18800000 4600000 35000000 31500000 40800000 37300000
>>> +34000000 0
>>> +3700000 0
>>> +38600000 0
>>> +8300000 0
>>> +43200000 0
>>> +12900000 169 32000000 25600000 14000000 37200000 9200000 46400000 
>>> 48700000 16100000 30100000 4400000 39300000 6700000 41600000 
>>> 27600000 11300000 15900000 18200000 20500000 39100000 41400000 
>>> 25100000 5800000 3900000 29700000 13400000 36700000 15700000 
>>> 18000000 20300000 38900000 43500000 27200000 48100000 31800000 
>>> 15500000 40700000 24700000 8400000 43400000 31600000 15300000 
>>> 1300000 3600000 22200000 38800000 15000000 45400000 31400000 
>>> 33700000 36000000 19700000 22000000 5700000 28900000 36900000 
>>> 33500000 17200000 35800000 3200000 45000000 47300000 700000 35600000 
>>> 5300000 46200000 26100000 42500000 47100000 33100000 35400000 
>>> 19100000 2800000 5000000 42300000 26000000 9700000 26700000 14300000 
>>> 16600000 300000 18900000 21200000 43100000 25800000 23900000 100000 
>>> 2400000 26400000 24400000 27900000 11600000 16200000 34800000 
>>> 18500000 20800000 23100000 6800000 1800000 21300000 7400000 30000000 
>>> 34600000 18300000 2000000 8900000 43800000 27500000 32100000 
>>> 15800000 34400000 3400000 7500000 6400000 11000000 13300000 31900000 
>>> 15600000 17900000 20200000 41100000 24800000 35100000 27100000 
>>> 45700000 13100000 31700000 34000000 17700000 3700000 24600000 
>>> 43200000 10600000 29200000 1200000 30600000 3500000 43000000 
>>> 45300000 47600000 31300000 49900000 33600000 49500000 3300000 
>>> 21900000 48900000 12500000 19400000 21700000 26300000 26200000 
>>> 26500000 16900000 19200000 5200000 42400000 44700000 14400000 
>>> 16700000 400000 48300000 7300000 25900000 44500000 46800000 49100000 
>>> 21100000 23400000 11700000
>>> +47800000 0
>>> +31600000 0
>>> +26600000 0
>>> +22100000 0
>>> +26700000 0
>>> +31300000 0
>>> +1000000 0
>>> +35900000 0
>>> +5600000 0
>>> +40500000 0
>>> +15300000 0
>>> +10200000 0
>>> +45100000 0
>>> +14800000 0
>>> +49700000 0
>>> +19400000 0
>>> +24000000 0
>>> +28600000 0
>>> +18200000 0
>>> +10500000 0
>>> +33200000 0
>>> +2900000 0
>>> +37800000 0
>>> +7500000 0
>>> +42400000 0
>>> +12100000 0
>>> +47000000 0
>>> +16700000 0
>>> +21300000 0
>>> +1900000 0
>>> +25900000 0
>>> +30500000 0
>>> +200000 0
>>> +35100000 0
>>> +4800000 0
>>> +39700000 0
>>> +9400000 0
>>> +44300000 0
>>> +17600000 0
>>> +4000000 0
>>> +48900000 0
>>> +2100000 0
>>> +20500000 0
>>> +6700000 0
>>> +41600000 0
>>> +46200000 0
>>> +4200000 0
>>> +10300000 0
>>> +36700000 0
>>> +17500000 0
>>> +34300000 0
>>> +38900000 0
>>> +43500000 0
>>> +48100000 0
>>> +19900000 0
>>> +43400000 0
>>> +14600000 0
>>> +1300000 0
>>> +36200000 0
>>> +40800000 0
>>> +22800000 0
>>> +13400000 0
>>> +45400000 0
>>> +15100000 0
>>> +24300000 0
>>> +6500000 0
>>> +33500000 0
>>> +3200000 0
>>> +38100000 0
>>> +42700000 0
>>> +12400000 1 26200000
>>> +47300000 0
>>> +17000000 0
>>> +21600000 0
>>> +22200000 0
>>> +32500000 0
>>> +26200000 0
>>> +30800000 0
>>> +500000 0
>>> +35400000 0
>>> +5100000 0
>>> +40000000 0
>>> +9700000 0
>>> +44600000 0
>>> +25100000 0
>>> +14300000 0
>>> +49200000 0
>>> +18900000 0
>>> +23500000 0
>>> +32700000 16 17600000 21000000 3800000 48000000 47700000 39800000 
>>> 28700000 38000000 37700000 34500000 1600000 39400000 22500000 
>>> 9400000 11100000 37600000
>>> +2400000 1 16400000
>>> +37300000 0
>>> +8800000 0
>>> +13200000 0
>>> +7000000 0
>>> +41900000 0
>>> +11600000 0
>>> +46500000 0
>>> +16200000 0
>>> +20800000 0
>>> +25400000 0
>>> +24500000 0
>>> +30000000 0
>>> +34600000 0
>>> +4300000 0
>>> +39200000 0
>>> +8900000 0
>>> +43800000 0
>>> +13500000 0
>>> +48400000 0
>>> +18100000 0
>>> +33800000 0
>>> +29100000 0
>>> +22700000 0
>>> +27300000 0
>>> +31900000 0
>>> +1600000 0
>>> +36500000 0
>>> +6200000 0
>>> +41100000 0
>>> +4700000 0
>>> +10800000 0
>>> +45700000 0
>>> +15400000 0
>>> +20000000 0
>>> +24600000 0
>>> +29200000 0
>>> +14000000 0
>>> +13000000 0
>>> +3500000 0
>>> +38400000 0
>>> +8100000 1 3100000
>>> +43000000 0
>>> +23900000 0
>>> +12700000 0
>>> +47600000 0
>>> +17300000 0
>>> +21900000 0
>>> +29700000 0
>>> +26500000 0
>>> +31100000 0
>>> +800000 0
>>> +35700000 132 0 31200000 32600000 18600000 2300000 39500000 23200000 
>>> 6900000 44100000 27800000 34700000 28500000 1900000 6500000 8800000 
>>> 42600000 20700000 17500000 36600000 22600000 10900000 29500000 
>>> 11900000 20100000 22400000 41000000 43300000 27000000 13000000 
>>> 24200000 14600000 33900000 19900000 38500000 19600000 48600000 
>>> 17400000 1100000 42900000 47500000 49700000 19500000 38100000 
>>> 40400000 14700000 33300000 3000000 37900000 33400000 34900000 
>>> 7600000 9900000 44800000 30800000 49400000 16800000 500000 21400000 
>>> 5100000 12000000 12300000 49200000 32900000 35200000 47900000 
>>> 4700000 11800000 16400000 18700000 13600000 36400000 41900000 
>>> 46500000 48800000 40200000 11400000 44000000 40500000 16000000 
>>> 20600000 46100000 29800000 9800000 32300000 20400000 39000000 
>>> 41300000 29600000 30300000 29400000 15400000 20000000 6000000 
>>> 8300000 10800000 21800000 36100000 19800000 38400000 22100000 
>>> 17300000 38200000 5600000 23300000 42800000 10200000 47400000 800000 
>>> 7000000 28100000 33200000 46600000 37000000 8200000 23800000 
>>> 47000000 33000000 19000000 2700000 16300000 23600000 42200000 
>>> 14200000 32800000 2500000 37400000 4800000 39700000 7100000 42000000 
>>> 25700000 44300000
>>> +5400000 1 42700000
>>> +40300000 0
>>> +10000000 0
>>> +44900000 0
>>> +32600000 0
>>> +28900000 0
>>> +19200000 0
>>> +23800000 0
>>> +28400000 1 42600000
>>> +33000000 0
>>> +2700000 0
>>> +37600000 0
>>> +16300000 0
>>> +7300000 0
>>> +42200000 0
>>> +11900000 0
>>> +46800000 88 12800000 8000000 41800000 13800000 9300000 25300000 
>>> 29900000 32200000 4200000 22800000 44200000 10300000 4000000 8600000 
>>> 45800000 43900000 38700000 6100000 24500000 45200000 25400000 
>>> 38300000 24300000 20900000 24100000 12400000 49600000 19300000 
>>> 28600000 4500000 12200000 14500000 40000000 23700000 44600000 
>>> 13900000 2600000 7200000 42100000 9500000 30400000 14100000 49000000 
>>> 39200000 41200000 39600000 27700000 32500000 46300000 4300000 
>>> 22900000 11200000 18100000 29000000 45100000 4100000 25000000 
>>> 8700000 48200000 8500000 25500000 1400000 38600000 45500000 47800000 
>>> 15200000 26800000 1000000 24900000 7900000 28800000 31100000 
>>> 35700000 40300000 7700000 44900000 40600000 13700000 35500000 
>>> 40100000 12100000 30700000 11500000 39900000 9600000 16500000 200000 
>>> 28000000
>>> +16500000 0
>>> +21100000 0
>>> +25700000 0
>>> +
>>> +--------------------------------------------
>>> +0
>>> +0 2 0 1
>>> +1 1 2
>>> +2 1 3
>>> +3 1 4
>>> +4 1 5
>>> +5 1 4
>>> +
>>> +--------------------------------------------
>>> +32000000
>>> +32000000 1 32000001
>>> +32000001 2 32000001 32000002
>>> +32000002 1 32000003
>>> +32000003 1 32000004
>>> +32000004 1 32000005
>>> +32000005 2 32000002 32000006
>>> +32000006 1 32000007
>>> +32000007 1 32000008
>>> +32000008 2 32000009 32000006
>>> +32000009 2 32000010 32000003
>>> +32000010 1 32000011
>>> +32000011 2 32000009 32000012
>>> +32000012 2 32000008 32000013
>>> +32000013 2 32000001 32000014
>>> +32000014 1 32000010
>>> +
>>> +--------------------------------------------
>>> +34900000
>>> +34900000 1 34900001
>>> +34900001 1 34900002
>>> +34900002 1 34900003
>>> +34900003 1 34900004
>>> +34900004 0
>>> +
>>> +--------------------------------------------
>>> +4600000
>>> +4600000 1 4600001
>>> +4600001 1 4600002
>>> +4600002 2 4600000 4600003
>>> +4600003 2 4600001 4600004
>>> +4600004 1 4600005
>>> +4600005 2 4600002 4600006
>>> +4600006 0
>>> +
>>> +--------------------------------------------
>>> +39500000
>>> +39500000 1 39500001
>>> +39500001 1 39500002
>>> +39500002 1 39500003
>>> +39500003 0
>>> +
>>> +--------------------------------------------
>>> +44100000
>>> +44100000 2 44100001 44100002
>>> +44100001 1 44100002
>>> +44100002 1 44100000
>>> +
>>> +--------------------------------------------
>>> +15700000
>>> +15700000 1 15700001
>>> +15700001 0
>>> +
>>> +--------------------------------------------
>>> +1900000
>>> +1900000 1 1900001
>>> +1900001 1 1900002
>>> +1900002 1 1900000
>>> +
>>> +--------------------------------------------
>>> +6500000
>>> +6500000 2 6500000 6500001
>>> +6500001 0
>>> +
>>> +--------------------------------------------
>>> +18600000
>>> +18600000 2 18600000 18600001
>>> +18600001 1 18600002
>>> +18600002 1 18600003
>>> +18600003 2 18600001 18600004
>>> +18600004 1 18600005
>>> +18600005 1 18600006
>>> +18600006 1 18600007
>>> +18600007 1 18600001
>>> +
>>> +--------------------------------------------
>>> +47900000
>>> +47900000 0
>>> +
>>> +--------------------------------------------
>>> +2300000
>>> +2300000 1 2300000
>>> +
>>> +--------------------------------------------
>>> +8400000
>>> +8400000 2 8400000 8400001
>>> +8400001 2 8400002 8400004
>>> +8400002 2 8400002 8400003
>>> +8400003 2 8400000 8400004
>>> +8400004 1 8400002
>>> +
>>> +--------------------------------------------
>>> +13000000
>>> +13000000 1 13000001
>>> +13000001 2 13000000 13000002
>>> +13000002 0
>>> +
>>> +--------------------------------------------
>>> +17600000
>>> +17600000 0
>>> +
>>> +--------------------------------------------
>>> +22200000
>>> +22200000 1 22200001
>>> +22200001 2 22200001 22200002
>>> +22200002 1 22200003
>>> +22200003 2 22200003 22200004
>>> +22200004 2 22200003 22200005
>>> +22200005 1 22200006
>>> +22200006 2 22200000 22200007
>>> +22200007 1 22200006
>>> +
>>> +--------------------------------------------
>>> +37200000
>>> +37200000 1 37200000
>>> +
>>> +--------------------------------------------
>>> +12600000
>>> +12600000 1 12600001
>>> +12600001 2 12600002 12600010
>>> +12600002 1 12600003
>>> +12600003 1 12600004
>>> +12600004 2 12600002 12600005
>>> +12600005 2 12600000 12600006
>>> +12600006 1 12600007
>>> +12600007 1 12600008
>>> +12600008 2 12600009 12600004
>>> +12600009 2 12600010 12600005
>>> +12600010 2 12600009 12600011
>>> +12600011 1 12600012
>>> +12600012 0
>>> +
>>> +--------------------------------------------
>>> +26800000
>>> +26800000 0
>>> +
>>> +--------------------------------------------
>>> +1100000
>>> +1100000 2 1100001 1100003
>>> +1100001 1 1100002
>>> +1100002 1 1100003
>>> +1100003 1 1100004
>>> +1100004 1 1100005
>>> +1100005 1 1100006
>>> +1100006 2 1100001 1100007
>>> +1100007 1 1100008
>>> +1100008 1 1100004
>>> +
>>> +--------------------------------------------
>>> +36000000
>>> +36000000 1 36000000
>>> +
>>> +--------------------------------------------
>>> +40600000
>>> +40600000 2 40600000 40600001
>>> +40600001 1 40600001
>>> +
>>> +--------------------------------------------
>>> +10300000
>>> +10300000 2 10300000 10300001
>>> +10300001 1 10300002
>>> +10300002 0
>>> +
>>> +--------------------------------------------
>>> +45200000
>>> +45200000 1 45200001
>>> +45200001 1 45200002
>>> +45200002 2 45200003 45200004
>>> +45200003 1 45200004
>>> +45200004 1 45200005
>>> +45200005 2 45200006 45200007
>>> +45200006 1 45200007
>>> +45200007 2 45200008 45200005
>>> +45200008 0
>>> +
>>> +--------------------------------------------
>>> +1700000
>>> +1700000 2 1700001 1700005
>>> +1700001 1 1700002
>>> +1700002 1 1700003
>>> +1700003 1 1700004
>>> +1700004 1 1700005
>>> +1700005 1 1700006
>>> +1700006 1 1700007
>>> +1700007 2 1700008 1700002
>>> +1700008 2 1700009 1700004
>>> +1700009 0
>>> +
>>> +--------------------------------------------
>>> +19500000
>>> +19500000 1 19500001
>>> +19500001 2 19500001 19500002
>>> +19500002 1 19500003
>>> +19500003 1 19500004
>>> +19500004 0
>>> +
>>> +--------------------------------------------
>>> +24100000
>>> +24100000 1 24100001
>>> +24100001 1 24100002
>>> +24100002 2 24100003 24100007
>>> +24100003 1 24100004
>>> +24100004 2 24100003 24100005
>>> +24100005 2 24100000 24100006
>>> +24100006 2 24100001 24100007
>>> +24100007 1 24100008
>>> +24100008 0
>>> +
>>> +--------------------------------------------
>>> +28700000
>>> +28700000 1 28700001
>>> +28700001 0
>>> +
>>> +--------------------------------------------
>>> +3000000
>>> +3000000 1 3000001
>>> +3000001 1 3000002
>>> +3000002 2 3000003 3000004
>>> +3000003 1 3000004
>>> +3000004 0
>>> +
>>> +--------------------------------------------
>>> +37900000
>>> +37900000 1 37900001
>>> +37900001 1 37900002
>>> +37900002 2 37900002 37900003
>>> +37900003 2 37900000 37900004
>>> +37900004 1 37900002
>>> +
>>> +--------------------------------------------
>>> +36600000
>>> +36600000 1 36600001
>>> +36600001 0
>>> +
>>> +--------------------------------------------
>>> +25300000
>>> +25300000 2 25300000 25300001
>>> +25300001 1 25300000
>>> +
>>> +--------------------------------------------
>>> +7600000
>>> +7600000 1 7600001
>>> +7600001 2 7600002 7600005
>>> +7600002 1 7600003
>>> +7600003 2 7600001 7600004
>>> +7600004 2 7600003 7600005
>>> +7600005 2 7600002 7600006
>>> +7600006 1 7600006
>>> +
>>> +--------------------------------------------
>>> +12200000
>>> +12200000 1 12200001
>>> +12200001 1 12200002
>>> +12200002 1 12200000
>>> +
>>> +--------------------------------------------
>>> +47100000
>>> +47100000 1 47100001
>>> +47100001 0
>>> +
>>> +--------------------------------------------
>>> +16800000
>>> +16800000 1 16800001
>>> +16800001 2 16800000 16800002
>>> +16800002 1 16800003
>>> +16800003 1 16800004
>>> +16800004 2 16800001 16800005
>>> +16800005 1 16800006
>>> +16800006 1 16800007
>>> +16800007 1 16800008
>>> +16800008 1 16800009
>>> +16800009 1 16800010
>>> +16800010 1 16800001
>>> +
>>> +--------------------------------------------
>>> +21400000
>>> +21400000 2 21400001 21400003
>>> +21400001 1 21400002
>>> +21400002 1 21400003
>>> +21400003 2 21400004 21400005
>>> +21400004 2 21400004 21400005
>>> +21400005 1 21400000
>>> +
>>> +--------------------------------------------
>>> +26000000
>>> +26000000 1 26000001
>>> +26000001 1 26000002
>>> +26000002 0
>>> +
>>> +--------------------------------------------
>>> +20300000
>>> +20300000 1 20300000
>>> +
>>> +--------------------------------------------
>>> +300000
>>> +300000 1 300001
>>> +300001 1 300002
>>> +300002 1 300003
>>> +300003 1 300004
>>> +300004 1 300005
>>> +300005 1 300006
>>> +300006 1 300005
>>> +
>>> +--------------------------------------------
>>> +35200000
>>> +35200000 1 35200001
>>> +35200001 0
>>> +
>>> +--------------------------------------------
>>> +4900000
>>> +4900000 2 4900000 4900001
>>> +4900001 2 4900001 4900002
>>> +4900002 0
>>> +
>>> +--------------------------------------------
>>> +39800000
>>> +39800000 1 39800000
>>> +
>>> +--------------------------------------------
>>> +9500000
>>> +9500000 1 9500001
>>> +9500001 1 9500002
>>> +9500002 2 9500000 9500003
>>> +9500003 2 9500003 9500004
>>> +9500004 2 9500018 9500005
>>> +9500005 2 9500012 9500006
>>> +9500006 1 9500007
>>> +9500007 1 9500008
>>> +9500008 1 9500009
>>> +9500009 1 9500010
>>> +9500010 2 9500016 9500011
>>> +9500011 2 9500012 9500013
>>> +9500012 1 9500013
>>> +9500013 2 9500010 9500014
>>> +9500014 2 9500019 9500015
>>> +9500015 2 9500016 9500012
>>> +9500016 2 9500017 9500006
>>> +9500017 2 9500018 9500010
>>> +9500018 1 9500019
>>> +9500019 1 9500014
>>> +
>>> +--------------------------------------------
>>> +44400000
>>> +44400000 2 44400000 44400001
>>> +44400001 1 44400002
>>> +44400002 1 44400003
>>> +44400003 1 44400004
>>> +44400004 2 44400001 44400005
>>> +44400005 1 44400006
>>> +44400006 0
>>> +
>>> +--------------------------------------------
>>> +4700000
>>> +4700000 1 4700001
>>> +4700001 2 4700000 4700002
>>> +4700002 1 4700003
>>> +4700003 1 4700004
>>> +4700004 0
>>> +
>>> +--------------------------------------------
>>> +14100000
>>> +14100000 2 14100000 14100001
>>> +14100001 2 14100002 14100003
>>> +14100002 1 14100003
>>> +14100003 0
>>> +
>>> +--------------------------------------------
>>> +18700000
>>> +18700000 2 18700000 18700001
>>> +18700001 0
>>> +
>>> +--------------------------------------------
>>> +23200000
>>> +23200000 0
>>> +
>>> +--------------------------------------------
>>> +41200000
>>> +41200000 1 41200001
>>> +41200001 1 41200002
>>> +41200002 1 41200002
>>> +
>>> +--------------------------------------------
>>> +23300000
>>> +23300000 1 23300001
>>> +23300001 1 23300002
>>> +23300002 2 23300003 23300005
>>> +23300003 2 23300009 23300004
>>> +23300004 1 23300005
>>> +23300005 2 23300003 23300006
>>> +23300006 2 23300016 23300007
>>> +23300007 1 23300008
>>> +23300008 2 23300009 23300002
>>> +23300009 1 23300010
>>> +23300010 2 23300010 23300011
>>> +23300011 1 23300012
>>> +23300012 2 23300013 23300006
>>> +23300013 1 23300014
>>> +23300014 1 23300015
>>> +23300015 2 23300016 23300011
>>> +23300016 1 23300004
>>> +
>>> +--------------------------------------------
>>> +27900000
>>> +27900000 2 27900001 27900002
>>> +27900001 1 27900002
>>> +27900002 2 27900001 27900003
>>> +27900003 2 27900002 27900004
>>> +27900004 0
>>> +
>>> +--------------------------------------------
>>> +32500000
>>> +32500000 1 32500001
>>> +32500001 1 32500002
>>> +32500002 1 32500003
>>> +32500003 2 32500002 32500004
>>> +32500004 1 32500001
>>> +
>>> +--------------------------------------------
>>> +2200000
>>> +2200000 1 2200001
>>> +2200001 0
>>> +
>>> +--------------------------------------------
>>> +37100000
>>> +37100000 2 37100000 37100001
>>> +37100001 2 37100002 37100007
>>> +37100002 1 37100003
>>> +37100003 1 37100004
>>> +37100004 2 37100001 37100005
>>> +37100005 1 37100006
>>> +37100006 1 37100007
>>> +37100007 1 37100000
>>> +
>>> +--------------------------------------------
>>> +49800000
>>> +49800000 1 49800001
>>> +49800001 2 49800000 49800002
>>> +49800002 1 49800003
>>> +49800003 1 49800004
>>> +49800004 1 49800005
>>> +49800005 1 49800006
>>> +49800006 0
>>> +
>>> +--------------------------------------------
>>> +40200000
>>> +40200000 1 40200000
>>> +
>>> +--------------------------------------------
>>> +41700000
>>> +41700000 2 41700001 41700002
>>> +41700001 2 41700001 41700002
>>> +41700002 0
>>> +
>>> +--------------------------------------------
>>> +21000000
>>> +21000000 1 21000000
>>> +
>>> +--------------------------------------------
>>> +11400000
>>> +11400000 1 11400001
>>> +11400001 2 11400002 11400005
>>> +11400002 2 11400000 11400003
>>> +11400003 1 11400004
>>> +11400004 2 11400003 11400005
>>> +11400005 2 11400001 11400006
>>> +11400006 1 11400007
>>> +11400007 1 11400008
>>> +11400008 1 11400001
>>> +
>>> +--------------------------------------------
>>> +1800000
>>> +1800000 2 1800001 1800005
>>> +1800001 1 1800002
>>> +1800002 1 1800003
>>> +1800003 1 1800004
>>> +1800004 1 1800005
>>> +1800005 2 1800002 1800006
>>> +1800006 2 1800002 1800007
>>> +1800007 1 1800000
>>> +
>>> +--------------------------------------------
>>> +6900000
>>> +6900000 1 6900001
>>> +6900001 1 6900002
>>> +6900002 2 6900003 6900007
>>> +6900003 2 6900000 6900004
>>> +6900004 2 6900003 6900005
>>> +6900005 1 6900006
>>> +6900006 1 6900007
>>> +6900007 1 6900008
>>> +6900008 2 6900000 6900009
>>> +6900009 1 6900006
>>> +
>>> +--------------------------------------------
>>> +46300000
>>> +46300000 1 46300001
>>> +46300001 2 46300001 46300002
>>> +46300002 0
>>> +
>>> +--------------------------------------------
>>> +16000000
>>> +16000000 1 16000001
>>> +16000001 2 16000002 16000010
>>> +16000002 1 16000003
>>> +16000003 1 16000004
>>> +16000004 2 16000010 16000005
>>> +16000005 1 16000006
>>> +16000006 2 16000003 16000007
>>> +16000007 2 16000008 16000006
>>> +16000008 1 16000009
>>> +16000009 1 16000010
>>> +16000010 1 16000011
>>> +16000011 1 16000012
>>> +16000012 1 16000005
>>> +
>>> +--------------------------------------------
>>> +20600000
>>> +20600000 1 20600001
>>> +20600001 2 20600002 20600006
>>> +20600002 2 20600000 20600003
>>> +20600003 1 20600004
>>> +20600004 1 20600005
>>> +20600005 1 20600006
>>> +20600006 1 20600007
>>> +20600007 1 20600008
>>> +20600008 1 20600009
>>> +20600009 2 20600010 20600004
>>> +20600010 1 20600011
>>> +20600011 1 20600012
>>> +20600012 2 20600001 20600013
>>> +20600013 2 20600013 20600014
>>> +20600014 0
>>> +
>>> +--------------------------------------------
>>> +30600000
>>> +30600000 1 30600001
>>> +30600001 0
>>> +
>>> +--------------------------------------------
>>> +25200000
>>> +25200000 1 25200001
>>> +25200001 1 25200002
>>> +25200002 0
>>> +
>>> +--------------------------------------------
>>> +29800000
>>> +29800000 1 29800001
>>> +29800001 1 29800002
>>> +29800002 0
>>> +
>>> +--------------------------------------------
>>> +41800000
>>> +41800000 1 41800001
>>> +41800001 2 41800001 41800002
>>> +41800002 2 41800000 41800003
>>> +41800003 0
>>> +
>>> +--------------------------------------------
>>> +9100000
>>> +9100000 1 9100001
>>> +9100001 1 9100002
>>> +9100002 1 9100000
>>> +
>>> +--------------------------------------------
>>> +4100000
>>> +4100000 1 4100001
>>> +4100001 1 4100002
>>> +4100002 2 4100002 4100003
>>> +4100003 1 4100000
>>> +
>>> +--------------------------------------------
>>> +43600000
>>> +43600000 2 43600000 43600001
>>> +43600001 1 43600002
>>> +43600002 0
>>> +
>>> +--------------------------------------------
>>> +13300000
>>> +13300000 0
>>> +
>>> +--------------------------------------------
>>> +48200000
>>> +48200000 1 48200001
>>> +48200001 1 48200000
>>> +
>>> +--------------------------------------------
>>> +17900000
>>> +17900000 1 17900001
>>> +17900001 0
>>> +
>>> +--------------------------------------------
>>> +22500000
>>> +22500000 2 22500001 22500006
>>> +22500001 1 22500002
>>> +22500002 1 22500003
>>> +22500003 1 22500004
>>> +22500004 1 22500005
>>> +22500005 1 22500006
>>> +22500006 1 22500006
>>> +
>>> +--------------------------------------------
>>> +6300000
>>> +6300000 1 6300001
>>> +6300001 1 6300002
>>> +6300002 1 6300003
>>> +6300003 1 6300004
>>> +6300004 1 6300005
>>> +6300005 1 6300006
>>> +6300006 1 6300000
>>> +
>>> +--------------------------------------------
>>> +27100000
>>> +27100000 2 27100000 27100001
>>> +27100001 0
>>> +
>>> +--------------------------------------------
>>> +1400000
>>> +1400000 1 1400000
>>> +
>>> +--------------------------------------------
>>> +36300000
>>> +36300000 1 36300001
>>> +36300001 2 36300002 36300006
>>> +36300002 1 36300003
>>> +36300003 1 36300004
>>> +36300004 2 36300002 36300005
>>> +36300005 1 36300006
>>> +36300006 1 36300004
>>> +
>>> +--------------------------------------------
>>> +6000000
>>> +6000000 1 6000001
>>> +6000001 1 6000002
>>> +6000002 1 37500000
>>> +
>>> +--------------------------------------------
>>> +40900000
>>> +40900000 1 40900000
>>> +
>>> +--------------------------------------------
>>> +10600000
>>> +10600000 0
>>> +
>>> +--------------------------------------------
>>> +45500000
>>> +45500000 1 45500001
>>> +45500001 1 45500002
>>> +45500002 2 45500000 45500003
>>> +45500003 1 45500004
>>> +45500004 2 45500003 45500005
>>> +45500005 1 45500006
>>> +45500006 0
>>> +
>>> +--------------------------------------------
>>> +15200000
>>> +15200000 1 15200001
>>> +15200001 1 15200002
>>> +15200002 1 15200003
>>> +15200003 1 15200004
>>> +15200004 2 15200003 15200005
>>> +15200005 1 15200001
>>> +
>>> +--------------------------------------------
>>> +9200000
>>> +9200000 1 9200001
>>> +9200001 1 9200000
>>> +
>>> +--------------------------------------------
>>> +31400000
>>> +31400000 1 31400001
>>> +31400001 1 31400002
>>> +31400002 1 31400003
>>> +31400003 1 31400004
>>> +31400004 2 31400002 31400005
>>> +31400005 1 31400006
>>> +31400006 0
>>> +
>>> +--------------------------------------------
>>> +19800000
>>> +19800000 0
>>> +
>>> +--------------------------------------------
>>> +24400000
>>> +24400000 2 24400001 24400003
>>> +24400001 1 24400002
>>> +24400002 1 24400003
>>> +24400003 2 24400003 24400004
>>> +24400004 1 24400003
>>> +
>>> +--------------------------------------------
>>> +29000000
>>> +29000000 1 29000000
>>> +
>>> +--------------------------------------------
>>> +33600000
>>> +33600000 1 33600001
>>> +33600001 1 33600001
>>> +
>>> +--------------------------------------------
>>> +3300000
>>> +3300000 1 3300001
>>> +3300001 1 3300002
>>> +3300002 1 3300003
>>> +3300003 2 3300001 3300004
>>> +3300004 2 3300004 3300005
>>> +3300005 0
>>> +
>>> +--------------------------------------------
>>> +38200000
>>> +38200000 1 38200001
>>> +38200001 2 38200002 38200003
>>> +38200002 1 38200003
>>> +38200003 1 38200004
>>> +38200004 1 38200005
>>> +38200005 0
>>> +
>>> +--------------------------------------------
>>> +24900000
>>> +24900000 1 24900001
>>> +24900001 1 24900002
>>> +24900002 1 24900003
>>> +24900003 2 24900002 24900004
>>> +24900004 1 24900005
>>> +24900005 1 24900006
>>> +24900006 1 24900007
>>> +24900007 1 24900008
>>> +24900008 2 24900009 24900006
>>> +24900009 1 24900010
>>> +24900010 2 24900011 24900005
>>> +24900011 1 24900001
>>> +
>>> +--------------------------------------------
>>> +7900000
>>> +7900000 1 7900001
>>> +7900001 1 7900002
>>> +7900002 1 7900003
>>> +7900003 2 7900000 7900004
>>> +7900004 1 7900005
>>> +7900005 1 7900006
>>> +7900006 2 7900004 7900007
>>> +7900007 0
>>> +
>>> +--------------------------------------------
>>> +42800000
>>> +42800000 1 42800001
>>> +42800001 1 42800002
>>> +42800002 2 42800000 42800003
>>> +42800003 0
>>> +
>>> +--------------------------------------------
>>> +12500000
>>> +12500000 1 12500001
>>> +12500001 1 12500002
>>> +12500002 1 12500003
>>> +12500003 2 12500003 12500004
>>> +12500004 2 12500004 12500005
>>> +12500005 2 12500004 12500006
>>> +12500006 2 12500006 12500007
>>> +12500007 2 12500008 12500006
>>> +12500008 2 12500007 33700000
>>> +
>>> +--------------------------------------------
>>> +47400000
>>> +47400000 0
>>> +
>>> +--------------------------------------------
>>> +17100000
>>> +17100032 2 17100033 17100028
>>> +17100033 2 17100033 17100034
>>> +17100034 2 17100035 14800000
>>> +17100035 2 17100028 17100036
>>> +17100036 2 17100037 41500000
>>> +17100037 2 17100038 42700000
>>> +17100038 2 17100035 17100039
>>> +17100039 2 17100040 1700000
>>> +17100040 2 17100041 6600000
>>> +17100041 2 17100042 36500000
>>> +17100042 2 17100043 28200000
>>> +17100043 1 27400000
>>> +17100000 2 17100001 10100000
>>> +17100001 2 17100002 31000000
>>> +17100002 2 17100003 17100030
>>> +17100003 2 17100043 17100004
>>> +17100004 2 17100005 5500000
>>> +17100005 2 17100006 17100031
>>> +17100006 2 17100011 17100007
>>> +17100007 1 17100008
>>> +17100008 2 17100009 17100001
>>> +17100009 1 17100010
>>> +17100010 2 17100011 26900000
>>> +17100011 2 17100012 25200000
>>> +17100012 2 17100009 17100013
>>> +17100013 2 17100014 17100007
>>> +17100014 2 17100015 37800000
>>> +17100015 2 17100016 12700000
>>> +17100016 2 17100017 23500000
>>> +17100017 2 17100018 17100037
>>> +17100018 2 17100019 29300000
>>> +17100019 2 17100020 6300000
>>> +17100020 2 17100003 17100021
>>> +17100021 1 17100022
>>> +17100022 2 17100020 17100023
>>> +17100023 2 17100024 17100041
>>> +17100024 2 17100025 17100020
>>> +17100025 2 17100026 17100023
>>> +17100026 2 17100010 17100027
>>> +17100027 2 17100028 32700000
>>> +17100028 2 17100029 17100022
>>> +17100029 2 17100014 17100030
>>> +17100030 2 17100034 17100031
>>> +17100031 2 17100032 17100023
>>> +
>>> +--------------------------------------------
>>> +21700000
>>> +21700000 1 21700001
>>> +21700001 0
>>> +
>>> +--------------------------------------------
>>> +26300000
>>> +26300000 1 26300001
>>> +26300001 1 26300002
>>> +26300002 1 26300003
>>> +26300003 2 26300002 26300004
>>> +26300004 1 26300005
>>> +26300005 1 26300006
>>> +26300006 1 26300007
>>> +26300007 2 26300008 26300007
>>> +26300008 0
>>> +
>>> +--------------------------------------------
>>> +30900000
>>> +30900000 0
>>> +
>>> +--------------------------------------------
>>> +27800000
>>> +27800000 1 27800000
>>> +
>>> +--------------------------------------------
>>> +5700000
>>> +5700000 1 5700001
>>> +5700001 2 5700002 5700007
>>> +5700002 1 5700003
>>> +5700003 1 5700004
>>> +5700004 1 5700005
>>> +5700005 2 5700002 5700006
>>> +5700006 2 5700006 5700007
>>> +5700007 1 5700008
>>> +5700008 1 5700009
>>> +5700009 0
>>> +
>>> +--------------------------------------------
>>> +600000
>>> +600000 1 600001
>>> +600001 2 600000 600002
>>> +600002 0
>>> +
>>> +--------------------------------------------
>>> +35500000
>>> +35500000 0
>>> +
>>> +--------------------------------------------
>>> +5200000
>>> +5200000 1 5200001
>>> +5200001 0
>>> +
>>> +--------------------------------------------
>>> +40100000
>>> +40100000 1 40100000
>>> +
>>> +--------------------------------------------
>>> +9800000
>>> +9800000 1 9800000
>>> +
>>> +--------------------------------------------
>>> +44700000
>>> +44700000 1 44700000
>>> +
>>> +--------------------------------------------
>>> +14400000
>>> +14400000 0
>>> +
>>> +--------------------------------------------
>>> +49300000
>>> +49300000 2 49300001 49300003
>>> +49300001 1 49300002
>>> +49300002 2 49300002 49300003
>>> +49300003 2 49300003 49300004
>>> +49300004 2 49300002 49300005
>>> +49300005 1 49300001
>>> +
>>> +--------------------------------------------
>>> +19000000
>>> +19000000 1 19000001
>>> +19000001 1 19000002
>>> +19000002 1 19000003
>>> +19000003 1 19000004
>>> +19000004 1 19000005
>>> +19000005 2 19000003 19000006
>>> +19000006 1 19000007
>>> +19000007 1 19000008
>>> +19000008 0
>>> +
>>> +--------------------------------------------
>>> +11500000
>>> +11500000 2 11500000 11500001
>>> +11500001 1 11500002
>>> +11500002 1 11500003
>>> +11500003 1 11500001
>>> +
>>> +--------------------------------------------
>>> +23600000
>>> +23600000 2 23600000 23600001
>>> +23600001 1 23600002
>>> +23600002 1 23600002
>>> +
>>> +--------------------------------------------
>>> +28200000
>>> +28200000 1 28200001
>>> +28200001 1 28200002
>>> +28200002 0
>>> +
>>> +--------------------------------------------
>>> +32800000
>>> +32800000 1 32800001
>>> +32800001 0
>>> +
>>> +--------------------------------------------
>>> +2500000
>>> +2500000 1 2500001
>>> +2500001 1 2500002
>>> +2500002 1 2500003
>>> +2500003 2 2500001 2500004
>>> +2500004 1 2500000
>>> +
>>> +--------------------------------------------
>>> +37400000
>>> +37400000 1 37400000
>>> +
>>> +--------------------------------------------
>>> +7100000
>>> +7100000 1 7100001
>>> +7100001 2 7100000 7100002
>>> +7100002 2 7100002 7100003
>>> +7100003 1 7100004
>>> +7100004 1 7100005
>>> +7100005 0
>>> +
>>> +--------------------------------------------
>>> +42000000
>>> +42000000 1 42000001
>>> +42000001 1 42000002
>>> +42000002 1 42000003
>>> +42000003 2 42000003 42000004
>>> +42000004 2 42000005 42000007
>>> +42000005 2 42000008 42000006
>>> +42000006 2 42000005 42000007
>>> +42000007 1 42000008
>>> +42000008 1 42000009
>>> +42000009 0
>>> +
>>> +--------------------------------------------
>>> +11700000
>>> +11700000 1 11700001
>>> +11700001 0
>>> +
>>> +--------------------------------------------
>>> +46400000
>>> +46400000 1 46400001
>>> +46400001 1 46400001
>>> +
>>> +--------------------------------------------
>>> +31200000
>>> +31200000 1 31200001
>>> +31200001 1 31200002
>>> +31200002 2 31200000 31200003
>>> +31200003 1 31200004
>>> +31200004 0
>>> +
>>> +--------------------------------------------
>>> +16300000
>>> +16300000 2 16300001 16300010
>>> +16300001 1 16300002
>>> +16300002 1 16300003
>>> +16300003 1 16300004
>>> +16300004 2 16300000 16300005
>>> +16300005 2 16300012 16300006
>>> +16300006 1 16300007
>>> +16300007 2 16300008 16300000
>>> +16300008 2 16300009 16300005
>>> +16300009 1 16300010
>>> +16300010 1 16300011
>>> +16300011 1 16300012
>>> +16300012 2 16300000 16300013
>>> +16300013 0
>>> +
>>> +--------------------------------------------
>>> +20900000
>>> +20900000 1 20900001
>>> +20900001 1 20900002
>>> +20900002 1 20900003
>>> +20900003 2 20900003 20900004
>>> +20900004 1 20900001
>>> +
>>> +--------------------------------------------
>>> +25500000
>>> +25500000 1 25500001
>>> +25500001 2 25500008 25500002
>>> +25500002 1 25500003
>>> +25500003 2 25500000 25500004
>>> +25500004 2 25500002 25500005
>>> +25500005 1 25500006
>>> +25500006 2 25500003 25500007
>>> +25500007 2 25500008 25500004
>>> +25500008 1 25500009
>>> +25500009 2 25500010 25500003
>>> +25500010 1 25500010
>>> +
>>> +--------------------------------------------
>>> +30100000
>>> +30100000 2 30100000 30100001
>>> +30100001 1 30100002
>>> +30100002 1 30100003
>>> +30100003 1 30100004
>>> +30100004 1 30100005
>>> +30100005 2 30100005 30100006
>>> +30100006 1 30100007
>>> +30100007 1 30100001
>>> +
>>> +--------------------------------------------
>>> +18200000
>>> +18200000 2 18200001 18200002
>>> +18200001 2 18200002 18200003
>>> +18200002 2 18200000 18200003
>>> +18200003 0
>>> +
>>> +--------------------------------------------
>>> +22800000
>>> +22800000 2 22800000 22800001
>>> +22800001 1 22800002
>>> +22800002 1 22800001
>>> +
>>> +--------------------------------------------
>>> +13800000
>>> +13800000 0
>>> +
>>> +--------------------------------------------
>>> +8700000
>>> +8700000 2 8700008 8700001
>>> +8700001 2 8700000 8700002
>>> +8700002 2 8700003 8700013
>>> +8700003 1 8700004
>>> +8700004 1 8700005
>>> +8700005 1 8700006
>>> +8700006 1 8700007
>>> +8700007 1 8700008
>>> +8700008 1 8700009
>>> +8700009 1 8700010
>>> +8700010 1 8700011
>>> +8700011 2 8700012 8700006
>>> +8700012 2 8700002 8700013
>>> +8700013 0
>>> +
>>> +--------------------------------------------
>>> +15500000
>>> +15500000 0
>>> +
>>> +--------------------------------------------
>>> +48700000
>>> +48700000 2 48700000 48700001
>>> +48700001 2 48700001 48700002
>>> +48700002 1 48700003
>>> +48700003 2 48700001 48700004
>>> +48700004 1 48700005
>>> +48700005 2 48700004 48700006
>>> +48700006 1 48700005
>>> +
>>> +--------------------------------------------
>>> +24700000
>>> +24700000 1 24700001
>>> +24700001 2 24700001 24700002
>>> +24700002 1 24700000
>>> +
>>> +--------------------------------------------
>>> +32400000
>>> +32400000 1 32400001
>>> +32400001 0
>>> +
>>> +--------------------------------------------
>>> +8600000
>>> +8600000 1 8600001
>>> +8600001 1 8600002
>>> +8600002 1 8600003
>>> +8600003 2 8600001 8600004
>>> +8600004 2 8600001 40800000
>>> +
>>> +--------------------------------------------
>>> +12800000
>>> +12800000 2 12800000 12800001
>>> +12800001 1 12800002
>>> +12800002 2 12800002 12800003
>>> +12800003 1 12800004
>>> +12800004 1 12800005
>>> +12800005 0
>>> +
>>> +--------------------------------------------
>>> +47700000
>>> +47700000 0
>>> +
>>> +--------------------------------------------
>>> +22000000
>>> +22000000 2 22000000 22000001
>>> +22000001 2 22000001 22000002
>>> +22000002 0
>>> +
>>> +--------------------------------------------
>>> +26600000
>>> +26600000 1 26600001
>>> +26600001 2 26600001 26600002
>>> +26600002 1 26600002
>>> +
>>> +--------------------------------------------
>>> +16100000
>>> +16100000 1 16100001
>>> +16100001 2 16100002 15400000
>>> +16100002 1 16100003
>>> +16100003 1 16100004
>>> +16100004 1 16100000
>>> +
>>> +--------------------------------------------
>>> +900000
>>> +900000 0
>>> +
>>> +--------------------------------------------
>>> +35800000
>>> +35800000 1 35800000
>>> +
>>> +--------------------------------------------
>>> +5500000
>>> +5500000 1 5500001
>>> +5500001 1 5500002
>>> +5500002 1 5500003
>>> +5500003 2 5500009 5500004
>>> +5500004 1 5500005
>>> +5500005 2 5500000 5500006
>>> +5500006 1 5500007
>>> +5500007 2 5500008 5500007
>>> +5500008 1 5500009
>>> +5500009 1 5500010
>>> +5500010 1 5500011
>>> +5500011 2 5500012 5500007
>>> +5500012 2 5500003 5500013
>>> +5500013 0
>>> +
>>> +--------------------------------------------
>>> +40400000
>>> +40400000 1 40400001
>>> +40400001 2 40400002 40400004
>>> +40400002 2 40400003 40400011
>>> +40400003 2 40400012 40400004
>>> +40400004 2 40400011 40400005
>>> +40400005 1 40400006
>>> +40400006 2 40400011 40400007
>>> +40400007 1 40400008
>>> +40400008 1 40400009
>>> +40400009 2 40400010 40400003
>>> +40400010 1 40400011
>>> +40400011 2 40400000 40400012
>>> +40400012 2 40400009 40400013
>>> +40400013 2 40400013 40400014
>>> +40400014 1 40400008
>>> +
>>> +--------------------------------------------
>>> +10100000
>>> +10100000 0
>>> +
>>> +--------------------------------------------
>>> +45000000
>>> +45000000 2 45000001 45000004
>>> +45000001 1 45000002
>>> +45000002 1 45000003
>>> +45000003 1 45000004
>>> +45000004 0
>>> +
>>> +--------------------------------------------
>>> +49600000
>>> +49600000 2 49600001 49600004
>>> +49600001 1 49600002
>>> +49600002 2 49600001 49600003
>>> +49600003 1 49600004
>>> +49600004 2 49600002 49600005
>>> +49600005 1 49600006
>>> +49600006 1 49600007
>>> +49600007 1 49600008
>>> +49600008 2 49600009 49600003
>>> +49600009 2 49600010 49600003
>>> +49600010 2 49600002 49600011
>>> +49600011 0
>>> +
>>> +--------------------------------------------
>>> +31800000
>>> +31800000 1 31800000
>>> +
>>> +--------------------------------------------
>>> +14900000
>>> +14900000 1 14900001
>>> +14900001 1 30900000
>>> +
>>> +--------------------------------------------
>>> +28500000
>>> +28500000 2 28500001 28500007
>>> +28500001 2 28500009 28500002
>>> +28500002 1 28500003
>>> +28500003 1 28500004
>>> +28500004 1 28500005
>>> +28500005 2 28500001 28500006
>>> +28500006 1 28500007
>>> +28500007 2 28500008 28500007
>>> +28500008 2 28500009 28500006
>>> +28500009 1 28500010
>>> +28500010 1 28500011
>>> +28500011 1 28500012
>>> +28500012 2 28500008 28500013
>>> +28500013 1 28500014
>>> +28500014 1 28500015
>>> +28500015 1 28500004
>>> +
>>> +--------------------------------------------
>>> +33100000
>>> +33100000 2 33100000 33100001
>>> +33100001 1 33100002
>>> +33100002 0
>>> +
>>> +--------------------------------------------
>>> +2800000
>>> +2800000 2 2800000 2800001
>>> +2800001 2 2800001 2800002
>>> +2800002 1 2800003
>>> +2800003 1 2800002
>>> +
>>> +--------------------------------------------
>>> +37700000
>>> +37700000 1 37700001
>>> +37700001 1 37700002
>>> +37700002 2 37700001 37700003
>>> +37700003 1 37700004
>>> +37700004 2 37700003 37700005
>>> +37700005 2 37700001 37700006
>>> +37700006 2 37700002 37700007
>>> +37700007 1 37700008
>>> +37700008 2 37700009 37700002
>>> +37700009 0
>>> +
>>> +--------------------------------------------
>>> +7400000
>>> +7400000 1 7400001
>>> +7400001 2 7400002 7400003
>>> +7400002 2 7400002 7400003
>>> +7400003 1 7400004
>>> +7400004 1 7400003
>>> +
>>> +--------------------------------------------
>>> +42300000
>>> +42300000 2 42300001 42300002
>>> +42300001 2 42300000 42300002
>>> +42300002 1 42300003
>>> +42300003 1 42300001
>>> +
>>> +--------------------------------------------
>>> +12000000
>>> +12000000 2 12000000 12000001
>>> +12000001 1 12000002
>>> +12000002 2 12000001 12000003
>>> +12000003 1 12000004
>>> +12000004 0
>>> +
>>> +--------------------------------------------
>>> +46900000
>>> +46900000 0
>>> +
>>> +--------------------------------------------
>>> +34700000
>>> +34700000 2 34700000 34700001
>>> +34700001 1 34700001
>>> +
>>> +--------------------------------------------
>>> +16600000
>>> +16600000 1 16600001
>>> +16600001 1 16600002
>>> +16600002 2 16600001 16600003
>>> +16600003 1 16600004
>>> +16600004 1 16600005
>>> +16600005 2 16600000 16600006
>>> +16600006 1 16600004
>>> +
>>> +--------------------------------------------
>>> +21200000
>>> +21200000 1 21200001
>>> +21200001 1 21200002
>>> +21200002 1 21200003
>>> +21200003 1 21200004
>>> +21200004 1 21200005
>>> +21200005 2 21200001 21200006
>>> +21200006 1 21200007
>>> +21200007 1 21200008
>>> +21200008 1 21200009
>>> +21200009 1 21200010
>>> +21200010 0
>>> +
>>> +--------------------------------------------
>>> +25800000
>>> +25800000 1 25800001
>>> +25800001 2 25800000 25800002
>>> +25800002 1 25800003
>>> +25800003 1 25800004
>>> +25800004 1 25800005
>>> +25800005 1 25800006
>>> +25800006 2 25800002 25800007
>>> +25800007 1 25800008
>>> +25800008 1 25800009
>>> +25800009 0
>>> +
>>> +--------------------------------------------
>>> +30400000
>>> +30400000 2 30400000 30400001
>>> +30400001 0
>>> +
>>> +--------------------------------------------
>>> +100000
>>> +100000 1 100001
>>> +100001 1 100002
>>> +100002 1 100003
>>> +100003 2 100002 100004
>>> +100004 1 100005
>>> +100005 0
>>> +
>>> +--------------------------------------------
>>> +35000000
>>> +35000000 1 35000000
>>> +
>>> +--------------------------------------------
>>> +18400000
>>> +18400000 2 18400001 18400006
>>> +18400001 1 18400002
>>> +18400002 1 18400003
>>> +18400003 1 18400004
>>> +18400004 1 18400005
>>> +18400005 1 18400006
>>> +18400006 0
>>> +
>>> +--------------------------------------------
>>> +18000000
>>> +18000000 1 18000001
>>> +18000001 1 18000000
>>> +
>>> +--------------------------------------------
>>> +39600000
>>> +39600000 1 39600001
>>> +39600001 1 39600000
>>> +
>>> +--------------------------------------------
>>> +9300000
>>> +9300000 1 9300001
>>> +9300001 1 9300002
>>> +9300002 1 9300003
>>> +9300003 2 9300002 9300004
>>> +9300004 0
>>> +
>>> +--------------------------------------------
>>> +44200000
>>> +44200000 2 44200000 44200001
>>> +44200001 0
>>> +
>>> +--------------------------------------------
>>> +13900000
>>> +13900000 1 13900001
>>> +13900001 1 13900001
>>> +
>>> +--------------------------------------------
>>> +48800000
>>> +48800000 0
>>> +
>>> +--------------------------------------------
>>> +18500000
>>> +18500000 2 18500001 18500005
>>> +18500001 2 18500002 18500004
>>> +18500002 2 18500003 18500005
>>> +18500003 1 18500004
>>> +18500004 1 18500005
>>> +18500005 1 18500005
>>> +
>>> +--------------------------------------------
>>> +23100000
>>> +23100000 2 23100001 23100003
>>> +23100001 2 23100002 23100004
>>> +23100002 1 23100003
>>> +23100003 2 23100002 23100004
>>> +23100004 1 23100005
>>> +23100005 1 23100006
>>> +23100006 2 23100003 23100007
>>> +23100007 2 23100008 23100006
>>> +23100008 1 23100009
>>> +23100009 2 23100010 23100003
>>> +23100010 0
>>> +
>>> +--------------------------------------------
>>> +27700000
>>> +27700000 1 27700001
>>> +27700001 0
>>> +
>>> +--------------------------------------------
>>> +34100000
>>> +34100000 1 34100001
>>> +34100001 2 34100000 34100002
>>> +34100002 0
>>> +
>>> +--------------------------------------------
>>> +32300000
>>> +32300000 0
>>> +
>>> +--------------------------------------------
>>> +2000000
>>> +2000000 1 2000001
>>> +2000001 2 2000001 2000002
>>> +2000002 2 2000003 2000006
>>> +2000003 1 2000004
>>> +2000004 1 2000005
>>> +2000005 2 2000004 2000006
>>> +2000006 0
>>> +
>>> +--------------------------------------------
>>> +36900000
>>> +36900000 1 36900001
>>> +36900001 1 36900000
>>> +
>>> +--------------------------------------------
>>> +6600000
>>> +6600000 1 6600001
>>> +6600001 1 6600002
>>> +6600002 1 6600001
>>> +
>>> +--------------------------------------------
>>> +41500000
>>> +41500000 0
>>> +
>>> +--------------------------------------------
>>> +11200000
>>> +11200000 1 11200000
>>> +
>>> +--------------------------------------------
>>> +46100000
>>> +46100000 0
>>> +
>>> +--------------------------------------------
>>> +15800000
>>> +15800000 0
>>> +
>>> +--------------------------------------------
>>> +5000000
>>> +5000000 2 5000001 5000015
>>> +5000001 2 5000001 5000002
>>> +5000002 2 5000000 5000003
>>> +5000003 1 5000004
>>> +5000004 2 5000008 5000005
>>> +5000005 1 5000006
>>> +5000006 1 5000007
>>> +5000007 2 5000008 5000004
>>> +5000008 1 5000009
>>> +5000009 2 5000010 5000018
>>> +5000010 1 5000011
>>> +5000011 2 5000000 5000012
>>> +5000012 1 5000013
>>> +5000013 1 5000014
>>> +5000014 1 5000015
>>> +5000015 2 5000016 5000013
>>> +5000016 1 5000017
>>> +5000017 2 5000016 5000018
>>> +5000018 1 5000009
>>> +
>>> +--------------------------------------------
>>> +14700000
>>> +14700000 1 14700001
>>> +14700001 1 14700002
>>> +14700002 0
>>> +
>>> +--------------------------------------------
>>> +20400000
>>> +20400000 1 20400001
>>> +20400001 1 20400001
>>> +
>>> +--------------------------------------------
>>> +25000000
>>> +25000000 2 25000001 25000003
>>> +25000001 1 25000002
>>> +25000002 1 25000003
>>> +25000003 2 25000001 25000004
>>> +25000004 1 25000002
>>> +
>>> +--------------------------------------------
>>> +29600000
>>> +29600000 1 29600001
>>> +29600001 1 29600000
>>> +
>>> +--------------------------------------------
>>> +34200000
>>> +34200000 1 34200001
>>> +34200001 1 34200002
>>> +34200002 1 34200003
>>> +34200003 1 34200003
>>> +
>>> +--------------------------------------------
>>> +3900000
>>> +3900000 1 3900001
>>> +3900001 1 3900002
>>> +3900002 2 3900002 3900003
>>> +3900003 1 3900000
>>> +
>>> +--------------------------------------------
>>> +38800000
>>> +38800000 1 38800001
>>> +38800001 2 38800009 38800002
>>> +38800002 1 38800003
>>> +38800003 2 38800001 38800004
>>> +38800004 2 38800010 38800005
>>> +38800005 1 38800006
>>> +38800006 2 38800006 38800007
>>> +38800007 1 38800008
>>> +38800008 2 38800000 38800009
>>> +38800009 1 38800010
>>> +38800010 0
>>> +
>>> +--------------------------------------------
>>> +8500000
>>> +8500000 1 8500001
>>> +8500001 2 8500001 8500002
>>> +8500002 1 8500000
>>> +
>>> +--------------------------------------------
>>> +20700000
>>> +20700000 1 20700001
>>> +20700001 2 20700000 20700002
>>> +20700002 1 20700003
>>> +20700003 1 20700001
>>> +
>>> +--------------------------------------------
>>> +13100000
>>> +13100000 1 13100001
>>> +13100001 2 13100001 13100002
>>> +13100002 1 13100003
>>> +13100003 0
>>> +
>>> +--------------------------------------------
>>> +48000000
>>> +48000000 1 48000001
>>> +48000001 1 48000001
>>> +
>>> +--------------------------------------------
>>> +17700000
>>> +17700000 0
>>> +
>>> +--------------------------------------------
>>> +22300000
>>> +22300000 0
>>> +
>>> +--------------------------------------------
>>> +26900000
>>> +26900000 2 26900000 26900001
>>> +26900001 2 26900000 26900002
>>> +26900002 0
>>> +
>>> +--------------------------------------------
>>> +31500000
>>> +31500000 2 31500001 31500004
>>> +31500001 1 31500002
>>> +31500002 2 31500003 31500006
>>> +31500003 2 31500001 31500004
>>> +31500004 1 31500005
>>> +31500005 2 31500000 31500006
>>> +31500006 0
>>> +
>>> +--------------------------------------------
>>> +4400000
>>> +4400000 2 4400000 4400001
>>> +4400001 2 4400002 29100000
>>> +4400002 0
>>> +
>>> +--------------------------------------------
>>> +37000000
>>> +37000000 1 37000000
>>> +
>>> +--------------------------------------------
>>> +1200000
>>> +1200000 2 1200000 1200001
>>> +1200001 1 1200002
>>> +1200002 1 1200003
>>> +1200003 1 1200004
>>> +1200004 1 1200005
>>> +1200005 1 1200001
>>> +
>>> +--------------------------------------------
>>> +36100000
>>> +36100000 1 36100001
>>> +36100001 1 36100002
>>> +36100002 1 36100003
>>> +36100003 1 36100004
>>> +36100004 1 36100005
>>> +36100005 2 36100003 36100006
>>> +36100006 1 36100007
>>> +36100007 0
>>> +
>>> +--------------------------------------------
>>> +5800000
>>> +5800000 1 5800000
>>> +
>>> +--------------------------------------------
>>> +40700000
>>> +40700000 1 40700001
>>> +40700001 1 40700002
>>> +40700002 1 40700003
>>> +40700003 2 40700000 40700004
>>> +40700004 1 40700000
>>> +
>>> +--------------------------------------------
>>> +10400000
>>> +10400000 1 10400001
>>> +10400001 1 10400002
>>> +10400002 1 10400003
>>> +10400003 2 10400004 10400015
>>> +10400004 1 10400005
>>> +10400005 1 10400006
>>> +10400006 2 10400005 10400007
>>> +10400007 1 10400008
>>> +10400008 1 10400009
>>> +10400009 1 10400010
>>> +10400010 1 10400011
>>> +10400011 2 10400003 10400012
>>> +10400012 2 10400003 10400013
>>> +10400013 1 10400014
>>> +10400014 2 10400000 10400015
>>> +10400015 1 10400016
>>> +10400016 1 10400017
>>> +10400017 2 10400018 10400004
>>> +10400018 0
>>> +
>>> +--------------------------------------------
>>> +45300000
>>> +45300000 2 45300001 45300004
>>> +45300001 1 45300002
>>> +45300002 1 45300003
>>> +45300003 2 45300003 45300004
>>> +45300004 2 45300017 45300005
>>> +45300005 2 45300003 45300006
>>> +45300006 2 45300002 45300007
>>> +45300007 2 45300008 45300005
>>> +45300008 2 45300009 45300001
>>> +45300009 2 45300001 45300010
>>> +45300010 2 45300008 45300011
>>> +45300011 1 45300012
>>> +45300012 2 45300001 45300013
>>> +45300013 1 45300014
>>> +45300014 2 45300002 45300015
>>> +45300015 1 45300016
>>> +45300016 2 45300017 45300003
>>> +45300017 1 45300018
>>> +45300018 1 45300003
>>> +
>>> +--------------------------------------------
>>> +15000000
>>> +15000000 1 15000001
>>> +15000001 1 15000002
>>> +15000002 0
>>> +
>>> +--------------------------------------------
>>> +49900000
>>> +49900000 1 49900001
>>> +49900001 1 49900000
>>> +
>>> +--------------------------------------------
>>> +49500000
>>> +49500000 1 49500001
>>> +49500001 0
>>> +
>>> +--------------------------------------------
>>> +19600000
>>> +19600000 1 19600001
>>> +19600001 1 19600002
>>> +19600002 1 19600003
>>> +19600003 1 19600004
>>> +19600004 1 19600005
>>> +19600005 2 19600001 19600006
>>> +19600006 2 19600002 19600007
>>> +19600007 2 19600008 19600012
>>> +19600008 1 19600009
>>> +19600009 2 19600010 19600013
>>> +19600010 1 19600011
>>> +19600011 1 19600012
>>> +19600012 1 19600013
>>> +19600013 0
>>> +
>>> +--------------------------------------------
>>> +30300000
>>> +30300000 1 30300001
>>> +30300001 1 30300000
>>> +
>>> +--------------------------------------------
>>> +11100000
>>> +11100000 1 11100000
>>> +
>>> +--------------------------------------------
>>> +39300000
>>> +39300000 1 39300001
>>> +39300001 1 39300002
>>> +39300002 2 39300001 39300003
>>> +39300003 1 39300004
>>> +39300004 1 39300005
>>> +39300005 2 39300003 39300006
>>> +39300006 2 39300004 39300007
>>> +39300007 1 39300008
>>> +39300008 1 39300009
>>> +39300009 1 39300010
>>> +39300010 1 39300011
>>> +39300011 2 39300008 39300012
>>> +39300012 1 39300013
>>> +39300013 1 39300014
>>> +39300014 0
>>> +
>>> +--------------------------------------------
>>> +28800000
>>> +28800000 1 28800001
>>> +28800001 0
>>> +
>>> +--------------------------------------------
>>> +33400000
>>> +33400000 2 33400008 33400001
>>> +33400001 1 33400002
>>> +33400002 1 33400003
>>> +33400003 2 33400008 33400004
>>> +33400004 1 33400005
>>> +33400005 2 33400003 33400006
>>> +33400006 1 33400007
>>> +33400007 1 33400008
>>> +33400008 0
>>> +
>>> +--------------------------------------------
>>> +3100000
>>> +3100000 2 3100001 34600000
>>> +3100001 2 3100000 3100002
>>> +3100002 1 3100000
>>> +
>>> +--------------------------------------------
>>> +38000000
>>> +38000000 1 38000001
>>> +38000001 1 38000002
>>> +38000002 1 38000003
>>> +38000003 1 38000004
>>> +38000004 1 38000005
>>> +38000005 1 38000006
>>> +38000006 1 38000007
>>> +38000007 1 38000003
>>> +
>>> +--------------------------------------------
>>> +7700000
>>> +7700000 2 7700000 7700001
>>> +7700001 1 7700002
>>> +7700002 2 7700000 7700003
>>> +7700003 0
>>> +
>>> +--------------------------------------------
>>> +42600000
>>> +42600000 2 42600008 42600001
>>> +42600001 1 42600002
>>> +42600002 2 42600000 42600003
>>> +42600003 1 42600004
>>> +42600004 1 42600005
>>> +42600005 2 42600001 42600006
>>> +42600006 2 42600005 42600007
>>> +42600007 1 42600008
>>> +42600008 2 42600000 42600009
>>> +42600009 1 42600009
>>> +
>>> +--------------------------------------------
>>> +12300000
>>> +12300000 0
>>> +
>>> +--------------------------------------------
>>> +47200000
>>> +47200000 2 47200000 47200001
>>> +47200001 1 47200002
>>> +47200002 1 47200003
>>> +47200003 1 47200004
>>> +47200004 2 47200000 47200005
>>> +47200005 1 47200006
>>> +47200006 1 47200007
>>> +47200007 2 47200008 47200000
>>> +47200008 0
>>> +
>>> +--------------------------------------------
>>> +23000000
>>> +23000000 2 23000000 23000001
>>> +23000001 2 23000001 23000002
>>> +23000002 2 23000001 23000003
>>> +23000003 1 23000004
>>> +23000004 2 23000000 23000005
>>> +23000005 0
>>> +
>>> +--------------------------------------------
>>> +43300000
>>> +43300000 1 43300001
>>> +43300001 1 43300001
>>> +
>>> +--------------------------------------------
>>> +16900000
>>> +16900000 1 16900001
>>> +16900001 1 16900002
>>> +16900002 2 16900001 16900003
>>> +16900003 1 16900004
>>> +16900004 2 16900003 16900005
>>> +16900005 1 16900006
>>> +16900006 2 16900004 16900007
>>> +16900007 1 16900003
>>> +
>>> +--------------------------------------------
>>> +27400000
>>> +27400000 2 27400000 27400001
>>> +27400001 1 27400002
>>> +27400002 0
>>> +
>>> +--------------------------------------------
>>> +17800000
>>> +17800000 1 17800000
>>> +
>>> +--------------------------------------------
>>> +8200000
>>> +8200000 1 8200001
>>> +8200001 1 8200002
>>> +8200002 1 8200003
>>> +8200003 1 8200003
>>> +
>>> +--------------------------------------------
>>> +21500000
>>> +21500000 0
>>> +
>>> +--------------------------------------------
>>> +26100000
>>> +26100000 1 26100001
>>> +26100001 1 26100002
>>> +26100002 2 26100000 26100003
>>> +26100003 1 26100004
>>> +26100004 1 26100005
>>> +26100005 1 26100006
>>> +26100006 1 26100007
>>> +26100007 1 26100008
>>> +26100008 1 26100009
>>> +26100009 1 26100010
>>> +26100010 1 26100005
>>> +
>>> +--------------------------------------------
>>> +30700000
>>> +30700000 2 30700000 30700001
>>> +30700001 2 30700000 30700002
>>> +30700002 1 30700003
>>> +30700003 1 30700004
>>> +30700004 2 30700000 30700005
>>> +30700005 1 30700006
>>> +30700006 1 30700003
>>> +
>>> +--------------------------------------------
>>> +400000
>>> +400000 1 400001
>>> +400001 2 400000 400002
>>> +400002 1 400003
>>> +400003 1 400004
>>> +400004 0
>>> +
>>> +--------------------------------------------
>>> +35300000
>>> +35300000 1 35300001
>>> +35300001 1 35300002
>>> +35300002 1 35300000
>>> +
>>> +--------------------------------------------
>>> +38700000
>>> +38700000 1 38700001
>>> +38700001 2 38700001 38700002
>>> +38700002 2 38700003 38700004
>>> +38700003 1 38700004
>>> +38700004 1 38700005
>>> +38700005 0
>>> +
>>> +--------------------------------------------
>>> +39900000
>>> +39900000 2 39900000 39900001
>>> +39900001 1 39900002
>>> +39900002 1 39900003
>>> +39900003 2 39900004 39900007
>>> +39900004 1 39900005
>>> +39900005 1 39900006
>>> +39900006 1 39900007
>>> +39900007 2 39900008 39900006
>>> +39900008 1 39900008
>>> +
>>> +--------------------------------------------
>>> +9600000
>>> +9600000 0
>>> +
>>> +--------------------------------------------
>>> +44500000
>>> +44500000 1 44500001
>>> +44500001 1 44500002
>>> +44500002 1 44500003
>>> +44500003 2 44500003 44500004
>>> +44500004 1 44500005
>>> +44500005 1 44500006
>>> +44500006 1 44500007
>>> +44500007 2 44500008 44500011
>>> +44500008 1 44500009
>>> +44500009 1 44500010
>>> +44500010 1 44500011
>>> +44500011 1 44500012
>>> +44500012 1 44500002
>>> +
>>> +--------------------------------------------
>>> +14200000
>>> +14200000 2 14200000 14200001
>>> +14200001 1 14200002
>>> +14200002 2 14200001 14200003
>>> +14200003 1 14200004
>>> +14200004 1 14200005
>>> +14200005 2 14200005 14200006
>>> +14200006 1 14200007
>>> +14200007 0
>>> +
>>> +--------------------------------------------
>>> +49100000
>>> +49100000 1 49100001
>>> +49100001 1 49100002
>>> +49100002 2 49100000 49100003
>>> +49100003 1 49100004
>>> +49100004 2 49100001 49100005
>>> +49100005 1 49100003
>>> +
>>> +--------------------------------------------
>>> +18800000
>>> +18800000 1 18800000
>>> +
>>> +--------------------------------------------
>>> +23400000
>>> +23400000 1 23400001
>>> +23400001 1 23400002
>>> +23400002 0
>>> +
>>> +--------------------------------------------
>>> +28000000
>>> +28000000 2 28000001 28000002
>>> +28000001 2 28000000 28000002
>>> +28000002 1 28000000
>>> +
>>> +--------------------------------------------
>>> +22400000
>>> +22400000 2 22400000 22400001
>>> +22400001 1 22400000
>>> +
>>> +--------------------------------------------
>>> +27200000
>>> +27200000 2 27200000 27200001
>>> +27200001 0
>>> +
>>> +--------------------------------------------
>>> +32600000
>>> +32600000 2 32600000 32600001
>>> +32600001 2 32600002 32600003
>>> +32600002 1 32600003
>>> +32600003 2 32600003 32600004
>>> +32600004 1 32600005
>>> +32600005 1 32600002
>>> +
>>> +--------------------------------------------
>>> +31700000
>>> +31700000 0
>>> +
>>> +--------------------------------------------
>>> +4200000
>>> +4200000 2 4200000 4200001
>>> +4200001 1 4200000
>>> +
>>> +--------------------------------------------
>>> +8800000
>>> +8800000 1 8800001
>>> +8800001 2 8800002 8800005
>>> +8800002 2 8800002 8800003
>>> +8800003 1 8800004
>>> +8800004 2 8800002 8800005
>>> +8800005 1 8800002
>>> +
>>> +--------------------------------------------
>>> +9000000
>>> +9000000 1 7000000
>>> +
>>> +--------------------------------------------
>>> +1500000
>>> +1500000 1 1500001
>>> +1500001 1 1500002
>>> +1500002 1 1500003
>>> +1500003 1 1500004
>>> +1500004 0
>>> +
>>> +--------------------------------------------
>>> +13400000
>>> +13400000 1 13400001
>>> +13400001 1 13400001
>>> +
>>> +--------------------------------------------
>>> +43900000
>>> +43900000 1 43900001
>>> +43900001 2 43900001 43900002
>>> +43900002 1 43900003
>>> +43900003 1 43900004
>>> +43900004 1 43900005
>>> +43900005 2 43900006 43900007
>>> +43900006 1 43900007
>>> +43900007 1 43900008
>>> +43900008 2 43900009 43900007
>>> +43900009 1 43900010
>>> +43900010 1 43900011
>>> +43900011 1 43900012
>>> +43900012 2 43900013 43900007
>>> +43900013 2 43900009 43900014
>>> +43900014 2 43900012 43900015
>>> +43900015 1 43900016
>>> +43900016 1 43900017
>>> +43900017 2 43900018 43900013
>>> +43900018 2 43900019 43900007
>>> +43900019 1 43900020
>>> +43900020 0
>>> +
>>> +--------------------------------------------
>>> +6100000
>>> +6100000 2 6100000 6100001
>>> +6100001 1 6100002
>>> +6100002 2 6100001 6100003
>>> +6100003 2 6100009 6100004
>>> +6100004 2 6100001 6100005
>>> +6100005 2 6100010 6100006
>>> +6100006 2 6100005 6100007
>>> +6100007 1 6100008
>>> +6100008 1 6100009
>>> +6100009 1 6100010
>>> +6100010 1 6100002
>>> +
>>> +--------------------------------------------
>>> +41000000
>>> +41000000 2 41000001 41000011
>>> +41000001 1 41000002
>>> +41000002 1 41000003
>>> +41000003 1 41000004
>>> +41000004 2 41000004 41000005
>>> +41000005 2 41000006 41000007
>>> +41000006 1 41000007
>>> +41000007 1 41000008
>>> +41000008 1 41000009
>>> +41000009 1 41000010
>>> +41000010 2 41000008 41000011
>>> +41000011 0
>>> +
>>> +--------------------------------------------
>>> +15300000
>>> +15300000 2 15300000 15300001
>>> +15300001 1 15300002
>>> +15300002 1 15300003
>>> +15300003 2 15300004 15300006
>>> +15300004 1 15300005
>>> +15300005 2 15300005 15300006
>>> +15300006 2 15300002 15300007
>>> +15300007 0
>>> +
>>> +--------------------------------------------
>>> +19900000
>>> +19900000 2 19900000 19900001
>>> +19900001 1 19900000
>>> +
>>> +--------------------------------------------
>>> +24500000
>>> +24500000 0
>>> +
>>> +--------------------------------------------
>>> +27600000
>>> +27600000 1 27600000
>>> +
>>> +--------------------------------------------
>>> +17400000
>>> +17400000 1 17400001
>>> +17400001 1 17400001
>>> +
>>> +--------------------------------------------
>>> +29100000
>>> +29100000 1 29100000
>>> +
>>> +--------------------------------------------
>>> +33700000
>>> +33700000 1 33700001
>>> +33700001 0
>>> +
>>> +--------------------------------------------
>>> +3400000
>>> +3400000 1 3400001
>>> +3400001 1 3400002
>>> +3400002 1 3400003
>>> +3400003 2 3400003 3400004
>>> +3400004 1 3400005
>>> +3400005 0
>>> +
>>> +--------------------------------------------
>>> +38300000
>>> +38300000 0
>>> +
>>> +--------------------------------------------
>>> +8000000
>>> +8000000 1 8000000
>>> +
>>> +--------------------------------------------
>>> +42900000
>>> +42900000 1 42900001
>>> +42900001 1 42900002
>>> +42900002 1 42900003
>>> +42900003 1 42900004
>>> +42900004 2 42900002 42900005
>>> +42900005 0
>>> +
>>> +--------------------------------------------
>>> +47500000
>>> +47500000 1 47500001
>>> +47500001 0
>>> +
>>> +--------------------------------------------
>>> +11300000
>>> +11300000 2 11300001 11300004
>>> +11300001 1 11300002
>>> +11300002 2 11300003 11300004
>>> +11300003 1 11300004
>>> +11300004 1 11300005
>>> +11300005 1 11300006
>>> +11300006 2 11300003 11300007
>>> +11300007 2 11300008 11300000
>>> +11300008 0
>>> +
>>> +--------------------------------------------
>>> +17200000
>>> +17200000 1 17200001
>>> +17200001 1 17200000
>>> +
>>> +--------------------------------------------
>>> +21800000
>>> +21800000 2 21800000 21800001
>>> +21800001 1 1300000
>>> +
>>> +--------------------------------------------
>>> +26400000
>>> +26400000 1 26400001
>>> +26400001 1 26400002
>>> +26400002 1 26400003
>>> +26400003 2 26400000 26400004
>>> +26400004 1 26400005
>>> +26400005 1 26400006
>>> +26400006 1 26400002
>>> +
>>> +--------------------------------------------
>>> +700000
>>> +700000 2 700001 700004
>>> +700001 1 700002
>>> +700002 1 700003
>>> +700003 2 700001 700004
>>> +700004 1 700005
>>> +700005 2 700001 700006
>>> +700006 1 700007
>>> +700007 0
>>> +
>>> +--------------------------------------------
>>> +35600000
>>> +35600000 1 35600001
>>> +35600001 1 35600002
>>> +35600002 1 35600003
>>> +35600003 1 35600002
>>> +
>>> +--------------------------------------------
>>> +5300000
>>> +5300000 1 5300001
>>> +5300001 1 5300001
>>> +
>>> +--------------------------------------------
>>> +27000000
>>> +27000000 2 27000001 27000005
>>> +27000001 1 27000002
>>> +27000002 1 27000003
>>> +27000003 2 27000002 27000004
>>> +27000004 2 27000002 27000005
>>> +27000005 1 27000001
>>> +
>>> +--------------------------------------------
>>> +10900000
>>> +10900000 1 10900000
>>> +
>>> +--------------------------------------------
>>> +44800000
>>> +44800000 1 44800000
>>> +
>>> +--------------------------------------------
>>> +14500000
>>> +14500000 1 14500001
>>> +14500001 1 14500002
>>> +14500002 0
>>> +
>>> +--------------------------------------------
>>> +49400000
>>> +49400000 0
>>> +
>>> +--------------------------------------------
>>> +19100000
>>> +19100000 1 19100001
>>> +19100001 1 19100002
>>> +19100002 1 19100003
>>> +19100003 1 19100003
>>> +
>>> +--------------------------------------------
>>> +23700000
>>> +23700000 1 23700001
>>> +23700001 1 23700002
>>> +23700002 0
>>> +
>>> +--------------------------------------------
>>> +28300000
>>> +28300000 1 28300001
>>> +28300001 1 28300002
>>> +28300002 2 28300001 28300003
>>> +28300003 1 28300004
>>> +28300004 1 28300005
>>> +28300005 2 28300005 28300006
>>> +28300006 1 28300007
>>> +28300007 1 28300008
>>> +28300008 2 28300000 28300009
>>> +28300009 1 28300010
>>> +28300010 1 28300011
>>> +28300011 1 28300012
>>> +28300012 2 28300013 28300006
>>> +28300013 0
>>> +
>>> +--------------------------------------------
>>> +29900000
>>> +29900000 1 29900001
>>> +29900001 1 29900002
>>> +29900002 0
>>> +
>>> +--------------------------------------------
>>> +32900000
>>> +32900000 2 32900001 32900002
>>> +32900001 2 32900000 32900002
>>> +32900002 0
>>> +
>>> +--------------------------------------------
>>> +2600000
>>> +2600000 0
>>> +
>>> +--------------------------------------------
>>> +37500000
>>> +37500000 1 37500001
>>> +37500001 1 37500002
>>> +37500002 2 37500000 37500003
>>> +37500003 2 37500001 37500004
>>> +37500004 1 37500005
>>> +37500005 1 37500006
>>> +37500006 1 37500007
>>> +37500007 2 37500008 37500006
>>> +37500008 1 37500009
>>> +37500009 0
>>> +
>>> +--------------------------------------------
>>> +7200000
>>> +7200000 1 7200001
>>> +7200001 1 7200002
>>> +7200002 2 7200002 7200003
>>> +7200003 1 7200004
>>> +7200004 2 7200003 7200005
>>> +7200005 1 7200006
>>> +7200006 2 7200001 7200007
>>> +7200007 2 7200008 7200006
>>> +7200008 1 7200009
>>> +7200009 2 7200010 7200006
>>> +7200010 2 7200011 7200004
>>> +7200011 2 7200009 7200012
>>> +7200012 2 7200009 7200013
>>> +7200013 2 7200003 7200014
>>> +7200014 1 7200015
>>> +7200015 1 7200016
>>> +7200016 1 7200017
>>> +7200017 2 7200017 7200018
>>> +7200018 2 7200019 7200006
>>> +7200019 2 7200003 7200020
>>> +7200020 1 7200021
>>> +7200021 2 7200008 7200022
>>> +7200022 0
>>> +
>>> +--------------------------------------------
>>> +42100000
>>> +42100000 2 42100001 42100004
>>> +42100001 1 42100002
>>> +42100002 1 42100003
>>> +42100003 1 42100004
>>> +42100004 0
>>> +
>>> +--------------------------------------------
>>> +11800000
>>> +11800000 2 11800000 11800001
>>> +11800001 1 11800002
>>> +11800002 1 11800003
>>> +11800003 2 11800004 11800006
>>> +11800004 1 11800005
>>> +11800005 1 11800006
>>> +11800006 1 11800007
>>> +11800007 2 11800008 11800002
>>> +11800008 0
>>> +
>>> +--------------------------------------------
>>> +46700000
>>> +46700000 1 46700001
>>> +46700001 2 46700000 46700002
>>> +46700002 1 46700003
>>> +46700003 2 46700003 46700004
>>> +46700004 1 46700005
>>> +46700005 1 46700003
>>> +
>>> +--------------------------------------------
>>> +16400000
>>> +16400000 1 16400000
>>> +
>>> +--------------------------------------------
>>> +13600000
>>> +13600000 2 13600008 13600001
>>> +13600001 2 13600001 13600002
>>> +13600002 2 13600002 13600003
>>> +13600003 1 13600004
>>> +13600004 2 13600004 13600005
>>> +13600005 2 13600004 13600006
>>> +13600006 1 13600007
>>> +13600007 1 13600008
>>> +13600008 2 13600009 13600002
>>> +13600009 2 13600010 13600004
>>> +13600010 1 13600011
>>> +13600011 1 13600003
>>> +
>>> +--------------------------------------------
>>> +36400000
>>> +36400000 2 36400001 36400003
>>> +36400001 1 36400002
>>> +36400002 2 36400002 36400003
>>> +36400003 1 36400004
>>> +36400004 1 36400005
>>> +36400005 1 36400006
>>> +36400006 1 36400007
>>> +36400007 1 36400008
>>> +36400008 1 36400001
>>> +
>>> +--------------------------------------------
>>> +25600000
>>> +25600000 2 25600001 25600002
>>> +25600001 1 25600002
>>> +25600002 2 25600001 25600003
>>> +25600003 1 25600004
>>> +25600004 0
>>> +
>>> +--------------------------------------------
>>> +30200000
>>> +30200000 1 30200001
>>> +30200001 1 30200002
>>> +30200002 2 30200002 30200003
>>> +30200003 1 30200004
>>> +30200004 1 30200005
>>> +30200005 2 30200003 30200006
>>> +30200006 1 30200007
>>> +30200007 1 30200008
>>> +30200008 2 30200009 30200005
>>> +30200009 2 30200001 30200010
>>> +30200010 2 30200010 30200011
>>> +30200011 1 30200005
>>> +
>>> +--------------------------------------------
>>> +34800000
>>> +34800000 1 34800001
>>> +34800001 1 34800002
>>> +34800002 1 34800000
>>> +
>>> +--------------------------------------------
>>> +4500000
>>> +4500000 1 4500001
>>> +4500001 0
>>> +
>>> +--------------------------------------------
>>> +39400000
>>> +39400000 0
>>> +
>>> +--------------------------------------------
>>> +44000000
>>> +44000000 1 44000001
>>> +44000001 2 44000001 44000002
>>> +44000002 1 44000002
>>> +
>>> +--------------------------------------------
>>> +48500000
>>> +48500000 2 48500000 48500001
>>> +48500001 1 48500002
>>> +48500002 0
>>> +
>>> +--------------------------------------------
>>> +13700000
>>> +13700000 1 13700001
>>> +13700001 0
>>> +
>>> +--------------------------------------------
>>> +48600000
>>> +48600000 1 48600001
>>> +48600001 1 48600002
>>> +48600002 1 48600003
>>> +48600003 0
>>> +
>>> +--------------------------------------------
>>> +18300000
>>> +18300000 1 18300001
>>> +18300001 1 18300002
>>> +18300002 1 18300003
>>> +18300003 1 18300003
>>> +
>>> +--------------------------------------------
>>> +22900000
>>> +22900000 2 22900000 22900001
>>> +22900001 2 22900001 22900002
>>> +22900002 1 22900002
>>> +
>>> +--------------------------------------------
>>> +27500000
>>> +27500000 2 27500000 27500001
>>> +27500001 0
>>> +
>>> +--------------------------------------------
>>> +32100000
>>> +32100000 1 32100001
>>> +32100001 1 32100002
>>> +32100002 2 32100002 32100003
>>> +32100003 2 32100001 32100004
>>> +32100004 1 32100005
>>> +32100005 2 32100003 32100006
>>> +32100006 1 32100007
>>> +32100007 2 32100008 32100002
>>> +32100008 2 32100008 32100009
>>> +32100009 1 32100010
>>> +32100010 0
>>> +
>>> +--------------------------------------------
>>> +32200000
>>> +32200000 2 32200000 32200001
>>> +32200001 1 32200002
>>> +32200002 1 32200003
>>> +32200003 0
>>> +
>>> +--------------------------------------------
>>> +10700000
>>> +10700000 2 10700000 10700001
>>> +10700001 2 10700001 10700002
>>> +10700002 2 10700003 10700004
>>> +10700003 1 10700004
>>> +10700004 1 10700005
>>> +10700005 1 10700006
>>> +10700006 2 10700001 10700007
>>> +10700007 2 10700008 10700003
>>> +10700008 2 10700009 10700005
>>> +10700009 1 10700010
>>> +10700010 1 10700011
>>> +10700011 0
>>> +
>>> +--------------------------------------------
>>> +6400000
>>> +6400000 1 6400001
>>> +6400001 1 6400002
>>> +6400002 2 6400003 6400006
>>> +6400003 2 6400004 6400007
>>> +6400004 1 6400005
>>> +6400005 1 6400006
>>> +6400006 1 6400007
>>> +6400007 0
>>> +
>>> +--------------------------------------------
>>> +41300000
>>> +41300000 1 41300001
>>> +41300001 1 41300002
>>> +41300002 1 41300002
>>> +
>>> +--------------------------------------------
>>> +11000000
>>> +11000000 2 11000000 11000001
>>> +11000001 2 11000000 11000002
>>> +11000002 2 11000002 11000003
>>> +11000003 0
>>> +
>>> +--------------------------------------------
>>> +45900000
>>> +45900000 1 45900001
>>> +45900001 1 45900002
>>> +45900002 1 45900001
>>> +
>>> +--------------------------------------------
>>> +15600000
>>> +15600000 1 15600001
>>> +15600001 0
>>> +
>>> +--------------------------------------------
>>> +20200000
>>> +20200000 2 20200001 31600000
>>> +20200001 0
>>> +
>>> +--------------------------------------------
>>> +24800000
>>> +24800000 1 24800001
>>> +24800001 0
>>> +
>>> +--------------------------------------------
>>> +15900000
>>> +15900000 2 15900000 15900001
>>> +15900001 0
>>> +
>>> +--------------------------------------------
>>> +29400000
>>> +29400064 2 29400065 29400001
>>> +29400065 2 29400066 29400019
>>> +29400066 2 29400067 29400051
>>> +29400067 2 29400068 29400063
>>> +29400068 2 29400069 10000000
>>> +29400069 2 29400070 1500000
>>> +29400070 2 29400071 46000000
>>> +29400071 2 29400072 29400036
>>> +29400072 2 29400073 43700000
>>> +29400073 2 29400074 35000000
>>> +29400074 2 29400075 29400011
>>> +29400075 2 29400035 29400076
>>> +29400076 2 29400077 27300000
>>> +29400077 2 29400078 41700000
>>> +29400078 1 29400079
>>> +29400079 2 29400080 36800000
>>> +29400080 2 29400081 13500000
>>> +29400081 2 29400082 29400141
>>> +29400082 2 29400083 23000000
>>> +29400083 2 29400065 29400084
>>> +29400084 2 29400085 29400087
>>> +29400085 2 29400086 30500000
>>> +29400086 2 29400087 36200000
>>> +29400087 2 29400088 29400126
>>> +29400088 2 29400089 29400041
>>> +29400089 2 29400090 29400047
>>> +29400090 2 29400091 5400000
>>> +29400091 2 29400107 29400092
>>> +29400092 2 29400093 29400095
>>> +29400093 2 29400025 29400094
>>> +29400094 2 29400000 29400095
>>> +29400095 2 29400096 29400070
>>> +29400096 2 29400097 4900000
>>> +29400097 2 29400098 29400092
>>> +29400098 2 29400099 18400000
>>> +29400099 2 29400073 29400100
>>> +29400100 2 29400101 29400069
>>> +29400101 2 29400032 29400102
>>> +29400102 2 29400103 21600000
>>> +29400103 2 29400104 12600000
>>> +29400104 2 29400104 29400105
>>> +29400105 2 29400106 10700000
>>> +29400106 2 29400107 29400046
>>> +29400107 2 29400001 29400108
>>> +29400108 2 29400109 37100000
>>> +29400109 2 29400057 29400110
>>> +29400110 2 29400111 34200000
>>> +29400111 2 29400112 46700000
>>> +29400112 2 29400113 10500000
>>> +29400113 2 29400114 15100000
>>> +29400114 2 29400115 30200000
>>> +29400115 2 29400116 29400030
>>> +29400116 2 29400117 31500000
>>> +29400117 2 29400016 29400118
>>> +29400118 2 29400061 29400119
>>> +29400119 2 29400120 37500000
>>> +29400120 2 29400121 29400098
>>> +29400121 2 29400122 40800000
>>> +29400122 2 29400123 24000000
>>> +29400123 2 29400112 29400124
>>> +29400124 2 29400125 29400086
>>> +29400125 2 29400126 46900000
>>> +29400126 2 29400127 9100000
>>> +29400127 2 29400128 28400000
>>> +29400128 2 29400129 4600000
>>> +29400129 2 29400130 29400125
>>> +29400130 2 29400131 600000
>>> +29400131 2 29400132 18800000
>>> +29400132 2 29400133 17000000
>>> +29400133 2 29400134 29400047
>>> +29400134 2 29400135 13200000
>>> +29400135 2 29400136 29100000
>>> +29400136 2 29400137 6200000
>>> +29400137 2 29400138 29400010
>>> +29400138 2 29400139 10400000
>>> +29400139 2 29400056 29400140
>>> +29400140 2 29400027 29400141
>>> +29400141 2 29400142 22300000
>>> +29400142 2 29400032 29400143
>>> +29400143 2 29400144 49800000
>>> +29400144 2 29400145 48400000
>>> +29400145 2 29400146 49300000
>>> +29400146 2 29400139 26600000
>>> +29400000 2 29400001 35900000
>>> +29400001 2 29400002 48500000
>>> +29400002 2 29400003 29400035
>>> +29400003 2 29400003 29400004
>>> +29400004 2 29400005 36300000
>>> +29400005 2 29400123 29400006
>>> +29400006 2 29400007 32400000
>>> +29400007 2 29400008 29400042
>>> +29400008 2 29400009 29400006
>>> +29400009 2 29400010 45900000
>>> +29400010 2 29400010 29400011
>>> +29400011 2 29400012 2100000
>>> +29400012 2 29400013 17100000
>>> +29400013 2 29400130 29400014
>>> +29400014 2 29400113 29400015
>>> +29400015 2 29400016 7800000
>>> +29400016 2 29400017 22700000
>>> +29400017 2 29400018 34100000
>>> +29400018 2 29400019 43600000
>>> +29400019 2 29400020 29400014
>>> +29400020 2 29400021 44400000
>>> +29400021 2 29400022 29400087
>>> +29400022 2 29400132 29400023
>>> +29400023 2 29400024 37300000
>>> +29400024 2 29400025 28300000
>>> +29400025 2 29400026 29400021
>>> +29400026 2 29400027 900000
>>> +29400027 2 29400028 29400006
>>> +29400028 2 29400029 29400071
>>> +29400029 2 29400030 40900000
>>> +29400030 2 29400031 17800000
>>> +29400031 2 29400032 2900000
>>> +29400032 2 29400033 21500000
>>> +29400033 2 29400034 29400011
>>> +29400034 2 29400035 29400007
>>> +29400035 2 29400034 29400036
>>> +29400036 2 29400081 29400037
>>> +29400037 2 29400038 45600000
>>> +29400038 2 29400010 29400039
>>> +29400039 2 29400040 29400020
>>> +29400040 2 29400041 29400028
>>> +29400041 2 29400042 29400004
>>> +29400042 2 29400064 29400043
>>> +29400043 2 29400084 29400044
>>> +29400044 2 29400045 29400085
>>> +29400045 2 29400026 29400046
>>> +29400046 2 29400047 2200000
>>> +29400047 2 29400048 29400006
>>> +29400048 2 29400049 35300000
>>> +29400049 2 29400050 47200000
>>> +29400050 2 29400064 29400051
>>> +29400051 2 29400052 9000000
>>> +29400052 2 29400053 29400005
>>> +29400053 2 29400054 5900000
>>> +29400054 2 29400031 29400055
>>> +29400055 2 29400056 33800000
>>> +29400056 2 29400057 29400132
>>> +29400057 2 29400129 29400058
>>> +29400058 2 29400080 29400059
>>> +29400059 2 29400060 34300000
>>> +29400060 2 29400010 29400061
>>> +29400061 2 29400099 29400062
>>> +29400062 2 29400063 30900000
>>> +29400063 2 29400064 14900000
>>> +
>>> +--------------------------------------------
>>> +34000000
>>> +34000000 0
>>> +
>>> +--------------------------------------------
>>> +3700000
>>> +3700000 1 3700001
>>> +3700001 2 3700002 3700007
>>> +3700002 2 3700002 3700003
>>> +3700003 1 3700004
>>> +3700004 1 3700005
>>> +3700005 1 3700006
>>> +3700006 2 3700003 3700007
>>> +3700007 2 3700008 3700006
>>> +3700008 2 3700009 3700005
>>> +3700009 1 3700009
>>> +
>>> +--------------------------------------------
>>> +38600000
>>> +38600000 2 38600000 38600001
>>> +38600001 1 38600002
>>> +38600002 1 38600003
>>> +38600003 0
>>> +
>>> +--------------------------------------------
>>> +8300000
>>> +8300000 2 8300001 8300004
>>> +8300001 1 8300002
>>> +8300002 1 8300003
>>> +8300003 1 8300004
>>> +8300004 0
>>> +
>>> +--------------------------------------------
>>> +43200000
>>> +43200000 2 43200001 43200002
>>> +43200001 2 43200000 43200002
>>> +43200002 0
>>> +
>>> +--------------------------------------------
>>> +12900000
>>> +12900000 2 12900001 47100000
>>> +12900001 2 12900002 15000000
>>> +12900002 2 12900003 40700000
>>> +12900003 2 12900004 14400000
>>> +12900004 2 12900005 20500000
>>> +12900005 2 12900006 48100000
>>> +12900006 2 12900007 18500000
>>> +12900007 2 12900008 44700000
>>> +12900008 2 12900009 12900002
>>> +12900009 2 12900010 23900000
>>> +12900010 2 12900011 3900000
>>> +12900011 2 12900012 39100000
>>> +12900012 2 12900013 30000000
>>> +12900013 2 12900014 3300000
>>> +12900014 2 12900012 12900015
>>> +12900015 2 12900016 12900003
>>> +12900016 2 12900017 46200000
>>> +12900017 2 12900018 5200000
>>> +12900018 2 12900200 12900019
>>> +12900019 2 12900020 12900005
>>> +12900020 2 12900021 18000000
>>> +12900021 2 12900014 12900022
>>> +12900022 2 12900019 12900023
>>> +12900023 2 12900024 12900228
>>> +12900024 2 12900025 15700000
>>> +12900025 2 12900026 12900003
>>> +12900026 2 12900027 21300000
>>> +12900027 2 12900028 20300000
>>> +12900028 2 12900322 12900029
>>> +12900029 2 12900018 12900030
>>> +12900030 2 12900031 43400000
>>> +12900031 2 12900032 12900190
>>> +12900032 2 12900033 15900000
>>> +12900033 2 12900034 12900018
>>> +12900034 2 12900035 12900246
>>> +12900035 2 12900036 24800000
>>> +12900036 2 12900256 12900037
>>> +12900037 2 12900038 18200000
>>> +12900038 2 12900131 12900039
>>> +12900039 2 12900040 12900039
>>> +12900040 2 12900041 26100000
>>> +12900041 2 12900042 12900027
>>> +12900042 2 12900043 12900275
>>> +12900043 2 12900034 12900044
>>> +12900044 2 12900045 31400000
>>> +12900045 2 12900046 44500000
>>> +12900046 2 12900145 12900047
>>> +12900047 2 12900048 49500000
>>> +12900048 2 12900048 12900049
>>> +12900049 2 12900050 18900000
>>> +12900050 2 12900051 12900045
>>> +12900051 2 12900052 23100000
>>> +12900052 2 12900053 49100000
>>> +12900053 2 12900035 12900054
>>> +12900054 2 12900315 12900055
>>> +12900055 2 12900056 100000
>>> +12900056 2 12900057 12900053
>>> +12900057 2 12900058 6400000
>>> +12900058 2 12900059 12900027
>>> +12900059 2 12900000 12900060
>>> +12900060 2 12900177 12900061
>>> +12900061 2 12900062 12900135
>>> +12900062 2 12900063 9700000
>>> +12900063 2 12900064 12900041
>>> +12900064 2 12900065 45300000
>>> +12900065 2 12900066 12900005
>>> +12900066 2 12900067 11700000
>>> +12900067 2 12900000 12900068
>>> +12900068 2 12900069 21200000
>>> +12900069 2 12900070 16100000
>>> +12900070 2 12900007 12900071
>>> +12900071 2 12900072 20200000
>>> +12900072 2 12900073 21100000
>>> +12900073 2 12900074 12900019
>>> +12900074 2 12900075 12900046
>>> +12900075 2 12900036 12900076
>>> +12900076 2 12900077 12900061
>>> +12900077 2 12900078 26400000
>>> +12900078 2 12900254 12900079
>>> +12900079 2 12900080 12900016
>>> +12900080 2 12900081 12900075
>>> +12900081 2 12900082 12900002
>>> +12900082 2 12900082 12900083
>>> +12900083 2 12900018 12900084
>>> +12900084 2 12900085 33600000
>>> +12900085 2 12900086 16700000
>>> +12900086 2 12900087 26200000
>>> +12900087 2 12900088 12900300
>>> +12900088 2 12900089 3200000
>>> +12900089 2 12900090 22200000
>>> +12900090 2 12900091 7400000
>>> +12900091 2 12900092 400000
>>> +12900092 2 12900093 2400000
>>> +12900093 2 12900094 24600000
>>> +12900094 2 12900095 15600000
>>> +12900095 2 12900096 39300000
>>> +12900096 2 12900097 12900068
>>> +12900097 2 12900098 34000000
>>> +12900098 2 12900217 12900099
>>> +12900099 2 12900100 14300000
>>> +12900100 2 12900101 31900000
>>> +12900101 2 12900102 1200000
>>> +12900102 2 12900103 11300000
>>> +12900103 2 12900104 8400000
>>> +12900104 2 12900105 12900257
>>> +12900105 2 12900106 19700000
>>> +12900106 2 12900107 12900075
>>> +12900107 2 12900267 12900108
>>> +12900108 2 12900109 1800000
>>> +12900109 2 12900004 12900110
>>> +12900110 2 12900245 12900111
>>> +12900111 2 12900112 30100000
>>> +12900112 2 12900000 12900113
>>> +12900113 2 12900114 5700000
>>> +12900114 2 12900115 13400000
>>> +12900115 2 12900116 12900326
>>> +12900116 2 12900088 12900117
>>> +12900117 2 12900118 15800000
>>> +12900118 2 12900233 12900119
>>> +12900119 2 12900120 33100000
>>> +12900120 2 12900121 32100000
>>> +12900121 2 12900122 12900270
>>> +12900122 2 12900123 34600000
>>> +12900123 2 12900124 31300000
>>> +12900124 2 12900125 12900045
>>> +12900125 2 12900118 12900126
>>> +12900126 2 12900076 12900127
>>> +12900127 2 12900128 33500000
>>> +12900128 2 12900129 12900169
>>> +12900129 2 12900130 14000000
>>> +12900130 2 12900131 24400000
>>> +12900131 2 12900060 12900132
>>> +12900132 2 12900133 19100000
>>> +12900133 2 12900134 35600000
>>> +12900134 2 12900135 700000
>>> +12900135 1 12900136
>>> +12900136 2 12900137 19400000
>>> +12900137 2 12900138 42400000
>>> +12900138 2 12900139 43800000
>>> +12900139 2 12900153 12900140
>>> +12900140 2 12900141 12900245
>>> +12900141 2 12900142 12900191
>>> +12900142 2 12900143 35100000
>>> +12900143 2 12900144 48300000
>>> +12900144 2 12900336 12900145
>>> +12900145 2 12900146 27100000
>>> +12900146 2 12900147 12900038
>>> +12900147 2 12900176 12900148
>>> +12900148 2 12900149 27500000
>>> +12900149 2 12900121 12900150
>>> +12900150 2 12900089 12900151
>>> +12900151 2 12900152 12900086
>>> +12900152 2 12900153 12900189
>>> +12900153 2 12900154 36000000
>>> +12900154 2 12900155 36900000
>>> +12900155 2 12900156 12900029
>>> +12900156 2 12900157 41400000
>>> +12900157 2 12900158 41600000
>>> +12900158 2 12900108 12900159
>>> +12900159 2 12900160 12900113
>>> +12900160 2 12900161 17700000
>>> +12900161 2 12900162 16900000
>>> +12900162 2 12900163 12900067
>>> +12900163 2 12900128 12900164
>>> +12900164 2 12900232 12900165
>>> +12900165 2 12900029 12900166
>>> +12900166 2 12900167 25900000
>>> +12900167 2 12900168 12900048
>>> +12900168 2 12900169 2000000
>>> +12900169 2 12900016 12900170
>>> +12900170 2 12900171 21900000
>>> +12900171 2 12900153 12900172
>>> +12900172 2 12900173 33700000
>>> +12900173 2 12900174 42300000
>>> +12900174 2 12900178 12900175
>>> +12900175 2 12900176 12900191
>>> +12900176 2 12900177 12900130
>>> +12900177 2 12900178 12900132
>>> +12900178 2 12900106 12900179
>>> +12900179 2 12900180 29200000
>>> +12900180 2 12900181 35400000
>>> +12900181 2 12900041 12900182
>>> +12900182 2 12900227 12900183
>>> +12900183 2 12900184 12900109
>>> +12900184 2 12900185 12900300
>>> +12900185 2 12900186 9200000
>>> +12900186 2 12900187 12900023
>>> +12900187 2 12900188 26700000
>>> +12900188 2 12900189 30600000
>>> +12900189 2 12900064 12900190
>>> +12900190 2 12900177 12900191
>>> +12900191 2 12900192 35800000
>>> +12900192 2 12900080 12900193
>>> +12900193 2 12900194 17900000
>>> +12900194 2 12900105 12900195
>>> +12900195 2 12900196 12900062
>>> +12900196 2 12900197 12900142
>>> +12900197 2 12900198 41100000
>>> +12900198 2 12900199 13100000
>>> +12900199 2 12900200 12900185
>>> +12900200 2 12900104 12900201
>>> +12900201 2 12900202 27600000
>>> +12900202 2 12900203 38900000
>>> +12900203 2 12900204 36700000
>>> +12900204 2 12900180 12900205
>>> +12900205 2 12900206 12900311
>>> +12900206 2 12900028 12900207
>>> +12900207 2 12900208 12900010
>>> +12900208 2 12900209 12900186
>>> +12900209 2 12900210 31800000
>>> +12900210 2 12900211 26300000
>>> +12900211 2 12900212 29700000
>>> +12900212 2 12900213 11600000
>>> +12900213 2 12900214 300000
>>> +12900214 2 12900215 4400000
>>> +12900215 2 12900216 34800000
>>> +12900216 2 12900217 22000000
>>> +12900217 2 12900218 37200000
>>> +12900218 2 12900219 18300000
>>> +12900219 2 12900220 12900069
>>> +12900220 2 12900221 12900222
>>> +12900221 2 12900222 16600000
>>> +12900222 2 12900223 3700000
>>> +12900223 2 12900224 47600000
>>> +12900224 2 12900225 17200000
>>> +12900225 2 12900226 12900038
>>> +12900226 2 12900227 12900207
>>> +12900227 2 12900228 26500000
>>> +12900228 2 12900229 12500000
>>> +12900229 2 12900162 12900230
>>> +12900230 2 12900231 23400000
>>> +12900231 2 12900232 25800000
>>> +12900232 2 12900233 12900265
>>> +12900233 2 12900032 12900234
>>> +12900234 2 12900235 48900000
>>> +12900235 2 12900236 21700000
>>> +12900236 2 12900155 12900237
>>> +12900237 2 12900012 12900238
>>> +12900238 2 12900239 6800000
>>> +12900239 2 12900240 7300000
>>> +12900240 2 12900241 12900170
>>> +12900241 2 12900242 12900246
>>> +12900242 2 12900243 25600000
>>> +12900243 2 12900099 12900244
>>> +12900244 2 12900050 12900245
>>> +12900245 2 12900068 12900246
>>> +12900246 2 12900247 3500000
>>> +12900247 2 12900248 45700000
>>> +12900248 2 12900249 6700000
>>> +12900249 2 12900250 12900181
>>> +12900250 2 12900251 20800000
>>> +12900251 2 12900252 12900270
>>> +12900252 2 12900120 12900253
>>> +12900253 2 12900254 19200000
>>> +12900254 2 12900255 26000000
>>> +12900255 2 12900256 12900118
>>> +12900256 2 12900257 12900004
>>> +12900257 2 12900258 12900135
>>> +12900258 2 12900154 12900259
>>> +12900259 2 12900260 43000000
>>> +12900260 2 12900096 12900261
>>> +12900261 2 12900010 12900262
>>> +12900262 2 12900263 46400000
>>> +12900263 2 12900264 12900223
>>> +12900264 2 12900265 12900002
>>> +12900265 2 12900266 32000000
>>> +12900266 2 12900267 2800000
>>> +12900267 2 12900114 12900268
>>> +12900268 2 12900269 7500000
>>> +12900269 2 12900156 12900270
>>> +12900270 2 12900005 12900271
>>> +12900271 2 12900272 12900154
>>> +12900272 2 12900273 12900085
>>> +12900273 2 12900274 8900000
>>> +12900274 2 12900275 42500000
>>> +12900275 2 12900050 12900276
>>> +12900276 2 12900277 43500000
>>> +12900277 2 12900098 12900278
>>> +12900278 2 12900217 12900279
>>> +12900279 2 12900280 31700000
>>> +12900280 2 12900281 12900002
>>> +12900281 2 12900282 48700000
>>> +12900282 2 12900146 12900283
>>> +12900283 2 12900284 11000000
>>> +12900284 2 12900128 12900285
>>> +12900285 2 12900286 12900079
>>> +12900286 2 12900152 12900287
>>> +12900287 2 12900288 12900183
>>> +12900288 2 12900289 12900012
>>> +12900289 2 12900290 12900310
>>> +12900290 2 12900291 27200000
>>> +12900291 2 12900292 31600000
>>> +12900292 2 12900293 45400000
>>> +12900293 2 12900118 12900294
>>> +12900294 2 12900307 12900295
>>> +12900295 2 12900296 12900180
>>> +12900296 2 12900297 25100000
>>> +12900297 2 12900298 15300000
>>> +12900298 2 12900299 16200000
>>> +12900299 2 12900300 43100000
>>> +12900300 2 12900301 12900262
>>> +12900301 2 12900302 12900279
>>> +12900302 2 12900239 12900303
>>> +12900303 2 12900304 38800000
>>> +12900304 2 12900305 12900121
>>> +12900305 2 12900306 24700000
>>> +12900306 2 12900307 46800000
>>> +12900307 2 12900009 12900308
>>> +12900308 2 12900309 5800000
>>> +12900309 2 12900310 12900199
>>> +12900310 2 12900311 28900000
>>> +12900311 2 12900312 13300000
>>> +12900312 2 12900313 3400000
>>> +12900313 2 12900314 1300000
>>> +12900314 2 12900315 43200000
>>> +12900315 2 12900051 12900316
>>> +12900316 2 12900317 47300000
>>> +12900317 2 12900224 12900318
>>> +12900318 2 12900014 12900319
>>> +12900319 2 12900320 12900247
>>> +12900320 2 12900321 12900103
>>> +12900321 2 12900322 12900111
>>> +12900322 2 12900323 15500000
>>> +12900323 2 12900324 49900000
>>> +12900324 2 12900156 12900325
>>> +12900325 2 12900065 12900326
>>> +12900326 2 12900327 5300000
>>> +12900327 2 12900328 5000000
>>> +12900328 2 12900329 12900156
>>> +12900329 2 12900330 12900301
>>> +12900330 2 12900331 27900000
>>> +12900331 2 12900332 10600000
>>> +12900332 2 12900333 12900325
>>> +12900333 2 12900334 3600000
>>> +12900334 2 12900080 12900335
>>> +12900335 2 12900336 12900182
>>> +12900336 2 12900337 34400000
>>> +12900337 1 45000000
>>> +
>>> +--------------------------------------------
>>> +47800000
>>> +47800000 1 47800001
>>> +47800001 1 47800002
>>> +47800002 1 47800003
>>> +47800003 1 47800003
>>> +
>>> +--------------------------------------------
>>> +31600000
>>> +31600000 2 31600000 31600001
>>> +31600001 1 31600002
>>> +31600002 1 31600003
>>> +31600003 0
>>> +
>>> +--------------------------------------------
>>> +45800000
>>> +45800000 2 45800001 45800002
>>> +45800001 1 45800002
>>> +45800002 1 45800003
>>> +45800003 2 45800002 45800004
>>> +45800004 1 45800002
>>> +
>>> +--------------------------------------------
>>> +22100000
>>> +22100000 1 22100001
>>> +22100001 1 22100002
>>> +22100002 1 22100003
>>> +22100003 0
>>> +
>>> +--------------------------------------------
>>> +26700000
>>> +26700000 1 26700000
>>> +
>>> +--------------------------------------------
>>> +31300000
>>> +31300000 1 31300001
>>> +31300001 1 31300002
>>> +31300002 2 31300003 31300005
>>> +31300003 2 31300000 31300004
>>> +31300004 1 31300005
>>> +31300005 1 31300006
>>> +31300006 1 31300007
>>> +31300007 2 31300008 31300000
>>> +31300008 1 31300009
>>> +31300009 1 31300010
>>> +31300010 2 31300002 31300011
>>> +31300011 1 31300005
>>> +
>>> +--------------------------------------------
>>> +1000000
>>> +1000000 1 1000001
>>> +1000001 1 1000002
>>> +1000002 1 1000003
>>> +1000003 1 1000004
>>> +1000004 2 1000000 1000005
>>> +1000005 1 1000006
>>> +1000006 2 1000002 1000007
>>> +1000007 1 1000008
>>> +1000008 2 1000009 1000005
>>> +1000009 1 1000006
>>> +
>>> +--------------------------------------------
>>> +35900000
>>> +35900000 1 35900000
>>> +
>>> +--------------------------------------------
>>> +5600000
>>> +5600000 1 5600001
>>> +5600001 2 5600008 5600002
>>> +5600002 1 5600003
>>> +5600003 2 5600002 5600004
>>> +5600004 1 5600005
>>> +5600005 2 5600002 5600006
>>> +5600006 1 5600007
>>> +5600007 1 5600008
>>> +5600008 2 5600009 5600004
>>> +5600009 1 5600010
>>> +5600010 2 5600003 5600011
>>> +5600011 1 5600008
>>> +
>>> +--------------------------------------------
>>> +40500000
>>> +40500000 1 40500001
>>> +40500001 1 40500002
>>> +40500002 1 40500000
>>> +
>>> +--------------------------------------------
>>> +34500000
>>> +34500000 1 8100000
>>> +
>>> +--------------------------------------------
>>> +10200000
>>> +10200000 1 10200001
>>> +10200001 0
>>> +
>>> +--------------------------------------------
>>> +45100000
>>> +45100000 1 45100001
>>> +45100001 1 45100002
>>> +45100002 1 45100003
>>> +45100003 2 45100003 45100004
>>> +45100004 1 45100005
>>> +45100005 1 45100006
>>> +45100006 1 45100001
>>> +
>>> +--------------------------------------------
>>> +14800000
>>> +14800000 1 14800001
>>> +14800001 1 14800002
>>> +14800002 1 14800003
>>> +14800003 2 14800000 14800004
>>> +14800004 2 14800000 14800005
>>> +14800005 1 14800000
>>> +
>>> +--------------------------------------------
>>> +49700000
>>> +49700000 1 49700001
>>> +49700001 1 49700001
>>> +
>>> +--------------------------------------------
>>> +19400000
>>> +19400000 1 19400001
>>> +19400001 1 19400002
>>> +19400002 1 19400003
>>> +19400003 1 19400004
>>> +19400004 0
>>> +
>>> +--------------------------------------------
>>> +24000000
>>> +24000000 1 24000001
>>> +24000001 1 24000002
>>> +24000002 2 24000000 24000003
>>> +24000003 1 24000004
>>> +24000004 1 24000005
>>> +24000005 1 24000006
>>> +24000006 2 24000001 24000007
>>> +24000007 2 24000008 24000010
>>> +24000008 1 24000009
>>> +24000009 1 24000010
>>> +24000010 1 24000008
>>> +
>>> +--------------------------------------------
>>> +28600000
>>> +28600000 2 28600001 28600002
>>> +28600001 2 28600002 28600012
>>> +28600002 1 28600003
>>> +28600003 2 28600004 28600007
>>> +28600004 1 28600005
>>> +28600005 1 28600006
>>> +28600006 1 28600007
>>> +28600007 1 28600008
>>> +28600008 1 28600009
>>> +28600009 1 28600010
>>> +28600010 1 28600011
>>> +28600011 2 28600003 28600012
>>> +28600012 2 28600000 28600013
>>> +28600013 0
>>> +
>>> +--------------------------------------------
>>> +31000000
>>> +31000000 1 31000001
>>> +31000001 2 31000001 31000002
>>> +31000002 2 31000001 31000003
>>> +31000003 1 31000004
>>> +31000004 2 31000003 31000005
>>> +31000005 0
>>> +
>>> +--------------------------------------------
>>> +20100000
>>> +20100000 2 20100000 20100001
>>> +20100001 1 20100002
>>> +20100002 0
>>> +
>>> +--------------------------------------------
>>> +33200000
>>> +33200000 1 33200000
>>> +
>>> +--------------------------------------------
>>> +2900000
>>> +2900000 1 2900001
>>> +2900001 1 2900001
>>> +
>>> +--------------------------------------------
>>> +37800000
>>> +37800000 2 37800000 37800001
>>> +37800001 2 37800000 37800002
>>> +37800002 1 37800003
>>> +37800003 1 37800002
>>> +
>>> +--------------------------------------------
>>> +7500000
>>> +7500000 0
>>> +
>>> +--------------------------------------------
>>> +42400000
>>> +42400000 2 42400000 42400001
>>> +42400001 2 42400000 42400002
>>> +42400002 2 42400000 42400003
>>> +42400003 1 42400004
>>> +42400004 1 42400005
>>> +42400005 1 42400006
>>> +42400006 1 42400007
>>> +42400007 2 42400008 42400006
>>> +42400008 1 42400009
>>> +42400009 2 42400010 42400006
>>> +42400010 1 42400011
>>> +42400011 1 42400012
>>> +42400012 1 42400013
>>> +42400013 1 42400014
>>> +42400014 1 42400004
>>> +
>>> +--------------------------------------------
>>> +12100000
>>> +12100000 1 12100001
>>> +12100001 1 12100001
>>> +
>>> +--------------------------------------------
>>> +47000000
>>> +47000000 1 47000001
>>> +47000001 1 47000002
>>> +47000002 2 47000001 47000003
>>> +47000003 2 47000001 47000004
>>> +47000004 1 47000005
>>> +47000005 0
>>> +
>>> +--------------------------------------------
>>> +16700000
>>> +16700000 1 16700000
>>> +
>>> +--------------------------------------------
>>> +21300000
>>> +21300000 1 21300000
>>> +
>>> +--------------------------------------------
>>> +33900000
>>> +33900000 2 33900001 33900003
>>> +33900001 1 33900002
>>> +33900002 2 33900003 33900007
>>> +33900003 1 33900004
>>> +33900004 1 33900005
>>> +33900005 1 33900006
>>> +33900006 2 33900005 33900007
>>> +33900007 0
>>> +
>>> +--------------------------------------------
>>> +25900000
>>> +25900000 0
>>> +
>>> +--------------------------------------------
>>> +30500000
>>> +30500000 1 30500000
>>> +
>>> +--------------------------------------------
>>> +200000
>>> +200000 0
>>> +
>>> +--------------------------------------------
>>> +35100000
>>> +35100000 1 35100001
>>> +35100001 2 35100001 35100002
>>> +35100002 1 35100003
>>> +35100003 2 35100000 35100004
>>> +35100004 0
>>> +
>>> +--------------------------------------------
>>> +4800000
>>> +4800000 1 4800001
>>> +4800001 0
>>> +
>>> +--------------------------------------------
>>> +39700000
>>> +39700000 2 39700001 39700002
>>> +39700001 2 39700000 39700002
>>> +39700002 2 39700000 39700003
>>> +39700003 1 39700003
>>> +
>>> +--------------------------------------------
>>> +9400000
>>> +9400000 1 9400001
>>> +9400001 1 9400002
>>> +9400002 2 9400002 9400003
>>> +9400003 1 9400004
>>> +9400004 1 9400005
>>> +9400005 0
>>> +
>>> +--------------------------------------------
>>> +44300000
>>> +44300000 1 44300001
>>> +44300001 0
>>> +
>>> +--------------------------------------------
>>> +36800000
>>> +36800000 1 36800001
>>> +36800001 1 36800001
>>> +
>>> +--------------------------------------------
>>> +45600000
>>> +45600000 1 45600001
>>> +45600001 2 45600000 45600002
>>> +45600002 0
>>> +
>>> +--------------------------------------------
>>> +14000000
>>> +14000000 0
>>> +
>>> +--------------------------------------------
>>> +48900000
>>> +48900000 1 48900001
>>> +48900001 1 48900001
>>> +
>>> +--------------------------------------------
>>> +2100000
>>> +2100000 1 2100001
>>> +2100001 1 2100002
>>> +2100002 2 2100002 2100003
>>> +2100003 2 2100002 2100004
>>> +2100004 1 2100005
>>> +2100005 1 2100006
>>> +2100006 1 2100007
>>> +2100007 1 2100008
>>> +2100008 0
>>> +
>>> +--------------------------------------------
>>> +33300000
>>> +33300000 1 33300001
>>> +33300001 1 33300002
>>> +33300002 2 33300001 33300003
>>> +33300003 2 33300000 33300004
>>> +33300004 1 33300005
>>> +33300005 1 33300006
>>> +33300006 0
>>> +
>>> +--------------------------------------------
>>> +6700000
>>> +6700000 2 6700000 6700001
>>> +6700001 1 6700002
>>> +6700002 1 6700001
>>> +
>>> +--------------------------------------------
>>> +41600000
>>> +41600000 0
>>> +
>>> +--------------------------------------------
>>> +46200000
>>> +46200000 2 46200001 46200006
>>> +46200001 1 46200002
>>> +46200002 2 46200003 46200005
>>> +46200003 2 46200004 46200007
>>> +46200004 1 46200005
>>> +46200005 2 46200005 46200006
>>> +46200006 1 46200007
>>> +46200007 1 46200008
>>> +46200008 2 46200009 46200006
>>> +46200009 1 46200001
>>> +
>>> +--------------------------------------------
>>> +20500000
>>> +20500000 1 20500001
>>> +20500001 1 20500000
>>> +
>>> +--------------------------------------------
>>> +25100000
>>> +25100000 1 25100001
>>> +25100001 2 25100002 25100003
>>> +25100002 2 25100000 25100003
>>> +25100003 1 25100004
>>> +25100004 1 25100005
>>> +25100005 1 25100006
>>> +25100006 2 25100006 25100007
>>> +25100007 2 25100008 25100007
>>> +25100008 1 25100009
>>> +25100009 1 25100010
>>> +25100010 1 25100006
>>> +
>>> +--------------------------------------------
>>> +49000000
>>> +49000000 2 49000001 49000003
>>> +49000001 2 49000002 49000004
>>> +49000002 1 49000003
>>> +49000003 2 49000003 49000004
>>> +49000004 1 49000000
>>> +
>>> +--------------------------------------------
>>> +29500000
>>> +29500000 2 29500001 29500012
>>> +29500001 1 29500002
>>> +29500002 2 29500009 29500003
>>> +29500003 1 29500004
>>> +29500004 1 29500005
>>> +29500005 1 29500006
>>> +29500006 1 29500007
>>> +29500007 1 29500008
>>> +29500008 2 29500009 29500007
>>> +29500009 1 29500010
>>> +29500010 1 29500011
>>> +29500011 2 29500002 29500012
>>> +29500012 0
>>> +
>>> +--------------------------------------------
>>> +29700000
>>> +29700000 0
>>> +
>>> +--------------------------------------------
>>> +36700000
>>> +36700000 1 36700001
>>> +36700001 2 36700000 36700002
>>> +36700002 1 36700003
>>> +36700003 2 36700001 36700004
>>> +36700004 1 36700005
>>> +36700005 2 36700005 36700006
>>> +36700006 1 36700004
>>> +
>>> +--------------------------------------------
>>> +17500000
>>> +17500000 1 17500000
>>> +
>>> +--------------------------------------------
>>> +34300000
>>> +34300000 1 34300000
>>> +
>>> +--------------------------------------------
>>> +4000000
>>> +4000000 1 4000000
>>> +
>>> +--------------------------------------------
>>> +38900000
>>> +38900000 2 38900000 38900001
>>> +38900001 1 38900002
>>> +38900002 1 38900001
>>> +
>>> +--------------------------------------------
>>> +43500000
>>> +43500000 1 43500001
>>> +43500001 1 43500002
>>> +43500002 2 43500000 43500003
>>> +43500003 2 43500001 43500004
>>> +43500004 2 43500002 43500005
>>> +43500005 1 43500003
>>> +
>>> +--------------------------------------------
>>> +13200000
>>> +13200000 1 13200001
>>> +13200001 1 13200002
>>> +13200002 1 13200003
>>> +13200003 2 13200000 13200004
>>> +13200004 0
>>> +
>>> +--------------------------------------------
>>> +48100000
>>> +48100000 1 48100001
>>> +48100001 1 48100001
>>> +
>>> +--------------------------------------------
>>> +39100000
>>> +39100000 1 39100001
>>> +39100001 2 39100000 39100002
>>> +39100002 2 39100001 39100003
>>> +39100003 0
>>> +
>>> +--------------------------------------------
>>> +43400000
>>> +43400000 2 43400001 43400005
>>> +43400001 1 43400002
>>> +43400002 1 43400003
>>> +43400003 2 43400004 43400006
>>> +43400004 2 43400002 43400005
>>> +43400005 2 43400003 43400006
>>> +43400006 1 43400003
>>> +
>>> +--------------------------------------------
>>> +33800000
>>> +33800000 1 33800000
>>> +
>>> +--------------------------------------------
>>> +24200000
>>> +24200000 2 24200008 24200001
>>> +24200001 1 24200002
>>> +24200002 2 24200002 24200003
>>> +24200003 2 24200008 24200004
>>> +24200004 2 24200001 24200005
>>> +24200005 2 24200004 24200006
>>> +24200006 2 24200008 24200007
>>> +24200007 1 24200008
>>> +24200008 0
>>> +
>>> +--------------------------------------------
>>> +14600000
>>> +14600000 1 14600001
>>> +14600001 2 14600000 14600002
>>> +14600002 2 14600002 14600003
>>> +14600003 1 14600004
>>> +14600004 1 14600005
>>> +14600005 2 14600001 14600006
>>> +14600006 1 14600007
>>> +14600007 2 14600008 14600005
>>> +14600008 1 14600009
>>> +14600009 0
>>> +
>>> +--------------------------------------------
>>> +1300000
>>> +1300000 2 1300000 1300001
>>> +1300001 1 1300000
>>> +
>>> +--------------------------------------------
>>> +36200000
>>> +36200000 1 36200001
>>> +36200001 1 36200001
>>> +
>>> +--------------------------------------------
>>> +40800000
>>> +40800000 2 40800001 40800002
>>> +40800001 1 40800002
>>> +40800002 2 40800001 40800003
>>> +40800003 2 40800003 40800004
>>> +40800004 1 40800005
>>> +40800005 1 40800002
>>> +
>>> +--------------------------------------------
>>> +3600000
>>> +3600000 2 3600001 3600002
>>> +3600001 1 3600002
>>> +3600002 2 3600001 3600003
>>> +3600003 0
>>> +
>>> +--------------------------------------------
>>> +3800000
>>> +3800000 1 3800001
>>> +3800001 1 3800002
>>> +3800002 1 3800003
>>> +3800003 1 3800004
>>> +3800004 1 3800005
>>> +3800005 1 3800006
>>> +3800006 2 3800000 3800007
>>> +3800007 1 3800007
>>> +
>>> +--------------------------------------------
>>> +10500000
>>> +10500000 0
>>> +
>>> +--------------------------------------------
>>> +45400000
>>> +45400000 1 45400001
>>> +45400001 2 45400000 45400002
>>> +45400002 1 45400003
>>> +45400003 1 45400004
>>> +45400004 0
>>> +
>>> +--------------------------------------------
>>> +15100000
>>> +15100000 1 15100001
>>> +15100001 2 15100002 15100003
>>> +15100002 2 15100001 15100003
>>> +15100003 1 15100002
>>> +
>>> +--------------------------------------------
>>> +19700000
>>> +19700000 1 19700001
>>> +19700001 1 19700002
>>> +19700002 1 19700003
>>> +19700003 2 19700004 19700007
>>> +19700004 1 19700005
>>> +19700005 1 19700006
>>> +19700006 2 19700002 19700007
>>> +19700007 1 19700008
>>> +19700008 1 19700009
>>> +19700009 1 19700010
>>> +19700010 1 19700011
>>> +19700011 1 19700012
>>> +19700012 1 19700011
>>> +
>>> +--------------------------------------------
>>> +24300000
>>> +24300000 1 24300001
>>> +24300001 1 24300002
>>> +24300002 2 24300000 24300003
>>> +24300003 1 24300004
>>> +24300004 0
>>> +
>>> +--------------------------------------------
>>> +28900000
>>> +28900000 2 28900000 28900001
>>> +28900001 0
>>> +
>>> +--------------------------------------------
>>> +38500000
>>> +38500000 0
>>> +
>>> +--------------------------------------------
>>> +33500000
>>> +33500000 2 33500000 33500001
>>> +33500001 1 33500001
>>> +
>>> +--------------------------------------------
>>> +3200000
>>> +3200000 0
>>> +
>>> +--------------------------------------------
>>> +38100000
>>> +38100000 1 38100001
>>> +38100001 0
>>> +
>>> +--------------------------------------------
>>> +7800000
>>> +7800000 1 7800001
>>> +7800001 2 7800000 7800002
>>> +7800002 2 7800002 7800003
>>> +7800003 1 7800001
>>> +
>>> +--------------------------------------------
>>> +42700000
>>> +42700000 2 42700000 42700001
>>> +42700001 2 42700000 42700002
>>> +42700002 1 42700003
>>> +42700003 1 42700004
>>> +42700004 1 42700005
>>> +42700005 2 42700001 42700006
>>> +42700006 1 42700007
>>> +42700007 1 42700008
>>> +42700008 1 42700009
>>> +42700009 2 42700000 42700010
>>> +42700010 1 42700011
>>> +42700011 1 42700012
>>> +42700012 1 42700002
>>> +
>>> +--------------------------------------------
>>> +12400000
>>> +12400000 2 12400000 12400001
>>> +12400001 2 12400000 26200000
>>> +
>>> +--------------------------------------------
>>> +47300000
>>> +47300000 1 47300001
>>> +47300001 2 47300002 47300007
>>> +47300002 2 47300000 47300003
>>> +47300003 2 47300000 47300004
>>> +47300004 2 47300005 47300006
>>> +47300005 1 47300006
>>> +47300006 2 47300004 47300007
>>> +47300007 2 47300008 47300006
>>> +47300008 1 47300009
>>> +47300009 2 47300000 47300010
>>> +47300010 2 47300011 47300007
>>> +47300011 0
>>> +
>>> +--------------------------------------------
>>> +17000000
>>> +17000000 1 17000001
>>> +17000001 1 17000001
>>> +
>>> +--------------------------------------------
>>> +21600000
>>> +21600000 2 21600001 21600007
>>> +21600001 2 21600002 21600006
>>> +21600002 1 21600003
>>> +21600003 2 21600009 21600004
>>> +21600004 2 21600009 21600005
>>> +21600005 2 21600000 21600006
>>> +21600006 1 21600007
>>> +21600007 1 21600008
>>> +21600008 1 21600009
>>> +21600009 1 21600010
>>> +21600010 2 21600011 21600007
>>> +21600011 1 21600012
>>> +21600012 0
>>> +
>>> +--------------------------------------------
>>> +41400000
>>> +41400000 0
>>> +
>>> +--------------------------------------------
>>> +29300000
>>> +29300000 1 29300000
>>> +
>>> +--------------------------------------------
>>> +26200000
>>> +26200000 2 26200000 26200001
>>> +26200001 0
>>> +
>>> +--------------------------------------------
>>> +30800000
>>> +30800000 0
>>> +
>>> +--------------------------------------------
>>> +500000
>>> +500000 1 500001
>>> +500001 2 500000 500002
>>> +500002 1 500003
>>> +500003 1 500004
>>> +500004 1 500005
>>> +500005 2 500001 500006
>>> +500006 2 500005 500007
>>> +500007 1 500008
>>> +500008 2 500000 500009
>>> +500009 1 500004
>>> +
>>> +--------------------------------------------
>>> +35400000
>>> +35400000 0
>>> +
>>> +--------------------------------------------
>>> +5100000
>>> +5100000 1 5100001
>>> +5100001 0
>>> +
>>> +--------------------------------------------
>>> +40000000
>>> +40000000 0
>>> +
>>> +--------------------------------------------
>>> +9700000
>>> +9700000 1 9700001
>>> +9700001 2 9700001 9700002
>>> +9700002 0
>>> +
>>> +--------------------------------------------
>>> +44600000
>>> +44600000 1 44600001
>>> +44600001 2 44600001 44600002
>>> +44600002 1 44600003
>>> +44600003 2 44600000 44600004
>>> +44600004 1 44600005
>>> +44600005 1 44600004
>>> +
>>> +--------------------------------------------
>>> +5900000
>>> +5900000 1 5900001
>>> +5900001 1 5900002
>>> +5900002 2 5900001 5900003
>>> +5900003 1 5900004
>>> +5900004 1 5900005
>>> +5900005 2 5900001 5900006
>>> +5900006 2 5900009 5900007
>>> +5900007 2 5900008 5900000
>>> +5900008 2 5900009 5900006
>>> +5900009 2 5900009 5900010
>>> +5900010 2 5900011 5900006
>>> +5900011 2 5900012 5900006
>>> +5900012 2 5900009 5900013
>>> +5900013 0
>>> +
>>> +--------------------------------------------
>>> +14300000
>>> +14300000 2 14300001 14300003
>>> +14300001 2 14300001 14300002
>>> +14300002 1 14300003
>>> +14300003 2 14300002 14300004
>>> +14300004 1 14300005
>>> +14300005 1 14300006
>>> +14300006 0
>>> +
>>> +--------------------------------------------
>>> +49200000
>>> +49200000 1 49200001
>>> +49200001 2 49200009 49200002
>>> +49200002 1 49200003
>>> +49200003 1 49200004
>>> +49200004 1 49200005
>>> +49200005 1 49200006
>>> +49200006 2 49200000 49200007
>>> +49200007 1 49200008
>>> +49200008 1 49200009
>>> +49200009 1 49200010
>>> +49200010 0
>>> +
>>> +--------------------------------------------
>>> +18900000
>>> +18900000 1 18900001
>>> +18900001 0
>>> +
>>> +--------------------------------------------
>>> +23500000
>>> +23500000 1 23500001
>>> +23500001 1 23500001
>>> +
>>> +--------------------------------------------
>>> +28100000
>>> +28100000 2 28100000 28100001
>>> +28100001 1 28100001
>>> +
>>> +--------------------------------------------
>>> +32700000
>>> +32700032 2 32700033 21000000
>>> +32700033 2 32700034 48000000
>>> +32700034 1 32700002
>>> +32700000 2 32700001 32700021
>>> +32700001 2 32700002 37700000
>>> +32700002 2 32700003 9400000
>>> +32700003 1 32700004
>>> +32700004 2 32700000 32700005
>>> +32700005 2 32700002 32700006
>>> +32700006 2 32700007 39800000
>>> +32700007 2 32700008 32700033
>>> +32700008 2 32700008 32700009
>>> +32700009 2 32700010 38000000
>>> +32700010 2 32700011 11100000
>>> +32700011 2 32700012 47700000
>>> +32700012 1 32700013
>>> +32700013 2 32700005 32700014
>>> +32700014 2 32700032 32700015
>>> +32700015 1 32700016
>>> +32700016 2 32700017 32700009
>>> +32700017 2 32700018 32700015
>>> +32700018 1 32700019
>>> +32700019 2 32700020 32700021
>>> +32700020 2 32700021 39400000
>>> +32700021 2 32700022 1600000
>>> +32700022 2 32700023 17600000
>>> +32700023 2 32700024 32700019
>>> +32700024 2 32700025 22500000
>>> +32700025 2 32700026 32700013
>>> +32700026 2 32700027 34500000
>>> +32700027 2 32700028 3800000
>>> +32700028 2 32700029 28700000
>>> +32700029 2 32700030 37600000
>>> +32700030 2 32700015 32700031
>>> +32700031 2 32700032 32700000
>>> +
>>> +--------------------------------------------
>>> +2400000
>>> +2400000 2 2400000 2400001
>>> +2400001 2 2400001 2400002
>>> +2400002 1 16400000
>>> +
>>> +--------------------------------------------
>>> +37300000
>>> +37300000 1 37300001
>>> +37300001 1 37300002
>>> +37300002 1 37300003
>>> +37300003 0
>>> +
>>> +--------------------------------------------
>>> +34400000
>>> +34400000 1 34400001
>>> +34400001 1 34400002
>>> +34400002 2 34400000 34400003
>>> +34400003 1 34400004
>>> +34400004 2 34400001 34400005
>>> +34400005 2 34400000 34400006
>>> +34400006 1 34400000
>>> +
>>> +--------------------------------------------
>>> +6800000
>>> +6800000 1 6800001
>>> +6800001 1 6800002
>>> +6800002 1 6800003
>>> +6800003 1 6800004
>>> +6800004 1 6800005
>>> +6800005 1 6800006
>>> +6800006 1 6800007
>>> +6800007 1 6800008
>>> +6800008 2 6800009 6800002
>>> +6800009 1 6800010
>>> +6800010 0
>>> +
>>> +--------------------------------------------
>>> +7000000
>>> +7000000 1 7000001
>>> +7000001 2 7000001 7000002
>>> +7000002 1 7000001
>>> +
>>> +--------------------------------------------
>>> +41900000
>>> +41900000 2 41900000 41900001
>>> +41900001 1 41900000
>>> +
>>> +--------------------------------------------
>>> +11600000
>>> +11600000 2 11600001 11600006
>>> +11600001 1 11600002
>>> +11600002 2 11600001 11600003
>>> +11600003 2 11600002 11600004
>>> +11600004 2 11600004 11600005
>>> +11600005 1 11600006
>>> +11600006 2 11600005 11600007
>>> +11600007 1 11600008
>>> +11600008 1 11600009
>>> +11600009 1 11600010
>>> +11600010 2 11600011 11600003
>>> +11600011 0
>>> +
>>> +--------------------------------------------
>>> +46500000
>>> +46500000 1 46500001
>>> +46500001 1 46500002
>>> +46500002 1 46500003
>>> +46500003 1 46500003
>>> +
>>> +--------------------------------------------
>>> +16200000
>>> +16200000 1 16200001
>>> +16200001 1 16200002
>>> +16200002 1 16200001
>>> +
>>> +--------------------------------------------
>>> +20800000
>>> +20800000 2 20800000 20800001
>>> +20800001 1 20800002
>>> +20800002 2 20800018 20800003
>>> +20800003 1 20800004
>>> +20800004 1 20800005
>>> +20800005 1 20800006
>>> +20800006 1 20800007
>>> +20800007 2 20800008 20800006
>>> +20800008 2 20800016 20800009
>>> +20800009 1 20800010
>>> +20800010 2 20800010 20800011
>>> +20800011 1 20800012
>>> +20800012 1 20800013
>>> +20800013 2 20800006 20800014
>>> +20800014 2 20800000 20800015
>>> +20800015 1 20800016
>>> +20800016 1 20800017
>>> +20800017 1 20800018
>>> +20800018 2 20800019 20800005
>>> +20800019 1 20800020
>>> +20800020 1 20800005
>>> +
>>> +--------------------------------------------
>>> +25400000
>>> +25400000 1 25400001
>>> +25400001 2 25400002 25400004
>>> +25400002 1 25400003
>>> +25400003 2 25400003 25400004
>>> +25400004 2 25400005 25400006
>>> +25400005 1 25400006
>>> +25400006 0
>>> +
>>> +--------------------------------------------
>>> +43700000
>>> +43700000 1 43700001
>>> +43700001 2 43700002 43700006
>>> +43700002 1 43700003
>>> +43700003 1 43700004
>>> +43700004 1 43700005
>>> +43700005 1 43700006
>>> +43700006 1 43700000
>>> +
>>> +--------------------------------------------
>>> +30000000
>>> +30000000 2 30000000 30000001
>>> +30000001 1 30000002
>>> +30000002 1 30000003
>>> +30000003 2 30000000 30000004
>>> +30000004 1 30000005
>>> +30000005 2 30000008 30000006
>>> +30000006 2 30000006 30000007
>>> +30000007 1 30000008
>>> +30000008 1 30000009
>>> +30000009 1 30000010
>>> +30000010 1 30000011
>>> +30000011 1 30000010
>>> +
>>> +--------------------------------------------
>>> +34600000
>>> +34600000 2 34600001 34600014
>>> +34600001 1 34600002
>>> +34600002 1 34600003
>>> +34600003 1 34600004
>>> +34600004 2 34600005 34600007
>>> +34600005 2 34600001 34600006
>>> +34600006 2 34600005 34600007
>>> +34600007 2 34600008 34600011
>>> +34600008 2 34600009 34600013
>>> +34600009 2 34600010 34600007
>>> +34600010 2 34600010 34600011
>>> +34600011 1 34600012
>>> +34600012 2 34600004 34600013
>>> +34600013 1 34600014
>>> +34600014 1 34600015
>>> +34600015 0
>>> +
>>> +--------------------------------------------
>>> +4300000
>>> +4300000 1 4300001
>>> +4300001 2 4300000 4300002
>>> +4300002 0
>>> +
>>> +--------------------------------------------
>>> +39200000
>>> +39200000 1 39200001
>>> +39200001 1 39200002
>>> +39200002 1 39200003
>>> +39200003 1 39200004
>>> +39200004 1 39200005
>>> +39200005 1 39200006
>>> +39200006 1 39200007
>>> +39200007 1 39200008
>>> +39200008 1 39200003
>>> +
>>> +--------------------------------------------
>>> +8900000
>>> +8900000 1 8900001
>>> +8900001 1 8900002
>>> +8900002 2 8900001 8900003
>>> +8900003 2 8900004 8900006
>>> +8900004 2 8900003 8900005
>>> +8900005 1 8900006
>>> +8900006 2 8900002 8900007
>>> +8900007 1 8900006
>>> +
>>> +--------------------------------------------
>>> +43800000
>>> +43800000 0
>>> +
>>> +--------------------------------------------
>>> +13500000
>>> +13500000 2 13500000 13500001
>>> +13500001 2 13500002 13500004
>>> +13500002 2 13500001 13500003
>>> +13500003 2 13500016 13500004
>>> +13500004 2 13500017 13500005
>>> +13500005 1 13500006
>>> +13500006 2 13500004 13500007
>>> +13500007 1 13500008
>>> +13500008 1 13500009
>>> +13500009 2 13500010 13500005
>>> +13500010 1 13500011
>>> +13500011 2 13500002 13500012
>>> +13500012 1 13500013
>>> +13500013 2 13500019 13500014
>>> +13500014 1 13500015
>>> +13500015 1 13500016
>>> +13500016 2 13500017 13500003
>>> +13500017 1 13500018
>>> +13500018 2 13500018 13500019
>>> +13500019 2 13500020 13500022
>>> +13500020 1 13500021
>>> +13500021 2 13500013 13500022
>>> +13500022 1 13500013
>>> +
>>> +--------------------------------------------
>>> +48400000
>>> +48400000 1 48400001
>>> +48400001 2 48400002 48400004
>>> +48400002 1 48400003
>>> +48400003 2 48400002 48400004
>>> +48400004 1 48400001
>>> +
>>> +--------------------------------------------
>>> +18100000
>>> +18100000 0
>>> +
>>> +--------------------------------------------
>>> +46600000
>>> +46600000 2 46600001 46600006
>>> +46600001 1 46600002
>>> +46600002 1 46600003
>>> +46600003 1 46600004
>>> +46600004 1 46600005
>>> +46600005 1 46600006
>>> +46600006 1 46600007
>>> +46600007 2 46600008 46600006
>>> +46600008 1 46600002
>>> +
>>> +--------------------------------------------
>>> +9900000
>>> +9900000 2 9900000 9900001
>>> +9900001 1 9900002
>>> +9900002 2 9900009 9900003
>>> +9900003 1 9900004
>>> +9900004 2 9900009 9900005
>>> +9900005 2 9900003 9900006
>>> +9900006 1 9900007
>>> +9900007 1 9900008
>>> +9900008 1 9900009
>>> +9900009 2 9900010 9900004
>>> +9900010 1 9900010
>>> +
>>> +--------------------------------------------
>>> +22700000
>>> +22700000 1 22700000
>>> +
>>> +--------------------------------------------
>>> +27300000
>>> +27300000 1 27300001
>>> +27300001 2 27300002 27300004
>>> +27300002 2 27300003 27300007
>>> +27300003 2 27300003 27300004
>>> +27300004 1 27300005
>>> +27300005 1 27300006
>>> +27300006 2 27300000 27300007
>>> +27300007 2 27300008 27300004
>>> +27300008 0
>>> +
>>> +--------------------------------------------
>>> +31900000
>>> +31900000 2 31900000 31900001
>>> +31900001 0
>>> +
>>> +--------------------------------------------
>>> +1600000
>>> +1600000 1 1600001
>>> +1600001 1 1600002
>>> +1600002 1 1600003
>>> +1600003 1 1600004
>>> +1600004 0
>>> +
>>> +--------------------------------------------
>>> +36500000
>>> +36500000 1 36500001
>>> +36500001 2 36500002 36500006
>>> +36500002 1 36500003
>>> +36500003 2 36500000 36500004
>>> +36500004 2 36500008 36500005
>>> +36500005 1 36500006
>>> +36500006 2 36500012 36500007
>>> +36500007 1 36500008
>>> +36500008 1 36500009
>>> +36500009 1 36500010
>>> +36500010 1 36500011
>>> +36500011 2 36500004 36500012
>>> +36500012 1 36500013
>>> +36500013 2 36500014 36500015
>>> +36500014 1 36500015
>>> +36500015 1 36500002
>>> +
>>> +--------------------------------------------
>>> +6200000
>>> +6200000 1 6200001
>>> +6200001 0
>>> +
>>> +--------------------------------------------
>>> +41100000
>>> +41100000 2 41100000 41100001
>>> +41100001 1 41100002
>>> +41100002 1 41100003
>>> +41100003 2 41100001 41100004
>>> +41100004 2 41100000 41100005
>>> +41100005 1 41100006
>>> +41100006 0
>>> +
>>> +--------------------------------------------
>>> +43100000
>>> +43100000 2 43100000 43100001
>>> +43100001 1 43100002
>>> +43100002 1 43100003
>>> +43100003 2 43100004 43100013
>>> +43100004 2 43100005 43100022
>>> +43100005 2 43100000 43100006
>>> +43100006 1 43100007
>>> +43100007 1 43100008
>>> +43100008 1 43100009
>>> +43100009 1 43100010
>>> +43100010 1 43100011
>>> +43100011 1 43100012
>>> +43100012 2 43100013 43100021
>>> +43100013 1 43100014
>>> +43100014 1 43100015
>>> +43100015 1 43100016
>>> +43100016 1 43100017
>>> +43100017 1 43100018
>>> +43100018 2 43100019 43100014
>>> +43100019 1 43100020
>>> +43100020 1 43100021
>>> +43100021 2 43100002 43100022
>>> +43100022 1 43100023
>>> +43100023 1 43100021
>>> +
>>> +--------------------------------------------
>>> +10800000
>>> +10800000 1 10800001
>>> +10800001 2 10800000 10800002
>>> +10800002 1 10800002
>>> +
>>> +--------------------------------------------
>>> +45700000
>>> +45700000 1 45700000
>>> +
>>> +--------------------------------------------
>>> +15400000
>>> +15400000 1 15400001
>>> +15400001 0
>>> +
>>> +--------------------------------------------
>>> +20000000
>>> +20000000 1 20000001
>>> +20000001 1 20000002
>>> +20000002 2 20000000 20000003
>>> +20000003 1 20000001
>>> +
>>> +--------------------------------------------
>>> +24600000
>>> +24600000 2 24600000 24600001
>>> +24600001 1 24600002
>>> +24600002 2 24600000 24600003
>>> +24600003 2 24600000 24600004
>>> +24600004 1 24600005
>>> +24600005 2 24600002 24600006
>>> +24600006 0
>>> +
>>> +--------------------------------------------
>>> +29200000
>>> +29200000 2 29200000 29200001
>>> +29200001 0
>>> +
>>> +--------------------------------------------
>>> +46000000
>>> +46000000 1 46000001
>>> +46000001 1 46000002
>>> +46000002 1 46000003
>>> +46000003 1 46000004
>>> +46000004 1 46000005
>>> +46000005 2 46000011 46000006
>>> +46000006 2 46000006 46000007
>>> +46000007 1 46000008
>>> +46000008 2 46000009 46000010
>>> +46000009 2 46000010 46000005
>>> +46000010 1 46000011
>>> +46000011 2 46000010 46000012
>>> +46000012 2 46000013 46000014
>>> +46000013 2 46000008 46000014
>>> +46000014 1 46000015
>>> +46000015 1 46000016
>>> +46000016 1 46000017
>>> +46000017 0
>>> +
>>> +--------------------------------------------
>>> +22600000
>>> +22600000 2 22600000 22600001
>>> +22600001 2 22600002 22600003
>>> +22600002 1 22600003
>>> +22600003 2 22600009 22600004
>>> +22600004 1 22600005
>>> +22600005 1 22600006
>>> +22600006 1 22600007
>>> +22600007 2 22600008 22600006
>>> +22600008 2 22600008 22600009
>>> +22600009 1 22600010
>>> +22600010 2 22600019 22600011
>>> +22600011 2 22600011 22600012
>>> +22600012 1 22600013
>>> +22600013 1 22600014
>>> +22600014 1 22600015
>>> +22600015 2 22600016 22600018
>>> +22600016 2 22600017 22600001
>>> +22600017 1 22600018
>>> +22600018 2 22600019 22600012
>>> +22600019 0
>>> +
>>> +--------------------------------------------
>>> +3500000
>>> +3500000 1 3500001
>>> +3500001 2 3500001 3500002
>>> +3500002 2 3500000 3500003
>>> +3500003 2 3500003 3500004
>>> +3500004 2 3500016 3500005
>>> +3500005 1 3500006
>>> +3500006 2 3500008 3500007
>>> +3500007 2 3500008 3500000
>>> +3500008 1 3500009
>>> +3500009 2 3500010 3500020
>>> +3500010 1 3500011
>>> +3500011 2 3500017 3500012
>>> +3500012 1 3500013
>>> +3500013 2 3500002 3500014
>>> +3500014 1 3500015
>>> +3500015 1 3500016
>>> +3500016 1 3500017
>>> +3500017 1 3500018
>>> +3500018 1 3500019
>>> +3500019 1 3500020
>>> +3500020 1 3500021
>>> +3500021 1 3500022
>>> +3500022 1 3500007
>>> +
>>> +--------------------------------------------
>>> +38400000
>>> +38400000 2 38400000 38400001
>>> +38400001 1 38400002
>>> +38400002 1 38400003
>>> +38400003 1 38400004
>>> +38400004 0
>>> +
>>> +--------------------------------------------
>>> +8100000
>>> +8100000 1 8100001
>>> +8100001 2 8100001 8100002
>>> +8100002 2 8100002 8100003
>>> +8100003 1 3100000
>>> +
>>> +--------------------------------------------
>>> +43000000
>>> +43000000 1 43000001
>>> +43000001 0
>>> +
>>> +--------------------------------------------
>>> +23900000
>>> +23900000 1 23900001
>>> +23900001 2 23900001 23900002
>>> +23900002 2 23900001 23900003
>>> +23900003 1 23900004
>>> +23900004 0
>>> +
>>> +--------------------------------------------
>>> +12700000
>>> +12700000 0
>>> +
>>> +--------------------------------------------
>>> +47600000
>>> +47600000 2 47600000 47600001
>>> +47600001 1 47600002
>>> +47600002 1 47600003
>>> +47600003 2 47600002 47600004
>>> +47600004 1 47600005
>>> +47600005 0
>>> +
>>> +--------------------------------------------
>>> +17300000
>>> +17300000 2 17300000 17300001
>>> +17300001 1 17300002
>>> +17300002 0
>>> +
>>> +--------------------------------------------
>>> +21900000
>>> +21900000 1 21900001
>>> +21900001 2 21900001 21900002
>>> +21900002 0
>>> +
>>> +--------------------------------------------
>>> +42500000
>>> +42500000 1 42500001
>>> +42500001 1 42500000
>>> +
>>> +--------------------------------------------
>>> +26500000
>>> +26500000 2 26500001 26500004
>>> +26500001 1 26500002
>>> +26500002 2 26500000 26500003
>>> +26500003 2 26500003 26500004
>>> +26500004 0
>>> +
>>> +--------------------------------------------
>>> +31100000
>>> +31100000 2 31100001 31100005
>>> +31100001 2 31100002 31100010
>>> +31100002 2 31100003 31100005
>>> +31100003 1 31100004
>>> +31100004 1 31100005
>>> +31100005 1 31100006
>>> +31100006 2 31100000 31100007
>>> +31100007 1 31100008
>>> +31100008 1 31100009
>>> +31100009 1 31100010
>>> +31100010 1 31100011
>>> +31100011 1 31100012
>>> +31100012 1 31100013
>>> +31100013 1 31100014
>>> +31100014 0
>>> +
>>> +--------------------------------------------
>>> +800000
>>> +800000 1 800001
>>> +800001 1 800002
>>> +800002 1 800002
>>> +
>>> +--------------------------------------------
>>> +35700000
>>> +35700224 2 35700225 7100000
>>> +35700225 2 35700048 35700226
>>> +35700226 2 35700033 35700227
>>> +35700227 2 35700228 35700151
>>> +35700228 2 35700244 35700229
>>> +35700229 2 35700230 42900000
>>> +35700230 2 35700040 35700231
>>> +35700231 2 35700232 6000000
>>> +35700232 2 35700233 34900000
>>> +35700233 2 35700234 8200000
>>> +35700234 2 35700235 35700004
>>> +35700235 2 35700236 23800000
>>> +35700236 2 35700091 35700237
>>> +35700237 2 35700238 31200000
>>> +35700238 2 35700090 35700239
>>> +35700239 2 35700240 16000000
>>> +35700240 2 35700241 20400000
>>> +35700241 2 35700242 42000000
>>> +35700242 2 35700243 35700039
>>> +35700243 2 35700244 0
>>> +35700244 2 35700196 35700245
>>> +35700245 2 35700246 33400000
>>> +35700246 2 35700247 24200000
>>> +35700247 2 35700248 35700032
>>> +35700248 2 35700249 35700020
>>> +35700249 2 35700250 25700000
>>> +35700250 2 35700024 35700251
>>> +35700251 2 35700252 47400000
>>> +35700252 2 35700253 35700175
>>> +35700253 2 35700171 35700254
>>> +35700254 2 35700150 35700255
>>> +35700255 2 35700256 35700110
>>> +35700256 2 35700257 1100000
>>> +35700257 2 35700258 35700098
>>> +35700258 2 35700259 35700230
>>> +35700259 2 35700260 49700000
>>> +35700260 1 47000000
>>> +35700000 2 35700001 35700054
>>> +35700001 2 35700000 35700002
>>> +35700002 2 35700003 35700004
>>> +35700003 2 35700004 5100000
>>> +35700004 2 35700005 49400000
>>> +35700005 2 35700001 35700006
>>> +35700006 2 35700121 35700007
>>> +35700007 2 35700008 43300000
>>> +35700008 2 35700009 35700197
>>> +35700009 2 35700010 500000
>>> +35700010 2 35700011 35700006
>>> +35700011 2 35700012 42200000
>>> +35700012 2 35700226 35700013
>>> +35700013 2 35700010 35700014
>>> +35700014 2 35700012 35700015
>>> +35700015 2 35700016 800000
>>> +35700016 2 35700017 11900000
>>> +35700017 2 35700018 36100000
>>> +35700018 2 35700040 35700019
>>> +35700019 2 35700020 23300000
>>> +35700020 2 35700021 41300000
>>> +35700021 2 35700022 29600000
>>> +35700022 2 35700023 38200000
>>> +35700023 2 35700024 36400000
>>> +35700024 2 35700025 35700018
>>> +35700025 2 35700026 35700182
>>> +35700026 2 35700027 35700020
>>> +35700027 2 35700028 44000000
>>> +35700028 2 35700026 35700029
>>> +35700029 2 35700030 13600000
>>> +35700030 2 35700031 44300000
>>> +35700031 2 35700032 36600000
>>> +35700032 2 35700033 35700022
>>> +35700033 2 35700034 22100000
>>> +35700034 2 35700035 35700004
>>> +35700035 2 35700036 11800000
>>> +35700036 2 35700037 17400000
>>> +35700037 2 35700126 35700038
>>> +35700038 2 35700228 35700039
>>> +35700039 2 35700040 35700128
>>> +35700040 2 35700041 35700073
>>> +35700041 2 35700042 8800000
>>> +35700042 2 35700043 46100000
>>> +35700043 2 35700044 20700000
>>> +35700044 2 35700045 11400000
>>> +35700045 2 35700046 14700000
>>> +35700046 2 35700003 35700047
>>> +35700047 2 35700048 35700047
>>> +35700048 2 35700049 35700035
>>> +35700049 2 35700050 35700045
>>> +35700050 2 35700051 18700000
>>> +35700051 2 35700052 8300000
>>> +35700052 2 35700053 14600000
>>> +35700053 2 35700054 22400000
>>> +35700054 2 35700190 35700055
>>> +35700055 2 35700056 35700036
>>> +35700056 2 35700057 6900000
>>> +35700057 2 35700058 5600000
>>> +35700058 2 35700059 37000000
>>> +35700059 2 35700000 35700060
>>> +35700060 2 35700061 35700039
>>> +35700061 2 35700062 13000000
>>> +35700062 2 35700063 29400000
>>> +35700063 2 35700064 35700045
>>> +35700064 2 35700065 19900000
>>> +35700065 2 35700066 33300000
>>> +35700066 2 35700019 35700067
>>> +35700067 2 35700068 35700174
>>> +35700068 2 35700069 2300000
>>> +35700069 2 35700070 16400000
>>> +35700070 2 35700200 35700071
>>> +35700071 2 35700072 35700046
>>> +35700072 2 35700073 35700214
>>> +35700073 2 35700032 35700074
>>> +35700074 2 35700075 15400000
>>> +35700075 2 35700076 35700173
>>> +35700076 2 35700012 35700077
>>> +35700077 2 35700078 35700039
>>> +35700078 2 35700082 35700079
>>> +35700079 2 35700080 7000000
>>> +35700080 2 35700081 10800000
>>> +35700081 2 35700082 35700018
>>> +35700082 2 35700083 19800000
>>> +35700083 2 35700084 20000000
>>> +35700084 2 35700192 35700085
>>> +35700085 2 35700086 34700000
>>> +35700086 2 35700218 35700087
>>> +35700087 2 35700088 35700124
>>> +35700088 2 35700089 35700219
>>> +35700089 2 35700090 35700218
>>> +35700090 2 35700009 35700091
>>> +35700091 2 35700192 35700092
>>> +35700092 2 35700093 38100000
>>> +35700093 2 35700075 35700094
>>> +35700094 2 35700095 27000000
>>> +35700095 2 35700096 42600000
>>> +35700096 2 35700097 33900000
>>> +35700097 2 35700098 41900000
>>> +35700098 2 35700099 19000000
>>> +35700099 2 35700074 35700100
>>> +35700100 2 35700101 47500000
>>> +35700101 2 35700097 35700102
>>> +35700102 2 35700103 37400000
>>> +35700103 2 35700104 19600000
>>> +35700104 2 35700112 35700105
>>> +35700105 2 35700106 9900000
>>> +35700106 2 35700107 35700062
>>> +35700107 2 35700018 35700108
>>> +35700108 2 35700109 33200000
>>> +35700109 2 35700110 21800000
>>> +35700110 2 35700090 35700111
>>> +35700111 2 35700112 21400000
>>> +35700112 2 35700113 35700083
>>> +35700113 2 35700114 20600000
>>> +35700114 2 35700115 1900000
>>> +35700115 2 35700116 35700077
>>> +35700116 2 35700117 35200000
>>> +35700117 2 35700118 29800000
>>> +35700118 2 35700119 40400000
>>> +35700119 2 35700120 35700088
>>> +35700120 2 35700144 35700121
>>> +35700121 2 35700097 35700122
>>> +35700122 2 35700123 46500000
>>> +35700123 2 35700124 23200000
>>> +35700124 2 35700081 35700125
>>> +35700125 2 35700126 32300000
>>> +35700126 2 35700127 48600000
>>> +35700127 2 35700128 46600000
>>> +35700128 2 35700129 35700057
>>> +35700129 2 35700130 35700206
>>> +35700130 2 35700178 35700131
>>> +35700131 2 35700132 35700117
>>> +35700132 2 35700133 12300000
>>> +35700133 2 35700213 35700134
>>> +35700134 2 35700113 35700135
>>> +35700135 2 35700136 7600000
>>> +35700136 2 35700137 28100000
>>> +35700137 2 35700138 35700054
>>> +35700138 2 35700139 49200000
>>> +35700139 2 35700140 19500000
>>> +35700140 2 35700040 35700141
>>> +35700141 2 35700108 35700142
>>> +35700142 2 35700183 35700143
>>> +35700143 2 35700144 47900000
>>> +35700144 2 35700145 35700097
>>> +35700145 2 35700146 37900000
>>> +35700146 2 35700147 20100000
>>> +35700147 2 35700148 10200000
>>> +35700148 2 35700149 16300000
>>> +35700149 2 35700150 35700111
>>> +35700150 2 35700151 23600000
>>> +35700151 2 35700152 35700084
>>> +35700152 2 35700153 35700014
>>> +35700153 2 35700154 39700000
>>> +35700154 2 35700155 9800000
>>> +35700155 2 35700123 35700156
>>> +35700156 2 35700157 35700007
>>> +35700157 2 35700158 16800000
>>> +35700158 2 35700009 35700159
>>> +35700159 2 35700160 35700204
>>> +35700160 2 35700161 32900000
>>> +35700161 2 35700162 42800000
>>> +35700162 2 35700041 35700163
>>> +35700163 2 35700025 35700164
>>> +35700164 2 35700165 22600000
>>> +35700165 2 35700029 35700166
>>> +35700166 2 35700001 35700167
>>> +35700167 2 35700168 35700160
>>> +35700168 2 35700169 44100000
>>> +35700169 2 35700170 35700150
>>> +35700170 2 35700171 18600000
>>> +35700171 2 35700172 4800000
>>> +35700172 2 35700173 17500000
>>> +35700173 2 35700174 27800000
>>> +35700174 2 35700175 39500000
>>> +35700175 2 35700176 32600000
>>> +35700176 2 35700177 35700097
>>> +35700177 2 35700178 35700172
>>> +35700178 2 35700179 41000000
>>> +35700179 2 35700203 35700180
>>> +35700180 2 35700181 35700206
>>> +35700181 2 35700236 35700182
>>> +35700182 2 35700089 35700183
>>> +35700183 2 35700184 35700077
>>> +35700184 2 35700088 35700185
>>> +35700185 2 35700186 35700123
>>> +35700186 2 35700187 3000000
>>> +35700187 2 35700188 40200000
>>> +35700188 2 35700189 35700133
>>> +35700189 2 35700190 32800000
>>> +35700190 2 35700191 33000000
>>> +35700191 2 35700192 44800000
>>> +35700192 2 35700193 4700000
>>> +35700193 2 35700194 12000000
>>> +35700194 2 35700195 28500000
>>> +35700195 2 35700196 6500000
>>> +35700196 2 35700197 40500000
>>> +35700197 2 35700025 35700198
>>> +35700198 2 35700239 35700199
>>> +35700199 2 35700200 48800000
>>> +35700200 2 35700201 2700000
>>> +35700201 2 35700202 35700151
>>> +35700202 2 35700203 35700037
>>> +35700203 2 35700170 35700204
>>> +35700204 2 35700205 17300000
>>> +35700205 2 35700134 35700206
>>> +35700206 2 35700008 35700207
>>> +35700207 2 35700208 38500000
>>> +35700208 2 35700209 35700081
>>> +35700209 2 35700210 38400000
>>> +35700210 2 35700211 35700164
>>> +35700211 2 35700210 35700212
>>> +35700212 2 35700213 10900000
>>> +35700213 2 35700214 14200000
>>> +35700214 2 35700215 30300000
>>> +35700215 2 35700216 2500000
>>> +35700216 2 35700217 35700179
>>> +35700217 2 35700145 35700218
>>> +35700218 2 35700219 35700139
>>> +35700219 2 35700220 35700109
>>> +35700220 2 35700221 30800000
>>> +35700221 2 35700117 35700222
>>> +35700222 2 35700223 39000000
>>> +35700223 2 35700224 29500000
>>> +
>>> +--------------------------------------------
>>> +5400000
>>> +5400000 2 5400000 42700000
>>> +
>>> +--------------------------------------------
>>> +40300000
>>> +40300000 2 40300001 40300002
>>> +40300001 2 40300002 40300004
>>> +40300002 1 40300003
>>> +40300003 1 40300004
>>> +40300004 0
>>> +
>>> +--------------------------------------------
>>> +10000000
>>> +10000000 1 10000001
>>> +10000001 1 10000002
>>> +10000002 1 10000002
>>> +
>>> +--------------------------------------------
>>> +44900000
>>> +44900000 0
>>> +
>>> +--------------------------------------------
>>> +39000000
>>> +39000000 2 39000001 39000002
>>> +39000001 1 39000002
>>> +39000002 0
>>> +
>>> +--------------------------------------------
>>> +19300000
>>> +19300000 1 19300001
>>> +19300001 0
>>> +
>>> +--------------------------------------------
>>> +19200000
>>> +19200000 2 19200000 19200001
>>> +19200001 1 19200002
>>> +19200002 1 19200003
>>> +19200003 2 19200002 19200004
>>> +19200004 1 19200005
>>> +19200005 1 19200004
>>> +
>>> +--------------------------------------------
>>> +23800000
>>> +23800000 2 23800000 23800001
>>> +23800001 0
>>> +
>>> +--------------------------------------------
>>> +28400000
>>> +28400000 1 28400001
>>> +28400001 2 28400000 42600000
>>> +
>>> +--------------------------------------------
>>> +33000000
>>> +33000000 1 33000001
>>> +33000001 0
>>> +
>>> +--------------------------------------------
>>> +2700000
>>> +2700000 1 2700001
>>> +2700001 2 2700000 2700002
>>> +2700002 2 2700000 2700003
>>> +2700003 1 2700000
>>> +
>>> +--------------------------------------------
>>> +37600000
>>> +37600000 2 37600000 37600001
>>> +37600001 0
>>> +
>>> +--------------------------------------------
>>> +48300000
>>> +48300000 0
>>> +
>>> +--------------------------------------------
>>> +7300000
>>> +7300000 1 7300000
>>> +
>>> +--------------------------------------------
>>> +42200000
>>> +42200000 1 42200001
>>> +42200001 1 42200002
>>> +42200002 2 42200001 42200003
>>> +42200003 1 42200004
>>> +42200004 0
>>> +
>>> +--------------------------------------------
>>> +11900000
>>> +11900000 1 11900001
>>> +11900001 1 11900002
>>> +11900002 2 11900001 11900003
>>> +11900003 2 11900001 11900004
>>> +11900004 2 11900002 11900005
>>> +11900005 1 11900004
>>> +
>>> +--------------------------------------------
>>> +46800000
>>> +46800000 2 46800001 14100000
>>> +46800001 2 46800002 46800062
>>> +46800002 2 46800000 46800003
>>> +46800003 2 46800001 46800004
>>> +46800004 2 46800004 46800005
>>> +46800005 2 46800006 40300000
>>> +46800006 2 46800007 4500000
>>> +46800007 2 46800008 45800000
>>> +46800008 2 46800009 8700000
>>> +46800009 2 46800010 29000000
>>> +46800010 2 46800000 46800011
>>> +46800011 2 46800012 29900000
>>> +46800012 2 46800013 40100000
>>> +46800013 2 46800014 8000000
>>> +46800014 2 46800015 1400000
>>> +46800015 2 46800016 11500000
>>> +46800016 2 46800017 24900000
>>> +46800017 2 46800018 46800044
>>> +46800018 2 46800016 46800019
>>> +46800019 2 46800010 46800020
>>> +46800020 2 46800021 44900000
>>> +46800021 2 46800160 46800022
>>> +46800022 2 46800023 41200000
>>> +46800023 2 46800024 46800093
>>> +46800024 2 46800025 45200000
>>> +46800025 2 46800026 2600000
>>> +46800026 2 46800010 46800027
>>> +46800027 2 46800028 7900000
>>> +46800028 2 46800029 32500000
>>> +46800029 2 46800026 46800030
>>> +46800030 2 46800031 24100000
>>> +46800031 2 46800032 43900000
>>> +46800032 2 46800033 46800004
>>> +46800033 2 46800034 31100000
>>> +46800034 2 46800035 46800005
>>> +46800035 2 46800036 27700000
>>> +46800036 2 46800037 42100000
>>> +46800037 2 46800038 25300000
>>> +46800038 2 46800039 8500000
>>> +46800039 2 46800040 26800000
>>> +46800040 2 46800041 45500000
>>> +46800041 2 46800042 46800015
>>> +46800042 2 46800043 8600000
>>> +46800043 2 46800044 46800021
>>> +46800044 2 46800024 46800045
>>> +46800045 2 46800147 46800046
>>> +46800046 2 46800038 46800047
>>> +46800047 2 46800048 46800069
>>> +46800048 2 46800049 12100000
>>> +46800049 2 46800050 46800045
>>> +46800050 1 46800051
>>> +46800051 2 46800052 48200000
>>> +46800052 2 46800057 46800053
>>> +46800053 2 46800034 46800054
>>> +46800054 2 46800005 46800055
>>> +46800055 2 46800056 46800132
>>> +46800056 2 46800057 13900000
>>> +46800057 2 46800058 30700000
>>> +46800058 2 46800059 46800043
>>> +46800059 2 46800060 25500000
>>> +46800060 2 46800124 46800061
>>> +46800061 2 46800034 46800062
>>> +46800062 2 46800063 38700000
>>> +46800063 2 46800064 38300000
>>> +46800064 2 46800065 28000000
>>> +46800065 2 46800066 39200000
>>> +46800066 2 46800066 46800067
>>> +46800067 2 46800067 46800068
>>> +46800068 2 46800048 46800069
>>> +46800069 2 46800012 46800070
>>> +46800070 2 46800007 46800071
>>> +46800071 2 46800072 44200000
>>> +46800072 2 46800073 41800000
>>> +46800073 2 46800074 46800071
>>> +46800074 2 46800075 46800030
>>> +46800075 2 46800076 7200000
>>> +46800076 2 46800066 46800077
>>> +46800077 2 46800078 9600000
>>> +46800078 2 46800010 46800079
>>> +46800079 2 46800080 46800064
>>> +46800080 2 46800081 35700000
>>> +46800081 2 46800082 32200000
>>> +46800082 2 46800083 38600000
>>> +46800083 2 46800084 7700000
>>> +46800084 2 46800085 16500000
>>> +46800085 2 46800059 46800086
>>> +46800086 2 46800113 46800087
>>> +46800087 2 46800088 12400000
>>> +46800088 2 46800089 11200000
>>> +46800089 2 46800090 44600000
>>> +46800090 2 46800098 46800091
>>> +46800091 2 46800092 1000000
>>> +46800092 2 46800093 14500000
>>> +46800093 2 46800075 46800094
>>> +46800094 2 46800074 46800095
>>> +46800095 2 46800096 46800016
>>> +46800096 2 46800097 46800042
>>> +46800097 2 46800098 13800000
>>> +46800098 2 46800099 4200000
>>> +46800099 2 46800100 9300000
>>> +46800100 2 46800101 15200000
>>> +46800101 2 46800102 22800000
>>> +46800102 2 46800103 20900000
>>> +46800103 2 46800104 46800070
>>> +46800104 2 46800105 25400000
>>> +46800105 2 46800040 46800106
>>> +46800106 2 46800107 46300000
>>> +46800107 2 46800108 39900000
>>> +46800108 2 46800042 46800109
>>> +46800109 2 46800110 40000000
>>> +46800110 2 46800106 46800111
>>> +46800111 2 46800112 39600000
>>> +46800112 2 46800113 46800090
>>> +46800113 2 46800114 46800086
>>> +46800114 1 46800115
>>> +46800115 2 46800017 46800116
>>> +46800116 2 46800117 49000000
>>> +46800117 2 46800118 200000
>>> +46800118 2 46800050 46800119
>>> +46800119 2 46800120 46800067
>>> +46800120 1 46800121
>>> +46800121 2 46800122 18100000
>>> +46800122 2 46800123 46800070
>>> +46800123 2 46800124 19300000
>>> +46800124 2 46800059 46800125
>>> +46800125 2 46800126 45100000
>>> +46800126 2 46800005 46800127
>>> +46800127 2 46800128 30400000
>>> +46800128 2 46800129 46800126
>>> +46800129 2 46800130 46800101
>>> +46800130 2 46800131 12800000
>>> +46800131 2 46800132 40600000
>>> +46800132 2 46800065 46800133
>>> +46800133 2 46800134 12200000
>>> +46800134 2 46800127 46800135
>>> +46800135 2 46800136 49600000
>>> +46800136 2 46800137 46800097
>>> +46800137 2 46800025 46800138
>>> +46800138 2 46800139 6100000
>>> +46800139 2 46800140 46800119
>>> +46800140 2 46800136 46800141
>>> +46800141 2 46800142 23700000
>>> +46800142 2 46800143 47800000
>>> +46800143 2 46800144 25000000
>>> +46800144 2 46800145 4000000
>>> +46800145 2 46800146 24500000
>>> +46800146 2 46800147 46800067
>>> +46800147 2 46800148 28600000
>>> +46800148 2 46800011 46800149
>>> +46800149 2 46800134 46800150
>>> +46800150 2 46800137 46800151
>>> +46800151 2 46800152 46800124
>>> +46800152 2 46800024 46800153
>>> +46800153 2 46800154 24300000
>>> +46800154 2 46800155 4100000
>>> +46800155 2 46800115 46800156
>>> +46800156 2 46800000 46800157
>>> +46800157 2 46800158 13700000
>>> +46800158 2 46800159 9500000
>>> +46800159 2 46800160 10300000
>>> +46800160 2 46800161 4300000
>>> +46800161 2 46800008 46800162
>>> +46800162 2 46800163 22900000
>>> +46800163 2 46800164 35500000
>>> +46800164 2 46800080 46800165
>>> +46800165 1 28800000
>>> +
>>> +--------------------------------------------
>>> +16500000
>>> +16500000 1 16500000
>>> +
>>> +--------------------------------------------
>>> +21100000
>>> +21100000 2 21100000 21100001
>>> +21100001 1 21100002
>>> +21100002 1 21100000
>>> +
>>> +--------------------------------------------
>>> +25700000
>>> +25700000 1 25700001
>>> +25700001 2 25700000 25700002
>>> +25700002 1 25700003
>>> +25700003 0
>>> +
>>> +--------------------------------------------
>>> +SYSTEM CALLS
>>> +
>>> +12800000 label_363
>>> +1 label_362
>>> +19200003 label_9
>>> +38400004 label_78
>>> +5 label_359
>>> +6400007 label_147
>>> +32000010 label_328
>>> +4600000 label_185
>>> +32000014 label_49
>>> +40300003 label_14
>>> +3 label_108
>>> +4 label_173
>>> +6400005 label_161
>>> +22100000 label_294
>>> +28500001 label_356
>>> +22100002 label_123
>>> +34900003 label_231
>>> +28500004 label_205
>>> +28500005 label_53
>>> +21600007 label_337
>>> +19200004 label_60
>>> +18600000 label_348
>>> +25000001 label_106
>>> +37800002 label_263
>>> +37800003 label_250
>>> +18600006 label_259
>>> +31100006 label_271
>>> +15100000 label_176
>>> +8700001 label_299
>>> +40700002 label_327
>>> +27900003 label_66
>>> +3800000 label_60
>>> +9500006 label_60
>>> +8700012 label_172
>>> +5200000 label_309
>>> +11600001 label_310
>>> +11600002 label_214
>>> +24400004 label_44
>>> +11600008 label_79
>>> +28600003 label_258
>>> +48900000 label_54
>>> +35700079 label_117
>>> +27300000 label_184
>>> +27300001 label_88
>>> +27300003 label_319
>>> +20900004 label_300
>>> +1700005 label_137
>>> +9500018 label_261
>>> +19000008 label_203
>>> +33300000 label_238
>>> +49800001 label_237
>>> +43000000 label_152
>>> +18900000 label_391
>>> +4600003 label_59
>>> +38100001 label_136
>>> +12200000 label_210
>>> +9300002 label_259
>>> +21400000 label_250
>>> +26700000 label_173
>>> +19500002 label_219
>>> +31400003 label_150
>>> +39800000 label_95
>>> +34800000 label_179
>>> +42400002 label_385
>>> +42400003 label_215
>>> +35200001 label_318
>>> +10400007 label_142
>>> +16800010 label_314
>>> +42400011 label_56
>>> +10400012 label_395
>>> +47600002 label_102
>>> +10400014 label_229
>>> +44400003 label_88
>>> +26100000 label_253
>>> +45300002 label_83
>>> +6900003 label_281
>>> +6900004 label_287
>>> +29400032 label_158
>>> +6900006 label_14
>>> +19700007 label_154
>>> +19700008 label_82
>>> +19700010 label_211
>>> +45300014 label_243
>>> +25200000 label_132
>>> +41800000 label_221
>>> +31500000 label_307
>>> +24900008 label_24
>>> +22600005 label_240
>>> +37900001 label_10
>>> +22600010 label_396
>>> +48200000 label_310
>>> +36400001 label_176
>>> +12900069 label_13
>>> +31900000 label_240
>>> +4100001 label_227
>>> +19100002 label_163
>>> +19100003 label_283
>>> +25500005 label_36
>>> +25500006 label_103
>>> +25500008 label_167
>>> +12900071 label_257
>>> +15200000 label_118
>>> +4100002 label_15
>>> +9200000 label_66
>>> +41200001 label_180
>>> +22000002 label_133
>>> +2800003 label_122
>>> +47600005 label_270
>>> +29400129 label_193
>>> +36300001 label_207
>>> +25000002 label_285
>>> +18600003 label_374
>>> +31300001 label_11
>>> +24900003 label_251
>>> +5700004 label_125
>>> +31300005 label_156
>>> +24900006 label_107
>>> +31300007 label_146
>>> +5700008 label_268
>>> +24900010 label_195
>>> +24900011 label_364
>>> +27800000 label_13
>>> +40600001 label_166
>>> +8600002 label_119
>>> +29400139 label_224
>>> +8900002 label_87
>>> +5700003 label_54
>>> +47300004 label_290
>>> +18500005 label_129
>>> +49900000 label_69
>>> +17900001 label_245
>>> +30700003 label_334
>>> +37100004 label_218
>>> +24900007 label_303
>>> +47300008 label_182
>>> +39900000 label_319
>>> +1600001 label_27
>>> +16300000 label_333
>>> +20800006 label_132
>>> +24800001 label_375
>>> +5600002 label_5
>>> +20800015 label_394
>>> +25500000 label_154
>>> +26300003 label_151
>>> +42000001 label_259
>>> +18400004 label_248
>>> +40800005 label_221
>>> +4500000 label_121
>>> +17300001 label_18
>>> +36500003 label_350
>>> +36500009 label_336
>>> +36500011 label_264
>>> +13600000 label_188
>>> +26300004 label_65
>>> +20600009 label_326
>>> +45800000 label_295
>>> +7400002 label_341
>>> +7400003 label_113
>>> +1000005 label_303
>>> +1000007 label_246
>>> +21600012 label_131
>>> +2500003 label_398
>>> +37500004 label_370
>>> +42300000 label_360
>>> +48700002 label_252
>>> +23100004 label_331
>>> +23100005 label_36
>>> +23100006 label_351
>>> +29500008 label_362
>>> +1700001 label_43
>>> +7900007 label_81
>>> +38500000 label_304
>>> +45200000 label_26
>>> +19600001 label_47
>>> +5500011 label_343
>>> +38800004 label_137
>>> +6800005 label_52
>>> +8600001 label_114
>>> +38800008 label_210
>>> +6800009 label_122
>>> +6800010 label_116
>>> +34200003 label_83
>>> +26600000 label_334
>>> +31000005 label_381
>>> +35300000 label_245
>>> +41700002 label_286
>>> +32700032 label_224
>>> +19300000 label_154
>>> +38200000 label_235
>>> +6200001 label_213
>>> +19000002 label_21
>>> +12600008 label_334
>>> +46600007 label_231
>>> +43900001 label_357
>>> +15100001 label_240
>>> +28300000 label_212
>>> +41100003 label_319
>>> +28300008 label_44
>>> +28300011 label_348
>>> +28300012 label_191
>>> +24800000 label_273
>>> +44000001 label_225
>>> +12000002 label_314
>>> +12000003 label_309
>>> +31200004 label_155
>>> +18400005 label_208
>>> +40400001 label_349
>>> +5600008 label_389
>>> +5600011 label_143
>>> +14800003 label_339
>>> +40500000 label_23
>>> +27700001 label_54
>>> +2100002 label_276
>>> +5500004 label_323
>>> +2100005 label_313
>>> +2100007 label_74
>>> +46200007 label_162
>>> +30600001 label_83
>>> +24200002 label_358
>>> +49800003 label_58
>>> +43400005 label_312
>>> +46700001 label_16
>>> +11400008 label_396
>>> +5000018 label_3
>>> +43500003 label_384
>>> +35700196 label_324
>>> +25600001 label_165
>>> +46300000 label_124
>>> +7900001 label_140
>>> +14300002 label_331
>>> +39900003 label_85
>>> +13100000 label_38
>>> +39900007 label_20
>>> +37700005 label_380
>>> +22300000 label_78
>>> +26900000 label_171
>>> +23600000 label_392
>>> +17200001 label_153
>>> +10800002 label_7
>>> +30000004 label_159
>>> +36400006 label_287
>>> +12900161 label_128
>>> +36400008 label_134
>>> +19600000 label_239
>>> +1500000 label_48
>>> +46600005 label_198
>>> +39300001 label_217
>>> +32900002 label_244
>>> +39300003 label_120
>>> +39300010 label_95
>>> +39300011 label_288
>>> +38000000 label_45
>>> +15000001 label_38
>>> +12300000 label_68
>>> +42200000 label_79
>>> +29400001 label_157
>>> +29400002 label_304
>>> +3800003 label_278
>>> +3800005 label_344
>>> +27400000 label_399
>>> +3800007 label_379
>>> +29400008 label_99
>>> +46800033 label_199
>>> +20900003 label_22
>>> +29400021 label_165
>>> +29400024 label_139
>>> +27300004 label_48
>>> +36100001 label_184
>>> +47200001 label_384
>>> +29400029 label_135
>>> +29400030 label_218
>>> +46800037 label_254
>>> +45100000 label_256
>>> +29400033 label_24
>>> +29400034 label_207
>>> +38700004 label_175
>>> +38700005 label_355
>>> +33400002 label_154
>>> +29400051 label_155
>>> +5000001 label_338
>>> +22400000 label_339
>>> +29400065 label_118
>>> +16000002 label_343
>>> +16000008 label_30
>>> +14200001 label_299
>>> +16000011 label_80
>>> +29400083 label_90
>>> +29400091 label_274
>>> +28000001 label_383
>>> +29400096 label_108
>>> +18900001 label_109
>>> +44500003 label_377
>>> +12500007 label_67
>>> +29400104 label_308
>>> +44500009 label_353
>>> +44500011 label_59
>>> +29400108 label_296
>>> +29400109 label_301
>>> +41800001 label_371
>>> +29400113 label_10
>>> +29400120 label_322
>>> +8800000 label_194
>>> +34600001 label_111
>>> +28200002 label_105
>>> +45300006 label_334
>>> +25300001 label_387
>>> +41000006 label_172
>>> +29400137 label_134
>>> +34600011 label_178
>>> +29400140 label_199
>>> +30700004 label_78
>>> +29400144 label_289
>>> +4700003 label_378
>>> +18300000 label_390
>>> +18300001 label_222
>>> +5500002 label_367
>>> +11900004 label_297
>>> +37500006 label_86
>>> +31100008 label_21
>>> +31100011 label_315
>>> +45600000 label_69
>>> +43900018 label_206
>>> +8800002 label_218
>>> +2000000 label_347
>>> +8400001 label_84
>>> +21200002 label_252
>>> +8400003 label_191
>>> +40400004 label_319
>>> +46800005 label_31
>>> +40400007 label_42
>>> +46800010 label_334
>>> +46800066 label_147
>>> +46800019 label_28
>>> +46800026 label_386
>>> +36900000 label_85
>>> +49700001 label_302
>>> +24100002 label_376
>>> +46800035 label_272
>>> +11300005 label_37
>>> +11300007 label_372
>>> +24100008 label_337
>>> +46800042 label_12
>>> +46800071 label_35
>>> +46800046 label_163
>>> +46800050 label_64
>>> +46200009 label_215
>>> +46800056 label_310
>>> +43100020 label_364
>>> +46800062 label_88
>>> +46200000 label_267
>>> +46800065 label_291
>>> +7800002 label_255
>>> +33400003 label_110
>>> +20600004 label_40
>>> +33400005 label_350
>>> +46200006 label_135
>>> +26900001 label_87
>>> +20600008 label_330
>>> +46800073 label_4
>>> +46800075 label_293
>>> +35700258 label_100
>>> +20600014 label_264
>>> +46800083 label_247
>>> +46800085 label_252
>>> +46800090 label_177
>>> +46800092 label_290
>>> +46800094 label_126
>>> +46800095 label_214
>>> +4300001 label_363
>>> +49100003 label_361
>>> +46800102 label_108
>>> +10700008 label_93
>>> +46800106 label_201
>>> +46800107 label_233
>>> +42700012 label_1
>>> +17100014 label_313
>>> +46800111 label_223
>>> +46800119 label_115
>>> +17100030 label_344
>>> +17100032 label_43
>>> +33200000 label_39
>>> +17100034 label_226
>>> +13600003 label_100
>>> +7200004 label_279
>>> +39200005 label_233
>>> +46800135 label_161
>>> +13600008 label_227
>>> +17100041 label_362
>>> +13600011 label_281
>>> +46800140 label_230
>>> +7200013 label_161
>>> +46800142 label_358
>>> +46800144 label_378
>>> +700003 label_117
>>> +7200020 label_183
>>> +46800150 label_200
>>> +46800151 label_238
>>> +39400000 label_347
>>> +35700000 label_70
>>> +35700002 label_391
>>> +42100003 label_283
>>> +35700004 label_375
>>> +35700005 label_203
>>> +3700006 label_200
>>> +35700010 label_245
>>> +12900233 label_174
>>> +32100000 label_26
>>> +35700028 label_280
>>> +35700029 label_167
>>> +45000000 label_192
>>> +6600002 label_66
>>> +32200003 label_204
>>> +45000004 label_17
>>> +35700038 label_105
>>> +49100001 label_141
>>> +25800009 label_89
>>> +35700051 label_50
>>> +35700055 label_65
>>> +35700056 label_307
>>> +28700000 label_23
>>> +9500002 label_152
>>> +35700070 label_328
>>> +9500008 label_51
>>> +35700074 label_209
>>> +9500015 label_165
>>> +38600000 label_340
>>> +46800104 label_244
>>> +35700082 label_397
>>> +35700085 label_370
>>> +35700091 label_205
>>> +35700092 label_48
>>> +17100010 label_242
>>> +35700096 label_188
>>> +38000001 label_303
>>> +38000003 label_149
>>> +36200001 label_40
>>> +35700104 label_178
>>> +46800108 label_321
>>> +35700108 label_35
>>> +35700109 label_19
>>> +35700110 label_363
>>> +35700111 label_172
>>> +35700115 label_316
>>> +35700118 label_279
>>> +35700119 label_331
>>> +35700121 label_121
>>> +35700122 label_165
>>> +9900000 label_171
>>> +28100000 label_222
>>> +2500002 label_242
>>> +8900003 label_131
>>> +15300004 label_324
>>> +22100001 label_270
>>> +35700134 label_155
>>> +35700136 label_321
>>> +47300009 label_367
>>> +35700139 label_177
>>> +35700140 label_206
>>> +35700145 label_130
>>> +28200001 label_333
>>> +35700149 label_263
>>> +35700151 label_237
>>> +5400000 label_148
>>> +35700161 label_235
>>> +18200003 label_29
>>> +11800005 label_219
>>> +35700167 label_393
>>> +14800001 label_394
>>> +35700169 label_168
>>> +17100023 label_253
>>> +16900002 label_120
>>> +35700188 label_293
>>> +15700001 label_113
>>> +27500000 label_382
>>> +21100001 label_105
>>> +40300002 label_219
>>> +8300003 label_237
>>> +46700004 label_139
>>> +46700005 label_335
>>> +35700198 label_95
>>> +33900007 label_265
>>> +35700208 label_21
>>> +23300000 label_251
>>> +39700000 label_100
>>> +35700217 label_152
>>> +35700223 label_167
>>> +36800000 label_285
>>> +26400000 label_380
>>> +35700226 label_226
>>> +35700227 label_150
>>> +49600007 label_52
>>> +49600008 label_198
>>> +7200003 label_25
>>> +42400004 label_379
>>> +35700250 label_56
>>> +1300000 label_310
>>> +39700001 label_150
>>> +33300002 label_387
>>> +11300000 label_354
>>> +15900000 label_76
>>> +17000000 label_186
>>> +23400001 label_89
>>> +49000002 label_122
>>> +42600005 label_35
>>> +26300002 label_55
>>> +42400013 label_174
>>> +45500003 label_16
>>> +32700004 label_1
>>> +26300000 label_260
>>> +45500001 label_145
>>> +39100002 label_317
>>> +39100003 label_2
>>> +700004 label_146
>>> +700006 label_396
>>> +26300008 label_288
>>> +13500014 label_305
>>> +32700015 label_12
>>> +13500016 label_78
>>> +32700017 label_312
>>> +9400004 label_326
>>> +32700029 label_342
>>> +22800000 label_68
>>> +35600001 label_153
>>> +3600002 label_329
>>> +45400001 label_197
>>> +42000008 label_55
>>> +16600003 label_352
>>> +24300000 label_238
>>> +28900000 label_295
>>> +16600005 label_158
>>> +44900000 label_170
>>> +32700016 label_376
>>> +32100002 label_396
>>> +12900003 label_96
>>> +12900004 label_304
>>> +29400006 label_132
>>> +32100006 label_292
>>> +32100007 label_117
>>> +32100009 label_50
>>> +12900010 label_87
>>> +29400007 label_375
>>> +12900014 label_272
>>> +12900024 label_37
>>> +12900029 label_107
>>> +12900031 label_38
>>> +41400000 label_71
>>> +42100000 label_368
>>> +22200002 label_201
>>> +12900035 label_222
>>> +3000004 label_261
>>> +37600000 label_332
>>> +28600007 label_161
>>> +7200016 label_337
>>> +12900048 label_282
>>> +12900049 label_190
>>> +26100004 label_48
>>> +12900062 label_368
>>> +12900063 label_57
>>> +25100000 label_169
>>> +31500001 label_399
>>> +5900003 label_268
>>> +25100005 label_216
>>> +25100007 label_371
>>> +12900073 label_222
>>> +5900010 label_272
>>> +26100007 label_345
>>> +5900013 label_135
>>> +24300003 label_4
>>> +12900080 label_58
>>> +500008 label_70
>>> +12900088 label_373
>>> +12900090 label_137
>>> +12900091 label_254
>>> +2400000 label_143
>>> +37300000 label_12
>>> +40800000 label_22
>>> +12900097 label_98
>>> +12900098 label_341
>>> +12900100 label_391
>>> +15200005 label_232
>>> +38800001 label_339
>>> +21600008 label_269
>>> +12900108 label_21
>>> +10000002 label_254
>>> +12900113 label_121
>>> +12900124 label_162
>>> +12900125 label_241
>>> +12900127 label_352
>>> +11700000 label_202
>>> +12900129 label_92
>>> +6300006 label_388
>>> +41900001 label_81
>>> +12900133 label_182
>>> +12900135 label_382
>>> +12900145 label_32
>>> +12900148 label_217
>>> +12800003 label_346
>>> +12900152 label_141
>>> +19600010 label_346
>>> +40200000 label_176
>>> +46600001 label_199
>>> +46600002 label_154
>>> +8200003 label_374
>>> +12900165 label_46
>>> +14600007 label_340
>>> +13100002 label_15
>>> +12900174 label_231
>>> +32700003 label_325
>>> +12900181 label_249
>>> +48400001 label_245
>>> +12900190 label_137
>>> +12900191 label_202
>>> +4700000 label_91
>>> +49500001 label_394
>>> +12900194 label_314
>>> +23900003 label_389
>>> +4700004 label_76
>>> +12900200 label_323
>>> +43100010 label_129
>>> +43100011 label_234
>>> +20000000 label_377
>>> +12900211 label_19
>>> +12900212 label_55
>>> +13500002 label_123
>>> +43100023 label_373
>>> +12900216 label_364
>>> +12900221 label_159
>>> +20400000 label_114
>>> +12900225 label_249
>>> +12900227 label_298
>>> +46000005 label_332
>>> +15400001 label_307
>>> +3400001 label_77
>>> +46000009 label_39
>>> +27300005 label_197
>>> +12900236 label_353
>>> +46000014 label_358
>>> +12900240 label_284
>>> +12900241 label_310
>>> +47600000 label_30
>>> +12900245 label_177
>>> +12900246 label_320
>>> +21900000 label_368
>>> +12900255 label_281
>>> +4100000 label_21
>>> +12900257 label_354
>>> +23300002 label_369
>>> +36100003 label_44
>>> +36100005 label_69
>>> +23300006 label_120
>>> +16900007 label_386
>>> +12900265 label_87
>>> +23300010 label_179
>>> +12900271 label_354
>>> +12900278 label_168
>>> +26200000 label_164
>>> +32600001 label_212
>>> +45400002 label_312
>>> +32600004 label_164
>>> +12900294 label_266
>>> +25000000 label_306
>>> +12900296 label_159
>>> +12900297 label_58
>>> +12900300 label_105
>>> +12900301 label_360
>>> +12900303 label_346
>>> +28400000 label_326
>>> +32100003 label_35
>>> +12900308 label_236
>>> +12900310 label_250
>>> +12900311 label_158
>>> +12900312 label_295
>>> +12900318 label_64
>>> +48300000 label_366
>>> +16300001 label_308
>>> +16300003 label_102
>>> +3500004 label_196
>>> +9900005 label_382
>>> +3500006 label_261
>>> +16300008 label_355
>>> +16300009 label_275
>>> +12900333 label_311
>>> +3500021 label_88
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,364 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * node.c
>>> + *
>>> + *  Created on: Feb 1, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +/* --------
>>> + * Nodes are the basic data structure within the graph. Nodes hold 
>>> information
>>> + * regarding their identity (id, label, type, etc.) and information 
>>> about their
>>> + * edges (list of edges, number of edges).
>>> + *
>>> + * Node.h/.c contains the data definitions for nodes and edges as 
>>> well as con-
>>> + * tainers for nodes (NodeList, NodePtrVec) and edges (EdgeList)
>>> + */
>>> +
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +#include <string.h>
>>> +#include "node.h"
>>> +#include "graph.h"
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Node Method Definitions
>>> + *
>>> + */
>>> +
>>> +/* "methods" for nodes */
>>> +/* Constructor */
>>> +Node *Node_new(int id, int nodeCount)
>>> +{
>>> +    Node *node = malloc(sizeof(Node));
>>> +
>>> +    if ( !node )
>>> +        return(NULL);
>>> +
>>> +    node->id = id;
>>> +    node->nodeCount = nodeCount; /* index into bitfield - caller 
>>> must increment! */
>>> +    node->label = NULL;
>>> +    node->labelIdx = -1;
>>> +    node->type = exteriorNode;
>>> +    node->container = NULL;
>>> +    node->interiorNodes = NULL;
>>> +    node->edges = NULL;
>>> +
>>> +    node->edgeCount = 0;
>>> +    node->entranceCount = 0;
>>> +
>>> +    return(node);
>>> +}
>>> +
>>> +/* Destructor */
>>> +void Node_delete(Node *trash)
>>> +{
>>> +    /* Some basic error checking */
>>> +    if ( !trash ) return;
>>> +
>>> +    if ( trash->interiorNodes ) /* "true" tells clearNodeList to 
>>> free the mallocs */
>>> +        NodeList_clear( trash->interiorNodes, true );
>>> +
>>> +    if ( trash->edges )
>>> +        EdgeList_clear( trash->edges );
>>> +
>>> +    free( trash );
>>> +}
>>> +
>>> +/* Duplicates node data, BUT NO EDGE INFORMATION */
>>> +Node *Node_duplicate(Node *from, int newIndex)
>>> +{
>>> +    Node *copy = malloc(sizeof(Node));
>>> +
>>> +    if ( !copy || !from )
>>> +        return(NULL);
>>> +
>>> +    copy->id = from->id;
>>> +    copy->nodeCount = newIndex; /* index into bitfield - caller 
>>> must increment! */
>>> +    copy->label = from->label;
>>> +    copy->labelIdx = from->labelIdx;
>>> +    copy->type = from->type;
>>> +    copy->container = NULL;
>>> +    copy->interiorNodes = NULL;
>>> +    copy->edges = NULL;
>>> +
>>> +    copy->edgeCount = 0;
>>> +    copy->entranceCount = 0;
>>> +
>>> +    return(copy);
>>> +}
>>> +
>>> +/* Identifies the Upper-level node containing inner level node */
>>> +void Node_setParent(Node *this, Node *parent)
>>> +{
>>> +    /* Some basic error checking */
>>> +    if ( !this || !parent )
>>> +        return;
>>> +
>>> +    this->container = parent;
>>> +    this->type = interiorNode;
>>> +}
>>> +
>>> +/* Inserts interior node into parent list */
>>> +void Node_addInteriorNode(Node *this, Node *interior)
>>> +{
>>> +    /* some basic error checking */
>>> +    if ( !this || !interior )
>>> +        return;
>>> +
>>> +    if ( this->interiorNodes == NULL )
>>> +    {
>>> +        this->interiorNodes = NodeList_new();
>>> +        if ( this->interiorNodes == NULL )
>>> +            return; /* malloc failed */
>>> +        this->interiorNodes->node = interior;
>>> +    }
>>> +    else
>>> +        NodeList_insertBack(this->interiorNodes, interior);
>>> +
>>> +    Node_setParent(interior, this);
>>> +    return;
>>> +}
>>> +
>>> +
>>> +/* adds an edge from "this" to "node. If an allocation error occurs
>>> + * this method returns false. If an edge already exists, the method
>>> + * will NOT add a duplicate edge, and will return true.
>>> + */
>>> +bool Node_addEdgeToNode(Node *this, Node *node)
>>> +{
>>> +    EdgeList *end = NULL;
>>> +    EdgeList *newEdge = NULL;
>>> +
>>> +    if ( !this || !node )
>>> +        return(false);
>>> +
>>> +    /* Scream through the list and make sure edge doesn't already 
>>> exist */
>>> +    for ( end = this->edges; end != NULL; end = end->nextEdge )
>>> +        if ( end->targetNode == node )
>>> +            return true;
>>> +
>>> +    /* Otherwise, we have a new edge. Insert it at the head of the 
>>> list */
>>> +    newEdge = EdgeList_new();
>>> +    if ( !newEdge ) /* allocation error */
>>> +        return false;
>>> +    newEdge->targetNode = node;
>>> +    newEdge->targetNodeId = node->id;
>>> +    newEdge->nextEdge = this->edges; /* First time, this is NULL, 
>>> terminates our list. */
>>> +    this->edges = newEdge;
>>> +    ++this->edgeCount;
>>> +    return(true);
>>> +}
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * NodeList Method Definitions
>>> + *
>>> + */
>>> +
>>> +/* Constructor */
>>> +NodeList * NodeList_new()
>>> +{
>>> +    NodeList *list = malloc(sizeof(NodeList));
>>> +
>>> +    if ( !list )
>>> +        return(NULL);
>>> +
>>> +    list->node = NULL;
>>> +    list->nextNode = NULL;
>>> +
>>> +    return(list);
>>> +}
>>> +
>>> +/* Destructor - also frees the data allocated for nodes if 
>>> freeMemory is
>>> + * true (calls their "destructor )
>>> + */
>>> +void NodeList_clear(NodeList *trash, bool deleteNodes)
>>> +{
>>> +    /* Some basic error checking */
>>> +    if ( !trash ) return;
>>> +
>>> +    if ( trash->nextNode )
>>> +        NodeList_clear(trash->nextNode, deleteNodes);
>>> +
>>> +    if ( deleteNodes )
>>> +    {
>>> +        Node_delete(trash->node);
>>> +    }
>>> +    free(trash);
>>> +}
>>> +
>>> +/* insertFront modifies the list passed in such that the first element
>>> + * points to the new node. This is done by duplicating the first 
>>> element
>>> + * into a new element, and then modifying the true first element to 
>>> point
>>> + * to the node passed and and the created element (which references the
>>> + * rest of the list).
>>> + */
>>> +bool NodeList_insertFront(NodeList *this, Node *newFront)
>>> +{
>>> +    /* Make a new element that holds the information that used to
>>> +     * be at the front.
>>> +     */
>>> +    NodeList *oldFront = NodeList_new();
>>> +
>>> +    /* Some basic error checking */
>>> +    if ( !this || !newFront || !oldFront )
>>> +        return(false);
>>> +
>>> +    /* move the formerly front data to the new element */
>>> +    oldFront->node = this->node;
>>> +    oldFront->nextNode = this->nextNode; /* Now points to the 
>>> remainder of the list (or NULL) */
>>> +
>>> +    /* And change the head element to reference the new front node. */
>>> +    this->node = newFront;
>>> +    this->nextNode = oldFront;
>>> +
>>> +    return(true);
>>> +}
>>> +
>>> +/* Create a new node list element, have it reference the node passed in
>>> + * and then put it in the back of the list. Returns true on success
>>> + */
>>> +bool NodeList_insertBack(NodeList *this, Node *newBack)
>>> +{
>>> +    NodeList *end;
>>> +    NodeList *newElement;
>>> +
>>> +    /* Some basic error checking */
>>> +    if ( !this || !newBack )
>>> +        return(false);
>>> +
>>> +    /* If the node portion of "this" is null,
>>> +     * then we're starting with an empty list.
>>> +     */
>>> +
>>> +    if ( this->node == NULL )
>>> +    {
>>> +        this->node = newBack;
>>> +        return(true); /* We're done! */
>>> +    }
>>> +
>>> +    /* Otherwise, we need to find the end of the list */
>>> +    for ( end = this; end->nextNode != NULL; end = end->nextNode )
>>> +    { /* No-op */ }
>>> +
>>> +    newElement = NodeList_new();
>>> +    if ( !newElement )
>>> +        return(false);
>>> +
>>> +    newElement->node = newBack;
>>> +    end->nextNode = newElement; /* new nodelist element has a null 
>>> next */
>>> +
>>> +    return(true);
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Edge List Method Definitions
>>> + *
>>> + */
>>> +
>>> +/* Constructor */
>>> +EdgeList *EdgeList_new()
>>> +{
>>> +    EdgeList *newNode = malloc( sizeof( struct EdgeListStruct ));
>>> +    if ( newNode )
>>> +    {
>>> +        newNode->targetNodeId = -1; /* Potentially a bug. what if 
>>> there's a node named -1? */
>>> +        newNode->targetNode = NULL;
>>> +        newNode->nextEdge = NULL;
>>> +    }
>>> +    return(newNode);
>>> +}
>>> +
>>> +/* Destructor */
>>> +void EdgeList_clear( EdgeList *this )
>>> +{
>>> +    /* Some basic error checking */
>>> +    if ( !this )
>>> +        return;
>>> +
>>> +    if ( this->nextEdge )
>>> +        EdgeList_clear(this->nextEdge);
>>> +
>>> +    free(this);
>>> +}
>>> +
>>> +/* Insertion Method
>>> + *     It is important to realize that this inserts the edge as an 
>>> Id, it does
>>> + *     not find or initialize the node specified by that Id. That 
>>> has to be
>>> + *     done as a separate step later.
>>> + */
>>> +bool EdgeList_insertNodeId(EdgeList *this, int targetNodeId)
>>> +{
>>> +    EdgeList *end;
>>> +    EdgeList *newElement;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !this )
>>> +        return(false);
>>> +
>>> +    /* Check to see if this is the initial insertion into the
>>> +     * Edge list
>>> +     */
>>> +    if ( this->targetNodeId == -1 )
>>> +    {
>>> +        this->targetNodeId = targetNodeId;
>>> +        return(true);
>>> +    }
>>> +
>>> +    /* Otherwise we find the end of the list and make a new entry */
>>> +    for ( end = this; end->nextEdge != NULL; end = end->nextEdge )
>>> +    { /* No-op */ }
>>> +
>>> +    newElement = EdgeList_new();
>>> +    if ( !newElement )
>>> +        return(false);
>>> +
>>> +    newElement->targetNodeId = targetNodeId;
>>> +    end->nextEdge = newElement; /* new edge list element has a null 
>>> node and next */
>>> +
>>> +    return(true);
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +/* Search Algorithms */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/node.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,159 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * node.h
>>> + *
>>> + *  Created on: Feb 1, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#ifndef NODE_H_
>>> +#define NODE_H_
>>> +
>>> +
>>> +
>>> +
>>> +/* --------
>>> + * Nodes are the basic data structure within the graph. Nodes hold 
>>> information
>>> + * regarding their identity (id, label, type, etc.) and information 
>>> about their
>>> + * edges (list of edges, number of edges).
>>> + *
>>> + * Node.h/.c contains the data definitions for nodes and edges as 
>>> well as con-
>>> + * tainers for nodes (NodeList, NodePtrVec) and edges (EdgeList)
>>> + */
>>> +
>>> +
>>> +
>>> +
>>> +typedef enum
>>> +{
>>> +    exteriorNode, /* Default unless Node_setParent is called */
>>> +    interiorNode,
>>> +    entranceNode  /* special interior node(s) that begin the 
>>> interior graph */
>>> +} NodeType;
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Node Definitions
>>> + *
>>> + */
>>> +
>>> +
>>> +
>>> +typedef struct NodeStruct Node;
>>> +typedef struct NodeListStruct NodeList;
>>> +typedef struct EdgeListStruct EdgeList;
>>> +
>>> +#include "bitfield.h"
>>> +#include "vectorUtils.h"
>>> +#include <stdbool.h>
>>> +
>>> +struct NodeStruct
>>> +{
>>> +    int id; /* id value for the node - typically associated with an 
>>> address of the basic block */
>>> +    int nodeCount; /* a unique index for this node (0 .. whatever) */
>>> +    char *label;
>>> +    int labelIdx;
>>> +    NodeType type;
>>> +    Node *container; /* if this is an interior node, this points to 
>>> the outer node containing this one */
>>> +    NodeList *interiorNodes; /* All the nodes contained in this 
>>> node's subgraph */
>>> +    EdgeList *edges; /* Nodes that can be accessed from this node 
>>> (includes entrance nodes) */
>>> +
>>> +    int edgeCount; /* edges from this node to others (DOES NOT 
>>> INLCUDE INTRANCE NODES) */
>>> +    int entranceCount; /* number of entrance nodes (if any) */
>>> +};
>>> +
>>> +/* "methods" for nodes */
>>> +
>>> +Node *Node_new( int id, int nodeCount );    /* Constructor */
>>> +void Node_delete( Node *trash ); /* Destructor */
>>> +Node *Node_duplicate(Node *from, int newIndex); /* Duplicates node 
>>> data, BUT NO EDGE INFORMATION */
>>> +void Node_setParent( Node *this, Node *parent );  /* Identifies the 
>>> Upper-level node containing inner level node */
>>> +void Node_addInteriorNode( Node *this, Node *interior ); /* Inserts 
>>> interior node into parent list */
>>> +bool Node_addEdgeToNode(Node *this, Node *node); /* Node* based 
>>> insertion method */
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Node List Definitions
>>> + *
>>> + */
>>> +
>>> +struct NodeListStruct
>>> +{
>>> +    Node *node;
>>> +    NodeList *nextNode;
>>> +};
>>> +
>>> +/* "methods" for NodeLists */
>>> +
>>> +NodeList *NodeList_new(); /* Constructor */
>>> +
>>> +/* Destructor - also frees the data allocated for nodes if 
>>> freeMemory is
>>> + * true (calls their "destructor )
>>> + */
>>> +void NodeList_clear( NodeList *trash, bool deleteNodes );
>>> +
>>> +/* insertFront modifies the list passed in such that the first element
>>> + * points to the new node. This is done by duplicating the first 
>>> element
>>> + * into a new element, and then modifying the true first element to 
>>> point
>>> + * to the node passed and and the created element (which references the
>>> + * rest of the list).
>>> + */
>>> +bool NodeList_insertFront( NodeList *this, Node *newFront );
>>> +/* Create a new node list element, have it reference the node passed in
>>> + * and then put it in the back of the list. Returns true on success
>>> + */
>>> +bool NodeList_insertBack( NodeList *this, Node *newBack );
>>> +
>>> +/* -------------------------------------------
>>> + * Edge List Definitions
>>> + *
>>> + *     Edges are processed a little differently than nodes. As soon 
>>> as a
>>> + *     node is identified, it is created. However, the edges may be
>>> + *     identified prior to the creation of the node to which it 
>>> references.
>>> + *     Ergo, there's a two pass process - first identifying the edges,
>>> + *     then subsequently setting the pointers to reference them.
>>> + *
>>> + *     Rather than making a dual structure "Edge" and "EdgeList" pair,
>>> + *     the author is combining the data into a single structure.
>>> + */
>>> +
>>> +struct EdgeListStruct
>>> +{
>>> +    int targetNodeId;
>>> +    Node *targetNode;
>>> +    EdgeList *nextEdge;
>>> +};
>>> +
>>> +EdgeList *EdgeList_new(); /* Constructor */
>>> +void EdgeList_clear(EdgeList* this); /* Destructor */
>>> +bool EdgeList_insertNodeId(EdgeList *this, int targetNodeId); /* Id 
>>> based insertion method */
>>> +
>>> +#endif /* NODE_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,678 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +
>>> +/*
>>> + * graph.c
>>> + *
>>> + *  Created on: Jan 9, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#include "parsing.h"
>>> +#include "graph.h"
>>> +#include "utils.h"
>>> +#include "systemCallMap.h"
>>> +#include "yaml.h"
>>> +
>>> +
>>> +#include <ctype.h>
>>> +
>>> +
>>> +/* buildEntranceList takes an array of integers, and builds a
>>> + * non-resolved edge list from the array. This is a special
>>> + * edge list, used only be outer nodes to identify entrance
>>> + * points into their subgraph. Only the edge data is passed in,
>>> + * this begins with the second entry (index 1) in the parsed
>>> + * data array. Likewise the size only counts edges.
>>> + *
>>> + * Initially, entrance transitions were handled as a separate
>>> + * list of edges. After further analysis, however, there is
>>> + * no operational difference between outer edges and entrance
>>> + * edges. Ergo, we are modifying this code to put the entrance
>>> + * edges into the edge list and deprecating the entrance list.
>>> + * The code is being left in for the time being as comments,
>>> + * since there are some contextual significances to interior
>>> + * nodes and entrance edges that may later be required. Otherwise
>>> + * we could go to a simple flat graph.
>>> + */
>>> +void buildEntranceList( Node *outerNode, IntVector *nodeData )
>>> +{
>>> +    int i;
>>> +    int entranceCount;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !outerNode || !nodeData ) return;
>>> +
>>> +    entranceCount = nodeData->vector[1]; /* count is the first 
>>> entry, (second of original data); */
>>> +    if ( entranceCount == 0 )
>>> +        return; /* Nothing to see here, folks */
>>> +
>>> +    if ( entranceCount != nodeData->size-2 )
>>> +    {
>>> +        fprintf ( stderr, "Specified entrance edge length does not 
>>> match data size for node: %d\n",
>>> +                outerNode->id );
>>> +    }
>>> +
>>> +    /* Deprecated: outerNode->entranceNodes = EdgeList_new(); */
>>> +    /* Deprecated: if ( outerNode->entranceNodes ) */
>>> +    if ( !outerNode->edges )
>>> +        outerNode->edges = EdgeList_new();
>>> +    if ( outerNode->edges )
>>> +        for ( i = 2; i < nodeData->size; ++i )
>>> +        {
>>> +            /* Deprecated EdgeList_insertBack( 
>>> outerNode->entranceNodes, edgeData[i] ); */
>>> +            EdgeList_insertNodeId( outerNode->edges, 
>>> nodeData->vector[i] );
>>> +            ++outerNode->entranceCount;
>>> +        }
>>> +}
>>> +
>>> +
>>> +/* buildNodeFromData takes the integer array built by the above
>>> + * method, and creates a node from it. If that node has
>>> + * edge data, that is also built. The data is in an array,
>>> + * the size of which is also passed in.
>>> + */
>>> +Node *buildNodeFromData( IntVector *nodeData )
>>> +{
>>> +    int i;
>>> +    int edgeCount;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( nodeData == NULL || nodeData->size == 0 )
>>> +        return( NULL );
>>> +
>>> +    Node *node = Node_new( nodeData->vector[0], -1 ); /* Calling 
>>> method must set index. */
>>> +    if ( !node )
>>> +        return( NULL );
>>> +
>>> +    /* Currently, the second element in is the edge count */
>>> +    edgeCount = nodeData->vector[1];
>>> +    if ( edgeCount != nodeData->size-2 )
>>> +    {
>>> +        fprintf ( stderr, "Specified edge length does not match 
>>> data size for node: %d\n",
>>> +                  nodeData->vector[0] );
>>> +    }
>>> +
>>> +    if ( edgeCount > 0 )
>>> +    {
>>> +        node->edges = EdgeList_new();
>>> +        if ( node->edges )
>>> +            for ( i = 2; i < nodeData->size; ++i )
>>> +            {
>>> +                EdgeList_insertNodeId ( node->edges, 
>>> nodeData->vector[i] );
>>> +                ++node->edgeCount;
>>> +            }
>>> +    }
>>> +
>>> +    return( node );
>>> +}
>>> +
>>> +
>>> +/* resolveNodeEdges is the second pass through the graph data
>>> + * structures. The first pass defines the nodes, and puts the edge
>>> + * ids in place. The second pass finds the nodes corresponding to
>>> + * the edge id, and sets the edge pointer to that node. Edges for
>>> + * outer nodes will only reference other outer nodes. Interior
>>> + * nodes may have edges to outer nodes or other interior nodes of
>>> + * their containing node. If an edge references an undefined node
>>> + * or if an edge goes into the interior of another outer node,
>>> + * the user will be notified.
>>> + *
>>> + * Note: The section that resolves entrance edges has been commented
>>> + * out because entrance edges are now processed as part of the edge
>>> + * list.
>>> + */
>>> +void resolveNodeEdges( Graph *graph, Node* sourceNode, bool outerNode )
>>> +{
>>> +    EdgeList *edges;
>>> +    Node *node;
>>> +    bool okSoFar;
>>> +
>>> +    for ( edges = sourceNode->edges; edges != NULL; edges = 
>>> edges->nextEdge )
>>> +    {
>>> +        if ( outerNode )
>>> +        {
>>> +            /* We only check for edges to other outer nodes*/
>>> +            node = Graph_findNode( graph, edges->targetNodeId, true 
>>> ); /* true-> check outer and interior nodes */
>>> +            if ( node )
>>> +            {
>>> +                okSoFar = true;
>>> +                /* Since entrance edges are now part of our edge 
>>> list, we have to make sure
>>> +                 * the link here is appropriate.
>>> +                 */
>>> +                if ( node->type == entranceNode || node->type == 
>>> interiorNode )
>>> +                {
>>> +                    if ( node->container != sourceNode )
>>> +                    {
>>> +                        fprintf( stderr,
>>> +                                 "resolveNodeEdges: Outer node %d 
>>> edge to non-contained node: %d\n",
>>> +                                 sourceNode->id, edges->targetNodeId );
>>> +                        fprintf(stderr, "\t%d is type: %s (%d)\n", 
>>> node->id, node->type == interiorNode ? "interior" : "entrance", 
>>> (int)node->type);
>>> +                        okSoFar = false;
>>> +                    }
>>> +                }
>>> +                if ( okSoFar )
>>> +                    edges->targetNode = node;
>>> +            }
>>> +            else
>>> +                fprintf( stderr,
>>> +                        "resolveNodeEdges: Outer node %d has edge 
>>> reference to undefined node: %d\n",
>>> +                        sourceNode->id, edges->targetNodeId );
>>> +        }
>>> +        else
>>> +        {
>>> +            /* Interior node - the edge can be to an outer node... */
>>> +            node = Graph_findNode( graph, edges->targetNodeId, 
>>> false ); /* false-> only check outer nodes */
>>> +            if ( node )
>>> +                edges->targetNode = node;
>>> +            else
>>> +            {
>>> +                /* ... or nodes interior to the container of this 
>>> node */
>>> +                node = Graph_findContainedNode( 
>>> sourceNode->container, edges->targetNodeId );
>>> +                if ( node )
>>> +                    edges->targetNode = node;
>>> +                else
>>> +                {
>>> +                    /* we have an undefined node */
>>> +                    fprintf( stderr,
>>> +                            "resolveNodeEdges: Interior node %d has 
>>> edge reference to undefined node: %d\n",
>>> +                            sourceNode->id, edges->targetNodeId );
>>> +                }
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +}
>>> +
>>> +
>>> +/* pruneLine takes the \r\n off the end of the label. This is an 
>>> artifact of
>>> + * the windows file system, not something that was intended to be a 
>>> part
>>> + * of the actual label string.
>>> + */
>>> +static void pruneLine( char *label )
>>> +{
>>> +    int i = 0;
>>> +
>>> +    for ( ; label[i] != '\0'; ++i )
>>> +    {
>>> +        if ( label[i] == '\r' )
>>> +        {
>>> +            label[i] = '\0';
>>> +            return;
>>> +        }
>>> +        if ( label[i] == '\n' )
>>> +        {
>>> +            label[i] = '\0';
>>> +            return;
>>> +        }
>>> +    }
>>> +}
>>> +
>>> +/* parseFile goes through the specified file to build the graph. It
>>> + * returns a pointer to the graph instance created by the data. 
>>> Otherwise
>>> + * it returns NULL if the file is not parsable.
>>> + */
>>> +
>>> +Graph *parseFile( char *fileName )
>>> +{
>>> +    FILE *inFile;
>>> +    IntVector *fileData = NULL;
>>> +    CharVector *fileString = NULL;
>>> +    Node *newNode = NULL;
>>> +    Node *outerNode = NULL;
>>> +    Node *findNode = NULL;
>>> +    int temp, count;
>>> +    NodeList *outerNodeList = NULL;
>>> +    NodeList *innerNodeList = NULL;
>>> +    Graph *newGraph = NULL;
>>> +    int funcCount = 50; /* used as a default initial size for the 
>>> system call table */
>>> +    int blockCount =  0;
>>> +    bool systemCallSection = false;
>>> +    int i;
>>> +
>>> +    /* A little error checking */
>>> +    if ( !fileName )
>>> +        return( NULL );
>>> +
>>> +#ifdef PRINT_FILE
>>> +    printf ( "Parsing file %s...\n", fileName );
>>> +#endif
>>> +
>>> +    inFile = fopen( fileName, "r" );
>>> +    if ( !inFile )
>>> +    {
>>> +        printf( "Could not open data file: %s 
>>> (parsing.c:parseFile)\n", fileName );
>>> +        return( NULL );
>>> +    }
>>> +    /* else
>>> +        printf( "Opened %s\n\n", fileName ); */
>>> +
>>> +    newGraph = Graph_new();
>>> +    if ( !newGraph )
>>> +        return( NULL );
>>> +
>>> +    newGraph->fileName = strdup( fileName );
>>> +    fileString = CharVector_new( 1024 ); /* allocate our data 
>>> parsing storage - 1024 is a semi-arbitrary power of 2 */
>>> +
>>> +    i = 0;
>>> +
>>> +    /* The first two lines define the number of Functions and basic 
>>> blocks. */
>>> +    CharVector_getLineFromFile( fileString, inFile );
>>> +    if ( !feof( inFile ) && ( strncmp ( "Functions:", 
>>> fileString->string, 10 ) == 0 ) )
>>> +    {
>>> +        funcCount = atoi ( fileString->string+10 );
>>> +        printf ( "\t%d functions specified\n", funcCount );
>>> +        YAMLWriteInt("Functions", funcCount);
>>> +    }
>>> +    else
>>> +    {
>>> +        fprintf ( stderr, "Malformed file, Function count not 
>>> specified in first line\n" );
>>> +        return( NULL );
>>> +    }
>>> +
>>> +    CharVector_getLineFromFile( fileString, inFile );
>>> +    if ( !feof( inFile ) && ( strncmp ( "Basic blocks:", 
>>> fileString->string, 13 ) == 0 ) )
>>> +    {
>>> +        blockCount = atoi ( fileString->string+13 );
>>> +        printf ( "\t%d basic blocks specified\n", blockCount );
>>> +        YAMLWriteInt("Basic Blocks", blockCount);
>>> +    }
>>> +    else
>>> +    {
>>> +        fprintf ( stderr, "Malformed file, Function count not 
>>> specified in first line\n" );
>>> +        return( NULL );
>>> +    }
>>> +
>>> +    // printf ("Done with header\n");
>>> +
>>> +    fileData = IntVector_new( 8 ); /* allocate our data parsing 
>>> storage - 8 is a semi-arbitrary power of 2 */
>>> +
>>> +    /*
>>> +     * The first section defines the outer nodes. Scan through it 
>>> to identify the
>>> +     * nodes and to do the first pass of edge definition.
>>> +     */
>>> +    while ( !feof( inFile ) ) /* clumsy use of feof */
>>> +    {
>>> +        CharVector_getLineFromFile( fileString, inFile );
>>> +
>>> +        if ( feof( inFile ) ) /* that read line was the last line */
>>> +            break;
>>> +
>>> +        if ( strncmp( "----------", fileString->string, 10 ) == 0 ) 
>>> /* we have a section break */
>>> +            break;
>>> +
>>> +        count = IntVector_createFromString ( fileData, 
>>> fileString->string );
>>> +
>>> +        if ( count > 0 )
>>> +        {
>>> +            // printf("processing node %d\n", fileData->vector[0] );
>>> +            newNode = buildNodeFromData( fileData );
>>> +            if ( newNode )
>>> +            {
>>> +                Graph_addOuterNode( newGraph, newNode );
>>> +                newNode->nodeCount = newGraph->totalNodes;
>>> +                newGraph->totalNodes += 1;
>>> +            }
>>> +        }
>>> +        IntVector_clear( fileData );
>>> +    }
>>> +
>>> +    //printf ("Done with outer nodes\n");
>>> +
>>> +    /* Parse the subsequent sections to get the inner nodes */
>>> +    while ( !feof( inFile ) )
>>> +    {
>>> +        /* The first line will identify the outer node for which 
>>> the inner nodes are defined. */
>>> +        CharVector_getLineFromFile( fileString, inFile );
>>> +
>>> +        if ( feof( inFile ) ) /* that fgets was the last line */
>>> +            break;
>>> +
>>> +        systemCallSection = strncmp( "SYSTEM CALLS", 
>>> fileString->string, 12) == 0;
>>> +        if ( systemCallSection )
>>> +            break;
>>> +
>>> +        if ( isdigit( (int)fileString->string[0] ) )
>>> +            temp = atoi( fileString->string ); /* Note: No format 
>>> error check here... */
>>> +        else
>>> +            temp = -1; /* Man, I hope -1 is never a node id value... */
>>> +        outerNode = Graph_findNode( newGraph, temp, false ); /* 
>>> false -> only check outer nodes */
>>> +
>>> +        if ( outerNode == NULL )
>>> +        {
>>> +            fprintf (stderr, "Error in parseFile: Node %d undefined 
>>> as an outer node\n", temp );
>>> +            break; /* No error recovery  - but continue with the 
>>> program */
>>> +        }
>>> +
>>> +        /* Now, subsequent lines (up to the section break) identify 
>>> interior nodes; */
>>> +        while  ( !feof( inFile ) )
>>> +        {
>>> +            CharVector_getLineFromFile( fileString, inFile );
>>> +
>>> +            if ( strncmp( "----------", fileString->string, 10 ) == 
>>> 0 ) /* we have a section break */
>>> +                break;
>>> +
>>> +            count = IntVector_createFromString( fileData, 
>>> fileString->string );
>>> +            if ( count > 0 )
>>> +            {
>>> +                /*
>>> +                 * special case: If the node specified is the 
>>> outerNode, the edge nodes specified
>>> +                 * here are the entrance nodes
>>> +                 */
>>> +                if ( fileData->vector[0] == outerNode->id )
>>> +                    buildEntranceList( outerNode, fileData );
>>> +                else
>>> +                {
>>> +                    newNode = buildNodeFromData( fileData );
>>> +                    if ( newNode )
>>> +                    {
>>> +                        Node_addInteriorNode( outerNode, newNode );
>>> +                        newNode->nodeCount = newGraph->totalNodes;
>>> +                        newGraph->totalNodes += 1;
>>> +                    }
>>> +                }
>>> +            }
>>> +            IntVector_clear( fileData );
>>> +        }
>>> +    }
>>> +
>>> +    //printf ( "Done with interior nodes. On to System Calls\n" );
>>> +
>>> +    /* All the node mappings have been done, now we build a map of 
>>> system calls to the
>>> +     * node keys.
>>> +     */
>>> +    newGraph->systemCallMap = SystemCallMap_new( funcCount );
>>> +    if ( newGraph->systemCallMap == NULL )
>>> +    {
>>> +        IntVector_delete( fileData );
>>> +        return( NULL ); /* if we can't build the system call map, 
>>> we're done. */
>>> +    }
>>> +
>>> +    if ( systemCallSection )
>>> +    {
>>> +        while ( !feof( inFile ) )
>>> +        {
>>> +            CharVector_getLineFromFile( fileString, inFile );
>>> +
>>> +            if ( feof( inFile ) ) /* that fgets was the last line */
>>> +                break;
>>> +
>>> +            if ( isdigit( (int)fileString->string[0] ) )
>>> +                temp = atoi ( fileString->string ); /* get the key */
>>> +            else
>>> +                temp = -1;
>>> +            if ( temp >= 0 ) /* valid key */
>>> +            {
>>> +                /* get the system call name. First, get past the ' ' */
>>> +                for ( i = 0; fileString->string[i] != '\0' && 
>>> fileString->string[i] != ' '; ++i ) {}
>>> +                if ( fileString->string[i] == ' ' )
>>> +                {
>>> +                    ++i;
>>> +                    findNode = Graph_findNode( newGraph, temp, true );
>>> +                    pruneLine( fileString->string+i );
>>> +                    SystemCallMap_insert( newGraph->systemCallMap, 
>>> fileString->string+i, findNode );
>>> +                }
>>> +            }
>>> +        }
>>> +    } /* ....aaaand we're done parsing the input file. */
>>> +
>>> +    CharVector_delete(fileString);
>>> +
>>> +    //printf ( "Done parsing, resolve edges\n" );
>>> +    /* Now that we have all the nodes, resolve all edge definitions */
>>> +    for ( outerNodeList = newGraph->outerNodes;
>>> +          outerNodeList != NULL;
>>> +          outerNodeList = outerNodeList->nextNode )
>>> +    {
>>> +        resolveNodeEdges( newGraph, outerNodeList->node, true ); /* 
>>> true -> outer node */
>>> +        for ( innerNodeList = outerNodeList->node->interiorNodes;
>>> +              innerNodeList != NULL;
>>> +              innerNodeList = innerNodeList->nextNode )
>>> +        {
>>> +            resolveNodeEdges( newGraph, innerNodeList->node, false 
>>> ); /* false -> interior node */
>>> +        }
>>> +    }
>>> +
>>> +
>>> +    /* How many nodes did we count (outer + interior)?
>>> +    printf ( "\tTotal nodes parsed: %d\n", newGraph->totalNodes ); */
>>> +
>>> +    /* Debug --* /
>>> +    graphPrettyPrint( newGraph );
>>> +    systemCallMapPrettyPrint( newGraph->systemCallMap );
>>> +    / *-- End Debug */
>>> +
>>> +    printf( "\t%d total System Call Map elements\n", 
>>> newGraph->systemCallMap->contentSize );
>>> +    YAMLWriteInt( "System Calls", 
>>> newGraph->systemCallMap->contentSize );
>>> +
>>> +    /* Build the search diagram */
>>> +    newGraph->searchDiagram = SearchDiagram_build( 
>>> newGraph->outerNodes, newGraph->totalNodes );
>>> +
>>> +    printf ( "\t...parsing complete.\n" );
>>> +    return( newGraph );
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +/* parseSignature takes a space delimited string and turns it
>>> + * into a "signature" - a packed array of c-string pointers with
>>> + * a NULL pointer to signify completion.
>>> + */
>>> +char **parseSignature( char *data )
>>> +{
>>> +    int i = 0;
>>> +    int labelCount = 0; // Used to be 1. The algorithm depends on a 
>>> terminating space, so it counts based on the END of the label.
>>> +    int copiedLabels = 0;
>>> +    char **labels = NULL;
>>> +    char *debug = NULL;
>>> +
>>> +    /* A little error checking */
>>> +    if ( !data )
>>> +        return NULL;
>>> +
>>> +    /* First, scream through the array counting labels */
>>> +    for( i = 0; data[i] != '\0'; ++i )
>>> +    {
>>> +        if ( data[i] == ' ' )
>>> +        {
>>> +            ++labelCount;
>>> +            data[i] = '\0';
>>> +        }
>>> +    }
>>> +
>>> +    /* Now, allocate the array and make copies */
>>> +    labels = (char **)malloc( (labelCount+1) * sizeof(char*) );
>>> +    i = 0;
>>> +    if ( labels )
>>> +    {
>>> +        for ( copiedLabels = 0; copiedLabels < labelCount; 
>>> ++copiedLabels )
>>> +        {
>>> +            debug = &data[i];
>>> +            labels[copiedLabels] = strdup( &data[i] );
>>> +            while ( data[i] != '\0' )
>>> +            {
>>> +                /* advance to the end of this label */
>>> +                ++i;
>>> +            }
>>> +            ++i; /* advance beyond the \0 to the start of the next 
>>> label */
>>> +        }
>>> +        labels[labelCount] = NULL; /* terminate the array */
>>> +    }
>>> +
>>> +    /* Debug print out * /
>>> +    printf ( "\nSignature: ");
>>> +    for ( i = 0; labels[i] != NULL; ++i )
>>> +    {
>>> +        printf ( "%s ", labels[i] );
>>> +    }
>>> +    /* end Debug */
>>> +
>>> +    return labels;
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +/* parseConfigFile reads the data file names and desired search
>>> + * signatures from the config file. It returns a packed array
>>> + * of Graph pointers populated corresponding to the data files.
>>> + * Also, it returns a packed array of pointers to signatures.
>>> + * (Signatures are themselves packed arrays to C-Strings.) These
>>> + * packed arrays are terminated with a NULL pointer. They
>>> + * are returned in the "graphs" and "signatures" parameters
>>> + * which should be references to the desired pointers. See main.c.
>>> + */
>>> +bool parseConfigFile( char *configFileName, Configuration *config )
>>> +{
>>> +    char data[1000];
>>> +    FILE *configFile = NULL;
>>> +    int fileNum = -1;
>>> +    int sigNum = -1;
>>> +    int i = 0;
>>> +
>>> +    configFile = fopen( configFileName, "r" );
>>> +    if ( !configFile )
>>> +    {
>>> +        printf( "Could not open %s\n", configFileName );
>>> +        return( NULL );
>>> +    }
>>> +    else
>>> +        printf( "Opened %s\n\n", configFileName );
>>> +
>>> +    fgets ( data, 1000, configFile );
>>> +    if ( feof( configFile ) || ( strncmp ( "Pathfinder 
>>> Configuration", data, 24 ) != 0 ) )
>>> +    {
>>> +        printf( "Error in config file: doesn't start with 
>>> \"Pathfinder Configuration\"\n" );
>>> +        return false;
>>> +    }
>>> +
>>> +    fgets ( data, 1000, configFile );
>>> +    if ( feof( configFile ) || ( strncmp ( "files", data, 5 ) != 0 ) )
>>> +    {
>>> +        printf( "Error in config file: second line is not file 
>>> count\n" );
>>> +        return false;
>>> +    }
>>> +    fileNum = atoi( &data[6] );
>>> +    if ( fileNum == 0 )
>>> +    {
>>> +        printf( "No files to parse, exiting.\n" );
>>> +        return false;
>>> +    }
>>> +
>>> +    fgets ( data, 1000, configFile );
>>> +    if ( feof( configFile ) || ( strncmp ( "signatures", data, 10 ) 
>>> != 0 ) )
>>> +    {
>>> +        printf( "Error in config file: third line is not signature 
>>> count\n" );
>>> +        return false;
>>> +    }
>>> +    sigNum = atoi( &data[11] );
>>> +    if ( sigNum == 0 )
>>> +    {
>>> +        printf( "No signatures to search, exiting.\n" );
>>> +        return false;
>>> +    }
>>> +
>>> +    fgets ( data, 1000, configFile );
>>> +    if ( feof( configFile ) || ( strncmp ( "search type", data, 11 
>>> ) != 0 ) )
>>> +    {
>>> +        printf( "Error in config file: third line is not signature 
>>> count\n" );
>>> +        return false;
>>> +    }
>>> +    if ( strncmp( &data[12], "tree", 4 ) == 0 )
>>> +        config->searchOptions->searchType = treeSearch;
>>> +    else
>>> +        config->searchOptions->searchType = diagramSearch;
>>> +
>>> +    config->graphs = (Graph **)malloc( (fileNum+1) * sizeof( Graph* 
>>> ) );
>>> +    if ( !config->graphs )
>>> +    {
>>> +        printf ( "Could not allocate graph storage. Exiting\n" );
>>> +        return false;
>>> +    }
>>> +
>>> +    for ( i = 0; i < fileNum; ++i )
>>> +    {
>>> +        fgets ( data, 1000, configFile );
>>> +        if ( feof( configFile ) || ( strncmp ( "file ", data, 5 ) 
>>> != 0 ) ) /* note the ' ' */
>>> +        {
>>> +            printf( "Error in config file: mismatch of file count\n" );
>>> +            return false;
>>> +        }
>>> +
>>> +        /* strip the \n from the file name. */
>>> +        pruneLine( &data[5] );
>>> +        config->graphs[i] = parseFile( &data[5] );
>>> +        if ( !config->graphs[i] )
>>> +        {
>>> +            /* the file did not parse */
>>> +            printf( "Error parsing %s", &data[5] );
>>> +            free( config->graphs );
>>> +            return false;
>>> +        }
>>> +    }
>>> +    config->graphs[fileNum] = NULL;
>>> +
>>> +    config->signatures = (Signature *)malloc( (sigNum+1) * sizeof( 
>>> Signature ) );
>>> +    if ( !config->signatures )
>>> +    {
>>> +        printf ( "Could not allocate signature storage. Exiting\n" );
>>> +        return false;
>>> +    }
>>> +
>>> +    for ( i = 0; i < sigNum; ++i )
>>> +    {
>>> +        fgets ( data, 1000, configFile );
>>> +        if ( feof( configFile ) || ( strncmp ( "signature ", data, 
>>> 10 ) != 0 ) ) /* note the ' ' */
>>> +        {
>>> +            printf( "Error in config file: mismatch of signature 
>>> count\n" );
>>> +            return false;
>>> +        }
>>> +
>>> +        /* strip the \n from the file name. */
>>> +        pruneLine( &data[10] );
>>> +        config->signatures[i] = parseSignature( &data[10] );
>>> +        if ( !config->signatures[i] )
>>> +        {
>>> +            /* the file did not parse */
>>> +            printf( "Error parsing %s", &data[10] );
>>> +            free( config->graphs ); /* Insufficient! Should call a 
>>> destructor on each */
>>> +            free( config->signatures );
>>> +            return false;
>>> +        }
>>> +    }
>>> +    config->signatures[sigNum] = NULL;
>>> +
>>> +    return true;
>>> +}
>>> +
>>> +
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/parsing.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,114 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +
>>> +/*
>>> + * parsing.h
>>> + *
>>> + *  Created on: Jan 9, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +/* --------
>>> + * This pair of files contains the utility data types and methods for
>>> + * parsing data files into graphs. It also defines a "configuration"
>>> + * for a given run of PathFinder. The configuration holds all the info
>>> + * corresponding to the run - graphs, signatures, search types.
>>> + */
>>> +
>>> +#ifndef PARSING_H_
>>> +#define PARSING_H_
>>> +
>>> +#include "vectorUtils.h"
>>> +
>>> +/* Since we're parsing into graphs, we need to know what they are... */
>>> +#include "graph.h"
>>> +#include "configuration.h"
>>> +
>>> +
>>> +
>>> +/* buildEntranceList takes an array of integers, and builds a
>>> + * non-resolved edge list from the array. This is a special
>>> + * edge list, used only be outer nodes to identify entrance
>>> + * points into their subgraph.
>>> + */
>>> +void buildEntranceList( Node *outerNode, IntVector *nodeData );
>>> +
>>> +
>>> +/* buildNodeFromData takes the integer array built by the above
>>> + * method, and creates a node from it. If that node has
>>> + * edge data, that is also built. The data is in an array,
>>> + * the size of which is also passed in.
>>> + */
>>> +Node *buildNodeFromData( IntVector *nodeData );
>>> +
>>> +
>>> +/* resolveNodeEdges is the second pass through the graph data
>>> + * structures. The first pass defines the nodes, and puts the edge
>>> + * ids in place. The second pass finds the nodes corresponding to
>>> + * the edge id, and sets the edge pointer to that node. Edges for
>>> + * outer nodes will only reference other outer nodes. Interior
>>> + * nodes may have edges to outer nodes or other interior nodes of
>>> + * their containing node. If an edge references an undefined node
>>> + * or if an edge goes into the interior of another outer node,
>>> + * the user will be notified.
>>> + */
>>> +void resolveNodeEdges( Graph *graph, Node *sourceNode, bool 
>>> outerNode );
>>> +
>>> +
>>> +
>>> +/* parseFile goes through the specified file to build the graph. It
>>> + * returns true if everything goes as planned. Any errors will cause
>>> + * false to be returned. The built graph can be accessed via
>>> + * Graph_the().
>>> + */
>>> +
>>> +Graph *parseFile( char *fileName );
>>> +
>>> +/* parseSignature takes a space delimited string and turns it
>>> + * into a "signature" - a packed array of c-string pointers with
>>> + * a NULL pointer to signify completion. As with our edge parser
>>> + * the code depends on a space character to terminate the line.
>>> + */
>>> +char **parseSignature( char *data );
>>> +
>>> +/* parseConfigFile reads the data file names and desired search
>>> + * signatures from the config file. It returns a packed array
>>> + * of Graph pointers populated corresponding to the data files.
>>> + * Also, it returns a packed array of pointers to signatures.
>>> + * (Signatures are themselves packed arrays to C-Strings.) These
>>> + * packed arrays are terminated with a NULL pointer. They
>>> + * are returned in the "graphs" and "signatures" parameters
>>> + * which should be references to the desired pointers. See main.c.
>>> + */
>>> +bool parseConfigFile( char *configFileName, Configuration *config );
>>> +
>>> +
>>> +
>>> +#endif /* PARSING_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,667 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> + /*
>>> + * searchAlgorithms.c
>>> + *
>>> + *  Created on: Jun 18, 2013
>>> + *      Author: jbrigdo
>>> + */
>>> +
>>> +#include <stdbool.h>
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +#include <string.h>
>>> +#include <time.h>
>>> +#include <math.h>
>>> +
>>> +#ifdef USE_OMP
>>> +#include <omp.h>
>>> +#endif
>>> +
>>> +#include "searchAlgorithms.h"
>>> +#include "vectorUtils.h"
>>> +#include "utils.h"
>>> +#include "graphGen.h"
>>> +#include "statistics.h"
>>> +
>>> +
>>> +extern double currentTime();
>>> +
>>> +static Stats *globalStats = NULL;
>>> +
>>> +
>>> +
>>> +void doMultiSearches(Configuration *config)
>>> +{
>>> +    NodePtrVec *result;
>>> +    bool success;
>>> +    Graph *graph;
>>> +    Signature signature;
>>> +    int i;
>>> +    int j;
>>> +    char *debug;
>>> +    double tick, tock;
>>> +    int hours;
>>> +    int min;
>>> +    double sec;
>>> +
>>> +    tick = currentTime();
>>> +    result = NodePtrVec_new(64); /* 64 is an arbitrary size */
>>> +
>>> +    for ( i = 0; config->signatures[i] != NULL; ++i )
>>> +    {
>>> +        signature = config->signatures[i];
>>> +        /* Debug --* /
>>> +        printf ("\n\nSignature (");
>>> +        for ( k = 0; signature[k] != NULL; ++k )
>>> +        {
>>> +            debug = signature[k];
>>> +            printf("%s", signature[k]);
>>> +            if ( signature[k+1] != NULL )
>>> +                printf(" ");
>>> +            else
>>> +                printf("):\n");
>>> +        }
>>> +        / *-- End Debug */
>>> +        // printf("Signature %d:\n", i);
>>> +        for ( j = 0; config->graphs[j] != NULL; ++j )
>>> +        {
>>> +            graph = config->graphs[j];
>>> +            result->contentSize = 0; /* clear last search's result */
>>> +            // printf("\t checking file %s... ", graph->fileName);
>>> +            fflush(stdout);
>>> +            success = findLabelPath(graph, signature, result, 
>>> config->searchOptions->searchType);
>>> +            if ( success )
>>> +                {}// printf("Found!\n");
>>> +            else
>>> +                {}// printf("Not found. Bummer.\n");
>>> +        }
>>> +    }
>>> +
>>> +    tock = currentTime();
>>> +    sec = tock-tick;
>>> +    hours = (int)sec/3600;
>>> +    sec = fmod( sec, 3600.0 );
>>> +    min = (int)sec/60;
>>> +    sec = fmod(sec, 60.0);
>>> +    printf ("\n\nOverall Search Time: %02d:02%d:%05.2f\n", hours, 
>>> min, sec);
>>> +
>>> +}
>>> +
>>> +/* findNextLabel is a recursive method that determines if a path 
>>> exists between a
>>> + * specific node and the label that is at the start of the label 
>>> array argument. The
>>> + * label array is an array of char pointers that is terminated with 
>>> a NULL pointer. The
>>> + * first pointer is the "current" label.
>>> + *
>>> + * The node's edge nodes are checked against the current label. If 
>>> none of them match, then
>>> + * this method recurses with each edge node and the current label.
>>> + *
>>> + * If an edge matches, then we are beginning a search for the next 
>>> "leg" of the labels.
>>> + * We recurse with that specific edge and the "next" label. That is 
>>> the [1] element of
>>> + * the label array. This starts the search along the next leg - at 
>>> this point we have
>>> + * to start a new "result" vector, because we check that vector for 
>>> loops. It MAY be the
>>> + * case that the next path segment passes through nodes already 
>>> traversed in a previous
>>> + * leg. A new "result" vector will solve that.
>>> + *
>>> + * If the next element in the labels list is NULL, the matching 
>>> edge signifies the end of
>>> + * our search! VICTORY!
>>> + *
>>> + * If we reach the last edge with out a match (directly or 
>>> recursively) we return a false
>>> + * list.
>>> + */
>>> +
>>> +bool findNextLabel( Node *node, Signature labels, NodePtrVec 
>>> *result, Bitfield *visited ) /* NodePtrVec *visited ) */
>>> +{
>>> +    EdgeList *edge;
>>> +    bool success = false;
>>> +    NodePtrVec *nextLegResult = NULL;
>>> +    /* NodePtrVec *nextLegVisited = NULL; */
>>> +    Bitfield *nextLegVisited = NULL;
>>> +
>>> +
>>> +    /* A little basic error checking */
>>> +    if ( !node || !labels || !result|| !visited )
>>> +    {
>>> +        return( false );
>>> +    }
>>> +
>>> +    /* If this node is already in the vector, we have found a loop. 
>>> return false. */
>>> +
>>> +    if ( Bitfield_nodeVisited( visited, node ) )
>>> +        return( false );
>>> +
>>> +    /* put this node on the result vector to show that we've been 
>>> here */
>>> +    NodePtrVec_push( result, node );
>>> +
>>> +    /* Check this node's edges to see if there's a match */
>>> +    /* Note: We have a NodePtrVec holding the set of nodes with 
>>> this label. It
>>> +     *       may be more optimal to see if a given edge node is in 
>>> that set
>>> +     *       rather than doing a bunch of inefficient strcmp calls. 
>>> Another approach
>>> +     *       would be to have unique hash values for each label, 
>>> and thereby be
>>> +     *       able to compare those. However for the initial version 
>>> of this code,
>>> +     *       keeping things simple and straightforward, we're doing 
>>> the string
>>> +     *       compare.
>>> +     */
>>> +
>>> +    for ( edge = node->edges; edge != NULL; edge = edge->nextEdge )
>>> +    {
>>> +
>>> +        // string based:
>>> +        if ( edge->targetNode->label && strcmp( 
>>> edge->targetNode->label, labels[0] ) == 0 )
>>> +        // index based: if ( edge->targetNode->labelIdx == 
>>> labelIdxs[0] )
>>> +        {
>>> +            if ( labels[1] != NULL ) /* more steps in the signature */
>>> +            {
>>> +                nextLegResult = NodePtrVec_new( 50 ); /* arbitrary 
>>> size, malloc success checked in recursion */
>>> +                nextLegVisited = Bitfield_new(visited->bitsNeeded);
>>> +
>>> +                success = findNextLabel( edge->targetNode, 
>>> &labels[1], nextLegResult, nextLegVisited );
>>> +                /* NodePtrVec_delete( nextLegVisited ); */
>>> +                Bitfield_delete( nextLegVisited );
>>> +                if ( success )
>>> +                {
>>> +                    NodePtrVec_appendVectors( result, 
>>> nextLegResult, true );
>>> +                    NodePtrVec_delete( nextLegResult );
>>> +                    return( true );
>>> +                }
>>> +
>>> +            }
>>> +            else /* We have exhausted the signature - ultimate 
>>> victory! */
>>> +            {
>>> +                /* Register this edge node as being the final node */
>>> +                NodePtrVec_push( result, edge->targetNode );
>>> +                return( true );
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +
>>> +    /* IF we made it here, we need to continue through the tree, 
>>> seeing if any of our
>>> +     * edge nodes have a connection to a labeled node.
>>> +     */
>>> +    for ( edge = node->edges; edge != NULL; edge = edge->nextEdge )
>>> +    {
>>> +        success = findNextLabel( edge->targetNode, labels, result, 
>>> visited );
>>> +        if ( success )
>>> +            return( true ); /* this edge has a path to the ultimate 
>>> signature path */
>>> +    }
>>> +
>>> +
>>> +    /* and, if we make it here, we have failed. */
>>> +    NodePtrVec_pop( result ); /* take current node off the result 
>>> vector */
>>> +    return false;
>>> +}
>>> +
>>> +
>>> +
>>> +/* A method to custom-store our results */
>>> +static void logStats(NodePtrVec *result)
>>> +{
>>> +    if ( !result ) return;
>>> +    if ( !globalStats )
>>> +        globalStats = Stats_new();
>>> +    Stats_logPath(globalStats, result);
>>> +}
>>> +
>>> +static void printStats()
>>> +{
>>> +    int i;
>>> +
>>> +    if ( globalStats )
>>> +    {
>>> +        Stats_calculate(globalStats);
>>> +
>>> +        printf ( "\nThis graph has %f average nodes between 
>>> labels.\nStandard deviation: %f, total paths: %d\n\n",
>>> +                globalStats->averageLength, 
>>> globalStats->standardDeviation, globalStats->pathLengths->size );
>>> +        printf ("\tShortest Path: %d, Longest Path: %d\n", 
>>> globalStats->minLength, globalStats->maxLength);
>>> +        for ( i = globalStats->minLength; i <= 
>>> globalStats->maxLength; ++i )
>>> +        {
>>> +            if ( globalStats->histogram[i] != 0 )
>>> +                printf ("\tlength %d appeared %d times\n", i, 
>>> globalStats->histogram[i] );
>>> +        }
>>> +
>>> +    }
>>> +}
>>> +
>>> +
>>> +/* A method to custom-store our results */
>>> +
>>> +/* At some point, we will want to use the FullPath argument and 
>>> pass it along to
>>> + * buildGraphFromPaths. Until then, however, we're only going to 
>>> build the most
>>> + * minimal graph possible.
>>> + */
>>> +static void logResult(NodeVecVec *storage, NodePtrVec *result, 
>>> SearchOptions *options)
>>> +{
>>> +    NodePtrVec *tips = NodePtrVec_new(2);
>>> +    if ( !storage || !result || !tips ) return;
>>> +
>>> +    /* We log the stats here, because the storage method below may 
>>> not hold
>>> +     * the entire path.
>>> +     */
>>> +    if ( !options->multiThreaded && options->doStatistics ) /* 
>>> statistics are not thread-safe yet */
>>> +        logStats(result);
>>> +
>>> +    /* Ultimately we may want to log more than the ends... */
>>> +    /* Future: if ( options->buildType == endNodesOnly ) { */
>>> +    NodePtrVec_push(tips, result->vector[0]);
>>> +    NodePtrVec_push(tips, result->vector[result->contentSize-1]);
>>> +    if ( !NodeVecVec_insert(storage, tips) ) /* makes a copy of 
>>> tips, so we need to... */
>>> +    {
>>> +        printf("CrashAndBURN!!!\n\n");
>>> +        fflush(stdout);
>>> +    }
>>> +    NodePtrVec_delete(tips); /* ... free the mallocs! */
>>> +}
>>> +
>>> +
>>> +
>>> +/* findAndRecordAllPaths is almost exactly like findNextLabel. It 
>>> differs only in that it
>>> + * 1) doesn't stop with the first discovery of the specified path 
>>> and 2) records the discovered
>>> + * path. To do this, it doesn't create a new result vector for
>>> + */
>>> +
>>> +void findAndRecordAllPaths( Node *node, Signature labels, int 
>>> *labelIdxs,
>>> +        NodePtrVec *result, Bitfield *visited, NodeVecVec *storage,
>>> +        SearchOptions *options )
>>> +{
>>> +    EdgeList *edge;
>>> +    /* NodePtrVec *nextLegVisited = NULL; */
>>> +    Bitfield *nextLegVisited = NULL;
>>> +
>>> +
>>> +    /* A little basic error checking */
>>> +    if ( !node || !labels || !labelIdxs || !result|| !visited )
>>> +    {
>>> +        return;
>>> +    }
>>> +
>>> +    /* If this node is already in the vector, we have found a loop. 
>>> return false. */
>>> +/*
>>> +    if ( NodePtrVec_findReverse( visited, node ) )
>>> +        return( false );
>>> +    else
>>> +        NodePtrVec_push( visited, node );
>>> +*/
>>> +    if ( Bitfield_nodeVisited( visited, node ) )
>>> +        return;
>>> +
>>> +    /* put this node on the result vector to show that we've been 
>>> here */
>>> +    NodePtrVec_push( result, node );
>>> +
>>> +    /* Check this node's edges to see if there's a match */
>>> +    /* Note: We have a NodePtrVec holding the set of nodes with 
>>> this label. It
>>> +     *       may be more optimal to see if a given edge node is in 
>>> that set
>>> +     *       rather than doing a bunch of inefficient strcmp calls. 
>>> Another approach
>>> +     *       would be to have unique hash values for each label, 
>>> and thereby be
>>> +     *       able to compare those. However for the initial version 
>>> of this code,
>>> +     *       keeping things simple and straightforward, we're doing 
>>> the string
>>> +     *       compare.
>>> +     */
>>> +
>>> +    for ( edge = node->edges; edge != NULL; edge = edge->nextEdge )
>>> +    {
>>> +
>>> +        // string based:
>>> +        if ( edge->targetNode->label && strcmp( 
>>> edge->targetNode->label, labels[0] ) == 0 )
>>> +        // index based: if ( edge->targetNode->labelIdx == 
>>> labelIdxs[0] )
>>> +        {
>>> +            // strcmp based:
>>> +            if ( labels[1] != NULL ) /* more steps in the signature */
>>> +            // index based: if ( labelIdxs[1] != -1 ) /* more steps 
>>> in the signature */
>>> +            {
>>> +                nextLegVisited = Bitfield_new(visited->bitsNeeded);
>>> +                findAndRecordAllPaths(edge->targetNode, &labels[1], 
>>> &labelIdxs[1], result,
>>> +                        nextLegVisited, storage, options );
>>> +                Bitfield_delete(nextLegVisited);
>>> +            }
>>> +            else /* We have exhausted the signature - ultimate 
>>> victory! */
>>> +            {
>>> +                /* Register this edge node as being the final node */
>>> +                // printf ("\tFound!\n");
>>> +                NodePtrVec_push(result, edge->targetNode);
>>> +                Bitfield_nodeVisited(visited, edge->targetNode);/* 
>>> Mark it as visited */
>>> +                logResult(storage, result, options); // <<<--- 
>>> here's where I record it
>>> +                NodePtrVec_pop(result);
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +
>>> +    /* IF we made it here, we need to continue through the tree, 
>>> seeing if any of our
>>> +     * edge nodes have a connection to a labeled node.
>>> +     */
>>> +    for ( edge = node->edges; edge != NULL; edge = edge->nextEdge )
>>> +    {
>>> +        findAndRecordAllPaths(edge->targetNode, labels, labelIdxs, 
>>> result, visited, storage, options);
>>> +    }
>>> +
>>> +    NodePtrVec_pop( result ); /* take current node off the result 
>>> vector */
>>> +    return;
>>> +}
>>> +
>>> +
>>> +
>>> +/* findLabelPath takes an array of labels, determines if there are 
>>> nodes associated
>>> + * with the labels (each label search will return a NodePtrVec*), 
>>> and determine if
>>> + * paths exist passing through the set of labels. This returns the 
>>> first FOUND
>>> + * path, not the optimal one. We could do that in a future 
>>> iteration of the code
>>> + * by keeping track of all paths found, and going with the shortest.
>>> + *
>>> + * The labels passed in is an array of char pointers. The array is 
>>> null terminated -
>>> + * i.e. the last valid entry in the array is followed by a pointer 
>>> with NULL in it.
>>> + */
>>> +bool findLabelPath( Graph *graph, Signature labels, NodePtrVec 
>>> *result, SearchType searchType )
>>> +{
>>> +    NodePtrVec *startNodes = NULL; /* set of nodes with the first 
>>> label - potential path start nodes */
>>> +    int i;
>>> +    bool found = false; /* stopping as soon as we can find a path 
>>> to a final node */
>>> +    /* NodePtrVec *visited = NodePtrVec_new( 50 ); /-* arbitrary 
>>> size *-/ */
>>> +    Bitfield *visited = Bitfield_new(graph->totalNodes);
>>> +
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !graph || !labels || !labels[0] || !labels[1] || !result 
>>>  || !visited )
>>> +        return( false );
>>> +
>>> +    /* Un-comment to short-circuit searches for non-represented 
>>> signatures. -->* /
>>> +    if ( !SystemCallMap_signatureRepresented( graph->systemCallMap, 
>>> labels ) )
>>> +    {
>>> +        //printf( "%s %s invalid signature labels for graph.\n", 
>>> labels[0], labels[1] );
>>> +        return( false );
>>> +    }
>>> +    / *<-- end of short-circuit region */
>>> +
>>> +    startNodes = SystemCallMap_findLabeledNodes( 
>>> graph->systemCallMap, labels[0] );
>>> +
>>> +    if ( !startNodes )
>>> +        return( false );
>>> +
>>> +    /* So, if we've made it this far, we have a valid start label. 
>>>  Now, we need to
>>> +     * iterate through the start nodes and see if they can get to 
>>> the next label...
>>> +     */
>>> +
>>> +    for ( i = 0; i < startNodes->contentSize && !found; ++i )
>>> +    {
>>> +        if ( searchType == diagramSearch )
>>> +        {
>>> +            SearchDiagram *element = SearchDiagram_findNode( 
>>> graph->searchDiagram, startNodes->vector[i] );
>>> +            if ( element )
>>> +                found = SearchDiagram_findSignatureAlongEdges( 
>>> element->node, element->edgeReferenceArray,
>>> + 
>>>                                                               &labels[1], 
>>> result, visited );
>>> +        }
>>> +        else
>>> +            found = findNextLabel( startNodes->vector[i], 
>>> &labels[1], result, visited );
>>> +        Bitfield_clear( visited );
>>> +
>>> +        if ( !found && result->contentSize != 0 ) /* If it's not 
>>> found the result SHOULD be empty, however... */
>>> +            result->contentSize = 0; /* effectively clear the 
>>> result NodePtrVec */
>>> +    }
>>> +
>>> +
>>> +    /* NodePtrVec_delete( visited ); */
>>> +    Bitfield_delete( visited );
>>> +    return( found );
>>> +}
>>> +
>>> +
>>> +/* findAllPossibleLegs does an exhaustive search through each 
>>> possible label
>>> + * pairing to determine which legs are possible. This is a 
>>> brute-force nxn
>>> + * approach that builds a signature holding only the second label 
>>> and then
>>> + * searches for that signature from the nodes representing the 
>>> first label.
>>> + * For the time being, it simply prints out the legs that are 
>>>  possible in
>>> + * this graph.
>>> + */
>>> +int findAllPossibleLegs( Graph *graph, SearchType searchType )
>>> +{
>>> +    int i, j;
>>> +    int found = 0;
>>> +    int searches = 0;
>>> +    double tick, tock;
>>> +    int hours, min;
>>> +    double sec;
>>> +    char timeStr[50];
>>> +
>>> +    tick = currentTime();
>>> +    fprintf ( stdout, "Immediately before parallel\n" );
>>> +
>>> +    //#pragma omp parallel private(i,j) shared(graph) 
>>> reduction(+:found) reduction(+:searches)
>>> +    //#pragma omp single
>>> +    {
>>> +        //#pragma omp parallel for private(i,j) default(none)
>>> +        #ifdef USE_OMP
>>> +        #pragma omp parallel for private(i,j) shared(graph) 
>>> reduction(+:found) reduction(+:searches)
>>> +        #pragma omp collapse(2)
>>> +        #endif
>>> +        for ( i = 0; i < graph->systemCallMap->contentSize; ++i )
>>> +        {
>>> +            for ( j = 0; j < graph->systemCallMap->contentSize; ++j )
>>> +            {
>>> +                ++searches;
>>> +                char *fullSignature[3] = { NULL, NULL, NULL };
>>> +                int fullIntSignature[3] = { 0, 0, -1 };
>>> +                fullSignature[0] = 
>>> graph->systemCallMap->vector[i]->label;
>>> +                fullSignature[1] = 
>>> graph->systemCallMap->vector[j]->label;
>>> +                fullIntSignature[0] = i;
>>> +                fullIntSignature[1] = j;
>>> +                // NodePtrVec *result = NodePtrVec_new(25);
>>> +
>>> +                /* findLabelPath does the findNextLabel in the 
>>> above loops */
>>> +                //#pragma omp task shared(graph, fullSignature, found)
>>> +                {
>>> +                    NodePtrVec *result = NodePtrVec_new( 25 );
>>> +                    if ( findLabelPath( graph, fullSignature, 
>>> result, searchType ) )
>>> +                    {
>>> +//                        printStack(result);
>>> +                        // logStats(result);
>>> +                        ++ found;
>>> +                    }
>>> +                    else
>>> +                    {
>>> +//                        printf ( "\n\tPath does not exist %s --/ 
>>> /-> %s. %d steps.\n", fullSignature[0],
>>> +//                                 fullSignature[1], 
>>> result->contentSize );
>>> +                    }
>>> +                    if ( result )
>>> +                    {
>>> +                        NodePtrVec_delete( result );
>>> +                    }
>>> +                }
>>> +            }
>>> +            //#pragma omp taskwait
>>> +        }
>>> +    }
>>> +
>>> +
>>> +    tock = currentTime();
>>> +
>>> +
>>> +    sec = tock-tick;
>>> +    hours = (int)sec/3600;
>>> +    sec = fmod( sec, 3600.0 );
>>> +    min = (int)sec/60;
>>> +    sec = fmod( sec, 60.0 );
>>> +    printf ( "\n\n%d found out of %d searches. Overall Time: 
>>> %d:%d:%2.3f\n",
>>> +             found, searches, hours, min, sec );
>>> +    timeStr[0] = '\0'; /* just in case sprintf doesn't do what we 
>>> want. */
>>> +    sprintf ( timeStr, "%02d:%02d:%02.3f", hours, min, sec );
>>> +    YAMLWriteInt("Signatures Found", found);
>>> +    YAMLWriteString("Search Time", timeStr);
>>> +
>>> +
>>> +    //printStats();
>>> +
>>> +    return( found );
>>> +}
>>> +
>>> +/*
>>> + * findAndLogAllPossibleLegs has the same search algorithm as 
>>> findAllPossibleLegs. However, the requirement
>>> + * that all the legs be logged requires a more sophisticated means 
>>> of parallelization in order to do a
>>> + * reduction of the solutions when all the threads are done.
>>> + */
>>> +int findAndLogAllPossibleLegs(Graph *graph, SearchOptions *options)
>>> +{
>>> +    int i, j, k;
>>> +    int found = 0;
>>> +    int searches = 0;
>>> +    double tick, tock;
>>> +    int hours, min;
>>> +    double sec;
>>> +    int maxThreads = 1;
>>> +    NodeVecVec **lastingResults;
>>> +    Graph *optimizedGraph = NULL;
>>> +    char timeStr[50];
>>> +
>>> +    /* A little bit of error checking */
>>> +    if ( !graph )
>>> +        return 0;
>>> +
>>> +    tick = currentTime();
>>> +    fprintf(stdout, "Immediately before parallel\n" );
>>> +
>>> +    #ifdef USE_OMP
>>> +    #pragma omp parallel private(i,j,k) 
>>> shared(graph,maxThreads,lastingResults) reduction(+:found) 
>>> reduction(+:searches)
>>> +    #endif
>>> +    {
>>> +        #ifdef USE_OMP
>>> +        int myThread = omp_get_thread_num();
>>> +        #else
>>> +        int myThread = 0;
>>> +        #endif
>>> +
>>> +        NodeVecVec *myResults = NULL;
>>> +
>>> +        #ifdef USE_OMP
>>> +        #pragma omp single
>>> +        #endif
>>> +        {
>>> +            #ifdef USE_OMP
>>> +            maxThreads = omp_get_num_threads();
>>> +            #else
>>> +            maxThreads = 1;
>>> +            #endif
>>> +
>>> +            options->multiThreaded = maxThreads > 1;
>>> +            /* debug * /printf( "%d total threads, this one is 
>>> %d\n", maxThreads, myThread ); /* debug */
>>> +            lastingResults = malloc((maxThreads+1) * 
>>> sizeof(NodeVecVec*) );
>>> +            lastingResults[maxThreads] = 0; /* Null terminated to 
>>> avoid having to keep track of bitsNeeded */
>>> +        }
>>> +
>>> +        #ifdef USE_OMP
>>> +        #pragma omp critical
>>> +        #endif
>>> +        {
>>> +            lastingResults[myThread] = NodeVecVec_new(64); /* 
>>> Arbitrary - multiple of 8, eventually cache line aligned... */
>>> +            myResults = lastingResults[myThread];
>>> +        }
>>> +
>>> +        #ifdef USE_OMP
>>> +        #pragma omp single
>>> +        #endif
>>> +        {
>>> +            printf ("Immediately before nested for's\n");
>>> +        }
>>> +
>>> +        #ifdef USE_OMP
>>> +        #pragma omp for
>>> +        #pragma omp collapse(2)
>>> +        #endif
>>> +        for ( i = 0; i < graph->systemCallMap->contentSize; ++i )
>>> +        {
>>> +            for ( j = 0; j < graph->systemCallMap->contentSize; ++j )
>>> +            {
>>> +                ++searches;
>>> +                for (k = 0; k < 
>>> graph->systemCallMap->vector[i]->nodes->contentSize; ++k)
>>> +                {
>>> +                    char *fullSignature[3] = { NULL, NULL, NULL };
>>> +                    int fullIntSignature[3] = { 0, 0, -1 };
>>> +                    fullSignature[0] = 
>>> graph->systemCallMap->vector[i]->label;
>>> +                    fullSignature[1] = 
>>> graph->systemCallMap->vector[j]->label;
>>> +                    fullIntSignature[0] = i;
>>> +                    fullIntSignature[1] = j;
>>> +                    NodePtrVec *result = NodePtrVec_new(16);
>>> +                    Bitfield *visited = 
>>> Bitfield_new(graph->totalNodes);
>>> +                    /* debug ---> * /
>>> +                    printf( "Searching for %s(%d) ~~~> %s\n", 
>>> fullSignature[0],
>>> + 
>>>                            graph->systemCallMap->vector[i]->nodes->vector[k]->id,
>>> +                            fullSignature[1]);
>>> +                    /* <-- debug */
>>> +                    findAndRecordAllPaths( 
>>> graph->systemCallMap->vector[i]->nodes->vector[k], &fullSignature[1],
>>> +                            &fullIntSignature[1], result, visited, 
>>> myResults, options );
>>> +                    Bitfield_delete(visited);
>>> +                    if ( result )
>>> +                        NodePtrVec_delete( result );
>>> +                } // end of for (k)... fork? heh.
>>> +            } // end of for (j)
>>> +        } // end of for (i)
>>> +
>>> +        found = myResults->contentSize;
>>> +    }
>>> +
>>> +    tock = currentTime();
>>> +    sec = tock-tick;
>>> +    hours = (int)sec/3600;
>>> +    sec = fmod( sec, 3600.0 );
>>> +    min = (int)sec/60;
>>> +    sec = fmod( sec, 60.0 );
>>> +    printf ( "\n\n%d found for %d searches. Overall Time: 
>>> %d:%d:%2.3f\n",
>>> +            found, searches, hours, min, sec );
>>> +    timeStr[0] = '\0'; /* just in case sprintf doesn't do what we 
>>> want. */
>>> +    sprintf ( timeStr, "%02d:%02d:%02.3f", hours, min, sec );
>>> +    YAMLWriteInt("Signatures Found", found);
>>> +    YAMLWriteString("Search Time", timeStr);
>>> +
>>> +    /* debug --> * /
>>> +    printf ("max threads still:%d\n", maxThreads);
>>> +    for ( i = 0; i < maxThreads; ++i )
>>> +    {
>>> +        printf ( "printing out thread %d result - %d long\n", i, 
>>> lastingResults[i]->contentSize );
>>> +        for ( j = 0; j < lastingResults[i]->contentSize; ++j )
>>> +        {
>>> +            printf("\t");
>>> +            printStack( lastingResults[i]->vector[j] );
>>> +            printf("\n");
>>> +        }
>>> +    }
>>> +    /* <-- debug */
>>> +
>>> +    /* At some point, we will want to use the FullPath argument and 
>>> pass it along to
>>> +     * buildGraphFromPaths. Until then, however, we're only going 
>>> to build the most
>>> +     * minimal graph possible.
>>> +     */
>>> +    if ( options->writeOutputFile && options->outputFile )
>>> +    {
>>> +        optimizedGraph = buildGraphFromPaths(lastingResults, 
>>> options->buildType);
>>> +        exportGraph(optimizedGraph, options->outputFile);
>>> +    }
>>> +
>>> +    if ( options->doStatistics && !options->multiThreaded )
>>> +        printStats();
>>> +
>>> +    return( found );
>>> +}
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchAlgorithms.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,106 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +
>>> + /*
>>> + * searchAlgorithms.h
>>> + *
>>> + *  Created on: Jun 18, 2013
>>> + *      Author: Brian "Rig" Rigdon
>>> + */
>>> +
>>> +#ifndef SEARCHALGORITHMS_H_
>>> +#define SEARCHALGORITHMS_H_
>>> +
>>> +
>>> +#include "vectorUtils.h"
>>> +#include "graph.h"
>>> +#include "configuration.h"
>>> +
>>> +
>>> +/* findNextLabel is a recursive method that determines if a path 
>>> exists between a
>>> + * specific node and the label that is at the start of the label 
>>> array argument. The
>>> + * label array is an array of char pointers that is terminated with 
>>> a NULL pointer. The
>>> + * first pointer is the "current" label.
>>> + *
>>> + * The node's edge nodes are checked against the current label. If 
>>> none of them match, then
>>> + * this method recurses with each edge node and the current label.
>>> + *
>>> + * If an edge matches, then we are beginning a search for the next 
>>> "leg" of the labels.
>>> + * We recurse with that specific edge and the "next" label. That is 
>>> the [1] element of
>>> + * the label array. If that element is NULL, the matching edge 
>>> signifies the end of our
>>> + * search! VICTORY!
>>> + *
>>> + * If we reach the last edge with out a match (directly or 
>>> recursively) we return a false
>>> + * list.
>>> + */
>>> +
>>> +bool findNextLabel( Node *node, char *labels[], NodePtrVec *result, 
>>> Bitfield *visited ); /* NodePtrVec *visited ); */
>>> +
>>> +/* findAndRecordAllPaths is almost exactly like findNextLabel. It 
>>> differs only in that it
>>> + * 1) doesn't stop with the first discovery of the specified path 
>>> and 2) records the discovered
>>> + * path. To do this, it doesn't create a new result vector for
>>> + */
>>> +
>>> +void findAndRecordAllPaths( Node *node, Signature labels, int 
>>> *labelIdxs,
>>> +        NodePtrVec *result, Bitfield *visited, NodeVecVec *storage,
>>> +        SearchOptions *options );
>>> +
>>> +/*
>>> + *  findLabelPath takes an array of labels, determines if there are 
>>> nodes associated
>>> + * with the labels (each label search will return a NodePtrVec*), 
>>> and determine if
>>> + * paths exist passing through the set of labels.
>>> + */
>>> +bool findLabelPath( Graph *graph, Signature labels, NodePtrVec 
>>> *result, SearchType searchType );
>>> +
>>> +/*
>>> + *  findAllPossibleLegs does an exhaustive search through each 
>>> possible label
>>> + * pairing to determine which legs are possible. This is a 
>>> brute-force nxn
>>> + * approach that builds a signature holding only the second label 
>>> and then
>>> + * searches for that signature from the nodes representing the 
>>> first label.
>>> + * For the time being, it simply prints out the legs that are 
>>>  possible in
>>> + * this graph.
>>> + */
>>> +int findAllPossibleLegs( Graph *graph, SearchType searchType );
>>> +
>>> +/*
>>> + * findAndLogAllPossibleLegs is a duplicate of the above method, but it
>>> + * stores the results that are found
>>> + */
>>> +
>>> +int findAndLogAllPossibleLegs( Graph *graph, SearchOptions *options );
>>> +
>>> +/* Once the configuration file is parsed, a config structure is 
>>> created that
>>> + * specifies the graphs and the signatures to be searched against. 
>>> This method
>>> + * does multiple signature searches against multiple files
>>> + */
>>> +
>>> +void doMultiSearchesQT(Configuration *config);
>>> +
>>> +#endif /* SEARCHALGORITHMS_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,284 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +
>>> +/*
>>> + * searchDiagram.c
>>> + *
>>> + *  Created on: Feb 1, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#include "searchDiagram.h"
>>> +#include <string.h>
>>> +#include <stdlib.h>
>>> +#include <stdio.h>
>>> +
>>> +
>>> +/* Scream through the diagram to get the element corresponding to 
>>> this key. This
>>> + * simply iterates through the entire list, there is no 
>>> optimization in the search
>>> + * algorithm.
>>> + */
>>> +SearchDiagram *SearchDiagram_findNode ( SearchDiagram *diagram, 
>>> Node *node )
>>> +{
>>> +    int idx;
>>> +
>>> +    /* Do some basic error checking */
>>> +    if ( !diagram )
>>> +        return( NULL );
>>> +
>>> +    for ( idx = 0; diagram[idx].node != NULL; ++idx )
>>> +    {
>>> +        if ( diagram[idx].node == node ) /* We found it! */
>>> +            return( &diagram[idx] );
>>> +    }
>>> +
>>> +    /* If we made it here, we couldn't find it. */
>>> +    return( NULL );
>>> +}
>>> +
>>> +
>>> +
>>> +/* The meat of this process - the function that creates the search 
>>> diagram.
>>> + * It allocates the memory for the array of search diagram elements and
>>> + * populates them with node data and edgeID arrays. Outer nodes are 
>>> inserted
>>> + * into the node array from the lowest addresses and inner nodes 
>>> are inserted
>>> + * into the search diagram from the highest. The authors did this 
>>> to (hopefully)
>>> + * give a little more efficiency to the searching of the diagram.
>>> + */
>>> +SearchDiagram *SearchDiagram_build( NodeList *nodeTree, int nodeCount )
>>> +{
>>> +    SearchDiagram *diagram = NULL;
>>> +    NodeList *outerNodes = NULL;
>>> +    Node *node = NULL;
>>> +    NodeList *innerNodes = NULL;
>>> +    /* Originally, we speculated that searches would stream through 
>>> the outer
>>> +     * nodes more than through the interior nodes. (We were wrong.) 
>>> So we had
>>> +     * this mechanism in place to put the outer nodes at the 
>>> beginning of the
>>> +     * diagram and the interior nodes at the end. Because we were 
>>> wrong, this
>>> +     * increases the likelihood of cache misses rather than 
>>> decreasing it. Ergo
>>> +     * we have replaced the outerIdx and the innerIdx calls.
>>> +     *
>>> +     * So... it turns out that putting the inner nodes near their 
>>> containing
>>> +     * node actually slows things down - but it's minor (2% - 3 
>>> minutes in a
>>> +     * 120 minute run.)
>>> +    int index = 0;
>>> +     */
>>> +    int outerIdx = 0;           /* index from the bottom up for 
>>> outer nodes */
>>> +    int innerIdx = nodeCount-1; /* and from the top down for 
>>> interior nodes */
>>> +
>>> +    int edgeCount;
>>> +    EdgeList *edges;
>>> +    SearchDiagram *element; /* for searching in our diagram */
>>> +
>>> +    /* Do some basic error checking */
>>> +    if ( !nodeTree || nodeCount == 0 )
>>> +        return NULL;
>>> +
>>> +    /* Allocate an array of SearchDiagram Elements (+1 for a 
>>> terminus element) */
>>> +    diagram = malloc ( (nodeCount+1) * sizeof(SearchDiagram) );
>>> +    if ( !diagram ) /* malloc failed */
>>> +        return( NULL );
>>> +
>>> +    diagram[nodeCount].node = NULL;
>>> +    diagram[nodeCount].edgeReferenceArray = NULL;
>>> +
>>> +    /* Scream through the Nodes and fill in the Search Array 
>>> allocate space for edges */
>>> +    for ( outerNodes = nodeTree; outerNodes != NULL; outerNodes = 
>>> outerNodes->nextNode )
>>> +    {
>>> +        node = outerNodes->node;
>>> +        /* This diagram entry needs a key */
>>> +        diagram[outerIdx].node = node;
>>> +        /* How many edges do we need? */
>>> +        edgeCount = node->edgeCount + node->entranceCount;
>>> +        if ( edgeCount > 0 ) /* allocate space for edgeIdArray (+1 
>>> for a terminus element) */
>>> +        {
>>> +            diagram[outerIdx].edgeReferenceArray = malloc ( 
>>> (edgeCount+1) * sizeof(EdgeReferences) );
>>> + 
>>>            diagram[outerIdx].edgeReferenceArray[edgeCount].edgeTarget 
>>> = NULL;
>>> + 
>>>            diagram[outerIdx].edgeReferenceArray[edgeCount].targetNodeEdges 
>>> = NULL;
>>> +        }
>>> +        else
>>> +            diagram[outerIdx].edgeReferenceArray = NULL;
>>> +
>>> +        /* What do we do if that malloc fails? */
>>> +
>>> +        /* increment the outer index: */
>>> +        ++outerIdx;
>>> +
>>> +        /* Now do the same for this node's interior graph (if 
>>> present) */
>>> +        for ( innerNodes = node->interiorNodes; innerNodes != NULL; 
>>> innerNodes = innerNodes->nextNode )
>>> +        {
>>> +            node = innerNodes->node;
>>> +            diagram[innerIdx].node = node;
>>> +            edgeCount = node->edgeCount + node->entranceCount;
>>> +            if ( node->edgeCount > 0 ) /* allocate space for 
>>> edgeIdArray (+1 for a terminus element) */
>>> +            {
>>> +                diagram[innerIdx].edgeReferenceArray = malloc ( 
>>> (edgeCount+1) * sizeof(EdgeReferences) );
>>> + 
>>>                diagram[innerIdx].edgeReferenceArray[edgeCount].edgeTarget 
>>> = NULL;
>>> + 
>>>                diagram[innerIdx].edgeReferenceArray[edgeCount].targetNodeEdges 
>>> = NULL;
>>> +            }
>>> +            else
>>> +                diagram[innerIdx].edgeReferenceArray = NULL;
>>> +
>>> +            /* Again, what do we do if that malloc fails? */
>>> +
>>> +            /* decrement the interior index: */
>>> +            --innerIdx;
>>> +        }
>>> +
>>> +    }
>>> +
>>> +
>>> +    /* Check to make sure our counters line up. If they don't, we 
>>> have a corrupt
>>> +     * graph. That is, there is a mismatch between node definitions 
>>> and edge lists.
>>> +     * The innerIdx should reference the previous outerIdx location.
>>> +     */
>>> +    if ( outerIdx != innerIdx +1 )
>>> +    {
>>> +        /* Houston, we have a problem */
>>> +        printf ( "Bummer. outerIdx: %d, innerIdx: %d, node count: 
>>> %d\n", outerIdx, innerIdx, nodeCount );
>>> +    }
>>> +
>>> +
>>> +    /* For each node, populate its edge list - edges and entrance 
>>> nodes (if there) */
>>> +    outerIdx = 0;
>>> +    innerIdx = nodeCount-1;
>>> +    for ( outerNodes = nodeTree; outerNodes != NULL; outerNodes = 
>>> outerNodes->nextNode )
>>> +    {
>>> +        /* iterate through this node's edges to populate the 
>>> EdgeIdArray */
>>> +        node = outerNodes->node;
>>> +        for ( edges = node->edges, edgeCount = 0;
>>> +              edges != NULL;
>>> +              edges = edges->nextEdge, ++edgeCount )
>>> +        {
>>> +            element = SearchDiagram_findNode( diagram, 
>>> edges->targetNode );
>>> + 
>>>            diagram[outerIdx].edgeReferenceArray[edgeCount].edgeTarget 
>>> = edges->targetNode;
>>> + 
>>>            diagram[outerIdx].edgeReferenceArray[edgeCount].targetNodeEdges 
>>> = element->edgeReferenceArray;
>>> +        }
>>> +        ++outerIdx;
>>> +
>>> +        /* And then scream through the interior nodes to take care 
>>> of their edges */
>>> +        for ( innerNodes = node->interiorNodes; innerNodes != NULL; 
>>> innerNodes = innerNodes->nextNode )
>>> +        {
>>> +            node = innerNodes->node;
>>> +            for ( edges = node->edges, edgeCount = 0;
>>> +                  edges != NULL;
>>> +                  edges = edges->nextEdge, ++edgeCount )
>>> +            {
>>> +                element = SearchDiagram_findNode( diagram, 
>>> edges->targetNode );
>>> + 
>>>                diagram[innerIdx].edgeReferenceArray[edgeCount].edgeTarget 
>>> = edges->targetNode;
>>> + 
>>>                diagram[innerIdx].edgeReferenceArray[edgeCount].targetNodeEdges 
>>> = element->edgeReferenceArray;
>>> +            }
>>> +            --innerIdx;
>>> +        }
>>> +    }
>>> +
>>> +    return diagram;
>>> +}
>>> +
>>> +
>>> +
>>> +bool SearchDiagram_findSignatureAlongEdges ( Node *node, 
>>> EdgeReferences *edges,
>>> +                                             char *labels[], 
>>> NodePtrVec *result, Bitfield *visited )
>>> +{
>>> +    bool success = false;
>>> +    NodePtrVec *nextLegResult = NULL;
>>> +    Bitfield *nextLegVisited = NULL;
>>> +    int i;
>>> +
>>> +    /* A little basic error checking */
>>> +    if ( !node || !edges || !labels || !result|| !visited )
>>> +    {
>>> +        return( false );
>>> +    }
>>> +
>>> +    /* If this node has already been visited, we have found a loop. 
>>> return false. */
>>> +
>>> +/*
>>> +    if ( NodePtrVec_findReverse( visited, node ) )
>>> +        return( false );
>>> +    else
>>> +        NodePtrVec_push( visited, node );
>>> +*/
>>> +    if ( Bitfield_nodeVisited( visited, node ) )
>>> +        return( false );
>>> +
>>> +    NodePtrVec_push( result, node );
>>> +
>>> +    /* Go through the edges once to see if we've found a label match */
>>> +    for ( i = 0; edges[i].edgeTarget != NULL; ++i )
>>> +    {
>>> +        if ( edges[i].edgeTarget->label )
>>> +        {
>>> +            //strcmp based:
>>> +            if ( strcmp( edges[i].edgeTarget->label, labels[0] ) == 
>>> 0 ) /* match! */
>>> +            // index based: if ( edges[i].edgeTarget->labelIdx == 
>>> labelIdxs[0] )
>>> +            {
>>> +                if ( labels[1] == NULL ) /* end of the signature, 
>>> we're DONE */
>>> +                {
>>> +                    NodePtrVec_push( result, edges[i].edgeTarget );
>>> +                    return( true );
>>> +                }
>>> +                else /* RECURSE TO SEE IF THE REST OF THE SIGNATURE 
>>> CAN BE FOUND!!! */
>>> +                {
>>> +                    nextLegResult = NodePtrVec_new( 50 ); /* 
>>> arbitrary size, malloc success checked in recursion */
>>> +                    nextLegVisited = Bitfield_new(visited->bitsNeeded);
>>> +
>>> +                    success = SearchDiagram_findSignatureAlongEdges 
>>> ( edges[i].edgeTarget,
>>> + 
>>>                                                                      edges[i].targetNodeEdges,
>>> + 
>>>                                                                      &labels[1], 
>>> nextLegResult, nextLegVisited );
>>> +                    Bitfield_delete( nextLegVisited );
>>> +                    if ( success )
>>> +                    {
>>> +                        NodePtrVec_appendVectors( result, 
>>> nextLegResult, true );
>>> +                        NodePtrVec_delete( nextLegResult );
>>> +                        return( true );
>>> +                    }
>>> +                }
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    /* IF we made it here, we need to continue through the tree, 
>>> seeing if any of our
>>> +     * edge nodes have a connection to a labeled node.
>>> +     */
>>> +    for ( i = 0; edges[i].edgeTarget != NULL; ++i )
>>> +    {
>>> +        success = SearchDiagram_findSignatureAlongEdges( 
>>> edges[i].edgeTarget,
>>> + 
>>>                                                         edges[i].targetNodeEdges,
>>> +                                                         labels, 
>>> result, visited );
>>> +        if ( success )
>>> +            return( true ); /* this edge has a path to the ultimate 
>>> signature path */
>>> +    }
>>> +
>>> +
>>> +    /* and, if we make it here, we have failed. */
>>> +    NodePtrVec_pop( result ); /* take current node off the result 
>>> stack */
>>> +    return false;
>>> +}
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/searchDiagram.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,93 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * searchDiagram.h
>>> + *
>>> + *  Created on: Feb 1, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#ifndef SEARCHDIAGRAM_H_
>>> +#define SEARCHDIAGRAM_H_
>>> +
>>> +#include "node.h"
>>> +
>>> +typedef struct SearchDiagramStruct SearchDiagram;
>>> +typedef struct EdgeReferencesStruct EdgeReferences;
>>> +
>>> +struct SearchDiagramStruct
>>> +{
>>> +    Node *node;  /* a reference to the node */
>>> +    EdgeReferences *edgeReferenceArray; /* All the nodes reachable 
>>> from here */
>>> +};
>>> +
>>> +/* We are creating arrays of SearchDiagram - constructor/destructor 
>>> would be superfluous */
>>> +
>>> +
>>> +/* The EdgeSearchStruct holds a different representation of
>>> + * the tree through which we're searching. Our search diagram
>>> + * will create an array of these for each node in the graph.
>>> + * Searches will go through the array, looking to match the
>>> + * search criteria. If the search is unsuccessful, it will
>>> + * then search the edges of the node. In this array, the  first
>>> + * element is the SEARCH ELEMENT we're comparing against. In
>>> + * this iteration of the code, we're using the Node pointer
>>> + * as the search key. The second element is the search edges
>>> + * contained by that node. The search edges are referenced
>>> + * directly, no need to go back to the SearchDiagram instance
>>> + * to get to the edges.
>>> + */
>>> +
>>> +struct EdgeReferencesStruct
>>> +{
>>> +    Node *edgeTarget; /* The address of the node is how we're 
>>> defining our search */
>>> +    EdgeReferences *targetNodeEdges; /* pointer to the "to" node's 
>>> edge references */
>>> +};
>>> +
>>> +/* We are creating arrays of EdgeReferences - 
>>> constructor/destructor would be superfluous */
>>> +
>>> +/* Scream through the diagram to get the element corresponding to 
>>> this Node* */
>>> +SearchDiagram *SearchDiagram_findNode ( SearchDiagram *diagram, 
>>> Node *node );
>>> +
>>> +/* The meat of this process - the function that creates the search 
>>> diagram.
>>> + * It allocates the memory for the array of search diagram elements and
>>> + * populates them with node data and edgeID arrays.
>>> + */
>>> +SearchDiagram *SearchDiagram_build ( NodeList *nodeTree, int 
>>> nodeCount );
>>> +
>>> +
>>> +/* And, our search methods. The first calls the second, which is 
>>> recursive */
>>> +
>>> +bool SearchDiagram_findSignatureAlongEdges ( Node *node, 
>>> EdgeReferences *edges,
>>> +                                             char *labels[], 
>>> NodePtrVec *result, Bitfield *visited );
>>> +
>>> +
>>> +
>>> +#endif /* SEARCHDIAGRAM_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,238 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * statistics.c
>>> + *
>>> + *  Created on: Sept 24, 2013
>>> + *      Author: Brian "Rig" Rigdon
>>> + */
>>> +
>>> +#include "statistics.h"
>>> +#include <math.h>
>>> +#include <limits.h>
>>> +
>>> +HistogramElement *HistogramElement_new(int length)
>>> +{
>>> +    HistogramElement *new = malloc(sizeof(HistogramElement));
>>> +    if ( !new )
>>> +        return NULL;
>>> +    new->length = length;
>>> +    new->count = 1;
>>> +    new->next = NULL;
>>> +    return(new);
>>> +}
>>> +
>>> +bool HistogramElement_updateList(HistogramElement **head, int length)
>>> +{
>>> +    HistogramElement **prev = NULL;
>>> +    HistogramElement *current = NULL;
>>> +    HistogramElement *new = NULL;
>>> +    bool histogramInsert = false;
>>> +
>>> +    prev = head;
>>> +    for ( current = *head; current != NULL; current = current->next )
>>> +    {
>>> +        if ( current->length < length )
>>> +        {
>>> +            prev = &current->next;
>>> +            continue; /* iterate down the histogram linked list */
>>> +        }
>>> +        if ( current->length == length )
>>> +        {
>>> +            ++current->count;
>>> +            histogramInsert = true;
>>> +            break;
>>> +        }
>>> +        if ( current->length > length )
>>> +        {
>>> +            /* we are logging a new length, need to allocate and 
>>> insert */
>>> +            new = HistogramElement_new(length);
>>> +            if ( ! new )
>>> +                return(false);
>>> +            new->next = current;
>>> +            (*prev) = new;
>>> +            histogramInsert = true;
>>> +            break;
>>> +        }
>>> +    }
>>> +
>>> +    if ( !histogramInsert ) /* this element belongs at the end of 
>>> the chain */
>>> +    {
>>> +        (*prev) = HistogramElement_new(length);
>>> +        if ( (*prev) == NULL )
>>> +            return(false);
>>> +    }
>>> +
>>> +    return(true);
>>> +}
>>> +
>>> +Stats *Stats_new()
>>> +{
>>> +    Stats* new = malloc(sizeof(Stats));
>>> +    if ( new )
>>> +    {
>>> +        new->pathLengths = IntVector_new(16); // Arbitrary, 
>>> multiple of 8 for vectorization
>>> +        new->averageLength = 0.0;
>>> +        new->standardDeviation = 0.0;
>>> +        new->minLength = INT_MAX;
>>> +        new->maxLength = 0;
>>> +        new->histogram = NULL;
>>> +        if ( new->pathLengths )
>>> +            return(new);
>>> +        else
>>> +        {
>>> +            free(new);
>>> +            return(NULL);
>>> +        }
>>> +    }
>>> +    else
>>> +        return(NULL);
>>> +}
>>> +
>>> +
>>> +void Stats_delete(Stats* stats)
>>> +{
>>> +    if ( stats )
>>> +    {
>>> +        if ( stats->pathLengths )
>>> +            free(stats->pathLengths);
>>> +        free(stats);
>>> +    }
>>> +}
>>> +
>>> +
>>> +bool Stats_logPath(Stats* stats, NodePtrVec* path)
>>> +{
>>> +//    bool histogramInsert = false;
>>> +//    HistogramElement **prev = NULL;
>>> +//    HistogramElement *hist = NULL;
>>> +//    HistogramElement *new = NULL;
>>> +    int length;
>>> +
>>> +    if ( !stats || !stats->pathLengths || !path )
>>> +        return(false);
>>> +
>>> +    length = path->contentSize;
>>> +    if ( length < stats->minLength )
>>> +        stats->minLength = length;
>>> +    if ( length > stats->maxLength )
>>> +        stats->maxLength = length;
>>> +    return ( IntVector_insertEnd(stats->pathLengths, length) );
>>> +}
>>> +
>>> +void Stats_calculate(Stats* stats)
>>> +{
>>> +    int i;
>>> +    int length;
>>> +    double sum;
>>> +    double diff;
>>> +
>>> +    /* a little basic error checking */
>>> +    if ( !stats || !stats->pathLengths || stats->pathLengths == 0 )
>>> +        return;
>>> +    stats->histogram = calloc((stats->maxLength+1), sizeof(int));
>>> +    if ( !stats->histogram )
>>> +        return;
>>> +
>>> +    for ( i = 0; i < stats->pathLengths->size; ++i )
>>> +    {
>>> +        if ( stats->pathLengths->vector[i] > 0 )
>>> +        {
>>> +            length = stats->pathLengths->vector[i];
>>> +            sum += (double)length;
>>> +            /* While we're iterating through the list, let's build 
>>> our histogram... */
>>> +            /* HistogramElement_updateList(&stats->histogram, 
>>> length); */
>>> +            stats->histogram[length] += 1;
>>> +        }
>>> +    }
>>> +    if ( i > 0 )
>>> +        stats->averageLength = sum / (double)i;
>>> +
>>> +    sum = 0.0;
>>> +    for ( i = 0; i < stats->pathLengths->size; ++i )
>>> +    {
>>> +        if ( stats->pathLengths->vector[i] > 0 )
>>> +        {
>>> +            diff = (double)stats->pathLengths->vector[i] - 
>>> stats->averageLength;
>>> +            sum += diff * diff;
>>> +        }
>>> +    }
>>> +
>>> +    if ( i > 0 )
>>> +        stats->standardDeviation = sqrt(sum/(double)i);
>>> +}
>>> +
>>> +
>>> +void testStats()
>>> +{
>>> +    int i;
>>> +    Stats *test = Stats_new();
>>> +    NodePtrVec bogon;
>>> +
>>> +    for ( i = 2; i < 10; ++i )
>>> +    {
>>> +        bogon.contentSize = i;
>>> +        Stats_logPath(test,&bogon);
>>> +    }
>>> +
>>> +    /* Throw in some more silly data */
>>> +    bogon.contentSize = 1;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 4;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 5;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 6;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 5;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 5;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 4;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 5;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 6;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 5;
>>> +    Stats_logPath(test,&bogon);
>>> +    bogon.contentSize = 5;
>>> +    Stats_logPath(test,&bogon);
>>> +
>>> +    Stats_calculate(test);
>>> +    printf("avg: %f\nstd dev: %f\n", test->averageLength, 
>>> test->standardDeviation);
>>> +    printf("Histogram:\n");
>>> +    for ( i = test->minLength; i < test->maxLength; ++i )
>>> +    {
>>> +        printf ("\tlength %d appeared %d times\n", i, 
>>> test->histogram[i] );
>>> +    }
>>> +
>>> +}
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/statistics.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,71 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +
>>> +/*
>>> + * statistics.h
>>> + *
>>> + *  Created on: Sept 24, 2013
>>> + *      Author: Brian "Rig" Rigdon
>>> + */
>>> +
>>> +#ifndef STATISTICS_H
>>> +#define STATISTICS_H
>>> +
>>> +#include "vectorUtils.h"
>>> +
>>> +typedef struct HistogramElementStruct HistogramElement;
>>> +struct HistogramElementStruct
>>> +{
>>> +    int length;
>>> +    int count;
>>> +    struct HistogramElementStruct *next;
>>> +};
>>> +
>>> +HistogramElement *HistogramElement_new(int length);
>>> +
>>> +typedef struct StatsStruct Stats;
>>> +struct StatsStruct
>>> +{
>>> +    IntVector *pathLengths;
>>> +    int minLength;
>>> +    int maxLength;
>>> +    double averageLength; // does it make sense to say 2.7823 nodes 
>>> long?
>>> +    double standardDeviation;
>>> +    int *histogram;
>>> +};
>>> +
>>> +Stats *Stats_new();
>>> +void Stats_delete(Stats* stats);
>>> +bool Stats_logPath(Stats* stats, NodePtrVec* path);
>>> +void Stats_calculate(Stats* stats);
>>> +
>>> +void testStats();
>>> +
>>> +#endif // STATISTICS_H
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,246 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * systemCallMap.c
>>> + *
>>> + *  Created on: Feb 5, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#include "systemCallMap.h"
>>> +#include <string.h>
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +
>>> +/* Element constructor */
>>> +SystemCallMapElement *SystemCallMapElement_new ( char *label, int 
>>> initialSize )
>>> +{
>>> +    SystemCallMapElement *element = malloc ( sizeof( 
>>> SystemCallMapElement ) );
>>> +    if ( element )
>>> +    {
>>> +        element->label = strdup ( label );
>>> +        element->index = -1; /* Set by the insertion algorithm */
>>> +        if ( !element->label )
>>> +        {
>>> +            free( element );
>>> +            return( NULL );
>>> +        }
>>> +        element->nodes = NodePtrVec_new( initialSize );
>>> +        if ( !element->nodes )
>>> +        {
>>> +            free( element->label );
>>> +            free( element );
>>> +            return( NULL );
>>> +        }
>>> +    }
>>> +
>>> +    return( element );
>>> +}
>>> +
>>> +/* Element destructor */
>>> +void SystemCallMapElement_delete( SystemCallMapElement *trash )
>>> +{
>>> +    /* free the mallocs! */
>>> +    if ( trash )
>>> +    {
>>> +        if ( trash->label )
>>> +            free( trash->label );
>>> +        NodePtrVec_delete ( trash->nodes );
>>> +    }
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +/* Constructor */
>>> +SystemCallMap *SystemCallMap_new ( int initialSize )
>>> +{
>>> +    SystemCallMap *map = NULL;
>>> +    SystemCallMapElement **vector = NULL;
>>> +
>>> +    if ( initialSize <= 0 )
>>> +        return NULL;
>>> +
>>> +    vector = malloc(  initialSize * sizeof( SystemCallMapElement* ) );
>>> +    if ( vector )
>>> +    {
>>> +        map = malloc ( sizeof( SystemCallMap ) );
>>> +        if ( map )
>>> +        {
>>> +            map->allocatedSize = initialSize;
>>> +            map->contentSize = 0;
>>> +            map->vector = vector;
>>> +        }
>>> +        else
>>> +            free( vector );
>>> +    }
>>> +
>>> +    return map;
>>> +}
>>> +
>>> +/* destructor for an ENTIRE MAP!!! */
>>> +void SystemCallMap_delete( SystemCallMap *trash )
>>> +{
>>> +    int i;
>>> +
>>> +    /* basic error checking */
>>> +    if ( !trash )
>>> +        return;
>>> +
>>> +    for ( i = 0; i < trash->contentSize; ++i )
>>> +    {
>>> +        SystemCallMapElement_delete( trash->vector[i] );
>>> +    }
>>> +}
>>> +
>>> +
>>> +
>>> +/* setter */
>>> +bool SystemCallMap_insert ( SystemCallMap *map, char *label, Node 
>>> *node )
>>> +{
>>> +    int i = 0;
>>> +    SystemCallMapElement *newElement = NULL;
>>> +    bool success = false;
>>> +
>>> +    /* Some basic error checking */
>>> +    if ( !map || !label || !node )
>>> +        return( false );
>>> +
>>> +    /* See if this label has already been implemented */
>>> +    for ( i = 0; i < map->contentSize; ++i )
>>> +    {
>>> +        if ( strcmp( label, map->vector[i]->label ) == 0 )
>>> +        {
>>> +            /* found it! */
>>> +            node->label = map->vector[i]->label;
>>> +            node->labelIdx = i;
>>> +            return( NodePtrVec_push( map->vector[i]->nodes, node ) );
>>> +        }
>>> +    }
>>> +
>>> +    /* If we make it here, we have a new label */
>>> +    if ( map->contentSize == map->allocatedSize )
>>> +    {
>>> +        /* Full up! Need a new vector */
>>> +        map->vector = realloc( map->vector, (map->allocatedSize*2 * 
>>> sizeof( SystemCallMapElement * )) );
>>> +        if ( map->vector )
>>> +        {
>>> +            map->allocatedSize *= 2;
>>> +        }
>>> +        else
>>> +            return( false );
>>> +    }
>>> +
>>> +    newElement = SystemCallMapElement_new( label, 8 ); /* arbitrary 
>>> size of 8 */
>>> +    if ( !newElement )
>>> +        return( false );
>>> +
>>> +    success = NodePtrVec_push( newElement->nodes, node );
>>> +    if ( !success )
>>> +        SystemCallMapElement_delete( newElement );
>>> +
>>> +    node->label = newElement->label;
>>> +    node->labelIdx = newElement->index = map->contentSize; /* Does 
>>> newElement really need the index? */
>>> +    map->vector[map->contentSize] = newElement;
>>> +    map->contentSize += 1;
>>> +
>>> +    return( true );
>>> +
>>> +}
>>> +
>>> +
>>> +
>>> +/* Finds all nodes associated with a label. */
>>> +NodePtrVec *SystemCallMap_findLabeledNodes( SystemCallMap 
>>> *systemCalls, char *label )
>>> +{
>>> +    int i;
>>> +
>>> +    /* Debug --> * /
>>> +    printf("Inside SystemCallMap_findLabeledNodes, label: %s\n", 
>>> label);
>>> +    / *<-- end debug */
>>> +    if ( !systemCalls || !label )
>>> +        return( NULL );
>>> +
>>> +    for( i = 0; i < systemCalls->contentSize; ++i )
>>> +    {
>>> +        /* Debug -->* /
>>> +        printf("\t...checking against %s...\n", 
>>> systemCalls->vector[i]->label);
>>> +        / * <-- end debug */
>>> +        if ( strcmp( label, systemCalls->vector[i]->label ) == 0 )
>>> +            return( systemCalls->vector[i]->nodes );
>>> +    }
>>> +
>>> +    /* Debug --> * /
>>> +    printf("\tleaving SystemCallMap_findLabeledNodes, nothing 
>>> found.\n");
>>> +    / *<-- end debug */
>>> +    return( NULL );
>>> +}
>>> +
>>> +/* Returns the index of a given label */
>>> +int SystemCallMap_getLabelIndex( SystemCallMap *map, char *label )
>>> +{
>>> +    int i;
>>> +
>>> +    /* See if this label has already been implemented */
>>> +    for ( i = 0; i < map->contentSize; ++i )
>>> +    {
>>> +        if ( strcmp( label, map->vector[i]->label ) == 0 )
>>> +        {
>>> +            return( i );
>>> +        }
>>> +    }
>>> +
>>> +    /* If we made it here, this label is not represented */
>>> +    return( -1 );
>>> +}
>>> +
>>> +
>>> +/*
>>> + * Determines if all the labels in a given signature are represented
>>> + * within this graph. If not, we know the search will fail. There's
>>> + * gotta be a better name for this...
>>> + */
>>> +bool SystemCallMap_signatureRepresented( SystemCallMap *map, 
>>> Signature signature )
>>> +{
>>> +    int i;
>>> +    bool foundByLabel = true;
>>> +
>>> +    for ( i = 0; signature[i] != NULL && foundByLabel; ++i )
>>> +    {
>>> +        /* if the signature is in the map, its index will be >=0 */
>>> +        if ( SystemCallMap_getLabelIndex( map, signature[i] ) < 0 )
>>> +            foundByLabel = false;
>>> +    }
>>> +
>>> +    return( foundByLabel );
>>> +}
>>> +
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/systemCallMap.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,112 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * systemCallMap.h
>>> + *
>>> + *  Created on: Feb 5, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#ifndef SYSTEMCALLMAP_H_
>>> +#define SYSTEMCALLMAP_H_
>>> +
>>> +#include <stdbool.h>
>>> +#include "node.h"
>>> +
>>> +
>>> +
>>> +/* A signature is an array of character pointers. Signature arrays
>>> + * are terminated with a NULL pointer so we don't have to have an
>>> + * additional datum to contain the length of the array. To make
>>> + * the code more readable, we are using this typedef:
>>> + */
>>> +typedef char **Signature; /* code must be careful to ensure NULL 
>>> termination */
>>> +
>>> +
>>> +/*
>>> + * SystemCallMapStruct specifies a label and all the nodes that are 
>>> associated with
>>> + * that label. Currently, this is sub-optimal, managing via strcmp. 
>>> If optimization
>>> + * is needed, that is left as an exercise for the future. We could 
>>> see the future
>>> + * addition of hash values
>>> + */
>>> +
>>> +typedef struct SystemCallMapElementStruct SystemCallMapElement;
>>> +
>>> +struct SystemCallMapElementStruct
>>> +{
>>> +    char *label;
>>> +    int index;
>>> +    NodePtrVec *nodes;
>>> +};
>>> +
>>> +SystemCallMapElement *SystemCallMapElement_new ( char *label, int 
>>> initialSize ); /* Element constructor */
>>> +void SystemCallMapElement_delete( SystemCallMapElement *trash ); /* 
>>> Element destructor */
>>> +
>>> +
>>> +
>>> +
>>> +/* The call map is actually a stack (managed like the STL deque) of 
>>> SystemCallMapElements.
>>> + * It will insert up to its capacity, and then double its size 
>>> (allocating a new space, copying
>>> + * and then freeing the old) when it grows beyond its capacity.
>>> + */
>>> +
>>> +typedef struct SystemCallMapStruct SystemCallMap;
>>> +
>>> +struct SystemCallMapStruct
>>> +{
>>> +    int contentSize;
>>> +    int allocatedSize;
>>> +    SystemCallMapElement **vector; /* a pointer to an array of 
>>> pointers */
>>> +};
>>> +
>>> +SystemCallMap *SystemCallMap_new( int initialSize );
>>> +void SystemCallMap_delete( SystemCallMap *trash ); /* destructor 
>>> for an ENTIRE MAP!!!  */
>>> +
>>> +/* insert checks to see if there is already an entry for the name 
>>> passed in. If so,
>>> + * it appends the node to that map element. If not, a new element 
>>> is created, the
>>> + * name is duplicated
>>> + */
>>> +bool SystemCallMap_insert ( SystemCallMap *map, char *label, Node 
>>> *node );
>>> +
>>> +
>>> +/* Finds a list of nodes associated with a label. */
>>> +NodePtrVec *SystemCallMap_findLabeledNodes( SystemCallMap 
>>> *systemCalls, char *label );
>>> +
>>> +/* Returns the index of a given label */
>>> +int SystemCallMap_getLabelIndex( SystemCallMap *map, char *label );
>>> +
>>> +/*
>>> + * Determines if all the labels in a given signature are represented
>>> + * within this graph. If not, we know the search will fail. There's
>>> + * gotta be a better name for this...
>>> + */
>>> +bool SystemCallMap_signatureRepresented( SystemCallMap *map, 
>>> Signature signature );
>>> +
>>> +#endif /* SYSTEMCALLMAP_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,252 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * utils.c
>>> + *
>>> + *  Created on: Jan 10, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#include "utils.h"
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +
>>> +void edgeListPrettyPrint( EdgeList *edges, int depth, char *header )
>>> +{
>>> +    int i;
>>> +    for ( i = 0; i < depth; ++i )
>>> +        printf( "\t" );
>>> +    printf( "%s: ", header );
>>> +    for ( ; edges != NULL; edges = edges->nextEdge )
>>> +        printf( " %d,", edges->targetNodeId );
>>> +    printf( "\n" );
>>> +}
>>> +
>>> +
>>> +void nodeListPrettyPrint( NodeList *nodes, int depth, char 
>>> *separator, bool multiLine )
>>> +{
>>> +    int i;
>>> +
>>> +    if ( !nodes )
>>> +        return;
>>> +
>>> +    if ( nodes->node )
>>> +        printf( "%d", nodes->node->id );
>>> +    if ( nodes->nextNode )
>>> +    {
>>> +        if ( multiLine )
>>> +        {
>>> +            printf( "\n" );
>>> +            for ( i = 0; i < depth; ++i )
>>> +            {
>>> +                printf( "    " );
>>> +            }
>>> +        }
>>> +        printf( "%s", separator );
>>> +        nodeListPrettyPrint( nodes->nextNode, depth + 1, separator, 
>>> multiLine );
>>> +    }
>>> +    else
>>> +        printf( "\n" );
>>> +}
>>> +
>>> +
>>> +void graphPrettyPrint ( Graph *graph )
>>> +{
>>> +    NodeList *outerPtr;
>>> +    NodeList *innerPtr;
>>> +
>>> +    for ( outerPtr = graph->outerNodes;
>>> +            outerPtr != NULL;
>>> +            outerPtr = outerPtr->nextNode )
>>> +    {
>>> +        printf( "Outer Node: %d, idx: %d, label: %s (%d)\n", 
>>> outerPtr->node->id,
>>> +                outerPtr->node->nodeCount, outerPtr->node->label ? 
>>> outerPtr->node->label : "none",
>>> +                outerPtr->node->labelIdx );
>>> +        edgeListPrettyPrint( outerPtr->node->edges, 1, "Edges" );
>>> +        /* Deprecated: edgeListPrettyPrint( 
>>> outerPtr->node->entranceNodes, 1, "EntranceNodes" ); */
>>> +        for ( innerPtr = outerPtr->node->interiorNodes;
>>> +                innerPtr != NULL;
>>> +                innerPtr = innerPtr->nextNode )
>>> +        {
>>> +            printf( "\tInner Node: %d\n", innerPtr->node->id );
>>> +            edgeListPrettyPrint( innerPtr->node->edges, 2, "Edges" );
>>> +        }
>>> +    }
>>> +
>>> +    printf ( "\n\n" );
>>> +}
>>> +
>>> +
>>> +void systemCallMapPrettyPrint( SystemCallMap *map )
>>> +{
>>> +    SystemCallMapElement *element = NULL;
>>> +    int i = 0;
>>> +    int j = 0;
>>> +
>>> +    if ( !map )
>>> +        return;
>>> +
>>> +    for ( i = 0; i < map->contentSize; ++i )
>>> +    {
>>> +        element = map->vector[i];
>>> +        printf( "'%s'\n\t:", element->label );
>>> +         for ( j = 0; element->nodes && j < 
>>> element->nodes->contentSize; ++j )
>>> +        {
>>> +            printf( "%d", element->nodes->vector[j]->id );
>>> +            if ( j < element->nodes->contentSize-1 )
>>> +                printf( ", " );
>>> +            else
>>> +                printf( "\n\n" );
>>> +        }
>>> +
>>> +    }
>>> +
>>> +    printf( "\t%d total System Call Map elements\n", 
>>> map->contentSize );
>>> +}
>>> +
>>> +bool testGraph()
>>> +{
>>> +    /* Build it and see if it will get made */
>>> +    Graph *graph = malloc( sizeof( Graph ) );
>>> +    Node *outerNode1 = Node_new( 10, 0 );
>>> +    Node *outerNode2 = Node_new( 20, 1 );
>>> +    Node *innerNode11 = Node_new( 11, 2 );
>>> +    Node *innerNode12 = Node_new( 12, 3 );
>>> +    Node *innerNode21 = Node_new( 21, 4 );
>>> +    Node *innerNode22 = Node_new( 22, 5 );
>>> +    Node *innerNode23 = Node_new( 23, 6 );
>>> +
>>> +    if ( !graph ) return( false );
>>> +
>>> +    Graph_addOuterNode( graph, outerNode1 );
>>> +    Graph_addOuterNode( graph, outerNode2 );
>>> +
>>> +    Node_addInteriorNode( outerNode1, innerNode11 );
>>> +    Node_addInteriorNode( outerNode1, innerNode12 );
>>> +
>>> +    Node_addInteriorNode( outerNode2, innerNode21 );
>>> +    Node_addInteriorNode( outerNode2, innerNode22 );
>>> +    Node_addInteriorNode( outerNode2, innerNode23 );
>>> +
>>> +
>>> +    /* Ok, let's print out the graph and see if it works */
>>> +    graphPrettyPrint( graph );
>>> +
>>> +    return( true );
>>> +}
>>> +
>>> +void printStack ( NodePtrVec *stack )
>>> +{
>>> +    if ( !stack ) return;
>>> +    int i;
>>> +    // printf ( "stack size %d out of %d max\n", 
>>> stack->contentSize, stack->allocatedSize );
>>> +    for ( i = 0; i < stack->contentSize; ++i )
>>> +    {
>>> +        printf("%d", stack->vector[i]->id );
>>> +        fflush(stdout);
>>> +        if ( stack->vector[i]->label )
>>> +        {
>>> +            printf( "(%s)", stack->vector[i]->label );
>>> +            fflush(stdout);
>>> +        }
>>> +        if ( i != stack->contentSize-1 )
>>> +        {
>>> +            printf ( " : " );
>>> +            fflush(stdout);
>>> +        }
>>> +    }
>>> +    printf( "\n" );
>>> +    fflush(stdout);
>>> +}
>>> +
>>> +void testStack()
>>> +{
>>> +    /* This was written when the stack was storing integers
>>> +    int a, b, c, d, e;
>>> +    printf ( "\n\nTesting stack operations" );
>>> +    NodePtrVec *vector = Stack_new(3);
>>> +    if ( !vector )
>>> +    {
>>> +        printf( "stack allocation failed\n" );
>>> +        return;
>>> +    }
>>> +    Stack_push( vector, 1 );
>>> +    Stack_push( vector, 2 );
>>> +    printStack( vector );
>>> +    Stack_push( vector, 3 );
>>> +    printStack( vector );
>>> +    Stack_push( vector, 4 );
>>> +    printStack( vector );
>>> +
>>> +    printf ( "\n2 %s in the stack\n", Stack_find( vector, 2 ) ? 
>>> "is" : "is not" );
>>> +    printf ( "5 %s in the stack\n\n", Stack_find( vector, 5 ) ? 
>>> "is" : "is not" );
>>> +
>>> +    printf ( "\n4 %s in the stack\n", Stack_findReverse( vector, 4 
>>> ) ? "is" : "is not" );
>>> +    printf ( "45 %s in the stack\n\n", Stack_findReverse( vector, 
>>> 45 ) ? "is" : "is not" );
>>> +
>>> +    a = Stack_pop( vector );
>>> +    printStack( vector );
>>> +    b = Stack_pop( vector );
>>> +    c = Stack_pop( vector );
>>> +    d = Stack_pop( vector );
>>> +    e = Stack_pop( vector );
>>> +    printStack( vector );
>>> +    printf ( "%d, %d, %d, %d, %d\n", a, b, c, d, e );
>>> +    */
>>> +}
>>> +
>>> +
>>> +/* The below code gives compile warnings about the size difference
>>> + * between pointers and ints. Since this doesn't impact execution,
>>> + * I am not going to chase down a fix.
>>> + */
>>> +void searchDiagramPrettyPrint ( SearchDiagram *diagram )
>>> +{
>>> +#if 0
>>> +    SearchDiagram *node;
>>> +    EdgeReferences *edge;
>>> +
>>> +    for ( node = diagram; node != NULL && node->node != NULL; ++node )
>>> +    {
>>> +        printf ( "Node %x -> %d\n", (unsigned int)node, 
>>> node->node->id );
>>> +        if ( node->edgeReferenceArray )
>>> +        {
>>> +            printf ( "\t%x\n", (int)node->edgeReferenceArray );
>>> +            for ( edge = node->edgeReferenceArray; edge->edgeTarget 
>>> != NULL; ++edge )
>>> +            {
>>> +                printf ( "\t\tEdge (target %d) -> %x\n",
>>> +                         edge->edgeTarget->id, 
>>> (int)edge->targetNodeEdges );
>>> +            }
>>> +        }
>>> +
>>> +    }
>>> +#endif
>>> +}
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/utils.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,53 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * utils.h
>>> + *
>>> + *  Created on: Jan 10, 2013
>>> + *      Author: Brian "Rig" Rigdon, Marcus Smith, Samuel Mulder
>>> + */
>>> +
>>> +#ifndef UTILS_H_
>>> +#define UTILS_H_
>>> +
>>> +#include "graph.h"
>>> +#include "systemCallMap.h"
>>> +#include "searchDiagram.h"
>>> +void edgeListPrettyPrint( EdgeList *edges, int depth, char *header );
>>> +void nodeListPrettyPrint( NodeList *nodes, int depth, char 
>>> *separator, bool multiLine );
>>> +void graphPrettyPrint( Graph *graph );
>>> +void systemCallMapPrettyPrint( SystemCallMap *map );
>>> +void printStack ( NodePtrVec *stack );
>>> +bool testGraph();
>>> +void testStack();
>>> +
>>> +void searchDiagramPrettyPrint ( SearchDiagram *diagram );
>>> +
>>> +#endif /* UTILS_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,563 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * vectorUtils.c
>>> + *
>>> + *  Created on: Jun 21, 2013
>>> + *      Author: jbrigdo
>>> + */
>>> +
>>> +#include "vectorUtils.h"
>>> +
>>> +
>>> +#include <stdio.h>
>>> +#include <stdlib.h>
>>> +#include <string.h>
>>> +#include <ctype.h>
>>> +
>>> +
>>> +/* --------
>>> + * IntVector Methods
>>> + */
>>> +
>>> +/* constructor */
>>> +IntVector *IntVector_new( int size )
>>> +{
>>> +    IntVector *new = malloc( sizeof(IntVector) );
>>> +    if ( new )
>>> +    {
>>> +        int *vector = malloc ( size * sizeof(int) );
>>> +        if ( vector )
>>> +        {
>>> +            new->vector = vector;
>>> +            new->size = 0;
>>> +            new->allocatedSize = size;
>>> +            return( new );
>>> +        }
>>> +        else
>>> +        {
>>> +            free( new );
>>> +            return( NULL );
>>> +        }
>>> +    }
>>> +    else
>>> +        return( NULL );
>>> +}
>>> +
>>> +/* destructor */
>>> +void IntVector_delete(IntVector *trash)
>>> +{
>>> +    if ( trash )
>>> +    {
>>> +        if ( trash->vector )
>>> +            free( trash->vector );
>>> +        free( trash );
>>> +    }
>>> +}
>>> +
>>> +/* inserts a new integer at the tail of the vector */
>>> +bool IntVector_insertEnd(IntVector *vector, int datum)
>>> +{
>>> +    int current = 0;
>>> +    int max = 0;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !vector )
>>> +        return( false );
>>> +
>>> +    current = vector->size;
>>> +    max = vector->allocatedSize;
>>> +
>>> +    if ( current == max ) /* we're full */
>>> +    {
>>> +        vector->vector = realloc( vector->vector, 2*max*sizeof(int) );
>>> +        if ( vector->vector )
>>> +        {
>>> +            vector->allocatedSize = 2*max;
>>> +        }
>>> +        else
>>> +        {
>>> +            fprintf( stderr, "\n\nIntVector_insertEnd failed 
>>> realloc size = %d\n", current*2 );
>>> +            return( false );
>>> +        }
>>> +    }
>>> +
>>> +    vector->vector[current] = datum;
>>> +    vector->size += 1;
>>> +    return( true );
>>> +}
>>> +
>>> +/*
>>> + * A utility method that takes an input string to the next number. 
>>> If it currently
>>> + * points to a number, we iterate past that number, past any 
>>> whitespace or non-number
>>> + * and point to the first digit character we find. If input 
>>> currently points a non-
>>> + * digit character, we find the next digit character and return a 
>>> pointer to it. If
>>> + * no non-digit character is found with these rules, we return null.
>>> + */
>>> +static char *findNextNumber(char *input)
>>> +{
>>> +    if ( isdigit( (int)input[0] ) )
>>> +    {
>>> +        /* scream through the string to find a non-digit */
>>> +        ++input;
>>> +        while ( isdigit( (int)input[0] ) && *input != '\0' )
>>> +            ++input;
>>> +        if ( input[0] == '\0' )
>>> +            return( NULL );
>>> +        else
>>> +            /* now find the next digit */
>>> +            while ( !isdigit( (int)input[0] ) && *input != '\0' )
>>> +                ++input;
>>> +        if ( input[0] == '\0' )
>>> +            return(NULL);
>>> +        else
>>> +            return(input);
>>> +    }
>>> +    else
>>> +    {
>>> +        /* find the first digit character */
>>> +        do {
>>> +            if ( input[0] == '\0' )
>>> +                return(NULL);
>>> +            ++input;
>>> +        } while ( !isdigit( (int)input[0] ) );
>>> +        return(input);
>>> +    }
>>> +}
>>> +
>>> +/*
>>> + * parse space-delimited null-terminated string into an IntVector.
>>> + * Returns the number of integers collected
>>> + */
>>> +int IntVector_createFromString(IntVector *vector, char *inputString)
>>> +{
>>> +    int dataCount = 0;
>>> +    int datum;
>>> +
>>> +    /* make sure we have valid pointers passed in*/
>>> +    if ( !vector || !inputString )
>>> +        return(0);
>>> +
>>> +    /* make sure we're pointing to a digit */
>>> +    if ( !isdigit((int)inputString[0]))
>>> +    {
>>> +        inputString = findNextNumber(inputString);
>>> +    }
>>> +
>>> +    /* ok, at this point, we know we're pointing at a number */
>>> +    while (inputString) /* set to NULL when there are no more 
>>> numbers. */
>>> +    {
>>> +        datum = atoi(inputString);
>>> +        inputString = findNextNumber(inputString);
>>> +        if ( !IntVector_insertEnd(vector, datum) )
>>> +            return(0); /* realloc failure */
>>> +        ++dataCount;
>>> +    }
>>> +
>>> +    return(dataCount);
>>> +}
>>> +
>>> +
>>> +
>>> +
>>> +/* constructor */
>>> +CharVector *CharVector_new(int size)
>>> +{
>>> +    CharVector *new = malloc( sizeof(CharVector) );
>>> +    if ( new )
>>> +    {
>>> +        char *string = malloc ( size * sizeof(char) );
>>> +        if ( string )
>>> +        {
>>> +            new->string = string;
>>> +            new->size = 0;
>>> +            new->allocatedSize = size;
>>> +            return( new );
>>> +        }
>>> +        else
>>> +        {
>>> +            free( new );
>>> +            return( NULL );
>>> +        }
>>> +    }
>>> +    else
>>> +        return( NULL );
>>> +}
>>> +
>>> +/* destructor */
>>> +void CharVector_delete( CharVector *trash )
>>> +{
>>> +    if ( trash )
>>> +    {
>>> +        if ( trash->string )
>>> +            free( trash->string );
>>> +        free( trash );
>>> +    }
>>> +}
>>> +
>>> +
>>> +bool CharVector_insertEnd( CharVector *vector, char c )
>>> +{
>>> +    int size = 0;
>>> +    int max = 0;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !vector )
>>> +        return( false );
>>> +
>>> +    size = vector->size;
>>> +    max = vector->allocatedSize;
>>> +
>>> +    if ( size == max ) /* we're full */
>>> +    {
>>> +        vector->string = realloc( vector->string, 
>>> 2*size*sizeof(char) );
>>> +        if ( vector->string )
>>> +        {
>>> +            vector->allocatedSize = size*2;
>>> +        }
>>> +        else
>>> +        {
>>> +            fprintf( stderr, "\n\nIntVector_insertEnd failed 
>>> realloc size = %d\n", size*2 );
>>> +            return( false );
>>> +        }
>>> +    }
>>> +
>>> +    vector->string[size] = c;
>>> +    vector->size += 1;
>>> +    return( true );
>>> +}
>>> +
>>> +
>>> +int CharVector_getLineFromFile( CharVector *vector, FILE *input )
>>> +{
>>> +    bool notDoneYet = true;
>>> +    char c = '\0';
>>> +
>>> +    /* Some basic error checking */
>>> +    if ( !vector || !input )
>>> +        return( -1 );
>>> +
>>> +    vector->size = 0; /* reset the vector prior to filling */
>>> +
>>> +    /* get to the next digit */
>>> +    do {
>>> +        c = fgetc( input );
>>> +        if ( feof( input ) || c == '\n' )
>>> +            notDoneYet = false;
>>> +        else
>>> +            if ( ! CharVector_insertEnd( vector, c ) )
>>> +                return( -1 ); /* CharVector_insertEnd reached a 
>>> memory limit. Fail */
>>> +    } while ( notDoneYet );
>>> +
>>> +    /* make the data a c-string */
>>> +    if ( ! CharVector_insertEnd( vector, '\0' ) )
>>> +        return( -1 ); /* CharVector_insertEnd reached a memory 
>>> limit. Fail */
>>> +    return( vector->size );
>>> +}
>>> +
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Node Pointer Vector Method Definitions
>>> + *
>>> + */
>>> +
>>> +/* create a new vector allocating specified size */
>>> +NodePtrVec *NodePtrVec_new( int initialSize )
>>> +{
>>> +    NodePtrVec *newVector;
>>> +    Node **vector; /* an array of pointers */
>>> +
>>> +    vector = malloc ( initialSize * sizeof(Node *) );
>>> +    if ( !vector )
>>> +    {
>>> +        printf ( "Malloc failure in NodePtrVec creation\n" );
>>> +        return( NULL );
>>> +    }
>>> +
>>> +    newVector =  malloc ( sizeof(NodePtrVec) );
>>> +    if ( !newVector )
>>> +    {
>>> +        free(vector);
>>> +        printf ( "Malloc failure in NodePtrVec storage creation\n" );
>>> +        return( NULL );
>>> +    }
>>> +
>>> +    newVector->allocatedSize = initialSize;
>>> +    newVector->contentSize = 0;
>>> +    newVector->vector = vector;
>>> +    return( newVector );
>>> +}
>>> +
>>> +
>>> +
>>> +/* destructor */
>>> +void NodePtrVec_delete( NodePtrVec *trash )
>>> +{
>>> +    if ( trash )
>>> +    {
>>> +        if ( trash->vector )
>>> +            free(trash->vector);
>>> +        free(trash);
>>> +    }
>>> +}
>>> +
>>> +
>>> +/* creates duplicate vector (not duplicate nodes!). If exact_copy 
>>> is true, the
>>> + * new vector is the same size as the copied one. If false, then 
>>> only enough
>>> + * room to hold the copy is allocated.
>>> + */
>>> +NodePtrVec *NodePtrVec_copy(NodePtrVec *from, bool exact_copy)
>>> +{
>>> +    int i;
>>> +
>>> +    if ( !from )
>>> +        return NULL;
>>> +
>>> +    NodePtrVec *to = exact_copy ? NodePtrVec_new(from->allocatedSize)
>>> +                                : NodePtrVec_new(from->contentSize);
>>> +    if ( !to )
>>> +        return NULL;
>>> +
>>> +    for ( i = 0; i < from->contentSize; ++i )
>>> +        to->vector[i] = from->vector[i];
>>> +    to->contentSize = from->contentSize;
>>> +    return to;
>>> +}
>>> +
>>> +/* pushes the element if it can. If a memory allocation is required but
>>> + * fails - false is returned
>>> + */
>>> +bool NodePtrVec_push( NodePtrVec *vector, Node *node )
>>> +{
>>> +    int current;
>>> +    int max;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !vector ) return false;
>>> +
>>> +    current = vector->contentSize;
>>> +    max = vector->allocatedSize;
>>> +
>>> +    /* see if our vector is full */
>>> +    if ( current == max )
>>> +    {
>>> +        vector->vector = realloc( vector->vector, 2*max * 
>>> sizeof(Node *) );
>>> +        if ( vector->vector )
>>> +        {
>>> +            vector->allocatedSize = 2*max;
>>> +        }
>>> +        else
>>> +        {
>>> +            printf ( "\n\nNodePtrVec_push failed malloc(%d). Node: 
>>> %d", 2*max, node->id );
>>> +            if ( node->label )
>>> +                printf ( ", label: %s\n", node->label );
>>> +            else
>>> +                printf ( "\n\n" );
>>> +            return false;
>>> +        }
>>> +    }
>>> +
>>> +    /* do the actual pushing */
>>> +    vector->vector[current] = node;
>>> +    vector->contentSize += 1;
>>> +
>>> +    return true;
>>> +}
>>> +
>>> +/* returns the top item and decrements. What do we do to define 
>>> empty? */
>>> +Node * NodePtrVec_pop( NodePtrVec *vector )
>>> +{
>>> +    Node *top = NULL;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !vector ) return NULL;
>>> +
>>> +    if ( vector->contentSize > 0 )
>>> +    {
>>> +        vector->contentSize -= 1;
>>> +        top = vector->vector[vector->contentSize];
>>> +    }
>>> +
>>> +    return top;
>>> +}
>>> +
>>> +/* Screams through the vector from bottom to top to find the 
>>> specified element. If found,
>>> + * returns true.
>>> + */
>>> +bool NodePtrVec_find( NodePtrVec *vector, Node *node )
>>> +{
>>> +    int i;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !vector ) return false;
>>> +
>>> +    for ( i = 0; i < vector->contentSize; ++i )
>>> +        if ( vector->vector[i] == node )
>>> +            return true;
>>> +
>>> +    return false;
>>> +}
>>> +
>>> +/* Screams through the vector from top to bottom to find the 
>>> specified element. If found,
>>> + * returns true.  */
>>> +bool NodePtrVec_findReverse( NodePtrVec *vector, Node *node )
>>> +{
>>> +    int i;
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !vector || !vector->vector || !node ) return false;
>>> +
>>> +    for ( i = vector->contentSize-1; i >= 0; --i )
>>> +        if ( vector->vector[i] == node )
>>> +            return true;
>>> +
>>> +    return false;
>>> +}
>>> +
>>> +
>>> +/* Appends the second vector to the first. If the "keepFirst" flag 
>>> is set, the
>>> + * entire second vector is appended to the first. Otherwise, the 
>>> [0] element of
>>> + * the second vector is skipped. This is useful when the last 
>>> element of the
>>> + * first vector is identical to the first element of the second 
>>> vector, and
>>> + * we don't want duplication. (And who, really, wants duplication? 
>>> Really, who
>>> + * wants duplication?)
>>> + */
>>> +void NodePtrVec_appendVectors ( NodePtrVec *first, NodePtrVec 
>>> *second, bool keepFirst )
>>> +{
>>> +    int i;
>>> +
>>> +    /* Some basic error checking */
>>> +    if ( !first || !second )
>>> +        return;
>>> +
>>> +    if ( keepFirst )
>>> +        i = 0;
>>> +    else
>>> +        i = 1;
>>> +
>>> +    for ( ; i < second->contentSize; ++i )
>>> +        NodePtrVec_push( first, second->vector[i] );
>>> +}
>>> +
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Node Vec Vec Method definitions
>>> + *
>>> + * (vector of Node Pointer Vectors )
>>> + */
>>> +
>>> +/* create a new vector allocating specified size */
>>> +NodeVecVec *NodeVecVec_new( int initialSize )
>>> +{
>>> +    NodeVecVec *newVector;
>>> +    NodePtrVec **vector; /* an array of pointers */
>>> +
>>> +    vector = malloc ( initialSize * sizeof(NodePtrVec *) );
>>> +    if ( !vector )
>>> +    {
>>> +        printf ( "Malloc failure in NodeVecVec storage creation\n" );
>>> +        fflush(stdout);
>>> +        return( NULL );
>>> +    }
>>> +
>>> +    newVector =  malloc ( sizeof(NodeVecVec) );
>>> +    if ( !newVector )
>>> +    {
>>> +        free(vector);
>>> +        printf ( "Malloc failure in NodeVecVec creation\n" );
>>> +        fflush(stdout);
>>> +        return( NULL );
>>> +    }
>>> +
>>> +    newVector->allocatedSize = initialSize;
>>> +    newVector->contentSize = 0;
>>> +    newVector->vector = vector;
>>> +    return( newVector );
>>> +}
>>> +
>>> +
>>> +
>>> +/* destructor */
>>> +void NodeVecVec_delete( NodeVecVec *trash )
>>> +{
>>> +    int i;
>>> +    if ( trash )
>>> +    {
>>> +        for ( i = 0; i < trash->contentSize; ++i )
>>> +            NodePtrVec_delete(trash->vector[i]);
>>> +        if ( trash->vector )
>>> +            free(trash->vector);
>>> +        free(trash);
>>> +    }
>>> +}
>>> +
>>> +
>>> +/* pushes a copy of the element if it can. If a memory allocation 
>>> is required but
>>> + * fails - false is returned
>>> + */
>>> +bool NodeVecVec_insert( NodeVecVec *vector, NodePtrVec *path )
>>> +{
>>> +    int current;
>>> +    int max;
>>> +    NodePtrVec *copy = NodePtrVec_copy(path,false);
>>> +
>>> +    /* some basic error checking */
>>> +    if ( !vector || !path || !copy ) return false;
>>> +
>>> +    current = vector->contentSize;
>>> +    max = vector->allocatedSize;
>>> +
>>> +    /* see if our vector is full */
>>> +    if ( current == max )
>>> +    {
>>> +        vector->vector = realloc( vector->vector, 2*max * 
>>> sizeof(Node *) );
>>> +        if ( vector->vector )
>>> +        {
>>> +            vector->allocatedSize = 2*max;
>>> +        }
>>> +        else
>>> +        {
>>> +            printf ( "\n\nNodeVecVec_push failed malloc\n" );
>>> +            fflush(stdout);
>>> +            return false;
>>> +        }
>>> +    }
>>> +
>>> +    /* do the actual pushing */
>>> +    vector->vector[current] = copy;
>>> +    vector->contentSize += 1;
>>> +
>>> +    return true;
>>> +}
>>> +
>>> +
>>> +
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/vectorUtils.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,169 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * vectorUtils.h
>>> + *
>>> + *  Created on: Jun 21, 2013
>>> + *      Author: J. Brian Rigdon
>>> + */
>>> +
>>> +#ifndef VECTORUTILS_H_
>>> +#define VECTORUTILS_H_
>>> +
>>> +#include <stdio.h>
>>> +#include <stdbool.h>
>>> +
>>> +#include "node.h"
>>> +
>>> +/* The IntVector is sort of a C version of std::vector<int> */
>>> +typedef struct IntVectorStruct IntVector;
>>> +struct IntVectorStruct
>>> +{
>>> +    int size; /* number of integers actively stored */
>>> +    int allocatedSize;
>>> +    int *vector;
>>> +};
>>> +
>>> +IntVector *IntVector_new(int size); /* constructor */
>>> +void IntVector_delete(IntVector *trash); /* destructor */
>>> +#define IntVector_clear(intVectorPtr) (intVectorPtr->size = 0)
>>> +#define IntVector_size(intVectorPtr) (intVectorPtr->size)
>>> +bool IntVector_insertEnd(IntVector *vector, int datum);
>>> +
>>> +/*
>>> + * parse space-delimited null-terminated string into an IntVector.
>>> + * Returns the number of integers collected
>>> + */
>>> +int IntVector_createFromString(IntVector *vector, char *inputString);
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +/* The CharVector is sort of a C version of std::vector<char> */
>>> +typedef struct CharVectorStruct CharVector;
>>> +struct CharVectorStruct
>>> +{
>>> +    int size; /* number of integers actively stored */
>>> +    int allocatedSize;
>>> +    char *string;
>>> +};
>>> +
>>> +CharVector *CharVector_new(int size); /* constructor */
>>> +void CharVector_delete(CharVector *trash); /* destructor */
>>> +bool CharVector_insertEnd(CharVector *vector, char c);
>>> +int CharVector_getLineFromFile(CharVector *vector, FILE *input);
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * Node Pointer Vector Definitions
>>> + *
>>> + *      NodePtrVec are an alternative storage mechanism to the Node 
>>> Lists.
>>> + *      The Vector is single ended, with a push and a pop. It maintains
>>> + *      a count of contained Node pointers, the maximum allocated 
>>> size for
>>> + *      the storage and a pointer to the array of Node pointers. 
>>> When the
>>> + *      contained size reaches the maximum, another piece of memory, we
>>> + *      realloc for twice the size. This is patterned after STL vectors
>>> + */
>>> +
>>> +
>>> +
>>> +/* A simple, sized vector class. The vector is initially created 
>>> with a specified size
>>> + * even though it holds nothing. Each push increments a counter 
>>> (pops decrement) until
>>> + * it reaches its initial size. The next push will be slow, because 
>>> the vector needs
>>> + * to grow. At that point, we realloc with DOUBLE the size of the 
>>> original vector. If
>>> + * successful, the last datagram is inserted in the end of the vector.
>>> + */
>>> +
>>> +typedef struct NodePtrVecStruct NodePtrVec;
>>> +
>>> +struct NodePtrVecStruct
>>> +{
>>> +    int contentSize;    // the number of elements currently in the 
>>> vector
>>> +    int allocatedSize;  // the amount (in sizeof int) currently 
>>> allocated for this vector
>>> +    Node **vector;       // a pointer to the actual data (array of 
>>> node pointers).
>>> +};
>>> +
>>> +
>>> +NodePtrVec *NodePtrVec_new(int initialSize); /* create a new vector 
>>> allocating specified size */
>>> +void NodePtrVec_delete(NodePtrVec *trash); /* destructor */
>>> +NodePtrVec *NodePtrVec_copy(NodePtrVec *from, bool exact_copy); /* 
>>> creates duplicate vector (not duplicate nodes!) */
>>> +
>>> +/* pushes the element if it can. If a memory allocation is required but
>>> + * fails - false is returned
>>> + */
>>> +bool NodePtrVec_push(NodePtrVec *vector, Node *node);
>>> +Node * NodePtrVec_pop(NodePtrVec *vector); /* returns the top item 
>>> and decrements. If empty, we return -1 */
>>> +
>>> +/* Screams through the vector from bottom to top to find the 
>>> specified element. If found,
>>> + * returns true.
>>> + */
>>> +bool NodePtrVec_find(NodePtrVec *vector, Node *node);
>>> +
>>> +/* Screams through the vector from top to bottom to find the 
>>> specified element. If found,
>>> + * returns true.
>>> + */
>>> +bool NodePtrVec_findReverse(NodePtrVec *vector, Node *node);
>>> +
>>> +/* Appends the second vector to the first. If the "keepFirst" flag 
>>> is set, the
>>> + * entire second vector is appended to the first. Otherwise, the 
>>> [0] element of
>>> + * the second vector is skipped. This is useful when the last 
>>> element of the
>>> + * first vector is identical to the first element of the second 
>>> vector, and
>>> + * we don't want duplication. (And who, really, wants duplication? 
>>> Really, who
>>> + * wants duplication?)
>>> + */
>>> +void NodePtrVec_appendVectors(NodePtrVec *first, NodePtrVec 
>>> *second, bool keepFirst);
>>> +
>>> +
>>> +/* -------------------------------------------
>>> + * And a vector of Node Pointer Vectors
>>> + *
>>> + * Results from the searches are presented as NodePtrVectors. To 
>>> store a bunch of these
>>> + * we are defining a vector of these vectors.
>>> + */
>>> +
>>> +typedef struct NodeVecVecStruct NodeVecVec;
>>> +
>>> +struct NodeVecVecStruct
>>> +{
>>> +    int contentSize;
>>> +    int allocatedSize;
>>> +    NodePtrVec **vector;
>>> +};
>>> +
>>> +NodeVecVec *NodeVecVec_new(int initialSize); /* constructor */
>>> +void NodeVecVec_delete(NodeVecVec* trash); /* destructor */
>>> +bool NodeVecVec_insert(NodeVecVec* vector, NodePtrVec* path); /* 
>>> puts a copy of "path" at the end of the vector */
>>> +
>>> +#endif /* VECTORUTILS_H_ */
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.c
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.c?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.c 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.c 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,133 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * yaml.h
>>> + *
>>> + *  Created on: Jun 21, 2013
>>> + *      Author: J. Brian Rigdon
>>> + */
>>> +
>>> +#include <stdio.h>
>>> +#include <time.h>
>>> +#include <stdlib.h>
>>> +#include "yaml.h"
>>> +static FILE *output = NULL;
>>> +
>>> +/* This file doesn't yet do a true key/element pair clustering the 
>>> way YAML is
>>> + * intended to do. It is currently a minimalistic approach to 
>>> output the most
>>> + * important data from the run.
>>> + */
>>> +
>>> +/* In case configuration info isn't passed in... */
>>> +#ifndef CXXFLAGS
>>> +#define CXXFLAGS "unknown"
>>> +#endif
>>> +#ifndef CXXVERSION
>>> +#define CXXVERSION "unknown"
>>> +#endif
>>> +
>>> +
>>> +
>>> +
>>> +void YAMLOpen()
>>> +{
>>> +    time_t rawTime;
>>> +    struct tm *timeinfo = NULL;
>>> +    char *fileName = calloc(200, sizeof(char));
>>> +    char *timeStr = calloc(200, sizeof(char));
>>> +
>>> +
>>> +    time(&rawTime);
>>> +    timeinfo = localtime(&rawTime);
>>> +
>>> +    if ( output != NULL || fileName==NULL || timeStr==NULL || 
>>> timeinfo == NULL )
>>> +        return;
>>> +
>>> +    sprintf(fileName, "PathFinder_%d-%d-%d_%d-%d-%d.yaml", 
>>> timeinfo->tm_year+1900, timeinfo->tm_mon+1,
>>> +        timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, 
>>> timeinfo->tm_sec);
>>> +    sprintf(timeStr, "%d/%d/%d, %d:%d:%d", timeinfo->tm_year+1900, 
>>> timeinfo->tm_mon+1,
>>> +        timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, 
>>> timeinfo->tm_sec);
>>> +    printf("\nWriting YAML: %s\n\n", fileName);
>>> +
>>> +    /* static data - no need to free(timeinfo); */
>>> +
>>> +    output = fopen(fileName, "w");
>>> +    if ( output != NULL )
>>> +    {
>>> +        YAMLWriteString("Mini-Application Name", "PathFinder");
>>> +        YAMLWriteString("Mini-Application Version", "1.0.0");
>>> +        YAMLWriteString("Run Date/Time", timeStr);
>>> +        YAMLWriteString("Compiler Version", CXXVERSION);
>>> +        YAMLWriteString("Compiler Flags", CXXFLAGS);
>>> +
>>> +#ifdef MPI
>>> +        YAMLWriteString("MPI", "Yes");
>>> +#else
>>> +        YAMLWriteString("MPI", "No");
>>> +#endif
>>> +#ifdef OPENMP
>>> +        YAMLWriteString("OpenMP", "Yes");
>>> +        YAMLWriteString("Open MP Threads", getenv("OMP_NUM_THREADS"));
>>> +#else
>>> +        YAMLWriteString("OpenMP", "No");
>>> +#endif
>>> +
>>> +    }
>>> +}
>>> +
>>> +void YAMLClose()
>>> +{
>>> +    if ( output!=NULL )
>>> +        fclose(output);
>>> +}
>>> +
>>> +void YAMLWriteString(char *tag, char *data)
>>> +{
>>> +    if ( output!=NULL )
>>> +        fprintf(output, "%s: %s\n", tag, data);
>>> +}
>>> +
>>> +void YAMLWriteInt(char *tag, int data)
>>> +{
>>> +    if ( output!=NULL )
>>> +        fprintf(output, "%s: %i\n", tag, data);
>>> +}
>>> +
>>> +void YAMLWriteDouble(char *tag, double data)
>>> +{
>>> +    if ( output!=NULL )
>>> +        fprintf(output, "%s: %lf\n", tag, data);
>>> +}
>>> +
>>> +void YAMLWriteFloat(char *tag, float data)
>>> +{
>>> +    if ( output!=NULL )
>>> +        fprintf(output, "%s: %f\n", tag, data);
>>> +}
>>> \ No newline at end of file
>>>
>>> Added: 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.h?rev=311413&view=auto
>>> ==============================================================================
>>> --- 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.h 
>>> (added)
>>> +++ 
>>> test-suite/trunk/MultiSource/Benchmarks/DOE-ProxyApps-C/Pathfinder/yaml.h 
>>> Mon Aug 21 17:38:53 2017
>>> @@ -0,0 +1,47 @@
>>> +/*************************************************************************
>>> + *
>>> + *        PathFinder: finding a series of labeled nodes within a
>>> + *                two-layer directed, cyclic graph.
>>> + *               Copyright (2013) Sandia Corporation
>>> + *
>>> + * Copyright (2013) Sandia Corporation. Under the terms of Contract
>>> + * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
>>> + * retains certain rights in this software.
>>> + *
>>> + * This file is part of PathFinder.
>>> + *
>>> + * PathFinder is free software: you can redistribute it and/or modify
>>> + * it under the terms of the GNU Lesser General Public License as
>>> + * published by the Free Software Foundation, either version 3 of the
>>> + * License, or (at your option) any later version.
>>> + *
>>> + * PathFinder is distributed in the hope that it will be useful,
>>> + * but WITHOUT 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 PathFinder.  If not, see <http://www.gnu.org/licenses/>.
>>> + *
>>> + * Questions? Contact J. Brian Rigdon (jbrigdo at sandia.gov 
>>> <mailto:jbrigdo at sandia.gov>)
>>> + *
>>> + */
>>> +
>>> +/*
>>> + * yaml.h
>>> + *
>>> + *  Created on: Jun 21, 2013
>>> + *      Author: J. Brian Rigdon
>>> + */
>>> +
>>> + #ifndef YAML_H
>>> + #define YAML_H
>>> +
>>> + void YAMLOpen();
>>> + void YAMLClose();
>>> + void YAMLWriteString(char *tag, char *data);
>>> + void YAMLWriteInt(char *tag, int data);
>>> + void YAMLWriteDouble(char *tag, double data);
>>> + void YAMLWriteFloat(char *tag, float data);
>>> +
>>> + #endif /* YAML_H */
>>> \ No newline at end of file
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
> -- 
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits

-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170822/bf9fad0e/attachment-0001.html>


More information about the llvm-commits mailing list