SimGrid-3.10/002750 007661 000620 00000000000 12242224155 013221 5ustar00gierschand000000 000000 SimGrid-3.10/README.java000640 007661 000620 00000000637 12242224154 015025 0ustar00gierschand000000 000000 On Debian-like systems (which includes ubuntu), you need the following packages: sun-java6-jdk libgcj10-dev. If you cannot find the libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before 9.10) or libgcj11-dev (not released yet, but certainly one day). Please note that you need to activate the contrib and non-free repositories in Debian, and the universe ones in Ubuntu. Java comes at this price... SimGrid-3.10/LICENSE-LGPL-2.1000640 007661 000620 00000063642 12242224154 015271 0ustar00gierschand000000 000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. 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 not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the 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 specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library 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 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! SimGrid-3.10/tools/002750 007661 000620 00000000000 12242224155 014361 5ustar00gierschand000000 000000 SimGrid-3.10/tools/MSG_visualization/002750 007661 000620 00000000000 12242224152 017765 5ustar00gierschand000000 000000 SimGrid-3.10/tools/MSG_visualization/trace2fig.pl000750 007661 000620 00000026147 12242224152 022203 0ustar00gierschand000000 000000 #!/usr/bin/perl -w use strict; #use Data::Dumper; use XFig; use POSIX; my($grid_Y_size)=225; my($grid_X_size)=100550; # Can be changed to improve readability in # function of the total execution time my($color_suspended)=1; my($color_compute)=2; my($color_wait_for_recpt)=3; my($color_communicate)=4; # Determine the order of the colors in the legend my(@color_list)=($color_compute,$color_communicate,$color_wait_for_recpt,$color_suspended); sub read_cat { my(%Cat); my($filename)=@_; my($line); open INPUT, $filename; while (defined($line=)) { chomp $line; if($line =~ /^7\s/) { my($event,$date,$id,$type,$father,@name) = split(/\s+/,$line); $Cat{$id}{name}="@name "; $Cat{$id}{name}=~s/\"//g; $Cat{$id}{father}=$father; $Cat{$id}{type}=$type; $Cat{$id}{date}=$date; } } close INPUT; return \%Cat; } sub read_event { my($filename,$Cat)=@_; my($line); open INPUT, $filename; while (defined($line=)) { chomp $line; if($line =~ /^11\s/) { my($event,$date,$type,$id,$state) = split(/\s+/,$line); push @{$$Cat{$id}{state}}, [$date,$state]; } if($line =~ /^12\s/) { my($event,$date,$type,$id) = split(/\s+/,$line); push @{$$Cat{$id}{state}}, [$date]; } } close INPUT; } sub read_link { my($filename)=@_; my($line); my(%link); open INPUT, $filename; while (defined($line=)) { chomp $line; if($line =~ /^16\s/) { my($event,$date,$type,$father,$channel,$src,$key,$trash) = split(/\t+/,$line); my($numkey)=hex "$key"; while (defined($link{$numkey})) {$numkey++;} $link{$numkey}{src}=$src; $link{$numkey}{src_date}=$date; } if($line =~ /^17\s/) { my($event,$date,$type,$father,$channel,$dst,$key,$trash) = split(/\t+/,$line); my($numkey)=hex "$key"; while (defined($link{$numkey}{dst})) {$numkey++;} $link{$numkey}{dst}=$dst; $link{$numkey}{dst_date}=$date; } } close INPUT; return \%link; } sub build_cat_tree { my($root,$Cat)=@_; my(@childs)=(); my($cat); foreach $cat (keys %$Cat) { if($$Cat{$cat}{father} eq $root) { push @childs, build_cat_tree($cat,$Cat); } # print "$$Cat{$cat}{name}\t\t $Cat{$cat}{father}\n"; } return [$root,@childs]; } sub build_cat_list { my($tree,$cat_list)=@_; my($root) = shift @$tree; my($u); push @$cat_list,$root; foreach $u (@$tree) { build_cat_list($u,$cat_list); } unshift @$tree, $root; } sub cat_sorting_function { my($cat1,$cat2,$Cat)=@_; if (!defined($$Cat{$cat1}{state})) { if (!defined($$Cat{$cat2}{state})) { return 0; } else { return 1; } } if (!defined($$Cat{$cat2}{state})) { return -1; } my($comp) = $$Cat{$$Cat{$cat1}{'father'}}{'name'} cmp $$Cat{$$Cat{$cat2}{'father'}}{'name'}; if ($comp == 0) { return $$Cat{$cat1}{'name'} cmp $$Cat{$cat2}{'name'}; } else { return $comp; } } sub update_host_Y { my($host,$i) = @_; if (!defined($$host{'Y_min_host'})) { $$host{'Y_min_host'} = $i; } else { if ($$host{'Y_min_host'} > $i) { $$host{'Y_min_host'} = $i; } } if (!defined($$host{'Y_max_host'})) { $$host{'Y_max_host'} = $i+1; } else { if ($$host{'Y_max_host'} < $i+1) { $$host{'Y_max_host'} = $i+1; } } } sub set_cat_position { my($Cat,$cat_list)=@_; my($i)=0; my($cat); foreach $cat (sort {cat_sorting_function($a,$b,$Cat)} @$cat_list) { if(defined($$Cat{$cat}{state})) { update_host_Y($$Cat{$$Cat{$cat}{'father'}},$i); $$Cat{$cat}{Y_min} = $i; $$Cat{$cat}{Y_max} = $i+1; $i++; } } } sub create_fig { my($filename)=shift; my($fig)=new XFig; $fig->{object} = 'compound'; # Compound $fig->{elements} = []; $fig->{version} = 3.2; $fig->{orientation} = 'Landscape'; $fig->{justification} = 'Center'; $fig->{units} = 'Metric'; $fig->{papersize} = 'A4'; $fig->{magnification} = '100.00'; $fig->{multiplepage} = 'Single'; $fig->{transparent} = '-2'; $fig->{resolution} = '1200'; $fig->{coordsystem} = '2'; $fig->{filename} = $filename; return $fig; } sub draw_cat { my($fig,$Cat,$Link)=@_; my($cat,$e,$link); my($max_string_length)=0; foreach $cat (keys %$Cat) { next unless (defined($$Cat{$cat}{Y_min}) && defined($$Cat{$cat}{Y_max})); my($text) = new XFig ('text'); # $text->{'text'} = "$$Cat{$$Cat{$cat}{father}}{name}"."$$Cat{$cat}{name}"; my($printed_name)= $$Cat{$cat}{name}; $printed_name =~ s/\d+ \(0\)\s*$//; if (length($printed_name) > $max_string_length) { $max_string_length = length($printed_name); } $text->{'text'} = "$printed_name"; $text->{'y'} = ($$Cat{$cat}{Y_min}+$$Cat{$cat}{Y_max})/2*$grid_Y_size+68; $text->{'x'} = -100; $text->{'subtype'} = 2; $fig->add ($text); } my($max_date)=0; foreach $cat (keys %$Cat) { next unless (defined($$Cat{$cat}{Y_min}) && defined($$Cat{$cat}{Y_max})); my(@states)=(); my($e); foreach $e (@{$$Cat{$cat}{state}}) { my($new_date,$state) = ($$e[0],$$e[1]); if ($new_date > $max_date) { $max_date = $new_date; } if(defined($state)) { push @states, $e; } else { my($old_event) = pop @states; my($old_date) = $$old_event[0]; $state = $$old_event[1]; # LM: I added the next line because of "undefined values"... # normally, I think that this should not happen, but this part of code # is a bit too cryptic to me next unless (defined($state)); my($line) = new XFig ('polyline'); $line->{'depth'} = 50; # line $line->{'subtype'} = 1; # line $line->{'points'} = [ [$old_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size], [$new_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size], [$new_date*$grid_X_size, $$Cat{$cat}{Y_max}*$grid_Y_size], [$old_date*$grid_X_size, $$Cat{$cat}{Y_max}*$grid_Y_size], [$old_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size] ]; $line->{'areafill'} = 20; if($state eq "S") { $line->{'fillcolor'} = $color_suspended; } elsif ($state eq "E") { $line->{'fillcolor'} = $color_compute; } elsif ($state eq "B") { $line->{'fillcolor'} = $color_wait_for_recpt; } elsif ($state eq "C") { $line->{'fillcolor'} = $color_communicate; } $fig->add ($line); } } } foreach $link (keys %$Link) { my($line) = new XFig ('polyline'); my($src_date)=$$Link{$link}{src_date}; my($src)=$$Link{$link}{src}; my($dst_date)=$$Link{$link}{dst_date}; my($dst)=$$Link{$link}{dst}; $line->{'subtype'} = 1; # line print STDERR "$link: $src ($src_date) -> $dst ($dst_date)\n"; print STDERR "$$Cat{$src}{name} -> $$Cat{$dst}{name}\n"; $line->{'points'} = [ [$src_date*$grid_X_size, ($$Cat{$src}{Y_min}+$$Cat{$src}{Y_max})/2*$grid_Y_size], [$dst_date*$grid_X_size, ($$Cat{$dst}{Y_min}+$$Cat{$dst}{Y_max})/2*$grid_Y_size] ]; $line->{'forwardarrow'} = ['1', '1', '1.00', '60.00', '120.00']; $fig->add ($line); } # Host visualization my($max_Y)= 0; my($index_fill)=0; my($width_of_one_letter)=80; my($min_x_for_host)=-400 - $max_string_length*$width_of_one_letter; my($host_text_x)= $min_x_for_host + 200; foreach $cat (keys %$Cat) { next unless (defined($$Cat{$cat}{Y_min_host}) && defined($$Cat{$cat}{Y_max_host})); my($line) = new XFig ('polyline'); $line->{'depth'} = 150; $line->{'subtype'} = 1; # line $line->{'points'} = [ [$min_x_for_host, $$Cat{$cat}{Y_min_host}*$grid_Y_size], [$max_date*$grid_X_size+150, $$Cat{$cat}{Y_min_host}*$grid_Y_size], [$max_date*$grid_X_size+150, $$Cat{$cat}{Y_max_host}*$grid_Y_size], [$min_x_for_host, $$Cat{$cat}{Y_max_host}*$grid_Y_size] ]; $line->{'areafill'} = 4+3*($index_fill % 2); $line->{'fillcolor'} = 0; $line->{'thickness'} = 0; $index_fill++; $fig->add ($line); my($text) = new XFig ('text'); $text->{'text'} = "$$Cat{$cat}{name}"; $text->{'angle'} = 3.14159265/2; $text->{'x'} = $host_text_x; $text->{'y'} = ($$Cat{$cat}{Y_min_host}+$$Cat{$cat}{Y_max_host})/2*$grid_Y_size; $text->{'subtype'} = 1; $text->{'font_size'} = 30; $fig->add ($text); if ($max_Y<$$Cat{$cat}{Y_max_host}) { $max_Y = $$Cat{$cat}{Y_max_host}; } } # Legend: my($i)=1; my($color); foreach $color (@color_list) { my($min_x)=0; my($min_Y)=($max_Y+1)*$grid_Y_size; my($width)=1700; my($height)=$grid_Y_size; my($line) = new XFig ('polyline'); $line->{'depth'} = 50; $line->{'subtype'} = 1; # line $line->{'points'} = [ [$min_x,$min_Y + ($i-1)*$height ], [$min_x + $width,$min_Y + ($i-1)*$height], [$min_x + $width,$min_Y+$height + ($i-1)*$height], [$min_x,$min_Y+$height + ($i-1)*$height], [$min_x,$min_Y+ ($i-1)*$height]]; $line->{'areafill'} = 20; $line->{'fillcolor'} = $color; $fig->add ($line); my($text) = new XFig ('text'); if ($color==$color_suspended) { $text->{'text'} = "Suspended"; } if ($color==$color_compute) { $text->{'text'} = "Computing"; } if ($color==$color_wait_for_recpt) { $text->{'text'} = "Waiting for reception"; } if ($color==$color_communicate) { $text->{'text'} = "Communicating"; } $text->{'y'} = $min_Y + ($i-0.5)*$height +68; $text->{'x'} = 50; $text->{'subtype'} = 0; $fig->add ($text); $i++; } # Time axis my($line) = new XFig ('polyline'); $line->{'depth'} = 0; $line->{'subtype'} = 1; # line $line->{'points'} = [ [0,0],[$max_date * $grid_X_size+150,0] ]; $line->{'forwardarrow'} = ['1', '1', '1.00', '60.00', '120.00']; $fig->add ($line); my($digits)=POSIX::floor(log($max_date)/log(10)); my($exponent) = 10**$digits; my($mantissa)= $max_date / $exponent; my($incr); if ($mantissa<2) { $incr = $exponent/10; } elsif ($mantissa<5) { $incr = $exponent/4; } else { $incr = $exponent/2; } print "$max_date $digits $exponent $mantissa $incr\n"; my($x); for($x=0; $x < $max_date; $x += $incr) { print "$x\n"; $line = new XFig ('polyline'); $line->{'depth'} = 0; $line->{'subtype'} = 1; # line $line->{'points'} = [ [$x * $grid_X_size,0],[$x * $grid_X_size, -100] ]; $line->{'forwardarrow'} = 0; $fig->add ($line); my($text) = new XFig ('text'); $text->{'text'} = "$x"; $text->{'y'} = -200; $text->{'x'} = $x * $grid_X_size; $text->{'subtype'} = 1; $fig->add ($text); } # Empty line so that the text of the time axis can be seen on the pdf $line = new XFig ('polyline'); $line->{'depth'} = 999; $line->{'subtype'} = 1; # line $line->{'thickness'} = 0; $line->{'points'} = [ [0,0],[0, -400] ]; $fig->add ($line); } sub main { my($Cat) = read_cat($ARGV[0]); my($cat_tree)=build_cat_tree("0",$Cat); read_event($ARGV[0],$Cat); my($Link)=read_link($ARGV[0]); # print Dumper($cat_tree); # print Dumper($Cat); my($cat_list)=[]; build_cat_list($cat_tree,$cat_list); shift @$cat_list; shift @$cat_list; # print "@$cat_list \n"; set_cat_position($Cat,$cat_list); my($fig)=create_fig("toto.fig"); draw_cat($fig,$Cat,$Link); $fig->writefile (); system "fig2dev -L pdf toto.fig toto.pdf"; } main; SimGrid-3.10/tools/MSG_visualization/colorize.pl000750 007661 000620 00000005661 12242224152 022161 0ustar00gierschand000000 000000 #!/usr/bin/perl $col_white = "\033[00m"; $col_black = "\033[30m"; $col_red = "\033[31m"; $col_green = "\033[32m"; $col_yellow = "\033[33m"; $col_blue = "\033[34m"; $col_purple = "\033[35m"; $col_cyan = "\033[36m"; $col_ltgray = "\033[37m"; $col_darkgray = "\033[30m"; $col_norm = $col_white; $col_background = "\033[07m"; $col_brighten = "\033[01m"; $col_underline = "\033[04m"; $col_blink = "\033[05m"; # Customize colors here... # $col_default = $col_ltgray; my (@coltab) = ( $col_green, $col_yellow, $col_purple, $col_cyan, $col_red, $col_blue, $col_background . $col_green, $col_background . $col_yellow, $col_background . $col_purple, $col_background . $col_cyan, $col_background . $col_red, $col_background . $col_blue, $col_background . $col_magenta, ); my %pid; # Get options # while (($_ = $ARGV[0]) =~ /^-/) { shift; if (/-location/i) { $opt_print_location = 1; shift; } elsif (/-h(elp)?$|-u(sage)?$/i) { print< where is a text file of values or '-' for STDIN Options: () denote short version -location Print the location in the code of the message. EOH ; exit; } } sub pidcolor { my $pid = shift; unless (defined($pid{$pid})) { # first time we see this pid. Affect it a color $pid{$pid}=(scalar keys %pid) % (scalar @coltab); } return $coltab[$pid{$pid}]; } sub print_line { my($host,$procname,$pid,$date,$location,$xbt_channel,$message)=@_; print $col_norm; printf "[% 10.6f]",$date; print pidcolor($pid); if(defined($location)) { printf "[%10s:%-10s] %s ",$host,$procname,$location; } else { printf "[%10s:%-10s]",$host,$procname; } print " $message"; print $col_norm."\n"; } # Read the messages and do the job while (<>) { $orgline = $thisline = $_; # Typical line [Gatien:slave:(9) 11.243148] msg/gos.c:137: [msg_gos/DEBUG] Action terminated if ($thisline =~ /^\[(.+):([^:]+):\((\d+)\) ([\d\.]*)\] ([^\[]*) \[([^\[]*)\] (.*)$/) { $host=$1; $procname=$2; $pid=$3; $date=$4; if($opt_print_location) { $location=$5; $location =~ s/:$//; } else { $location = undef; } $xbt_channel=$6; $message=$7; print_line($host,$procname,$pid,$date,$location,$xbt_channel,$message); # Typical line [Boivin:slave:(2) 9.269357] [pmm/INFO] ROW: step(2)<>myrow(0). Receive data from TeX } elsif ($thisline =~ /^\[([^:]+):([^:]+):\((\d+)\) ([\d\.]*)\] \[([^\[]*)\] (.*)$/) { $host=$1; $procname=$2; $pid=$3; $date=$4; $xbt_channel=$5; $message=$6; print_line($host,$procname,$pid,$date,undef,$xbt_channel,$message); } elsif ( $thisline =~ /^==(\d+)== (.*)$/) { # take care of valgrind outputs print pidcolor($1)."$2\n"; } else { print $col_default. $orgline; } } print $col_norm; SimGrid-3.10/tools/indent000750 007661 000620 00000001476 12242224152 015573 0ustar00gierschand000000 000000 #!/bin/bash declare -a OPTIONS OPTIONS=( -kr # Use Kernighan & Ritchie coding style. -l80 # Set maximum line length for non-comment lines to 80. -nut # Use spaces instead of tabs. -i2 # Set indentation level to 2 spaces. -lps # Leave space between ‘#’ and preprocessor directive. -npcs # Do not put space after the function in function calls. -br # Put braces on line with if, etc. -brs # Put braces on struct declaration line. -ce # Cuddle else and preceding ‘}’. -cdw # Cuddle while of do {} while; and preceding ‘}’. -bbo # Prefer to break long lines before boolean operators. -npsl # Put the type of a procedure on the same line as its name. ) exec indent "${OPTIONS[@]}" "$@" SimGrid-3.10/tools/platf_route_rulebased2full.py000750 007661 000620 00000002230 12242224152 022245 0ustar00gierschand000000 000000 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, re from lxml import etree xml = etree.parse(sys.argv[1]) for e in xml.xpath('//*[@routing="RuleBased"]'): e.attrib['routing'] = "Full" ids = e.xpath('./*[@id]/@id') done = set() for asr in e.xpath("./ASroute"): src_ids = {} dst_ids = {} for id in ids: src_s = re.search(r"%s"%asr.attrib['src'], id) dst_s = re.search(r"%s"%asr.attrib['dst'], id) if src_s : src_ids[id] = src_s if dst_s: dst_ids[id] = dst_s for sid, smat in src_ids.items(): for did, dmat in dst_ids.items(): todo = tuple(sorted((smat.group(1), dmat.group(1)))) if todo not in done or asr.attrib.get("symmetrical")=="NO": done.add(todo) dasr = etree.tounicode(asr) dasr = dasr.replace("$1src", smat.group(1)) dasr = dasr.replace("$1dst", dmat.group(1)) dasr = etree.fromstring(dasr) dasr.tag = "__ASroute__" dasr.attrib['src'] = sid dasr.attrib['dst'] = did asr.addnext(dasr) asr.getparent().remove(asr) print etree.tounicode(xml).replace("__ASroute__", "ASroute") SimGrid-3.10/tools/simgrid.supp000640 007661 000620 00000003024 12242224155 016726 0ustar00gierschand000000 000000 # Valgrind suppressions for stuff that we cannot control # Memory leaks in standard tools (e.g. dash, tail, or sort) { Memory leak in /bin tools Memcheck:Leak ... obj:/bin/* } { Memory leak in /usr/bin tools Memcheck:Leak ... obj:/usr/bin/* } # There's a constant leak of 56 bytes in the depths of libc which # manifests, for example, when using backtrace() { Memory leak in libc/dlopen with -pthread Memcheck:Leak fun:malloc fun:_dl_map_object_deps fun:dl_open_worker fun:_dl_catch_error fun:_dl_open fun:do_dlopen fun:_dl_catch_error fun:dlerror_run fun:__libc_dlopen_mode } # Memory leaks appearing to be in libcgraph. They can be seen with the # following simple program: # ,---- # | #include # | #include # | int main(int argc, char *argv[]) # | { # | if (argc == 1) { # | printf("Usage: %s \n", argv[0]); # | return 1; # | } # | Agraph_t *g; # | FILE *inf = fopen(argv[1], "r"); # | g = agread(inf, 0); # | fclose(inf); # | agclose(g); # | return 0; # | } # `---- { Memory leak in libcgraph (1/2) Memcheck:Leak fun:malloc ... obj:/usr/lib/libcgraph.so* fun:aaglex fun:aagparse fun:agconcat } { Memory leak in libcgraph (2/2) Memcheck:Leak fun:malloc ... fun:agnode obj:/usr/lib/libcgraph.so* fun:aagparse fun:agconcat } # We're not interested by memory leaks in the Lua interpreter { Memory leak in lua Memcheck:Leak ... fun:luaD_precall } SimGrid-3.10/tools/graphicator/002750 007661 000620 00000000000 12242224154 016663 5ustar00gierschand000000 000000 SimGrid-3.10/tools/graphicator/CMakeLists.txt000640 007661 000620 00000001540 12242224152 021420 0ustar00gierschand000000 000000 cmake_minimum_required(VERSION 2.6) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin") add_executable(graphicator graphicator.c) ### Add definitions for compile if(NOT WIN32) target_link_libraries(graphicator simgrid m pthread ) else() target_link_libraries(graphicator simgrid ) endif() ## Clean generated files get_directory_property(extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES) set_directory_properties( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${extra_clean_files};${CMAKE_CURRENT_BINARY_DIR}/simgrid.trace;") set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/graphicator.tesh PARENT_SCOPE ) set(xml_files ${xml_files} PARENT_SCOPE ) set(tools_src ${tools_src} ${CMAKE_CURRENT_SOURCE_DIR}/graphicator.c PARENT_SCOPE ) set(bin_files ${bin_files} PARENT_SCOPE ) set(txt_files ${txt_files} PARENT_SCOPE ) SimGrid-3.10/tools/graphicator/graphicator.tesh000640 007661 000620 00000000476 12242224154 022061 0ustar00gierschand000000 000000 #! ./tesh $ ${bindir:=.}/graphicator ${srcdir:=.}/teshsuite/simdag/platforms/one_cluster.xml --cfg=tracing:yes --cfg=tracing/platform:yes test.dot > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/platform' to 'yes' $ rm test.dot SimGrid-3.10/tools/graphicator/graphicator.c000640 007661 000620 00000002070 12242224154 021330 0ustar00gierschand000000 000000 /* Copyright (c) 2008-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_WIN32 #include #endif #include "msg/msg.h" #include "xbt/graph.h" XBT_LOG_NEW_DEFAULT_CATEGORY(graphicator, "Graphicator Logging System"); int main(int argc, char **argv) { XBT_LOG_CONNECT(graphicator); #ifdef HAVE_TRACING MSG_init(&argc, argv); if (argc < 3){ XBT_INFO("Usage: %s ", argv[0]); return 1; } char *platformFile = argv[1]; char *graphvizFile = argv[2]; MSG_create_environment(platformFile); int status = TRACE_platform_graph_export_graphviz (graphvizFile); if (status == 0){ XBT_INFO ("%s expects --cfg=tracing:yes --cfg=tracing/platform:yes", argv[0]); } #else XBT_INFO ("works only if simgrid was compiled with tracing enabled."); #endif return 0; } SimGrid-3.10/tools/CMakeLists.txt000640 007661 000620 00000001564 12242224152 017123 0ustar00gierschand000000 000000 cmake_minimum_required(VERSION 2.6) set(bin_files ${bin_files} ${CMAKE_CURRENT_SOURCE_DIR}/fix-paje-trace.sh ${CMAKE_CURRENT_SOURCE_DIR}/indent ${CMAKE_CURRENT_SOURCE_DIR}/platf_route_rulebased2full.py ${CMAKE_CURRENT_SOURCE_DIR}/sg_unit_extractor.pl ${CMAKE_CURRENT_SOURCE_DIR}/sg_xml_unit_converter.py ${CMAKE_CURRENT_SOURCE_DIR}/simgrid_update_xml.pl ${CMAKE_CURRENT_SOURCE_DIR}/xbt_exception_checker ${CMAKE_CURRENT_SOURCE_DIR}/doxygen/fig2dev_postprocessor.pl ${CMAKE_CURRENT_SOURCE_DIR}/doxygen/index_create.pl ${CMAKE_CURRENT_SOURCE_DIR}/doxygen/xbt_log_extract_hierarchy.pl ${CMAKE_CURRENT_SOURCE_DIR}/MSG_visualization/colorize.pl ${CMAKE_CURRENT_SOURCE_DIR}/MSG_visualization/trace2fig.pl PARENT_SCOPE ) set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/simgrid.supp ${CMAKE_CURRENT_SOURCE_DIR}/simgrid2vite.sed PARENT_SCOPE ) SimGrid-3.10/tools/fix-paje-trace.sh000750 007661 000620 00000001112 12242224152 017505 0ustar00gierschand000000 000000 #!/bin/bash if [ -z $1 ] then echo "Usage: $0 {X.trace}" exit fi TRACE=$1 echo "input: $TRACE" OUTPUT=`echo $TRACE | cut -d\. -f1`.fix.trace cat $TRACE | grep ^% > header DEFEVENTS=`cat header | grep Define | awk '{ print $3 }'` GREP="" GREP2="" for i in $DEFEVENTS do GREP="/^$i /d; $GREP" GREP2="-e '^$i ' $GREP2" done GREP="/^%\ /d; /^%E/d; $GREP" cat $TRACE | eval grep $GREP2 > types /bin/sed -e "$GREP" $TRACE > events cat events | sort -n -k 2 -s > events.sorted cat header types events.sorted > $OUTPUT rm types events events.sorted header echo "output: $OUTPUT" SimGrid-3.10/tools/tesh/002750 007661 000620 00000000000 12242224155 015324 5ustar00gierschand000000 000000 SimGrid-3.10/tools/tesh/set-output-sort-1.tesh000640 007661 000620 00000001463 12242224154 021467 0ustar00gierschand000000 000000 p Test sorting and filtering of output $ true ! output sort $ true $ printf 'profiling: foo\\n' $ printf 'profiling: foo' ! output sort $ printf 'profiling: foo\\n' ! output sort $ printf 'profiling: foo' $ printf 'a\\nb\\nc\\nd\\n' > a > b > c > d $ printf 'a\\nb\\nc\\nd' > a > b > c > d ! output sort $ printf 'c\\nd\\nb\\na\\n' > a > b > c > d ! output sort $ printf 'c\\nd\\nb\\na' > a > b > c > d $ printf 'a\\nprofiling: foo\\nprofiling: bar\\nb\\nc\\nd\\nprofiling: baz\\n' > a > b > c > d $ printf 'a\\nprofiling: foo\\nprofiling: bar\\nb\\nc\\nd\\nprofiling: baz' > a > b > c > d ! output sort $ printf 'c\\nprofiling: foo\\nprofiling: bar\\nd\\nb\\na\\nprofiling: baz\\n' > a > b > c > d ! output sort $ printf 'c\\nprofiling: foo\\nprofiling: bar\\nd\\nb\\na\\nprofiling: baz' > a > b > c > d SimGrid-3.10/tools/tesh/tesh.h000640 007661 000620 00000003151 12242224154 016436 0ustar00gierschand000000 000000 /* TESH (Test Shell) -- mini shell specialized in running test units */ /* Copyright (c) 2007-2011. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef TESH_H #define TESH_H #include "portable.h" #include "xbt/xbt_os_thread.h" #include "xbt/strbuff.h" /*** What we need to know about signals ***/ /******************************************/ /* return the name of a signal, aliasing SIGBUS to SIGSEGV since segfault leads to any of them depending on the system */ const char *signal_name(unsigned int got, char *expected); #include "run_context.h" /*** Options ***/ extern int timeout_value; /* child timeout value */ extern int sort_len; /* length of the prefix to sort */ extern char* option; /* cfg for command line */ #define SORT_LEN_DEFAULT 19 extern int coverage; /* coverage */ extern rctx_t rctx; extern const char *testsuite_name; /* Environment related definitions */ # ifdef __APPLE__ /* under darwin, the environment gets added to the process at startup time. So, it's not defined at library link time, forcing us to extra tricks */ # include # define environ (*_NSGetEnviron()) # else /* the environment, as specified by the opengroup, used to initialize the process properties */ extern char **environ; # endif extern xbt_dict_t env; /* the environment, stored as a dict (for variable substitution) */ #endif /* TESH_H */ SimGrid-3.10/tools/tesh/set-signal.tesh000640 007661 000620 00000000706 12242224154 020260 0ustar00gierschand000000 000000 #! ./tesh # This suite builds and uses a program raising a segfault, ie a program dying # of SIGSEV. tesh must detect this condition and report the issue. $ rm -rf temp_testdir-set-signal $ mkdir temp_testdir-set-signal $ cd temp_testdir-set-signal < #include < int main(void) { < char *A=NULL; < *A = 1; < } $ mkfile segfault.c $ gcc -o segfault segfault.c ! expect signal SIGSEGV $ ./segfault $ cd .. $ rm -rf temp_testdir-set-signal SimGrid-3.10/tools/tesh/signal.c000640 007661 000620 00000003205 12242224154 016743 0ustar00gierschand000000 000000 /* signal -- what TESH needs to know about signals */ /* Copyright (c) 2007-2010, 2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "tesh.h" #include typedef struct s_signal_entry { const char *name; int number; } s_signal_entry_t, *signal_entry_t; static const s_signal_entry_t signals[] = { {"SIGHUP", SIGHUP}, {"SIGINT", SIGINT}, {"SIGQUIT", SIGQUIT}, {"SIGILL", SIGILL}, {"SIGTRAP", SIGTRAP}, {"SIGABRT", SIGABRT}, {"SIGFPE", SIGFPE}, {"SIGKILL", SIGKILL}, {"SIGBUS", SIGBUS}, {"SIGSEGV", SIGSEGV}, {"SIGSYS", SIGSYS}, {"SIGPIPE", SIGPIPE}, {"SIGALRM", SIGALRM}, {"SIGTERM", SIGTERM}, {"SIGURG", SIGURG}, {"SIGSTOP", SIGSTOP}, {"SIGTSTP", SIGTSTP}, {"SIGCONT", SIGCONT}, {"SIGCHLD", SIGCHLD}, {"SIGTTIN", SIGTTIN}, {"SIGTTOU", SIGTTOU}, {"SIGIO", SIGIO}, {"SIGXCPU", SIGXCPU}, {"SIGXFSZ", SIGXFSZ}, {"SIGVTALRM", SIGVTALRM}, {"SIGPROF", SIGPROF}, {"SIGWINCH", SIGWINCH}, {"SIGUSR1", SIGUSR1}, {"SIGUSR2", SIGUSR2}, {"SIG UNKNOWN", -1} }; const char *signal_name(unsigned int got, char *expected) { int i; /* Make SIGBUS a synonym for SIGSEGV (segfault leads to any of them depending on the system) */ if ((got == SIGBUS) && !strcmp("SIGSEGV", expected)) got = SIGSEGV; for (i = 0; signals[i].number != -1; i++) if (signals[i].number == got) return (signals[i].name); return bprintf("SIG UNKNOWN (%u)", got); } SimGrid-3.10/tools/tesh/background.tesh000640 007661 000620 00000001722 12242224154 020330 0ustar00gierschand000000 000000 $ rm -rf temp_testdir_background $ mkdir temp_testdir_background $ cd temp_testdir_background < #include < #include < #include < #include < #include < #include < #ifdef WIN32 < #include "windows.h" < #endif < < int main() { < char buff[2048]; < int got; < int in; < < #ifndef WIN32 < sleep(1); < #else < Sleep(1000); < #endif < in = open("tmp_fich",O_RDONLY|O_CREAT); < if (in == -1) { < perror("Cannot open tmp_fich: "); < exit(1); < } < while ((got = read(in,&buff,2048))>0) { < int w = write(1,&buff,got); < if (w<0) { < perror("Error while writing:"); < exit(1); < } < } < if (got < 0) { < perror("Error while reading:"); < exit(1); < } < return 0; < } $ mkfile delayed_cat.c $ gcc -Wall -o delayed_cat delayed_cat.c & ./delayed_cat > TOTO < TOTO $ mkfile tmp_fich $ sleep 2 $ cd .. $ rm -rf temp_testdir_background SimGrid-3.10/tools/tesh/catch-wrong-output.tesh000640 007661 000620 00000000523 12242224154 021761 0ustar00gierschand000000 000000 #! ./tesh p This tests whether TESH detects wrong outputs ! expect return 2 < > TOTO < < TUTU < $ cat $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' > Enable coverage > Test suite from stdin > [(stdin):3] cat > Output of <(stdin):3> mismatch: > - TOTO > + TUTU > Test suite `(stdin)': NOK (<(stdin):3> output mismatch) SimGrid-3.10/tools/tesh/CMakeLists.txt000640 007661 000620 00000004527 12242224152 020070 0ustar00gierschand000000 000000 cmake_minimum_required(VERSION 2.6) if(WIN32) # add_custom_target(tesh ALL # DEPENDS ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/tesh.pl # COMMENT "Install ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/tesh.pl" # COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/tesh.pl ${CMAKE_BINARY_DIR}/bin/tesh # ) configure_file("${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/tesh.pl" "${CMAKE_BINARY_DIR}/bin/tesh" @ONLY IMMEDIATE) file(COPY ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/Diff.pm DESTINATION ${CMAKE_BINARY_DIR}/bin FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ) else() set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin") add_executable(tesh tesh.c run_context.c signal.c) ### Add definitions for compile target_link_libraries(tesh simgrid m pthread) endif() set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/setenv.tesh ${CMAKE_CURRENT_SOURCE_DIR}/set-output-ignore.tesh ${CMAKE_CURRENT_SOURCE_DIR}/set-output-sort.tesh ${CMAKE_CURRENT_SOURCE_DIR}/set-output-sort-1.tesh ${CMAKE_CURRENT_SOURCE_DIR}/set-return.tesh ${CMAKE_CURRENT_SOURCE_DIR}/set-signal.tesh ${CMAKE_CURRENT_SOURCE_DIR}/set-timeout.tesh ${CMAKE_CURRENT_SOURCE_DIR}/background.tesh ${CMAKE_CURRENT_SOURCE_DIR}/basic.tesh ${CMAKE_CURRENT_SOURCE_DIR}/bg-basic.tesh ${CMAKE_CURRENT_SOURCE_DIR}/bg-set-signal.tesh ${CMAKE_CURRENT_SOURCE_DIR}/catch-return.tesh ${CMAKE_CURRENT_SOURCE_DIR}/catch-signal.tesh ${CMAKE_CURRENT_SOURCE_DIR}/catch-timeout.tesh ${CMAKE_CURRENT_SOURCE_DIR}/catch-wrong-output.tesh ${CMAKE_CURRENT_SOURCE_DIR}/cd.tesh ${CMAKE_CURRENT_SOURCE_DIR}/IO-bigsize.tesh ${CMAKE_CURRENT_SOURCE_DIR}/IO-broken-pipe.tesh ${CMAKE_CURRENT_SOURCE_DIR}/IO-orders.tesh PARENT_SCOPE ) set(xml_files ${xml_files} PARENT_SCOPE ) set(tools_src ${tools_src} ${CMAKE_CURRENT_SOURCE_DIR}/run_context.c ${CMAKE_CURRENT_SOURCE_DIR}/run_context.h ${CMAKE_CURRENT_SOURCE_DIR}/signal.c ${CMAKE_CURRENT_SOURCE_DIR}/tesh.c ${CMAKE_CURRENT_SOURCE_DIR}/tesh.h PARENT_SCOPE ) set(bin_files ${bin_files} ${CMAKE_CURRENT_SOURCE_DIR}/colorize.pl PARENT_SCOPE ) set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_SOURCE_DIR}/tesh.1 PARENT_SCOPE ) SimGrid-3.10/tools/tesh/basic.tesh000640 007661 000620 00000003202 12242224154 017265 0ustar00gierschand000000 000000 #! ./tesh p This is a basic test < TOTO \ TUTU $ mkfile tmp_fich $ cat tmp_fich > TOTO TUTU ! expect return 2 ! output ignore < $ cat tmp_fich < > TUTU TOTO $ ${bindir:=.}/tesh --enable-coverage $ rm tmp_fich p And now, some multilines examples p Really basic multiline < a < b < c < d $ mkfile tmp_fich $ cat tmp_fich > a > b > c > d $ sed -n '$=' tmp_fich > 4 $ rm tmp_fich p Now, check for spaces in input p * leading and trailing spaces... < a < b < c $ sed 's/ /_/g' > __a > _b_ > c__ p * empty lines... < a < < c $ sed '2s/^/b/' > a > b > c < < b < c $ sed '1s/^/a/' > a > b > c p Now that input should be good, check for spaces in output p * leading spaces... < _x $ sed 's/_/ /' > x ! expect return 2 ! output ignore < < _x < $ sed 's/_/ /' < > x $ ${bindir:=.}/tesh --enable-coverage ! expect return 2 ! output ignore < < x < $ cat < > x $ ${bindir:=.}/tesh --enable-coverage p * trailing spaces... < x_ $ sed 's/_/ /' > x ! expect return 2 ! output ignore < < x_ < $ sed 's/_/ /' < > x $ ${bindir:=.}/tesh --enable-coverage ! expect return 2 ! output ignore < < x < $ cat < > x $ ${bindir:=.}/tesh --enable-coverage p * empty lines... < a < < c $ cat > a > > c ! expect return 2 ! output ignore < < a < < < < c < $ cat < > a < > c $ ${bindir:=.}/tesh --enable-coverage ! expect return 2 ! output ignore < < a < < c < $ cat < > a < > < > c $ ${bindir:=.}/tesh --enable-coverage < < b < c $ cat > > b > c ! expect return 2 ! output ignore < < < < b < < c < $ cat < > b < > c $ ${bindir:=.}/tesh --enable-coverage ! expect return 2 ! output ignore < < b < < c < $ cat < > < > b < > c $ ${bindir:=.}/tesh --enable-coverage SimGrid-3.10/tools/tesh/set-return.tesh000640 007661 000620 00000000614 12242224154 020320 0ustar00gierschand000000 000000 #! ./tesh # This suite builds and uses a program returning 1. # tesh is instructed of this return code and must not whine. $ rm -rf temp_testdir-set-return $ mkdir temp_testdir-set-return $ cd temp_testdir-set-return < #include < int main(void) { < exit(1); < } $ mkfile return1.c $ gcc -o return1 return1.c ! expect return 1 $ ./return1 $ cd .. $ rm -rf temp_testdir-set-return SimGrid-3.10/tools/tesh/cd.tesh000640 007661 000620 00000001253 12242224154 016576 0ustar00gierschand000000 000000 #! ./tesh # This example uses the cd command $ rm -rf testdir_temp-cd $ mkdir testdir_temp-cd $ cd testdir_temp-cd # Check that there is nothing in the current dir (which must be testdir_temp-cd) $ ls # Check that tesh detects properly cd to non-existing directories ! expect return 4 < $ cd toto > Enable coverage > Test suite from stdin > Chdir to toto failed: No such file or directory > Test suite `(stdin)': NOK (system error) $ ../tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' # The next command checks that there is a testdir_temp-cd in the upper directory, # ie that mkdir and cd both worked. $ test -e ../testdir_temp-cd $ cd .. $ rmdir testdir_temp-cd SimGrid-3.10/tools/tesh/catch-return.tesh000640 007661 000620 00000001166 12242224154 020612 0ustar00gierschand000000 000000 #! ./tesh # This suite builds and uses a program returning 1. # tesh must detect this condition and report the issue. $ rm -rf temp_testdir-catch-return $ mkdir temp_testdir-catch-return $ cd temp_testdir-catch-return < #include < int main(void) { < exit(1); < } $ mkfile return1.c $ gcc -o return1 return1.c ! expect return 41 < $ ./return1 $ ../tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' > Enable coverage > Test suite from stdin > [(stdin):1] ./return1 > Test suite `(stdin)': NOK (<(stdin):1> returned code 1) > Output of <(stdin):1> so far: > || $ cd .. $ rm -rf temp_testdir-catch-return SimGrid-3.10/tools/tesh/bg-set-signal.tesh000640 007661 000620 00000000734 12242224154 020647 0ustar00gierschand000000 000000 #! ./tesh # This suite builds and uses a program raising a segfault, ie a program dying # of SIGSEV. tesh must detect this condition and report the issue. $ rm -rf temp_testdir-bg-set-signal $ mkdir temp_testdir-bg-set-signal $ cd temp_testdir-bg-set-signal < #include < int main(void) { < char *A=NULL; < *A = 1; < } $ mkfile segfault.c $ gcc -o segfault segfault.c ! expect signal SIGSEGV & ./segfault $ sleep 1 $ cd .. $ rm -rf temp_testdir-bg-set-signal SimGrid-3.10/tools/tesh/setenv.tesh000640 007661 000620 00000001207 12242224154 017513 0ustar00gierschand000000 000000 #! ./tesh # This suite builds and uses a program returning 1. # tesh is instructed of this return code and must not whine. $ rm -rf temp_testdir-setenv $ mkdir temp_testdir-setenv $ cd temp_testdir-setenv < #include < #include < extern char **environ; < int main(void) { < char **env_iter=environ; < while (*env_iter) { < if (!strncmp(*env_iter,"tesh_test_toto=",strlen("tesh_test_toto="))) < printf("%s\n",*env_iter); < env_iter++; < } < return 0; < } $ mkfile getenv.c $ gcc -o getenv getenv.c -g ! setenv tesh_test_toto=blah $ ./getenv > tesh_test_toto=blah $ cd .. $ rm -rf temp_testdir-setenv SimGrid-3.10/tools/tesh/IO-orders.tesh000640 007661 000620 00000002365 12242224154 020020 0ustar00gierschand000000 000000 p This tests that TESH accepts any order for the input/output p Order: in, out, cmd < < TOTO < > TOTO < $ cat > Enable coverage > Test suite from stdin > [(stdin):3] cat > Test suite from stdin OK $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' p Order: out, in, cmd < > TOTO < < TOTO < $ cat > Enable coverage > Test suite from stdin > [(stdin):3] cat > Test suite from stdin OK $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' p Order: out, cmd, in < > TOTO < $ cat < < TOTO > Enable coverage > Test suite from stdin > [(stdin):2] cat > Test suite from stdin OK $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' p Order: in, cmd, out < < TOTO < $ cat < > TOTO > Enable coverage > Test suite from stdin > [(stdin):2] cat > Test suite from stdin OK $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' p Order: cmd, out, in < $ cat < > TOTO < < TOTO > Enable coverage > Test suite from stdin > [(stdin):1] cat > Test suite from stdin OK $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' p Order: cmd, in, out < $ cat < < TOTO < > TOTO > Enable coverage > Test suite from stdin > [(stdin):1] cat > Test suite from stdin OK $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' SimGrid-3.10/tools/tesh/set-output-ignore.tesh000640 007661 000620 00000000477 12242224154 021631 0ustar00gierschand000000 000000 #! ./tesh p This tests whether TESH accepts to ignore command output < ! output ignore < > TOTO < < TUTU < $ cat $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' > Enable coverage > Test suite from stdin > [(stdin):4] cat > (ignoring the output of <(stdin):4> as requested) > Test suite from stdin OK SimGrid-3.10/tools/tesh/run_context.c000640 007661 000620 00000066163 12242224154 020052 0ustar00gierschand000000 000000 /* run_context -- stuff in which TESH runs a command */ /* Copyright (c) 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "tesh.h" #include #include #include #include #include #include /* floor */ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh); int fg_job = 0; xbt_dynar_t bg_jobs = NULL; rctx_t armageddon_initiator = NULL; xbt_os_mutex_t armageddon_mutex = NULL; struct { int num; struct sigaction act; } oldact[3]; /* SIGINT, SIGQUIT, SIGTERM */ xbt_os_thread_t sigwaiter_thread; xbt_os_mutex_t sigwaiter_mutex; xbt_os_cond_t sigwaiter_cond; int armageddon_requested = 0; int caught_signum = 0; /* * Module management */ static void armageddon_sighandler(int signum) { xbt_os_mutex_acquire(sigwaiter_mutex); caught_signum = signum; armageddon_requested = 1; xbt_os_cond_signal(sigwaiter_cond); xbt_os_mutex_release(sigwaiter_mutex); } static void *armageddon_sigwaiter(_XBT_GNUC_UNUSED void *arg) { xbt_os_mutex_acquire(sigwaiter_mutex); /* Inform main thread that it started. */ xbt_os_cond_signal(sigwaiter_cond); /* Wait for ending signal... */ xbt_os_cond_wait(sigwaiter_cond, sigwaiter_mutex); if (armageddon_requested) { XBT_ERROR("Test suite `%s': caught signal %d", testsuite_name, caught_signum); rctx_armageddon(rctx, 3); } xbt_os_mutex_release(sigwaiter_mutex); return NULL; } static void wait_it(rctx_t rctx) { XBT_VERB("Join thread %p which were running background cmd <%s>", rctx->runner, rctx->filepos); xbt_os_thread_join(rctx->runner, NULL); } static void kill_it(void *r) { rctx_t rctx = *(rctx_t *) r; wait_it(rctx); rctx_free(rctx); } void rctx_init(void) { struct sigaction newact; int i; fg_job = 0; bg_jobs = xbt_dynar_new(sizeof(rctx_t), kill_it); armageddon_mutex = xbt_os_mutex_init(); armageddon_initiator = NULL; sigwaiter_mutex = xbt_os_mutex_init(); sigwaiter_cond = xbt_os_cond_init(); xbt_os_mutex_acquire(sigwaiter_mutex); sigwaiter_thread = xbt_os_thread_create("Armageddon request waiter", armageddon_sigwaiter, NULL, NULL); /* Wait for thread to start... */ xbt_os_cond_wait(sigwaiter_cond, sigwaiter_mutex); xbt_os_mutex_release(sigwaiter_mutex); memset(&newact, 0, sizeof(newact)); newact.sa_handler = armageddon_sighandler; oldact[0].num = SIGINT; oldact[1].num = SIGQUIT; oldact[2].num = SIGTERM; for (i = 0; i < 3; i++) sigaction(oldact[i].num, &newact, &oldact[i].act); } void rctx_exit(void) { int i; for (i = 0; i < 3; i++) sigaction(oldact[i].num, &oldact[i].act, NULL); xbt_os_cond_signal(sigwaiter_cond); xbt_os_thread_join(sigwaiter_thread, NULL); xbt_dynar_free(&bg_jobs); xbt_os_cond_destroy(sigwaiter_cond); xbt_os_mutex_destroy(sigwaiter_mutex); xbt_os_mutex_destroy(armageddon_mutex); } void rctx_wait_bg(void) { /* Do not use xbt_dynar_free or it will lock the dynar, preventing armageddon * from working */ while (!xbt_dynar_is_empty(bg_jobs)) { rctx_t rctx = xbt_dynar_getlast_as(bg_jobs, rctx_t); wait_it(rctx); xbt_dynar_pop(bg_jobs, &rctx); rctx_free(rctx); } xbt_dynar_reset(bg_jobs); } static void rctx_armageddon_kill_one(rctx_t initiator, const char *filepos, rctx_t rctx) { if (rctx != initiator) { XBT_INFO("Kill <%s> because <%s> failed", rctx->filepos, filepos); xbt_os_mutex_acquire(rctx->interruption); if (!rctx->reader_done) { rctx->interrupted = 1; kill(rctx->pid, SIGTERM); struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = (100e-6 - floor(100e-6)) * 1e9; nanosleep (&ts, NULL); kill(rctx->pid, SIGKILL); } xbt_os_mutex_release(rctx->interruption); } } void rctx_armageddon(rctx_t initiator, int exitcode) { unsigned int cursor; rctx_t job; const char *filepos = initiator && initiator->filepos ? initiator->filepos : "(master)"; XBT_DEBUG("Armageddon request by <%s> (exit=%d)", filepos, exitcode); xbt_os_mutex_acquire(armageddon_mutex); if (armageddon_initiator != NULL) { XBT_VERB("Armageddon already started. Let it go"); xbt_os_mutex_release(armageddon_mutex); return; } XBT_DEBUG("Armageddon request by <%s> got the lock. Let's go amok", filepos); armageddon_initiator = initiator; xbt_os_mutex_release(armageddon_mutex); /* Kill foreground command */ if (fg_job) rctx_armageddon_kill_one(initiator, filepos, rctx); /* Kill any background commands */ xbt_dynar_foreach(bg_jobs, cursor, job) { rctx_armageddon_kill_one(initiator, filepos, job); } /* Give runner threads a chance to acknowledge the processes deaths */ struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = (10000e-6 - floor(10000e-6)) * 1e9; nanosleep (&ts, NULL); /* Ensure that nobody is running rctx_wait on exit */ if (fg_job) xbt_os_mutex_acquire(rctx->interruption); xbt_dynar_foreach(bg_jobs, cursor, job) xbt_os_mutex_acquire(job->interruption); XBT_VERB("Shut everything down!"); exit(exitcode); } /* * Memory management */ void rctx_empty(rctx_t rc) { int i; char **env_it; void *filepos; free(rc->cmd); rc->cmd = NULL; /* avoid race with rctx_armageddon log messages */ filepos = rc->filepos; rc->filepos = NULL; free(filepos); for (i = 0, env_it = environ; *env_it; i++, env_it++); if (rc->env) { for (env_it = rctx->env + i; *env_it; env_it++) free(*env_it); free(rc->env); } rc->env_size = i + 1; rc->env = malloc(rc->env_size * sizeof(char *)); memcpy(rc->env, environ, rc->env_size * sizeof(char *)); rc->is_empty = 1; rc->is_background = 0; rc->is_stoppable = 0; rc->output = e_output_check; rc->output_sort = 0; rc->brokenpipe = 0; rc->timeout = 0; rc->interrupted = 0; xbt_strbuff_empty(rc->input); xbt_strbuff_empty(rc->output_wanted); xbt_strbuff_empty(rc->output_got); } rctx_t rctx_new() { rctx_t res = xbt_new0(s_rctx_t, 1); res->input = xbt_strbuff_new(); res->output_sort = 0; res->output_wanted = xbt_strbuff_new(); res->output_got = xbt_strbuff_new(); res->interruption = xbt_os_mutex_init(); rctx_empty(res); return res; } void rctx_free(rctx_t rctx) { XBT_DEBUG("RCTX: Free %p", rctx); rctx_dump(rctx, "free"); if (!rctx) return; free(rctx->cmd); free(rctx->filepos); if (rctx->env) { int i; char **env_it; for (i = 0, env_it = environ; *env_it; i++, env_it++); for (env_it = rctx->env + i; *env_it; env_it++) free(*env_it); free(rctx->env); } xbt_os_mutex_destroy(rctx->interruption); xbt_strbuff_free(rctx->input); xbt_strbuff_free(rctx->output_got); xbt_strbuff_free(rctx->output_wanted); free(rctx); } void rctx_dump(rctx_t rctx, const char *str) { XBT_DEBUG("%s RCTX %p={in%p={%d,%10s}, want={%d,%10s}, out={%d,%10s}}", str, rctx, rctx->input, rctx->input->used, rctx->input->data, rctx->output_wanted->used, rctx->output_wanted->data, rctx->output_got->used, rctx->output_got->data); XBT_DEBUG("%s RCTX %p=[cmd%p=%10s, pid=%d]", str, rctx, rctx->cmd, rctx->cmd, rctx->pid); } /* * Getting instructions from the file */ void rctx_pushline(const char *filepos, char kind, char *line) { switch (kind) { case '$': case '&': if (rctx->cmd) { if (!rctx->is_empty) { XBT_ERROR ("[%s] More than one command in this chunk of lines (previous: %s).\n" " Cannot guess which input/output belongs to which command.", filepos, rctx->cmd); XBT_ERROR("Test suite `%s': NOK (syntax error)", testsuite_name); rctx_armageddon(rctx, 1); return; } rctx_start(); XBT_VERB("[%s] More than one command in this chunk of lines", filepos); } if (kind == '&') rctx->is_background = 1; else rctx->is_background = 0; rctx->cmd = xbt_strdup(line); rctx->filepos = xbt_strdup(filepos); if (option){ char *newcmd = bprintf("%s %s", rctx->cmd, option); free(rctx->cmd); rctx->cmd = newcmd; } XBT_INFO("[%s] %s%s", filepos, rctx->cmd, ((rctx->is_background) ? " (background command)" : "")); break; case '<': rctx->is_empty = 0; xbt_strbuff_append(rctx->input, line); xbt_strbuff_append(rctx->input, "\n"); break; case '>': rctx->is_empty = 0; xbt_strbuff_append(rctx->output_wanted, line); xbt_strbuff_append(rctx->output_wanted, "\n"); XBT_DEBUG("wanted:%s",rctx->output_wanted->data); break; case '!': if (rctx->cmd) rctx_start(); if (!strncmp(line, "timeout no", strlen("timeout no"))) { XBT_VERB("[%s] (disable timeout)", filepos); timeout_value = -1; } else if (!strncmp(line, "timeout ", strlen("timeout "))) { timeout_value = atoi(line + strlen("timeout")); XBT_VERB("[%s] (new timeout value: %d)", filepos, timeout_value); } else if (!strncmp(line, "expect signal ", strlen("expect signal "))) { rctx->expected_signal = strdup(line + strlen("expect signal ")); xbt_str_trim(rctx->expected_signal, " \n"); XBT_VERB("[%s] (next command must raise signal %s)", filepos, rctx->expected_signal); } else if (!strncmp(line, "expect return ", strlen("expect return "))) { rctx->expected_return = atoi(line + strlen("expect return ")); XBT_VERB("[%s] (next command must return code %d)", filepos, rctx->expected_return); } else if (!strncmp(line, "output sort", strlen("output sort"))) { sort_len = atoi(line + strlen("output sort")); if (sort_len==0) sort_len=SORT_LEN_DEFAULT; rctx->output_sort = 1; XBT_VERB("[%s] (sort output of next command)", filepos); } else if (!strncmp(line, "output ignore", strlen("output ignore"))) { rctx->output = e_output_ignore; XBT_VERB("[%s] (ignore output of next command)", filepos); } else if (!strncmp(line, "output display", strlen("output display"))) { rctx->output = e_output_display; XBT_VERB("[%s] (ignore output of next command)", filepos); } else if (!strncmp(line, "setenv ", strlen("setenv "))) { int len = strlen("setenv "); char *eq = strchr(line + len, '='); char *key = bprintf("%.*s", (int) (eq - line - len), line + len); xbt_dict_set(env, key, xbt_strdup(eq + 1), NULL); free(key); rctx->env = realloc(rctx->env, ++(rctx->env_size) * sizeof(char *)); rctx->env[rctx->env_size - 2] = xbt_strdup(line + len); rctx->env[rctx->env_size - 1] = NULL; XBT_VERB("[%s] setenv %s", filepos, line + len); } else { XBT_ERROR("%s: Malformed metacommand: %s", filepos, line); XBT_ERROR("Test suite `%s': NOK (syntax error)", testsuite_name); rctx_armageddon(rctx, 1); return; } break; } } /* * Actually doing the job */ /* The IO of the childs are handled by the two following threads (one pair per child) */ static void *thread_writer(void *r) { int posw; rctx_t rctx = (rctx_t) r; for (posw = 0; posw < rctx->input->used && !rctx->brokenpipe;) { int got; XBT_DEBUG("Still %d chars to write", rctx->input->used - posw); got = write(rctx->child_to, rctx->input->data + posw, rctx->input->used - posw); if (got > 0) posw += got; if (got < 0) { if (errno == EPIPE) { rctx->brokenpipe = 1; } else if (errno != EINTR && errno != EAGAIN && errno != EPIPE) { perror("Error while writing input to child"); XBT_ERROR("Test suite `%s': NOK (system error)", testsuite_name); rctx_armageddon(rctx, 4); return NULL; } } XBT_DEBUG("written %d chars so far", posw); if (got <= 0){ struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = (100e-6 - floor(100e-6)) * 1e9; nanosleep (&ts, NULL); } } rctx->input->data[0] = '\0'; rctx->input->used = 0; close(rctx->child_to); return NULL; } static void *thread_reader(void *r) { rctx_t rctx = (rctx_t) r; char *buffout = malloc(4096); int posr, got_pid; do { posr = read(rctx->child_from, buffout, 4095); if (posr < 0 && errno != EINTR && errno != EAGAIN) { perror("Error while reading output of child"); XBT_ERROR("Test suite `%s': NOK (system error)", testsuite_name); rctx_armageddon(rctx, 4); return NULL; } if (posr > 0) { buffout[posr] = '\0'; xbt_strbuff_append(rctx->output_got, buffout); } else { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = (100e-6 - floor(100e-6)) * 1e9; nanosleep (&ts, NULL); } } while (!rctx->timeout && posr != 0); free(buffout); /* let this thread wait for the child so that the main thread can detect the timeout without blocking on the wait */ got_pid = waitpid(rctx->pid, &rctx->status, 0); if (got_pid != rctx->pid) { perror(bprintf ("(%s) Cannot wait for the child %s (got pid %d where pid %d were expected;status=%d)", xbt_thread_self_name(), rctx->cmd, (int) got_pid, (int) rctx->pid, rctx->status)); XBT_ERROR("Test suite `%s': NOK (system error)", testsuite_name); rctx_armageddon(rctx, 4); return NULL; } rctx->reader_done = 1; return NULL; } /* Special command: mkfile is a built-in creating a file with the input data as content */ static void rctx_mkfile(void) { char *filename = xbt_strdup(rctx->cmd + strlen("mkfile ")); FILE *OUT; int err; xbt_str_trim(filename, NULL); OUT = fopen(filename, "w"); if (!OUT) { THROWF(system_error, errno, "%s: Cannot create file %s: %s", rctx->filepos, filename, strerror(errno)); } err = (fprintf(OUT, "%s", rctx->input->data) < 0); err = (fclose(OUT) == -1) || err; if (err) { THROWF(system_error, errno, "%s: Cannot write file %s: %s", rctx->filepos, filename, strerror(errno)); } free(filename); } /* function to be called from the child to start the actual process */ static void start_command(rctx_t rctx) { xbt_dynar_t cmd; char *binary_name = NULL; unsigned int it; char *str; char **args; int errcode; if (!strncmp(rctx->cmd, "mkfile ", strlen("mkfile "))) { rctx_mkfile(); /* Valgrind detects memory leaks here. * To correct those leaks, we must free objects allocated in main() or in * handle_suite(), but we have no more reference to them at this point. * A quick and dirty hack to make valgrind happy it to uncomment the * following line. */ /* execlp("true", "true", (const char *)0); */ exit(0); /* end the working child */ } cmd = xbt_str_split_quoted(rctx->cmd); xbt_dynar_get_cpy(cmd, 0, &binary_name); args = xbt_new(char *, xbt_dynar_length(cmd) + 1); xbt_dynar_foreach(cmd, it, str) { args[it] = xbt_strdup(str); } args[it] = NULL; xbt_dynar_free_container(&cmd); /* To search for the right executable path when not trivial */ struct stat stat_buf; /* build the command line */ if (stat(binary_name, &stat_buf)) { /* Damn. binary not in current dir. We'll have to dig the PATH to find it */ int i; for (i = 0; environ[i]; i++) { if (!strncmp("PATH=", environ[i], 5)) { xbt_dynar_t path = xbt_str_split(environ[i] + 5, ":"); xbt_dynar_foreach(path, it, str) { free(binary_name); binary_name = bprintf("%s/%s", str, args[0]); if (!stat(binary_name, &stat_buf)) { /* Found. */ XBT_DEBUG("Looked in the PATH for the binary. Found %s", binary_name); xbt_dynar_free(&path); break; } } xbt_dynar_free(&path); if (stat(binary_name, &stat_buf)) { /* not found */ printf("TESH_ERROR Command %s not found\n", args[0]); exit(127); } break; } } } else { binary_name = xbt_strdup(args[0]); } errcode = execve(binary_name, args, rctx->env); printf("TESH_ERROR %s: Cannot start %s: %s\n", rctx->filepos, rctx->cmd, strerror(errcode)); exit(127); } /* Start a new child, plug the pipes as expected and fire up the helping threads. Is also waits for the child to end if this is a foreground job, or fire up a thread to wait otherwise. */ void rctx_start(void) { int child_in[2]; int child_out[2]; XBT_DEBUG("Cmd before rewriting %s", rctx->cmd); char *newcmd = xbt_str_varsubst(rctx->cmd, env); free(rctx->cmd); rctx->cmd = newcmd; XBT_VERB("Start %s %s", rctx->cmd, (rctx->is_background ? "(background job)" : "")); xbt_os_mutex_acquire(armageddon_mutex); if (armageddon_initiator) { XBT_VERB("Armageddon in progress. Do not start job."); xbt_os_mutex_release(armageddon_mutex); return; } if (pipe(child_in) || pipe(child_out)) { perror("Cannot open the pipes"); XBT_ERROR("Test suite `%s': NOK (system error)", testsuite_name); xbt_os_mutex_release(armageddon_mutex); rctx_armageddon(rctx, 4); } rctx->pid = fork(); if (rctx->pid < 0) { perror("Cannot fork the command"); XBT_ERROR("Test suite `%s': NOK (system error)", testsuite_name); xbt_os_mutex_release(armageddon_mutex); rctx_armageddon(rctx, 4); return; } if (rctx->pid) { /* father */ close(child_in[0]); rctx->child_to = child_in[1]; close(child_out[1]); rctx->child_from = child_out[0]; if (timeout_value > 0) rctx->end_time = time(NULL) + timeout_value; else rctx->end_time = -1; rctx->reader_done = 0; rctx->reader = xbt_os_thread_create("reader", thread_reader, (void *) rctx, NULL); rctx->writer = xbt_os_thread_create("writer", thread_writer, (void *) rctx, NULL); } else { /* child */ close(child_in[1]); dup2(child_in[0], 0); close(child_in[0]); close(child_out[0]); dup2(child_out[1], 1); dup2(child_out[1], 2); close(child_out[1]); start_command(rctx); } rctx->is_stoppable = 1; if (!rctx->is_background) { fg_job = 1; xbt_os_mutex_release(armageddon_mutex); rctx_wait(rctx); fg_job = 0; } else { /* Damn. Copy the rctx and launch a thread to handle it */ rctx_t old = rctx; xbt_os_thread_t runner; rctx = rctx_new(); XBT_DEBUG("RCTX: new bg=%p, new fg=%p", old, rctx); XBT_DEBUG("Launch a thread to wait for %s %d", old->cmd, old->pid); runner = xbt_os_thread_create(old->cmd, rctx_wait, (void *) old, NULL); old->runner = runner; XBT_VERB("Launched thread %p to wait for %s %d", runner, old->cmd, old->pid); xbt_dynar_push(bg_jobs, &old); xbt_os_mutex_release(armageddon_mutex); } } /* Helper function to sort the output */ static int cmpstringp(const void *p1, const void *p2) { /* Sort only using the sort_len first chars * If they are the same, then, sort using pointer address * (be stable wrt output of each process) */ const char **s1 = *(const char***)p1; const char **s2 = *(const char***)p2; XBT_DEBUG("Compare strings '%s' and '%s'", *s1, *s2); int res = strncmp(*s1, *s2, sort_len); if (res == 0) res = s1 > s2 ? 1 : (s1 < s2 ? -1 : 0); return res; } static void stable_sort(xbt_dynar_t a) { unsigned long len = xbt_dynar_length(a); void **b = xbt_new(void*, len); unsigned long i; for (i = 0 ; i < len ; i++) /* fill the array b with pointers to strings */ b[i] = xbt_dynar_get_ptr(a, i); qsort(b, len, sizeof *b, cmpstringp); /* sort it */ for (i = 0 ; i < len ; i++) /* dereference the pointers to get the strings */ b[i] = *(char**)b[i]; for (i = 0 ; i < len ; i++) /* put everything in place */ xbt_dynar_set_as(a, i, char*, b[i]); xbt_free(b); } /* Waits for the child to end (or to timeout), and check its ending conditions. This is launched from rctx_start but either in main thread (for foreground jobs) or in a separate one for background jobs. That explains the prototype, forced by xbt_os_thread_create. */ void *rctx_wait(void *r) { rctx_t rctx = (rctx_t) r; int errcode = 0; int now = time(NULL); rctx_dump(rctx, "wait"); if (!rctx->is_stoppable) THROWF(unknown_error, 0, "Cmd '%s' not started yet. Cannot wait it", rctx->cmd); /* Wait for the child to die or the timeout to happen (or an armageddon to happen) */ while (!rctx->reader_done && (rctx->end_time < 0 || rctx->end_time >= now)) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = (100e-6 - floor(100e-6)) * 1e9; nanosleep (&ts, NULL); now = time(NULL); } xbt_os_mutex_acquire(rctx->interruption); if (!rctx->interrupted && rctx->end_time > 0 && rctx->end_time < now) { XBT_INFO("<%s> timeouted. Kill the process.", rctx->filepos); rctx->timeout = 1; kill(rctx->pid, SIGTERM); struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = (100e-6 - floor(100e-6)) * 1e9; nanosleep (&ts, NULL); kill(rctx->pid, SIGKILL); } /* Make sure helper threads die. Cannot block since they wait for the child we just killed if not already dead. */ xbt_os_thread_join(rctx->writer, NULL); xbt_os_thread_join(rctx->reader, NULL); /* xbt_os_mutex_release(rctx->interruption); if (rctx->interrupted) return NULL; xbt_os_mutex_acquire(rctx->interruption); */ { // Sorting output got xbt_dynar_t a = xbt_str_split(rctx->output_got->data, "\n"); xbt_dynar_t b = xbt_dynar_new(sizeof(char *), NULL); unsigned cpt; char *str; xbt_dynar_foreach(a, cpt, str) { if (strncmp(str, "TESH_ERROR ", (sizeof "TESH_ERROR ") - 1) == 0) { XBT_CRITICAL("%s", str); errcode = 1; } else if (coverage && strncmp(str, "profiling:", (sizeof "profiling:") - 1) == 0) { XBT_DEBUG("Remove line [%u]: '%s'", cpt, str); } else { xbt_dynar_push_as(b, char *, str); } } if (rctx->output_sort) { stable_sort(b); /* If empty lines moved in first position, remove them */ while (!xbt_dynar_is_empty(b) && *xbt_dynar_getfirst_as(b, char*) == '\0') xbt_dynar_shift(b, NULL); } if (rctx->output_sort || xbt_dynar_length(b) != xbt_dynar_length(a)) { char *newbuf = xbt_str_join(b, "\n"); strcpy(rctx->output_got->data, newbuf); rctx->output_got->used = strlen(newbuf); xbt_free(newbuf); } xbt_dynar_free(&b); xbt_dynar_free(&a); } if (rctx->output_sort) { // Sorting output wanted char *newbuf; xbt_dynar_t a = xbt_str_split(rctx->output_wanted->data, "\n"); stable_sort(a); /* If empty lines moved in first position, remove them */ while (!xbt_dynar_is_empty(a) && *xbt_dynar_getfirst_as(a, char*) == '\0') xbt_dynar_shift(a, NULL); newbuf = xbt_str_join(a, "\n"); strcpy(rctx->output_wanted->data, newbuf); rctx->output_wanted->used = strlen(newbuf); xbt_free(newbuf); xbt_dynar_free(&a); } xbt_strbuff_chomp(rctx->output_got); xbt_strbuff_chomp(rctx->output_wanted); /* Check for broken pipe */ if (rctx->brokenpipe) XBT_VERB ("Warning: Child did not consume all its input (I got broken pipe)"); /* Check for timeouts */ if (rctx->timeout) { if (rctx->output_got->data[0]) XBT_INFO("<%s> Output on timeout:\n%s", rctx->filepos, rctx->output_got->data); else XBT_INFO("<%s> No output before timeout", rctx->filepos); XBT_ERROR("Test suite `%s': NOK (<%s> timeout after %d sec)", testsuite_name, rctx->filepos, timeout_value); XBT_DEBUG("<%s> Interrupted = %d", rctx->filepos, (int)rctx->interrupted); if (!rctx->interrupted) { xbt_os_mutex_release(rctx->interruption); rctx_armageddon(rctx, 3); return NULL; } } XBT_DEBUG("RCTX=%p (pid=%d)", rctx, rctx->pid); XBT_DEBUG("Status(%s|%d)=%d", rctx->cmd, rctx->pid, rctx->status); if (!rctx->interrupted) { if (WIFSIGNALED(rctx->status) && !rctx->expected_signal) { XBT_ERROR("Test suite `%s': NOK (<%s> got signal %s)", testsuite_name, rctx->filepos, signal_name(WTERMSIG(rctx->status), NULL)); errcode = WTERMSIG(rctx->status) + 4; } if (WIFSIGNALED(rctx->status) && rctx->expected_signal && strcmp(signal_name(WTERMSIG(rctx->status), rctx->expected_signal), rctx->expected_signal)) { XBT_ERROR("Test suite `%s': NOK (%s got signal %s instead of %s)", testsuite_name, rctx->filepos, signal_name(WTERMSIG(rctx->status), rctx->expected_signal), rctx->expected_signal); errcode = WTERMSIG(rctx->status) + 4; } if (!WIFSIGNALED(rctx->status) && rctx->expected_signal) { XBT_ERROR("Test suite `%s': NOK (child %s expected signal %s)", testsuite_name, rctx->filepos, rctx->expected_signal); errcode = 5; } if (WIFEXITED(rctx->status) && WEXITSTATUS(rctx->status) != rctx->expected_return) { if (rctx->expected_return) XBT_ERROR ("Test suite `%s': NOK (<%s> returned code %d instead of %d)", testsuite_name, rctx->filepos, WEXITSTATUS(rctx->status), rctx->expected_return); else XBT_ERROR("Test suite `%s': NOK (<%s> returned code %d)", testsuite_name, rctx->filepos, WEXITSTATUS(rctx->status)); errcode = 40 + WEXITSTATUS(rctx->status); } rctx->expected_return = 0; free(rctx->expected_signal); rctx->expected_signal = NULL; } if ((errcode && errcode != 1) || rctx->interrupted) { /* checking output, and matching */ xbt_dynar_t a = xbt_str_split(rctx->output_got->data, "\n"); char *out = xbt_str_join(a, "\n||"); xbt_dynar_free(&a); XBT_INFO("Output of <%s> so far:\n||%s", rctx->filepos, out); free(out); } else if (rctx->output == e_output_check && (rctx->output_got->used != rctx->output_wanted->used || strcmp(rctx->output_got->data, rctx->output_wanted->data))) { if (XBT_LOG_ISENABLED(tesh, xbt_log_priority_info)) { char *diff = xbt_str_diff(rctx->output_wanted->data, rctx->output_got->data); XBT_ERROR("Output of <%s> mismatch:\n%s", rctx->filepos, diff); free(diff); } XBT_ERROR("Test suite `%s': NOK (<%s> output mismatch)", testsuite_name, rctx->filepos); errcode = 2; } else if (rctx->output == e_output_ignore) { XBT_INFO("(ignoring the output of <%s> as requested)", rctx->filepos); } else if (rctx->output == e_output_display) { xbt_dynar_t a = xbt_str_split(rctx->output_got->data, "\n"); char *out = xbt_str_join(a, "\n||"); xbt_dynar_free(&a); XBT_INFO("Here is the (ignored) command output:\n||%s", out); free(out); } if (!rctx->is_background) { xbt_os_mutex_acquire(armageddon_mutex); /* Don't touch rctx if armageddon is in progress. */ if (!armageddon_initiator) rctx_empty(rctx); xbt_os_mutex_release(armageddon_mutex); } if (errcode) { if (!rctx->interrupted) { xbt_os_mutex_release(rctx->interruption); rctx_armageddon(rctx, errcode); return NULL; } } xbt_os_mutex_release(rctx->interruption); return NULL; } SimGrid-3.10/tools/tesh/README000640 007661 000620 00000012052 12242224155 016203 0ustar00gierschand000000 000000 This is the TESH tool. It constitutes a testing shell, ie a sort of shell specialized to run tests. The list of actions to take is parsed from files files called testsuite. Testsuites syntax ----------------- Here is the syntax of these files: The kind of each line is given by the first char (the second char should be blank and is ignored): `$' command to run in foreground `&' command to run in background `<' input to pass to the command `>' output expected from the command `!' metacommand, which can be one of: `timeout' |no `expect signal' `expect return' `output' `setenv =' `p' a string to print `P' a string to print at the CRITICAL level (ease logging grepping) If the expected output do not match what the command spits, TESH will produce an error showing the diff (see OUTPUT below). Command line arguments ---------------------- Tesh accepts several command line arguments: --cd some/directory: ask tesh to switch the working directory before launching the tests --setenv var=value: set a specific environment variable IO orders --------- The < and > lines add IO to the command defined in the current block (blocks are separated by blank lines). It is possible to place these lines either after the command or before. The difference between the two following chunks is mainly cosmetic in your testsuites, TESH don't care. (cf IO-orders.tesh) $ cat < TOTO > TOTO > TOTO $ cat < TOTO Nevertheless, it is possible to have several commands in the same block, but none of them can have any output. It may seem a bit restrictive, as one could say that a command gets all the IO until the next command, but I'm afraid of errors such as the following: $ cd toto > TOTO $ mkfile file TOTO will be passed to the cd command, where the user clearly want to pass it to the mkfile built-in command (see below). Stream redirection ------------------ Stream redirections (">", "<" and "|" constructs in sh) are not implemented yet in tesh. This is a bit restrictive, but well, patch welcome... The situation in which it is mainly problematic is to create a temporary file. The solution is to use the "mkfile" built-in command, as in the following example: $ mkfile myFile > some content > to the file This will create a file called myFile (first argument of the mkfile command). Its content will be all the input provided to the command. RETURN CODE ----------- TESH spits an appropriate error message when the child do not return 0 as return code (cf. catch-return.tesh), and returns code+40 itself. It is also possible to specify that a given command must return another value. For this, use the "expect return" metacommand, which takes an integer as argument. The change only apply to the next command (cf. set-return.tesh). SIGNALS ------- TESH detects when the child is killed by a signal (like on segfaults), and spits an appropriate error message (cf. catch-signal.tesh). It is also possible to specify that a given command must raise a given signal. For this, use the "expect signal" metacommand. It takes the signal name as argument. The change only apply to the next command (cf. set-signal.tesh). TIMEOUTS -------- By default, all commands are given 5 seconds to execute (cf. catch-timeout.tesh). You can change this with the "timeout", which takes an integer as argument. The change only apply to the next command (cf. set-timeout.tesh). If you pass "no" as argument, the command cannot timeout. OUTPUT ------ By default, the commands output is matched against the one expected, and an error is raised on discrepancy. Metacommands to change this: "output ignore" -> output completely discarded "output display" -> output displayed (but not verified) "output sort" -> sorts the display before verifying it (see below) SORTING OUTPUT -------------- Sorting the output seems to be a strange idea, but it is mandatory in SimGrid since the processes run out of order at any scheduling point (ie, every processes ready to run at simulated time t run in parallel). To ensure that the simulator outputs still match, we have to sort the output back before comparing it. We expect the simulators to run with that log formatting argument: -log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n Then, tesh sorts string on the 19 first chars only, and is stable when line beginnings are equal. This should ensure that: (1) tesh is effective (no false positive, no false negative) (2) scheduling points are separated from each other (3) at each scheduling point, processes are separated from each other (4) the order of what a given process says at a given scheduling point is preserved. This is of course very SimGrid oriented, breaking the generality of tesh, but who cares, actually? If you want to change the length of the prefix used for the sort, simply specify it after the output sort directive, like this: ! output sort 22 ENVIRONMENT ----------- You can add some content to the tested processes environment with the setenv metacommand. It works as expected. For example: "setenv PATH=/bin"SimGrid-3.10/tools/tesh/catch-timeout.tesh000640 007661 000620 00000000656 12242224154 020764 0ustar00gierschand000000 000000 #! ./tesh # This suite must be functional because we changed the timeout value to 10 # before sleeping 6 secs. ! expect return 3 < ! timeout 1 < $ sleep 6 > Enable coverage > Test suite from stdin > [(stdin):2] sleep 6 > <(stdin):2> timeouted. Kill the process. > <(stdin):2> No output before timeout > Test suite `(stdin)': NOK (<(stdin):2> timeout after 1 sec) $ ./tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' SimGrid-3.10/tools/tesh/bg-basic.tesh000640 007661 000620 00000000216 12242224154 017655 0ustar00gierschand000000 000000 #! ./tesh p This is a basic test < TOTO \ TUTU & cat > TOTO TUTU p And now, some multilines examples < a < b < c < d & cat > a > b > c > dSimGrid-3.10/tools/tesh/set-timeout.tesh000640 007661 000620 00000000210 12242224154 020457 0ustar00gierschand000000 000000 #! ./tesh # This suite must be functional because we changed the timeout value to 10 # before sleeping 6 secs. ! timeout 10 $ sleep 6 SimGrid-3.10/tools/tesh/IO-broken-pipe.tesh000640 007661 000620 00000002276 12242224154 020736 0ustar00gierschand000000 000000 # TESH autotest: check that the father is protected from broken pipes # # If not, it breaks sometimes (when the child is scheduled before the # father), so we do the test a bunch of times. # < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo < blablablablablablablablablablablablablablablablablablablabla > $ echo SimGrid-3.10/tools/tesh/catch-signal.tesh000640 007661 000620 00000001264 12242224154 020547 0ustar00gierschand000000 000000 #! ./tesh # This suite builds and uses a program raising a segfault, ie a program dying # of SIGSEV. tesh must detect this condition and report the issue. $ rm -rf temp_testdir-catch-signal $ mkdir temp_testdir-catch-signal $ cd temp_testdir-catch-signal < #include < int main(void) { < char *A=NULL; < *A = 1; < } $ mkfile segfault.c $ gcc -o segfault segfault.c ! expect return 15 < $ ./segfault $ ../tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' > Enable coverage > Test suite from stdin > [(stdin):1] ./segfault > Test suite `(stdin)': NOK (<(stdin):1> got signal SIGSEGV) > Output of <(stdin):1> so far: > || $ cd .. $ rm -rf temp_testdir-catch-signal SimGrid-3.10/tools/tesh/set-output-sort.tesh000640 007661 000620 00000004031 12242224154 021323 0ustar00gierschand000000 000000 #! ./tesh p This tests whether TESH correctly sorts command output $ ${bindir:=.}/tesh --enable-coverage --log='log.thresh:info tesh.fmt:%m%n' set-output-sort-1.tesh > Enable coverage > Test suite `set-output-sort-1' > [set-output-sort-1:1] Test sorting and filtering of output > [set-output-sort-1:3] true > [set-output-sort-1:6] true > [set-output-sort-1:8] printf 'profiling: foo\\n' > [set-output-sort-1:10] printf 'profiling: foo' > [set-output-sort-1:13] printf 'profiling: foo\\n' > [set-output-sort-1:16] printf 'profiling: foo' > [set-output-sort-1:18] printf 'a\\nb\\nc\\nd\\n' > [set-output-sort-1:24] printf 'a\\nb\\nc\\nd' > [set-output-sort-1:31] printf 'c\\nd\\nb\\na\\n' > [set-output-sort-1:38] printf 'c\\nd\\nb\\na' > [set-output-sort-1:44] printf 'a\\nprofiling: foo\\nprofiling: bar\\nb\\nc\\nd\\nprofiling: baz\\n' > [set-output-sort-1:50] printf 'a\\nprofiling: foo\\nprofiling: bar\\nb\\nc\\nd\\nprofiling: baz' > [set-output-sort-1:57] printf 'c\\nprofiling: foo\\nprofiling: bar\\nd\\nb\\na\\nprofiling: baz\\n' > [set-output-sort-1:64] printf 'c\\nprofiling: foo\\nprofiling: bar\\nd\\nb\\na\\nprofiling: baz' > Test suite `set-output-sort-1' OK p Check the default prefix length (19) for "output sort" ! output sort < 12345678901234567 B line < 12345678901234567 A line $ cat > 12345678901234567 A line > 12345678901234567 B line ! output sort < 123456789012345678 B line < 123456789012345678 A line $ cat > 123456789012345678 B line > 123456789012345678 A line ! expect return 2 ! output ignore < ! output sort < < 123456789012345678 B line < < 123456789012345678 A line < $ cat < > 123456789012345678 A line < > 123456789012345678 B line $ ${bindir:=.}/tesh --enable-coverage p Check user-defined prefix length for "output sort" ! output sort 5 < 000 B line < 000 A line $ cat > 000 A line > 000 B line ! output sort 4 < 000 B line < 000 A line $ cat > 000 B line > 000 A line ! expect return 2 ! output ignore < ! output sort 4 < < 000 B line < < 000 A line < $ cat < > 000 A line < > 000 B line $ ${bindir:=.}/tesh --enable-coverage SimGrid-3.10/tools/tesh/colorize.pl000750 007661 000620 00000000402 12242224152 017501 0ustar00gierschand000000 000000 #!/usr/bin/perl -w use Term::ANSIColor qw{:constants}; $Term::ANSIColor::AUTORESET = 1; while(<>){ if($_ =~ m/^(\d+\:\s)?[-]\s.*/){ print BOLD RED $_; }elsif ($_ =~ m/^(\d+\:\s)?[+]\s.*/){ print BOLD GREEN $_; }else{ print BOLD $_; } } SimGrid-3.10/tools/tesh/tesh.c000640 007661 000620 00000020117 12242224154 016432 0ustar00gierschand000000 000000 /* TESH (Test Shell) -- mini shell specialized in running test units */ /* Copyright (c) 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ /* specific to Borland Compiler */ #ifdef __BORLANDDC__ #pragma hdrstop #endif #include "tesh.h" #include "xbt.h" XBT_LOG_NEW_DEFAULT_CATEGORY(tesh, "TEst SHell utility"); /*** Options ***/ int timeout_value = 5; /* child timeout value */ int sort_len = 19; /* length of the prefix to sort */ char *option; int coverage = 0; /* whether the code coverage is enable */ rctx_t rctx; const char *testsuite_name; xbt_dict_t env; static void handle_line(const char *filepos, char *line) { /* Search end */ xbt_str_rtrim(line + 2, "\n"); /* XBT_DEBUG("rctx={%s,in={%d,>>%10s<<},exp={%d,>>%10s<<},got={%d,>>%10s<<}}", rctx->cmd, rctx->input->used, rctx->input->data, rctx->output_wanted->used,rctx->output_wanted->data, rctx->output_got->used, rctx->output_got->data); */ XBT_DEBUG("[%s] %s", filepos, line); switch (line[0]) { case '#': break; case '$': /* further trim useless chars which are significant for in/output */ xbt_str_rtrim(line + 2, " \t"); /* Deal with CD commands here, not in rctx */ if (!strncmp("cd ", line + 2, 3)) { char *dir = line + 4; if (rctx->cmd) rctx_start(); /* search beginning */ while (*(dir++) == ' '); dir--; XBT_VERB("Saw cd '%s'", dir); if (chdir(dir)) { XBT_ERROR("Chdir to %s failed: %s", dir, strerror(errno)); XBT_ERROR("Test suite `%s': NOK (system error)", testsuite_name); rctx_armageddon(rctx, 4); } break; } /* else, pushline */ case '&': case '<': case '>': case '!': rctx_pushline(filepos, line[0], line + 2 /* pass '$ ' stuff */ ); break; case 'p': XBT_INFO("[%s] %s", filepos, line + 2); break; case 'P': XBT_CRITICAL("[%s] %s", filepos, line + 2); break; default: XBT_ERROR("[%s] Syntax error: %s", filepos, line); XBT_ERROR("Test suite `%s': NOK (syntax error)", testsuite_name); rctx_armageddon(rctx, 1); break; } } static void handle_suite(const char *filename, FILE * IN) { size_t len; int blankline; int linelen; char *line = NULL; int line_num = 0; char file_pos[256]; int to_be_continued; int buffbegin = 0; xbt_strbuff_t buff = NULL; buff = xbt_strbuff_new(); rctx = rctx_new(); while (xbt_getline(&line, &len, IN) != -1) { line_num++; /* Count the line length while checking wheather it's blank */ blankline = 1; linelen = 0; while (line[linelen] != '\0') { if (line[linelen] != ' ' && line[linelen] != '\t' && line[linelen] != '\n') blankline = 0; linelen++; } if (blankline) { if (!rctx->cmd && !rctx->is_empty) { XBT_ERROR("[%d] Error: no command found in this chunk of lines.", buffbegin); XBT_ERROR("Test suite `%s': NOK (syntax error)", testsuite_name); rctx_armageddon(rctx, 1); } if (rctx->cmd) rctx_start(); continue; } /* Deal with \ at the end of the line, and call handle_line on result */ to_be_continued = 0; if (linelen > 1 && line[linelen - 2] == '\\') { if (linelen > 2 && line[linelen - 3] == '\\') { /* Damn. Escaped \ */ line[linelen - 2] = '\n'; line[linelen - 1] = '\0'; } else { to_be_continued = 1; line[linelen - 2] = '\0'; if (!buff->used) buffbegin = line_num; } } if (buff->used || to_be_continued) { xbt_strbuff_append(buff, line); if (!to_be_continued) { snprintf(file_pos, 256, "%s:%d", filename, buffbegin); handle_line(file_pos, buff->data); xbt_strbuff_empty(buff); } } else { snprintf(file_pos, 256, "%s:%d", filename, line_num); handle_line(file_pos, line); } } /* Check that last command of the file ran well */ if (rctx->cmd) rctx_start(); /* Wait all background commands */ rctx_free(rctx); /* Clear buffers */ free(line); xbt_strbuff_free(buff); } static void parse_environ() { char *p; int i; char *eq = NULL; char *key = NULL; env = xbt_dict_new_homogeneous(xbt_free_f); for (i = 0; environ[i]; i++) { p = environ[i]; eq = strchr(p, '='); key = bprintf("%.*s", (int) (eq - p), p); xbt_dict_set(env, key, xbt_strdup(eq + 1), NULL); free(key); } } int main(int argc, char *argv[]) { FILE *IN = NULL; int i; char *suitename = NULL; struct sigaction newact; XBT_LOG_CONNECT(tesh); xbt_init(&argc, argv); rctx_init(); parse_environ(); /* Ignore pipe issues. They will show up when we try to send data to dead buddies, but we will stop doing so when we're done with provided input */ memset(&newact, 0, sizeof(newact)); newact.sa_handler = SIG_IGN; sigaction(SIGPIPE, &newact, NULL); /* Get args */ for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "--cd")) { if (i == argc - 1) { XBT_ERROR("--cd argument requires an argument"); exit(1); } if (chdir(argv[i + 1])) { XBT_ERROR("Cannot change directory to %s: %s", argv[i + 1], strerror(errno)); exit(1); } XBT_INFO("Change directory to %s", argv[i + 1]); memmove(argv + i, argv + i + 2, (argc - i - 1) * sizeof(char *)); argc -= 2; i -= 2; } else if (!strcmp(argv[i], "--setenv" )) { if (i == argc - 1) { XBT_ERROR("--setenv argument requires an argument"); exit(1); } char *eq = strchr(argv[i+1], '='); xbt_assert(eq,"The argument of --setenv must contain a '=' (got %s instead)",argv[i+1]); char *key = bprintf("%.*s", (int) (eq - argv[i+1]), argv[i+1]); xbt_dict_set(env, key, xbt_strdup(eq + 1), NULL); XBT_INFO("setting environment variable '%s' to '%s'", key, eq+1); free(key); memmove(argv + i, argv + i + 2, (argc - i - 1) * sizeof(char *)); argc -= 2; i -= 2; } else if (!strcmp(argv[i], "--cfg" )) { if (i == argc - 1) { XBT_ERROR("--cfg argument requires an argument"); exit(1); } if (!option){ //if option is NULL option = bprintf("--cfg=%s",argv[i+1]); } else { char *newoption = bprintf("%s --cfg=%s", option, argv[i+1]); free(option); option = newoption; } XBT_INFO("Add option \'--cfg=%s\' to command line",argv[i+1]); memmove(argv + i, argv + i + 2, (argc - i - 1) * sizeof(char *)); argc -= 2; i -= 2; } else if (!strcmp(argv[i], "--enable-coverage" )){ coverage = 1; XBT_INFO("Enable coverage"); memmove(argv + i, argv + i + 1, (argc - i - 1) * sizeof(char *)); argc -= 1; i -= 1; } } /* Find the description file */ if (argc == 1) { XBT_INFO("Test suite from stdin"); testsuite_name = "(stdin)"; handle_suite(testsuite_name, stdin); rctx_wait_bg(); XBT_INFO("Test suite from stdin OK"); } else { for (i = 1; i < argc; i++) { suitename = xbt_strdup(argv[i]); if (!strncmp("./", suitename, 2)) memmove(suitename, suitename + 2, strlen(suitename + 2)); if (strlen(suitename) > 5 && !strcmp(".tesh", suitename + strlen(suitename) - 5)) suitename[strlen(suitename) - 5] = '\0'; XBT_INFO("Test suite `%s'", suitename); testsuite_name = suitename; IN = fopen(argv[i], "r"); if (!IN) { perror(bprintf("Impossible to open the suite file `%s'", argv[i])); XBT_ERROR("Test suite `%s': NOK (system error)", testsuite_name); rctx_armageddon(rctx, 1); } handle_suite(suitename, IN); rctx_wait_bg(); fclose(IN); XBT_INFO("Test suite `%s' OK", suitename); free(suitename); } } rctx_exit(); xbt_dict_free(&env); free(option); return 0; } SimGrid-3.10/tools/tesh/tesh.1000640 007661 000620 00000012104 12242224155 016346 0ustar00gierschand000000 000000 .\" Manpage for tesh .TH tesh 1 "10 Oct 2012" "1.0" "tesh man page" .SH NAME tesh \- testing shell .SH SYNOPSIS .B tesh [\fIOPTION\fR]... [\fIFILE\fR]... .SH DESCRIPTION This is the TESH tool. It constitutes a testing shell, ie a sort of shell specialized to run tests. The list of actions to take is parsed from files files called testsuite. .SH OPTIONS --cd some/directory: ask tesh to switch the working directory before launching the tests --setenv var=value: set a specific environment variable .SH TESH FILE SYNTAX Here is the syntax of these files: The kind of each line is given by the first char (the second char should be blank and is ignored): `$' command to run in foreground `&' command to run in background `<' input to pass to the command `>' output expected from the command `!' metacommand, which can be one of: `timeout' |no `expect signal' `expect return' `output' `setenv =' `p' a string to print `P' a string to print at the CRITICAL level (ease logging grepping) If the expected output do not match what the command spits, TESH will produce an error showing the diff (see OUTPUT below). .SH IO ORDERS The < and > lines add IO to the command defined in the current block (blocks are separated by blank lines). It is possible to place these lines either after the command or before. The difference between the two following chunks is mainly cosmetic in your testsuites, TESH don't care. (cf IO-orders.tesh) $ cat < TOTO > TOTO > TOTO $ cat < TOTO Nevertheless, it is possible to have several commands in the same block, but none of them can have any output. It may seem a bit restrictive, as one could say that a command gets all the IO until the next command, but I'm afraid of errors such as the following: $ cd toto > TOTO $ mkfile file TOTO will be passed to the cd command, where the user clearly want to pass it to the mkfile built-in command (see below). .SH STREAM REDIRECTION Stream redirections (">", "<" and "|" constructs in sh) are not implemented yet in tesh. This is a bit restrictive, but well, patch welcome... The situation in which it is mainly problematic is to create a temporary file. The solution is to use the "mkfile" built-in command, as in the following example: $ mkfile myFile > some content > to the file This will create a file called myFile (first argument of the mkfile command). Its content will be all the input provided to the command. .SH RETURN CODE TESH spits an appropriate error message when the child do not return 0 as return code (cf. catch-return.tesh), and returns code+40 itself. It is also possible to specify that a given command must return another value. For this, use the "expect return" metacommand, which takes an integer as argument. The change only apply to the next command (cf. set-return.tesh). .SH SIGNALS TESH detects when the child is killed by a signal (like on segfaults), and spits an appropriate error message (cf. catch-signal.tesh). It is also possible to specify that a given command must raise a given signal. For this, use the "expect signal" metacommand. It takes the signal name as argument. The change only apply to the next command (cf. set-signal.tesh). .SH TIMEOUTS By default, all commands are given 5 seconds to execute (cf. catch-timeout.tesh). You can change this with the "timeout", which takes an integer as argument. The change only apply to the next command (cf. set-timeout.tesh). If you pass "no" as argument, the command cannot timeout. .SH OUTPUT By default, the commands output is matched against the one expected, and an error is raised on discrepancy. Metacommands to change this: "output ignore" -> output completely discarded "output display" -> output displayed (but not verified) "output sort" -> sorts the display before verifying it (see below) .SH SORTING OUTPUT Sorting the output seems to be a strange idea, but it is mandatory in SimGrid since the processes run out of order at any scheduling point (ie, every processes ready to run at simulated time t run in parallel). To ensure that the simulator outputs still match, we have to sort the output back before comparing it. We expect the simulators to run with that log formatting argument: -log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n Then, tesh sorts string on the 19 first chars only, and is stable when line beginnings are equal. This should ensure that: (1) tesh is effective (no false positive, no false negative) (2) scheduling points are separated from each other (3) at each scheduling point, processes are separated from each other (4) the order of what a given process says at a given scheduling point is preserved. This is of course very SimGrid oriented, breaking the generality of tesh, but who cares, actually? If you want to change the length of the prefix used for the sort, simply specify it after the output sort directive, like this: ! output sort 22 .SH ENVIRONMENT You can add some content to the tested processes environment with the setenv metacommand. It works as expected. For example: "setenv PATH=/bin" .SH BUGS No known bugs. SimGrid-3.10/tools/tesh/run_context.h000640 007661 000620 00000005450 12242224154 020047 0ustar00gierschand000000 000000 /* run_context -- stuff in which TESH runs a command */ /* Copyright (c) 2007-2010, 2012-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef TESH_RUN_CONTEXT_H #define TESH_RUN_CONTEXT_H #include "tesh.h" #include "xbt/synchro_core.h" typedef enum { e_output_check, e_output_display, e_output_ignore } e_output_handling_t; typedef struct { /* kind of job */ char *cmd; char **env; int env_size; char *filepos; int pid; unsigned is_background:1; unsigned is_empty:1; unsigned is_stoppable:1; unsigned brokenpipe:1; unsigned timeout:1; unsigned reader_done:1; /* reader set this to true when he's done because the child is dead. The main thread use it to detect that the child is not dead before the end of timeout */ unsigned interrupted:1; /* Whether we got stopped by an armageddon */ xbt_os_mutex_t interruption; /* To allow main thread to kill a runner one only at certain points */ e_output_handling_t output; int status; /* expected results */ int end_time; /* begin_time + timeout, as epoch */ char *expected_signal; /* name of signal to raise (or NULL if none) */ int expected_return; /* the exepeted return code of following command */ unsigned output_sort:1; /* whether the output must be sorted before comparison */ /* buffers */ xbt_strbuff_t input; xbt_strbuff_t output_wanted; xbt_strbuff_t output_got; /* Threads */ xbt_os_thread_t writer, reader; /* IO handlers */ xbt_os_thread_t runner; /* Main thread, counting for timeouts */ /* Pipes from/to the child */ int child_to, child_from; } s_rctx_t, *rctx_t; /* module mgmt */ void rctx_init(void); void rctx_exit(void); /* wait for all currently running background jobs */ void rctx_wait_bg(void); /* kill forcefully all currently running background jobs */ extern rctx_t armageddon_initiator; extern xbt_os_mutex_t armageddon_mutex; void rctx_armageddon(rctx_t initiator, int exitcode); /* create a new empty running context */ rctx_t rctx_new(void); void rctx_free(rctx_t rctx); void rctx_empty(rctx_t rc); /*reset to empty */ void rctx_dump(rctx_t rctx, const char *str); /* Launch the current command */ void rctx_start(void); /* Wait till the end of this command */ void *rctx_wait(void *rctx); /* Parse a line comming from the suite file, and add this into the rctx */ void rctx_pushline(const char *filepos, char kind, char *line); #endif /* TESH_RUN_CONTEXT_H */ SimGrid-3.10/tools/tesh/IO-bigsize.tesh000640 007661 000620 00001573236 12242224154 020171 0ustar00gierschand000000 000000 #! ./tesh # This suite contains two tests: # The first one uses a very big input (150k) to check whether trucated input do work. # The second one uses both a big input and a big output (150k each). # # This checks whether the non-blocking I/O mess is functionnal. # p First, a write test < 000 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 001 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 002 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 003 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 004 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 005 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 006 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 007 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 008 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 009 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 010 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 011 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 012 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 013 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 014 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 015 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 016 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 017 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 018 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 019 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 020 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 021 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 022 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 023 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 024 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 025 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 026 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 027 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 028 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 029 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 030 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 031 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 032 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 033 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 034 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 035 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 036 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 037 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 038 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 039 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 040 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 041 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 042 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 043 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 044 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 045 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 046 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 047 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 048 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 049 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 010 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 051 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 052 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 053 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 054 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 055 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 056 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 057 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 058 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 059 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 060 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 061 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 062 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 063 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 064 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 065 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 066 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 067 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 068 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 069 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 070 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 071 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 072 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 073 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 074 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 075 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 076 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 077 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 078 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 079 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 080 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 081 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 082 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 083 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 084 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 085 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 086 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 087 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 088 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 089 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 090 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 091 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 092 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 093 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 094 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 095 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 096 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 097 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 098 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 099 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 100 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 101 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 102 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 103 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 104 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 105 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 106 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 107 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 108 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 109 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 110 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 111 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 112 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 113 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 114 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 115 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 116 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 117 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 118 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 119 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 120 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 121 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 122 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 123 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 124 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 125 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 126 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 127 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 128 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 129 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 130 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 131 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 132 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 133 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 134 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 135 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 136 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 137 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 138 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 139 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 140 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 141 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 142 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 143 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 144 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 145 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 146 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 147 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 148 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 149 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 110 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 151 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 152 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 153 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 154 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 155 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 156 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 157 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 158 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 159 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 160 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 161 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 162 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 163 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 164 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 165 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 166 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 167 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 168 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 169 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 170 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 171 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 172 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 173 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 174 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 175 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 176 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 177 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 178 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 179 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 180 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 181 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 182 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 183 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 184 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 185 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 186 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 187 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 188 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 189 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 190 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 191 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 192 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 193 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 194 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 195 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 196 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 197 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 198 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 199 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 200 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 201 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 202 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 203 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 204 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 205 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 206 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 207 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 208 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 209 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 210 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 211 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 212 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 213 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 214 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 215 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 216 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 217 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 218 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 219 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 220 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 221 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 222 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 223 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 224 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 225 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 226 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 227 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 228 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 229 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 230 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 231 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 232 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 233 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 234 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 235 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 236 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 237 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 238 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 239 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 240 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 241 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 242 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 243 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 244 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 245 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 246 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 247 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 248 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 249 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 210 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 251 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 252 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 253 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 254 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 255 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 256 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 257 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 258 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 259 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 260 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 261 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 262 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 263 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 264 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 265 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 266 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 267 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 268 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 269 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 270 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 271 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 272 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 273 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 274 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 275 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 276 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 277 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 278 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 279 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 280 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 281 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 282 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 283 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 284 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 285 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 286 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 287 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 288 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 289 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 290 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 291 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 292 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 293 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 294 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 295 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 296 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 297 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 298 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 399 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 300 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 301 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 302 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 303 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 304 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 305 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 306 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 307 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 308 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 309 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 310 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 311 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 312 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 313 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 314 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 315 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 316 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 317 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 318 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 319 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 320 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 321 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 322 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 323 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 324 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 325 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 326 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 327 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 328 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 329 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 330 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 331 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 332 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 333 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 334 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 335 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 336 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 337 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 338 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 339 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 340 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 341 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 342 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 343 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 344 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 345 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 346 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 347 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 348 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 349 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 310 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 351 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 352 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 353 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 354 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 355 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 356 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 357 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 358 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 359 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 360 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 361 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 362 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 363 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 364 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 365 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 366 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 367 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 368 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 369 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 370 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 371 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 372 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 373 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 374 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 375 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 376 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 377 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 378 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 379 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 380 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 381 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 382 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 383 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 384 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 385 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 386 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 387 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 388 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 389 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 390 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 391 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 392 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 393 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 394 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 395 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 396 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 397 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 398 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 399 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 400 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 401 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 402 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 403 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 404 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 405 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 406 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 407 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 408 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 409 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 410 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 411 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 412 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 413 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 414 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 415 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 416 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 417 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 418 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 419 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 420 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 421 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 422 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 423 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 424 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 425 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 426 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 427 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 428 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 429 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 430 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 431 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 432 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 433 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 434 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 435 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 436 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 437 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 438 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 439 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 440 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 441 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 442 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 443 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 444 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 445 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 446 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 447 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 448 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 449 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 410 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 451 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 452 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 453 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 454 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 455 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 456 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 457 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 458 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 459 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 460 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 461 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 462 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 463 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 464 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 465 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 466 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 467 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 468 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 469 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 470 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 471 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 472 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 473 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 474 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 475 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 476 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 477 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 478 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 479 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 480 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 481 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 482 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 483 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 484 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 485 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 486 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 487 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 488 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 489 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 490 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 491 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 492 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 493 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 494 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 495 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 496 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 497 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 498 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 499 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 500 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 501 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 502 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 503 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 504 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 505 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 506 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 507 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 508 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 509 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 510 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 511 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 512 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 513 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 514 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 515 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 516 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 517 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 518 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 520 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 521 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 522 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 523 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 524 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 525 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 526 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 527 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 528 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 529 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 530 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 531 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 532 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 533 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 534 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 535 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 536 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 537 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 538 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 539 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 540 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 541 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 542 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 543 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 544 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 545 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 546 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 547 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 548 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 549 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 510 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 551 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 552 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 553 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 554 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 555 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 556 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 557 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 558 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 559 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 560 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 561 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 562 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 563 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 564 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 565 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 566 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 567 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 568 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 569 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 570 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 571 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 572 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 573 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 574 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 575 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 576 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 577 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 578 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 579 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 580 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 581 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 582 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 583 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 584 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 585 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 586 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 587 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 588 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 589 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 590 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 591 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 592 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 593 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 594 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 595 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 596 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 597 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 598 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 599 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 600 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 601 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 602 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 603 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 604 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 605 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 606 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 607 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 608 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 609 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 610 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 611 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 612 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 613 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 614 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 615 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 616 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 617 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 618 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 619 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 620 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 621 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 622 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 623 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 624 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 625 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 626 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 627 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 628 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 629 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 630 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 631 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 632 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 633 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 634 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 635 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 636 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 637 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 638 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 639 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 640 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 641 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 642 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 643 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 644 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 645 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 646 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 647 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 648 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 649 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 610 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 651 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 652 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 653 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 654 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 655 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 656 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 657 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 658 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 659 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 660 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 661 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 662 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 663 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 664 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 665 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 666 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 667 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 668 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 669 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 670 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 671 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 672 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 673 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 674 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 675 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 676 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 677 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 678 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 679 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 680 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 681 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 682 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 683 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 684 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 685 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 686 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 687 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 688 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 689 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 690 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 691 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 692 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 693 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 694 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 695 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 696 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 697 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 698 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 699 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 700 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 701 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 702 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 703 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 704 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 705 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 706 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 707 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 708 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 709 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 710 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 711 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 712 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 713 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 714 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 715 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 716 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 717 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 718 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 719 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 720 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 721 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 722 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 723 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 724 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 725 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 726 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 727 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 728 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 729 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 730 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 731 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 732 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 733 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 734 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 735 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 736 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 737 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 738 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 739 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 740 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 741 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 742 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 743 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 744 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 745 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 746 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 747 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 748 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 749 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 710 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 751 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 752 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 753 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 754 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 755 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 756 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 757 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 758 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 759 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 760 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 761 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 762 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 763 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 764 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 765 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 766 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 767 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 768 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 769 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 770 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 771 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 772 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 773 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 774 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 775 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 776 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 777 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 778 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 779 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 780 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 781 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 782 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 783 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 784 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 785 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 786 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 787 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 788 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 789 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 790 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 791 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 792 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 793 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 794 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 795 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 796 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 797 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 798 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 799 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 800 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 801 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 802 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 803 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 804 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 805 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 806 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 807 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 808 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 809 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 810 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 811 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 812 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 813 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 814 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 815 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 816 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 817 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 818 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 819 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 820 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 821 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 822 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 823 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 824 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 825 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 826 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 827 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 828 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 829 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 830 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 831 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 832 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 833 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 834 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 835 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 836 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 837 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 838 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 839 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 840 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 841 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 842 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 843 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 844 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 845 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 846 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 847 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 848 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 849 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 810 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 851 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 852 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 853 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 854 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 855 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 856 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 857 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 858 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 859 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 860 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 861 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 862 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 863 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 864 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 865 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 866 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 867 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 868 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 869 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 870 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 871 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 872 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 873 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 874 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 875 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 876 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 877 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 878 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 879 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 880 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 881 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 882 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 883 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 884 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 885 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 886 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 887 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 888 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 889 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 890 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 891 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 892 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 893 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 894 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 895 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 896 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 897 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 898 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 899 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 900 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 901 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 902 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 903 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 904 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 905 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 906 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 907 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 908 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 909 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 910 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 911 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 912 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 913 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 914 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 915 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 916 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 917 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 918 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 919 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 920 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 921 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 922 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 923 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 924 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 925 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 926 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 927 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 928 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 929 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 930 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 931 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 932 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 933 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 934 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 935 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 936 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 937 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 938 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 939 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 940 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 941 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 942 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 943 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 944 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 945 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 946 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 947 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 948 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 949 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 910 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 951 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 952 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 953 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 954 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 955 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 956 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 957 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 958 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 959 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 960 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 961 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 962 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 963 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 964 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 965 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 966 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 967 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 968 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 969 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 970 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 971 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 972 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 973 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 974 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 975 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 976 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 977 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 978 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 979 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 980 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 981 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 982 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 983 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 984 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 985 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 986 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 987 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 988 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 989 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 990 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 991 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 992 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 993 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 994 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 995 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 996 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 997 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 998 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 999 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA $ sed -n '$=' > 1000 p And now, a read/write test < 000 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 001 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 002 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 003 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 004 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 005 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 006 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 007 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 008 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 009 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 010 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 011 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 012 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 013 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 014 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 015 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 016 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 017 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 018 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 019 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 020 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 021 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 022 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 023 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 024 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 025 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 026 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 027 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 028 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 029 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 030 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 031 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 032 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 033 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 034 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 035 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 036 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 037 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 038 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 039 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 040 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 041 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 042 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 043 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 044 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 045 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 046 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 047 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 048 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 049 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 010 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 051 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 052 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 053 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 054 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 055 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 056 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 057 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 058 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 059 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 060 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 061 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 062 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 063 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 064 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 065 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 066 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 067 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 068 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 069 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 070 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 071 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 072 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 073 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 074 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 075 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 076 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 077 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 078 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 079 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 080 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 081 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 082 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 083 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 084 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 085 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 086 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 087 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 088 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 089 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 090 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 091 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 092 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 093 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 094 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 095 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 096 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 097 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 098 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 099 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 100 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 101 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 102 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 103 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 104 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 105 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 106 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 107 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 108 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 109 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 110 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 111 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 112 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 113 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 114 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 115 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 116 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 117 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 118 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 119 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 120 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 121 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 122 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 123 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 124 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 125 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 126 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 127 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 128 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 129 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 130 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 131 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 132 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 133 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 134 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 135 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 136 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 137 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 138 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 139 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 140 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 141 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 142 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 143 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 144 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 145 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 146 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 147 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 148 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 149 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 110 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 151 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 152 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 153 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 154 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 155 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 156 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 157 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 158 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 159 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 160 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 161 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 162 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 163 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 164 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 165 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 166 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 167 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 168 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 169 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 170 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 171 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 172 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 173 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 174 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 175 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 176 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 177 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 178 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 179 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 180 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 181 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 182 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 183 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 184 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 185 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 186 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 187 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 188 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 189 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 190 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 191 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 192 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 193 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 194 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 195 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 196 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 197 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 198 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 199 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 200 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 201 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 202 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 203 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 204 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 205 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 206 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 207 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 208 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 209 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 210 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 211 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 212 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 213 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 214 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 215 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 216 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 217 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 218 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 219 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 220 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 221 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 222 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 223 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 224 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 225 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 226 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 227 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 228 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 229 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 230 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 231 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 232 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 233 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 234 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 235 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 236 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 237 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 238 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 239 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 240 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 241 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 242 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 243 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 244 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 245 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 246 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 247 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 248 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 249 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 210 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 251 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 252 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 253 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 254 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 255 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 256 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 257 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 258 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 259 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 260 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 261 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 262 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 263 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 264 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 265 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 266 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 267 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 268 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 269 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 270 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 271 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 272 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 273 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 274 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 275 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 276 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 277 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 278 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 279 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 280 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 281 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 282 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 283 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 284 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 285 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 286 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 287 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 288 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 289 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 290 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 291 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 292 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 293 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 294 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 295 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 296 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 297 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 298 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 399 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 300 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 301 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 302 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 303 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 304 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 305 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 306 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 307 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 308 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 309 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 310 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 311 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 312 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 313 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 314 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 315 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 316 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 317 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 318 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 319 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 320 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 321 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 322 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 323 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 324 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 325 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 326 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 327 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 328 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 329 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 330 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 331 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 332 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 333 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 334 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 335 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 336 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 337 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 338 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 339 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 340 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 341 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 342 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 343 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 344 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 345 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 346 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 347 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 348 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 349 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 310 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 351 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 352 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 353 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 354 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 355 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 356 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 357 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 358 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 359 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 360 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 361 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 362 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 363 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 364 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 365 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 366 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 367 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 368 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 369 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 370 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 371 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 372 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 373 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 374 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 375 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 376 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 377 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 378 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 379 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 380 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 381 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 382 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 383 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 384 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 385 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 386 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 387 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 388 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 389 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 390 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 391 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 392 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 393 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 394 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 395 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 396 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 397 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 398 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 399 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 400 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 401 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 402 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 403 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 404 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 405 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 406 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 407 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 408 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 409 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 410 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 411 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 412 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 413 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 414 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 415 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 416 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 417 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 418 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 419 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 420 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 421 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 422 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 423 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 424 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 425 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 426 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 427 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 428 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 429 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 430 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 431 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 432 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 433 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 434 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 435 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 436 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 437 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 438 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 439 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 440 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 441 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 442 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 443 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 444 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 445 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 446 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 447 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 448 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 449 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 410 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 451 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 452 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 453 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 454 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 455 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 456 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 457 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 458 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 459 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 460 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 461 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 462 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 463 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 464 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 465 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 466 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 467 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 468 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 469 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 470 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 471 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 472 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 473 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 474 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 475 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 476 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 477 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 478 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 479 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 480 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 481 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 482 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 483 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 484 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 485 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 486 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 487 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 488 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 489 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 490 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 491 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 492 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 493 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 494 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 495 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 496 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 497 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 498 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 499 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 500 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 501 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 502 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 503 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 504 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 505 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 506 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 507 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 508 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 509 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 510 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 511 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 512 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 513 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 514 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 515 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 516 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 517 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 518 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 520 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 521 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 522 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 523 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 524 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 525 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 526 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 527 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 528 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 529 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 530 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 531 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 532 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 533 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 534 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 535 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 536 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 537 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 538 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 539 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 540 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 541 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 542 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 543 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 544 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 545 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 546 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 547 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 548 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 549 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 510 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 551 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 552 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 553 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 554 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 555 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 556 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 557 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 558 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 559 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 560 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 561 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 562 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 563 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 564 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 565 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 566 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 567 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 568 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 569 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 570 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 571 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 572 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 573 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 574 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 575 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 576 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 577 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 578 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 579 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 580 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 581 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 582 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 583 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 584 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 585 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 586 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 587 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 588 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 589 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 590 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 591 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 592 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 593 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 594 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 595 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 596 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 597 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 598 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 599 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 600 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 601 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 602 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 603 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 604 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 605 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 606 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 607 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 608 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 609 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 610 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 611 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 612 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 613 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 614 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 615 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 616 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 617 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 618 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 619 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 620 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 621 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 622 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 623 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 624 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 625 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 626 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 627 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 628 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 629 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 630 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 631 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 632 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 633 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 634 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 635 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 636 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 637 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 638 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 639 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 640 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 641 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 642 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 643 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 644 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 645 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 646 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 647 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 648 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 649 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 610 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 651 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 652 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 653 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 654 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 655 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 656 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 657 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 658 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 659 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 660 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 661 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 662 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 663 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 664 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 665 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 666 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 667 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 668 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 669 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 670 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 671 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 672 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 673 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 674 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 675 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 676 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 677 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 678 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 679 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 680 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 681 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 682 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 683 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 684 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 685 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 686 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 687 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 688 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 689 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 690 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 691 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 692 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 693 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 694 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 695 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 696 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 697 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 698 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 699 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 700 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 701 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 702 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 703 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 704 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 705 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 706 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 707 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 708 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 709 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 710 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 711 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 712 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 713 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 714 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 715 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 716 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 717 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 718 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 719 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 720 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 721 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 722 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 723 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 724 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 725 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 726 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 727 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 728 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 729 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 730 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 731 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 732 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 733 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 734 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 735 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 736 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 737 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 738 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 739 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 740 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 741 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 742 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 743 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 744 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 745 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 746 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 747 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 748 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 749 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 710 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 751 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 752 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 753 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 754 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 755 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 756 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 757 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 758 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 759 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 760 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 761 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 762 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 763 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 764 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 765 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 766 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 767 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 768 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 769 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 770 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 771 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 772 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 773 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 774 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 775 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 776 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 777 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 778 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 779 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 780 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 781 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 782 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 783 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 784 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 785 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 786 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 787 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 788 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 789 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 790 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 791 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 792 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 793 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 794 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 795 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 796 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 797 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 798 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 799 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 800 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 801 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 802 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 803 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 804 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 805 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 806 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 807 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 808 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 809 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 810 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 811 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 812 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 813 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 814 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 815 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 816 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 817 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 818 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 819 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 820 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 821 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 822 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 823 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 824 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 825 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 826 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 827 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 828 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 829 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 830 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 831 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 832 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 833 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 834 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 835 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 836 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 837 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 838 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 839 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 840 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 841 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 842 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 843 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 844 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 845 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 846 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 847 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 848 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 849 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 810 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 851 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 852 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 853 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 854 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 855 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 856 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 857 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 858 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 859 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 860 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 861 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 862 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 863 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 864 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 865 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 866 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 867 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 868 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 869 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 870 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 871 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 872 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 873 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 874 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 875 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 876 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 877 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 878 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 879 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 880 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 881 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 882 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 883 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 884 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 885 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 886 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 887 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 888 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 889 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 890 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 891 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 892 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 893 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 894 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 895 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 896 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 897 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 898 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 899 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 900 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 901 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 902 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 903 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 904 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 905 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 906 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 907 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 908 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 909 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 910 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 911 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 912 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 913 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 914 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 915 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 916 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 917 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 918 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 919 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 920 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 921 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 922 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 923 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 924 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 925 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 926 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 927 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 928 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 929 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 930 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 931 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 932 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 933 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 934 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 935 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 936 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 937 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 938 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 939 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 940 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 941 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 942 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 943 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 944 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 945 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 946 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 947 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 948 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 949 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 910 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 951 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 952 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 953 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 954 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 955 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 956 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 957 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 958 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 959 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 960 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 961 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 962 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 963 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 964 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 965 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 966 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 967 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 968 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 969 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 970 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 971 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 972 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 973 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 974 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 975 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 976 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 977 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 978 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 979 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 980 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 981 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 982 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 983 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 984 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 985 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 986 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 987 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 988 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 989 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 990 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 991 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 992 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 993 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 994 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 995 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 996 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 997 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 998 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 999 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA $ cat > 000 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 001 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 002 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 003 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 004 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 005 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 006 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 007 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 008 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 009 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 010 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 011 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 012 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 013 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 014 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 015 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 016 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 017 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 018 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 019 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 020 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 021 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 022 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 023 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 024 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 025 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 026 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 027 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 028 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 029 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 030 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 031 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 032 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 033 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 034 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 035 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 036 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 037 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 038 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 039 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 040 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 041 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 042 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 043 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 044 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 045 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 046 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 047 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 048 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 049 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 010 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 051 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 052 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 053 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 054 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 055 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 056 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 057 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 058 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 059 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 060 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 061 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 062 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 063 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 064 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 065 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 066 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 067 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 068 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 069 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 070 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 071 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 072 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 073 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 074 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 075 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 076 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 077 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 078 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 079 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 080 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 081 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 082 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 083 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 084 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 085 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 086 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 087 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 088 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 089 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 090 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 091 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 092 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 093 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 094 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 095 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 096 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 097 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 098 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 099 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 100 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 101 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 102 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 103 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 104 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 105 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 106 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 107 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 108 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 109 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 110 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 111 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 112 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 113 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 114 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 115 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 116 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 117 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 118 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 119 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 120 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 121 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 122 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 123 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 124 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 125 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 126 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 127 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 128 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 129 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 130 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 131 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 132 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 133 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 134 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 135 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 136 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 137 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 138 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 139 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 140 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 141 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 142 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 143 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 144 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 145 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 146 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 147 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 148 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 149 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 110 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 151 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 152 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 153 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 154 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 155 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 156 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 157 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 158 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 159 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 160 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 161 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 162 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 163 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 164 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 165 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 166 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 167 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 168 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 169 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 170 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 171 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 172 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 173 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 174 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 175 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 176 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 177 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 178 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 179 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 180 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 181 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 182 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 183 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 184 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 185 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 186 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 187 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 188 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 189 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 190 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 191 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 192 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 193 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 194 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 195 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 196 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 197 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 198 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 199 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 200 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 201 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 202 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 203 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 204 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 205 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 206 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 207 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 208 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 209 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 210 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 211 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 212 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 213 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 214 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 215 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 216 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 217 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 218 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 219 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 220 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 221 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 222 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 223 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 224 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 225 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 226 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 227 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 228 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 229 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 230 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 231 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 232 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 233 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 234 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 235 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 236 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 237 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 238 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 239 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 240 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 241 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 242 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 243 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 244 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 245 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 246 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 247 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 248 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 249 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 210 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 251 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 252 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 253 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 254 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 255 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 256 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 257 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 258 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 259 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 260 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 261 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 262 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 263 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 264 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 265 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 266 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 267 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 268 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 269 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 270 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 271 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 272 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 273 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 274 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 275 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 276 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 277 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 278 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 279 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 280 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 281 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 282 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 283 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 284 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 285 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 286 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 287 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 288 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 289 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 290 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 291 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 292 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 293 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 294 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 295 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 296 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 297 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 298 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 399 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 300 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 301 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 302 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 303 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 304 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 305 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 306 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 307 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 308 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 309 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 310 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 311 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 312 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 313 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 314 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 315 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 316 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 317 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 318 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 319 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 320 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 321 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 322 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 323 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 324 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 325 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 326 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 327 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 328 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 329 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 330 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 331 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 332 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 333 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 334 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 335 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 336 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 337 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 338 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 339 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 340 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 341 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 342 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 343 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 344 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 345 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 346 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 347 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 348 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 349 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 310 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 351 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 352 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 353 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 354 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 355 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 356 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 357 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 358 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 359 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 360 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 361 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 362 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 363 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 364 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 365 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 366 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 367 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 368 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 369 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 370 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 371 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 372 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 373 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 374 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 375 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 376 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 377 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 378 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 379 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 380 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 381 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 382 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 383 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 384 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 385 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 386 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 387 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 388 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 389 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 390 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 391 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 392 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 393 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 394 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 395 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 396 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 397 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 398 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 399 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 400 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 401 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 402 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 403 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 404 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 405 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 406 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 407 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 408 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 409 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 410 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 411 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 412 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 413 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 414 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 415 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 416 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 417 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 418 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 419 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 420 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 421 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 422 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 423 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 424 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 425 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 426 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 427 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 428 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 429 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 430 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 431 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 432 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 433 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 434 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 435 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 436 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 437 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 438 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 439 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 440 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 441 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 442 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 443 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 444 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 445 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 446 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 447 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 448 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 449 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 410 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 451 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 452 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 453 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 454 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 455 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 456 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 457 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 458 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 459 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 460 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 461 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 462 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 463 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 464 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 465 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 466 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 467 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 468 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 469 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 470 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 471 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 472 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 473 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 474 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 475 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 476 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 477 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 478 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 479 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 480 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 481 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 482 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 483 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 484 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 485 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 486 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 487 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 488 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 489 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 490 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 491 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 492 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 493 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 494 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 495 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 496 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 497 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 498 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 499 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 500 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 501 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 502 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 503 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 504 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 505 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 506 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 507 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 508 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 509 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 510 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 511 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 512 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 513 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 514 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 515 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 516 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 517 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 518 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 519 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 520 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 521 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 522 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 523 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 524 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 525 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 526 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 527 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 528 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 529 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 530 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 531 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 532 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 533 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 534 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 535 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 536 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 537 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 538 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 539 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 540 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 541 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 542 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 543 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 544 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 545 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 546 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 547 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 548 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 549 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 510 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 551 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 552 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 553 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 554 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 555 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 556 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 557 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 558 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 559 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 560 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 561 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 562 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 563 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 564 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 565 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 566 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 567 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 568 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 569 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 570 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 571 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 572 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 573 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 574 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 575 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 576 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 577 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 578 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 579 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 580 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 581 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 582 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 583 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 584 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 585 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 586 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 587 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 588 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 589 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 590 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 591 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 592 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 593 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 594 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 595 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 596 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 597 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 598 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 599 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 600 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 601 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 602 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 603 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 604 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 605 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 606 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 607 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 608 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 609 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 610 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 611 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 612 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 613 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 614 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 615 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 616 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 617 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 618 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 619 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 620 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 621 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 622 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 623 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 624 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 625 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 626 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 627 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 628 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 629 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 630 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 631 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 632 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 633 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 634 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 635 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 636 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 637 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 638 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 639 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 640 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 641 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 642 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 643 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 644 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 645 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 646 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 647 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 648 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 649 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 610 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 651 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 652 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 653 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 654 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 655 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 656 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 657 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 658 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 659 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 660 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 661 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 662 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 663 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 664 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 665 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 666 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 667 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 668 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 669 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 670 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 671 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 672 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 673 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 674 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 675 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 676 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 677 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 678 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 679 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 680 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 681 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 682 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 683 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 684 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 685 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 686 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 687 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 688 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 689 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 690 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 691 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 692 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 693 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 694 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 695 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 696 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 697 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 698 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 699 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 700 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 701 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 702 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 703 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 704 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 705 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 706 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 707 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 708 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 709 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 710 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 711 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 712 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 713 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 714 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 715 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 716 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 717 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 718 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 719 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 720 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 721 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 722 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 723 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 724 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 725 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 726 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 727 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 728 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 729 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 730 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 731 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 732 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 733 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 734 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 735 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 736 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 737 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 738 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 739 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 740 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 741 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 742 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 743 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 744 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 745 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 746 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 747 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 748 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 749 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 710 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 751 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 752 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 753 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 754 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 755 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 756 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 757 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 758 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 759 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 760 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 761 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 762 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 763 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 764 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 765 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 766 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 767 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 768 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 769 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 770 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 771 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 772 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 773 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 774 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 775 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 776 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 777 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 778 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 779 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 780 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 781 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 782 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 783 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 784 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 785 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 786 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 787 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 788 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 789 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 790 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 791 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 792 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 793 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 794 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 795 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 796 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 797 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 798 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 799 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 800 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 801 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 802 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 803 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 804 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 805 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 806 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 807 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 808 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 809 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 810 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 811 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 812 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 813 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 814 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 815 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 816 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 817 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 818 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 819 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 820 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 821 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 822 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 823 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 824 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 825 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 826 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 827 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 828 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 829 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 830 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 831 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 832 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 833 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 834 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 835 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 836 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 837 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 838 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 839 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 840 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 841 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 842 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 843 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 844 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 845 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 846 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 847 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 848 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 849 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 810 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 851 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 852 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 853 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 854 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 855 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 856 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 857 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 858 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 859 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 860 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 861 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 862 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 863 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 864 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 865 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 866 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 867 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 868 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 869 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 870 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 871 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 872 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 873 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 874 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 875 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 876 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 877 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 878 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 879 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 880 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 881 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 882 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 883 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 884 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 885 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 886 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 887 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 888 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 889 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 890 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 891 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 892 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 893 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 894 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 895 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 896 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 897 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 898 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 899 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 900 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 901 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 902 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 903 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 904 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 905 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 906 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 907 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 908 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 909 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 910 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 911 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 912 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 913 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 914 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 915 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 916 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 917 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 918 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 919 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 920 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 921 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 922 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 923 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 924 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 925 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 926 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 927 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 928 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 929 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 930 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 931 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 932 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 933 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 934 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 935 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 936 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 937 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 938 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 939 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 940 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 941 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 942 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 943 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 944 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 945 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 946 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 947 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 948 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 949 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 910 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 951 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 952 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 953 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 954 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 955 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 956 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 957 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 958 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 959 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 960 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 961 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 962 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 963 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 964 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 965 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 966 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 967 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 968 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 969 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 970 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 971 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 972 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 973 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 974 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 975 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 976 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 977 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 978 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 979 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 980 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 981 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 982 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 983 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 984 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 985 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 986 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 987 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 988 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 989 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 990 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 991 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 992 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 993 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 994 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 995 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 996 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 997 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 998 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA > 999 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA SimGrid-3.10/tools/simgrid_update_xml.pl000750 007661 000620 00000011637 12242224152 020604 0ustar00gierschand000000 000000 #! /usr/bin/env perl eval 'exec perl -S $0 ${1+"$@"}' if $running_under_some_shell; # This script updates the simgrid XML file passed as argument (modification in place) # It is built to do the conversion incrementally. # Copyright (c) 2006-2012. The SimGrid Team. # All rights reserved. # # This file is part of the SimGrid project. This is free software: # You can redistribute and/or modify it under the terms of the # GNU LGPL (v2.1) licence. =encoding UTF-8 =head1 NAME simgrid_update_xml - updates simgrid XML files to latest version =head1 SYNOPSIS B I =head1 DESCRIPTION simgrid_update_xml updates the simgrid XML file passed as argument. The file is modified in place, without any kind of backup. You may want to save a copy before running the script. In SimGrid XML files, the standard version is indicated in the version attribute of the platform tag. Current version is 3. Here is a list of major changes in each version. =over 4 =item B Used before SimGrid 3.3 =item B Introduced in SimGrid 3.3 =over 4 =item The version attribute of platform were added to allow file versionning. =item The link bandwidth changed from Mb/s to b/s; and the CPU power were changed from MFlop/s to Flop/s =back =item B Introduced in SimGrid 3.4 =over =item Several tags were renamed: CPU -> HOST NETWORK_LINK -> LINK ROUTE_ELEMENT -> LINK_CTN PLATFORM_DESCRIPTION -> PLATFORM =back =item B Introduced in SimGrid 3.5 (this is the current version) =over 4 =item The AS tag were introduced. Every plaform should now contain an englobing AS tag. =item Routes are now symmetric by default. =item Several tags were renamed (for sake of XML sanity): LINK:CTN -> LINK_CTN TRACE:CONNECT -> TRACE_CONNECT =back =back =head1 AUTHORS The SimGrid team (simgrid-devel@lists.gforge.inria.fr) =head1 COPYRIGHT AND LICENSE Copyright (c) 2006-2012. The SimGrid Team. All rights reserved. This program is free software; you may redistribute it and/or modify it under the terms of GNU LGPL (v2.1) license. =cut use strict; my $fromversion=-1; my $toversion=3; my($output_string); $ARGV[0] or die "simgrid_update_xml.pl \n"; open INPUT, "$ARGV[0]" or die "Cannot open input file $ARGV[0]: $!\n"; $output_string = "\n". "\n". "\n"; my($AS_opened)=0; my $line; while (defined($line = )) { chomp $line; # eat the header, whatever form it has next if ($line =~ s/<\?xml[^>]*>// && ! $line =~ /\S/); # just in case several tags are on the same line next if ($line =~ s/]*>// && ! $line =~ /\S/); if ($line =~ s///) { $fromversion = 0; print "version 0\n"; next if !$line =~ /\S/; } elsif ($line =~ s///) { $fromversion = $1; print "version $fromversion\n"; if ($fromversion == $toversion) { die "Input platform file version is already $fromversion. This should be a no-op.\n"; } if ($fromversion > $toversion) { die "Input platform file version is more recent than this script (file version: $fromversion; script version: $toversion)\n"; } next if !$line =~ /\S/; } if ($fromversion == 0) { while ($line =~ m|^(.*?)/) || ($line=~ /\n"; $AS_opened=1; } } if($line=~/ $ARGV[0]"; print OUTPUT $output_string; close OUTPUT; SimGrid-3.10/tools/sg_unit_extractor.pl000750 007661 000620 00000022625 12242224152 020466 0ustar00gierschand000000 000000 #! /usr/bin/perl use strict; use strict; use Getopt::Long qw(GetOptions); my $progname="sg_unit_extractor"; # Get the args sub usage($) { my $ret; print "USAGE: $progname [--root=part/to/cut] [--path=where/to/search NOT WORKING] [--outdir=where/to/generate/files] infile [infile+]\n"; exit $ret; } my $path=undef; my $outdir=undef; my $root; my $help; Getopt::Long::config('permute','no_getopt_compat', 'no_auto_abbrev'); GetOptions( 'help|h' => sub {usage(0)}, 'root=s' =>\$root, 'path=s' =>\$path, 'outdir=s' =>\$outdir) or usage(1); usage(1) if (scalar @ARGV == 0); map {process_one($_)} @ARGV; sub process_one($) { my $infile = shift; my $outfile; $infile =~ s|src/|| unless (-e $infile); $outfile = $infile; $outfile =~ s/\.c$/_unit.c/; $outfile =~ s|.*/([^/]*)$|$1| if $outfile =~ m|/|; $outfile = "$outdir$outfile"; print "$progname: processing $infile (generating $outfile)...\n"; # Get the unit data my ($unit_source,$suite_name,$suite_title)=("","",""); my (%tests); # to detect multiple definition my (@tests); # actual content open IN, "$infile" || die "$progname: Cannot open input file '$infile': $!\n"; $infile =~ s|$root|| if defined($root); my $takeit=0; my $line=0; my $beginline=0; while () { $line++; if (m/ifdef +SIMGRID_TEST/) { $beginline = $line; $takeit = 1; next; } if (m/endif.*SIMGRID_TEST/) { $takeit = 0; next } if (m/XBT_TEST_SUITE\(\w*"([^"]*)"\w*, *(.*?)\);/) { #" { die "$progname: Multiple suites in the same file ($infile) are not supported yet\n" if length($suite_name); ($suite_name,$suite_title)=($1,$2); die "$progname: Empty suite name in $infile" unless length($suite_name); die "$progname: Empty suite title in $infile" unless length($suite_title); next; } elsif (m/XBT_TEST_SUITE/) { die "$progname: Parse error: This line seem to be a test suite declaration, but failed to parse it\n$_\n"; } if (m/XBT_TEST_UNIT\(\w*"([^"]*)"\w*,([^,]*),(.*?)\)/) { #"{ die "$progname: multiply defined unit in file $infile: $1\n" if (defined($tests{$1})); my @t=($1,$2,$3); push @tests,\@t; $tests{$1} = 1; } elsif (m/XBT_TEST_UNIT/) { die "$progname: Parse error: This line seem to be a test unit, but failed to parse it\n$_\n"; } $unit_source .= $_ if $takeit; } close IN || die "$progname: cannot close input file '$infile': $!\n"; if ($takeit) { die "$progname: end of file reached in SIMGRID_TEST block.\n". "You should end each of the with a line matching: /endif.*SIMGRID_TEST/\n". "Example:\n". "#endif /* SIMGRID_TEST */\n" } die "$progname: no suite defined in $infile\n" unless (length($suite_name)); # Write the test my ($GENERATED)=("/*******************************/\n". "/* GENERATED FILE, DO NOT EDIT */\n". "/*******************************/\n\n"); $beginline+=2; open OUT,">$outfile" || die "$progname: Cannot open output file '$outfile': $!\n"; print OUT $GENERATED; print OUT "#include \n"; print OUT "#include \"xbt.h\"\n"; print OUT $GENERATED; print OUT "#line $beginline \"$infile\" \n"; print OUT "$unit_source"; print OUT $GENERATED; close OUT || die "$progname: Cannot close output file '$outfile': $!\n"; # write the main skeleton if needed if (! -e "${outdir}simgrid_units_main.c") { open OUT,">${outdir}simgrid_units_main.c" || die "$progname: Cannot open main file '${outdir}simgrid_units_main.c': $!\n"; print OUT $GENERATED; print OUT "#include \n\n"; print OUT "#include \"xbt.h\"\n\n"; print OUT "extern xbt_test_unit_t _xbt_current_unit;\n\n"; print OUT "/* SGU: BEGIN PROTOTYPES */\n"; print OUT "/* SGU: END PROTOTYPES */\n\n"; print OUT $GENERATED; # print OUT "# 93 \"sg_unit_extractor.pl\"\n"; print OUT <) { $newmain .= $_; # print "Look for proto: $_"; last if /SGU: BEGIN PROTOTYPES/; } # search my prototype while () { # print "Seek protos: $_"; last if (/SGU: END PROTOTYPES/ || /SGU: BEGIN FILE $infile/); $newmain .= $_; } if (/SGU: BEGIN FILE $infile/) { # found an old section for this file. Kill it while () { last if /SGU: END FILE/; } $_ = ; # pass extra blank line chomp; die "this line should be blank ($_). Did you edit the file?" if /\W/; } my ($old_)=($_); # add my section $newmain .= " /* SGU: BEGIN FILE $infile */\n"; map { my ($name,$func,$title) = @{$_}; $newmain .= " void $func(void);\n" } @tests; $newmain .= " /* SGU: END FILE */\n\n"; if ($old_ =~ /SGU: BEGIN FILE/ || $old_ =~ /SGU: END PROTOTYPES/) { $newmain .= $old_; } # pass remaining prototypes, search declarations while () { $newmain .= $_ unless /SGU: END PROTOTYPES/; last if /SGU: BEGIN SUITES DECLARATION/; } ### Done with prototypes. And now, the actual code # search my prototype while () { last if (/SGU: END SUITES DECLARATION/ || /SGU: BEGIN FILE $infile/); $newmain .= $_; } if (/SGU: BEGIN FILE $infile/) { # found an old section for this file. Kill it while () { last if /SGU: END FILE/; } $_ = ; # pass extra blank line chomp; die "this line should be blank ($_). Did you edit the file?" if /\W/; } my ($old_)=($_); # add my section $newmain .= " /* SGU: BEGIN FILE $infile */\n"; $newmain .= " suite = xbt_test_suite_by_name(\"$suite_name\",$suite_title);\n"; map { my ($name,$func,$title) = @{$_}; $newmain .= " xbt_test_suite_push(suite, \"$name\", $func, $title);\n"; } @tests; $newmain .= " /* SGU: END FILE */\n\n"; if ($old_ =~ /SGU: BEGIN FILE/ || $old_ =~ /SGU: END SUITES DECLARATION/) { $newmain .= $old_; } # pass the remaining while () { $newmain .= $_; } close IN || die "$progname: Cannot close main file '${outdir}simgrid_units_main.c': $!\n"; # write it back to main open OUT,">${outdir}simgrid_units_main.c" || die "$progname: Cannot open main file '${outdir}simgrid_units_main.c': $!\n"; print OUT $newmain; close OUT || die "$progname: Cannot close main file '${outdir}simgrid_units_main.c': $!\n"; } # end if process_one($) 0; SimGrid-3.10/tools/simgrid2vite.sed000640 007661 000620 00000000255 12242224155 017467 0ustar00gierschand000000 000000 /0 1 0 MPI/i \0 ROOT 0 ROOT s/0 1 0 MPI/0 1 ROOT MPI/ s/4 3 0 1 1 MPI_LINK/4 3 ROOT 1 1 MPI_LINK/ s/1 0 \"/1 root \"/g /6 0 1 1/i \6 0 root ROOT 0 "root" s/0 PTP/root PTP/g SimGrid-3.10/tools/sg_xml_unit_converter.py000640 007661 000620 00000005300 12242224152 021344 0ustar00gierschand000000 000000 #!/usr/bin/env python # -*- coding: utf-8 -*- # grep -ohrI 'bw=".*"' . | sort | uniq import sys, fnmatch, os from decimal import Decimal import re def to_str(dec): return re.sub(r"(\.\d*?)0*$", r"\1", dec.to_eng_string()).rstrip(".") def format(xml, formats, attrib): res = [] m = re.search(r'%s="(.*?)"'%attrib, xml) while m: b, e = m.span(1) res.append(xml[:b]) val = xml[b:e] xml = xml[e:] try: power = Decimal(val) tmp = to_str(power) for p, f in formats: d = power / p if d >= 1.0: tmp = "%s%s"%(to_str(d), f) break res.append(tmp) except: print "Error with:", val res.append(val) m = re.search(r'%s="(.*?)"'%attrib, xml) res.append(xml) return "".join(res) def formats(list): return sorted(((Decimal(i), j) for i,j in list), key=lambda x: x[0], reverse=True) for root, dirnames, filenames in os.walk(sys.argv[1]): for filename in fnmatch.filter(filenames, '*.xml'): print root, dirnames, filename path = os.path.join(root, filename) xml = open(path).read() power_formats = formats([( "1E0", "f"), ( "1E3", "kf"), ( "1E6", "Mf"), ( "1E9", "Gf"), ("1E12", "Tf"), ("1E15", "Pt"), ("1E18", "Ef"), ("1E21", "Zf")]) xml = format(xml, power_formats, "power") bandwidth_formats = formats([( "1E0", "Bps"), ( "1E3", "kBps"), ( "1E6", "MBps"), ( "1E9", "GBps"), ("1E12", "TBps")]) xml = format(xml, bandwidth_formats, "bandwidth") xml = format(xml, bandwidth_formats, "bw") xml = format(xml, bandwidth_formats, "bb_bw") xml = format(xml, bandwidth_formats, "bw_in") xml = format(xml, bandwidth_formats, "bw_out") time_formats = formats([( "1E-12", "ps"), ( "1E-9" , "ns"), ( "1E-6" , "us"), ( "1E-3" , "ms"), ( "1E0" , "s"), ( "60E0" , "m"), ( "3600E0" , "h"), ( "86400E0" , "d"), ("604800E0" , "w")]) xml = format(xml, time_formats, "latency") xml = format(xml, time_formats, "lat") xml = format(xml, time_formats, "bb_lat") #print xml file = open(path, "w") file.write(xml) file.close() SimGrid-3.10/tools/doxygen/002750 007661 000620 00000000000 12242224152 016033 5ustar00gierschand000000 000000 SimGrid-3.10/tools/doxygen/index_create.pl000750 007661 000620 00000003066 12242224152 021030 0ustar00gierschand000000 000000 #!/usr/bin/perl -w ($#ARGV >= 1) or die "Usage: index_create.pl "; my($type) = ""; my($name) = ""; my(%database); $input = $ARGV[0]; $output = $ARGV[1]; open FILE,$input; while($line=) { chomp $line; if($line=~/compound kind=/) { $type = $line; $type =~ s/^[^\"]*\"//; $type =~ s/\".*$//; $line=;chomp $line; } if($line=~/member kind=/) { $type = $line; $type =~ s/^[^\"]*\"//; $type =~ s/\".*$//; $line=;chomp $line; } if($line=~//) { $name = $line; $name =~ s/.*//; $name =~ s/<\/name>.*//; $database{$type}{$name} = 1; $type = ""; $name = ""; next; } } close FILE; open OUTPUT,"> $output"; print OUTPUT <here \\endhtmlonly EOF foreach $type (qw(define enumeration enumvalue function typedef)) { if(defined $database{$type}) { print OUTPUT "

$type

\n
    \n"; foreach $name (sort keys %{$database{$type}}) { if($type eq "function") { print OUTPUT "\t
  • $name()
  • \n"; } else { print OUTPUT "\t
  • #$name
  • \n"; } } print OUTPUT "\n
\n"; } } print OUTPUT "*/"; close OUTPUT; SimGrid-3.10/tools/doxygen/fig2dev_postprocessor.pl000750 007661 000620 00000000442 12242224152 022724 0ustar00gierschand000000 000000 #! /usr/bin/perl use strict; my $print = 0; my $line; while($line=) { chomp $line; if($line=~/IMG/) {$print=1;} if($print) {print $line."\n";} if($line=~/\/MAP/) {$print=0;} } #perl -pe 's/imagemap/simgrid_modules/g'| perl -pe 's/ 1; if ($ctn =~ m/^(\w+)\s*,\s*(\w+)\s*,\s*"?([^"]*)"?$/s) { # Perfect, we got 0->name; 1->anc; 2->desc $elms[0] = $1; $elms[1] = $2; $elms[2] = $3; } elsif ($ctn =~ m/^(\w+)\s*,\s*"?([^"]*)"?$/s) { # Mmm. got no ancestor. Add the default one. $elms[0] = $1; $elms[1] = "XBT_LOG_ROOT_CAT"; $elms[2] = $2; } else { die "Unparsable content: $ctn\n"; } $elms[2] =~ s/\\\\/\\/gs; return @elms; } sub parse_file { my $filename = shift; my $data = ""; print "Parse $filename\n" if $debug; open IN, "$filename" || die "Cannot read $filename: $!\n"; while () { $data .= $_; } close IN; # Purge $data from C comments $data =~ s|/\*.*?\*/||sg; # C++ comments are forbiden in SG for portability reasons, but deal with it anyway $data =~ s|//.*$||mg; my $connect_data = $data; # save a copy for second parsing phase while ($data =~ s/^.*?XBT_LOG_NEW(_DEFAULT)?_(SUB)?CATEGORY\(//s) { $data =~ s/([^"]*"[^"]*")\)//s || die "unparsable macro: $data"; my ($name,$anc,$desc) = cleanup_ctn($1); # build the tree, checking for name conflict die "ERROR: Category name conflict: $name used several times (in $ancestor{$name} and $anc, last time in $filename)\n" if defined ($ancestor{$name}) && $ancestor{$name} ne $anc && defined ($desc{$name}) && $desc{$name} ne $desc; $ancestor{$name}=$anc; $desc{$name}=$desc; print " $name -> $anc\n" if $debug; } # Now, look for XBT_LOG_CONNECT calls $data = $connect_data; while ($data =~ s/^.*?XBT_LOG_CONNECT\(//s) { $data =~ s/\s*(\w+)\s*\)//s || die "unparsable macro: $data"; $connected{$1} = 1; } } # Retrieve all the file names, and add their content to $data my $data; open FILES, "find ../src/ ../tools/ ../include/ -name '*.c'|" || die "Cannot search for the source file names: $!\n"; while (my $file=) { chomp $file; parse_file($file); } close FILES; # Display the tree, looking for disconnected elems my %used; sub display_subtree { my $name=shift; my $indent=shift; $used{$name} = 1; unless ($name eq "XBT_LOG_ROOT_CAT") { # do not display the root print "$indent - $name: ".($desc{$name}|| "(undocumented)")."\n"; } foreach my $cat (grep {$ancestor{$_} eq $name} sort keys %ancestor) { display_subtree($cat,"$indent "); } } display_subtree("XBT_LOG_ROOT_CAT",""); map { warn "Category $_ does not seem to be connected. Use XBT_LOG_CONNECT($_).\n"; } grep {!defined $connected{$_}} sort keys %ancestor; map { warn "Category $_ does not seem to be connected to the root (anc=$ancestor{$_})\n"; } grep {!defined $used{$_}} sort keys %ancestor; print "@}*/\n"; SimGrid-3.10/tools/xbt_exception_checker000750 007661 000620 00000002512 12242224152 020641 0ustar00gierschand000000 000000 #! /bin/bash # This little script parse a list of C files, and extract the TRY blocks of it. # Martin Quinson, 2006. # Demerdierensiesich licence. # It can reveal usefull when you have a segfault on exception throwing. This # is often the symptom that something somewhere got out of a TRY block with # return, goto, break or such. This is forbiden because some extra cleanups # must be performed at the end of the block. # So, if it happens to you, you may find this script usefull: let it extract # all the TRY blocks of your project, and grep for the forbidden keywords # given above. # You obviously have to adapt it to your case. The proper solution would be # to accept the extra -I pathes from the command line. # Patch welcome ;) for file in `find -name '*.c'` ; do base=`dirname $file` cmd="cat $file \ | cpp -I/home/mquinson/CVSIMPORT/gras/gras/include \ -I/home/mquinson/CVSIMPORT/gras/gras/src \ -I/home/mquinson/CVSIMPORT/gras/gras/src/include \ -I$base \ -D__XBT_EX_H__ -D_XBT_LOG_H_ \ | sed -n -e '/TRY/,/CATCH/p' \ | sed -e 's/^.*TRY.*$/----------------/' -e '/CATCH/d'" err=`eval $cmd 2>&1 >/dev/null` if [ -n "$err" ] ; then echo "XXXXXXXXXX ERROR IN FILE $file" echo $err fi if [ -n "`eval $cmd 2>/dev/null`" ] ; then echo "XXX FILE $file" eval "$cmd" 2>/dev/null fi done SimGrid-3.10/TODO000640 007661 000620 00000002574 12242224154 013717 0ustar00gierschand000000 000000 ### ### Urgent stuff: ### * Have a proper todo file ************************************************ *** This file is a TODO. It is thus kinda *** *** outdated. You know the story, right? *** ************************************************ ### ### Ongoing stuff ### Document host module /* FIXME: better place? */ int vasprintf (char **ptr, const char *fmt, va_list ap); char *bprintf(const char*fmt, ...) _XBT_GNUC_PRINTF(1,2); ### ### Planned ### * * XBT ***** [errors/exception] * Better split casual errors from programming errors. The first ones should be reported to the user, the second should kill the program (or, yet better, only the msg handler) * Allows the use of an error handler depending on the current module (ie, the same philosophy as log4c using GSL's error functions) [logs] * Hijack message from a given category to another for a while (to mask initializations, and more) * Allow each actor to have its own setting * more logging appenders (take those from Ralf in l2) [modules] * Add configuration and dependencies to our module definition [other modules] * we may need a round-robin database module, and a statistical one * Some of the datacontainer modules seem to overlap. Kill some of them? - replace fifo with dynars - replace set with SWAG SimGrid-3.10/include/002750 007661 000620 00000000000 12242224150 014637 5ustar00gierschand000000 000000 SimGrid-3.10/include/simgrid/002750 007661 000620 00000000000 12242224150 016275 5ustar00gierschand000000 000000 SimGrid-3.10/include/simgrid/modelchecker.h000640 007661 000620 00000003127 12242224150 021075 0ustar00gierschand000000 000000 /* simgrid/modelchecker.h - Formal Verification made possible in SimGrid */ /* Copyright (c) 2008-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include /* HAVE_MC ? */ #include #include "xbt/automaton.h" #ifndef SIMGRID_MODELCHECKER_H #define SIMGRID_MODELCHECKER_H #ifdef HAVE_MC extern int _sg_do_model_check; /* please don't use directly: we inline MC_is_active, but that's what you should use */ extern int _sg_mc_visited; #define MC_is_active() _sg_do_model_check #define MC_visited_reduction() _sg_mc_visited XBT_PUBLIC(void) MC_assert(int); XBT_PUBLIC(int) MC_random(int min, int max); XBT_PUBLIC(void) MC_automaton_new_propositional_symbol(const char* id, void* fct); XBT_PUBLIC(void *) MC_snapshot(void); XBT_PUBLIC(int) MC_compare_snapshots(void *s1, void *s2); XBT_PUBLIC(void) MC_cut(void); XBT_PUBLIC(void) MC_ignore(void *addr, size_t size); #else #define MC_is_active() 0 #define MC_visited_reduction() 0 #define MC_assert(a) xbt_assert(a) #define MC_random(a, b) 0 #define MC_automaton_new_propositional_symbol(a, b) ((void)0) #define MC_snapshot() ((void*)0) #define MC_compare_snapshots(a, b) 0 #define MC_cut() ((void)0) #define MC_ignore(a, b) ((void)0) #endif #endif /* SIMGRID_MODELCHECKER_H */ SimGrid-3.10/include/simgrid/simix.h000640 007661 000620 00000061506 12242224150 017606 0ustar00gierschand000000 000000 /* Copyright (c) 2007-2010, 2012-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _SIMIX_SIMIX_H #define _SIMIX_SIMIX_H #include "xbt/misc.h" #include "xbt/fifo.h" #include "xbt/dict.h" #include "xbt/function_types.h" #include "xbt/parmap.h" #include "xbt/swag.h" #include "simgrid/platf.h" SG_BEGIN_DECL() /**************************** Scalar Values **********************************/ typedef union u_smx_scalar u_smx_scalar_t; /* ******************************** Host ************************************ */ /** @brief Host datatype @ingroup simix_host_management A location (or host) is any possible place where a process may run. Thus it is represented as a physical resource with computing capabilities, some mailboxes to enable running process to communicate with remote ones, and some private data that can be only accessed by local process. \see m_host_management @{ */ typedef xbt_dictelm_t smx_host_t; typedef struct s_smx_host_priv *smx_host_priv_t; typedef enum { SIMIX_WAITING, SIMIX_READY, SIMIX_RUNNING, SIMIX_DONE, SIMIX_CANCELED, SIMIX_FAILED, SIMIX_SRC_HOST_FAILURE, SIMIX_DST_HOST_FAILURE, SIMIX_SRC_TIMEOUT, SIMIX_DST_TIMEOUT, SIMIX_LINK_FAILURE } e_smx_state_t; /** @} */ typedef struct s_smx_timer* smx_timer_t; /* ******************************** Synchro ************************************ */ /** * \ingroup simix_synchro_management */ typedef struct s_smx_mutex *smx_mutex_t; /** * \ingroup simix_synchro_management */ typedef struct s_smx_cond *smx_cond_t; /** * \ingroup simix_synchro_management */ typedef struct s_smx_sem *smx_sem_t; /********************************** File *************************************/ typedef struct s_smx_file *smx_file_t; /********************************** Storage *************************************/ typedef xbt_dictelm_t smx_storage_t; typedef struct s_smx_storage_priv *smx_storage_priv_t; /********************************** Action *************************************/ typedef struct s_smx_action *smx_action_t; /* FIXME: replace by specialized action handlers */ /* ****************************** Process *********************************** */ /** @brief Process datatype @ingroup simix_process_management A processt may be defined as a code, with some private data, executing in a location. \see m_process_management @{ */ typedef struct s_smx_process *smx_process_t; /** @} */ /* * Type of function that creates a process. * The function must accept the following parameters: * void* process: the process created will be stored there * const char *name: a name for the object. It is for user-level information and can be NULL * xbt_main_func_t code: is a function describing the behavior of the process * void *data: data a pointer to any data one may want to attach to the new object. * smx_host_t host: the location where the new process is executed * int argc, char **argv: parameters passed to code * xbt_dict_t pros: properties */ typedef void (*smx_creation_func_t) ( /* process */ smx_process_t*, /* name */ const char*, /* code */ xbt_main_func_t, /* userdata */ void*, /* hostname */ const char*, /* kill_time */ double, /* argc */ int, /* argv */ char**, /* props */ xbt_dict_t, /* auto_restart */ int); /******************************* Networking ***********************************/ /** * \ingroup simix_rdv_management */ typedef struct s_smx_rvpoint *smx_rdv_t; XBT_PUBLIC(void*) SIMIX_comm_get_src_data(smx_action_t action); XBT_PUBLIC(void*) SIMIX_comm_get_dst_data(smx_action_t action); /******************************** Context *************************************/ typedef struct s_smx_context *smx_context_t; typedef struct s_smx_context_factory *smx_context_factory_t; /* Process creation/destruction callbacks */ typedef void (*void_pfn_smxprocess_t) (smx_process_t); /* Process kill */ typedef void (*void_pfn_smxprocess_t_smxprocess_t) (smx_process_t, smx_process_t); /* for auto-restart function */ typedef void (*void_pfn_smxhost_t) (smx_host_t); /* The following function pointer types describe the interface that any context factory should implement */ typedef smx_context_t(*smx_pfn_context_factory_create_context_t) (xbt_main_func_t, int, char **, void_pfn_smxprocess_t, void* data); typedef int (*smx_pfn_context_factory_finalize_t) (smx_context_factory_t*); typedef void (*smx_pfn_context_free_t) (smx_context_t); typedef void (*smx_pfn_context_start_t) (smx_context_t); typedef void (*smx_pfn_context_stop_t) (smx_context_t); typedef void (*smx_pfn_context_suspend_t) (smx_context_t context); typedef void (*smx_pfn_context_runall_t) (void); typedef smx_context_t (*smx_pfn_context_self_t) (void); typedef void* (*smx_pfn_context_get_data_t) (smx_context_t context); /* interface of the context factories */ typedef struct s_smx_context_factory { const char *name; smx_pfn_context_factory_create_context_t create_context; smx_pfn_context_factory_finalize_t finalize; smx_pfn_context_free_t free; smx_pfn_context_stop_t stop; smx_pfn_context_suspend_t suspend; smx_pfn_context_runall_t runall; smx_pfn_context_self_t self; smx_pfn_context_get_data_t get_data; } s_smx_context_factory_t; /* Hack: let msg load directly the right factory */ typedef void (*smx_ctx_factory_initializer_t)(smx_context_factory_t*); XBT_PUBLIC(smx_ctx_factory_initializer_t) smx_factory_initializer_to_use; extern char* smx_context_factory_name; extern int smx_context_stack_size; extern int smx_context_stack_size_was_set; /* *********************** */ /* Context type definition */ /* *********************** */ /* the following function pointers types describe the interface that all context concepts must implement */ /* each context type derive from this structure, so they must contain this structure * at their beginning -- OOP in C :/ */ typedef struct s_smx_context { s_xbt_swag_hookup_t hookup; xbt_main_func_t code; void_pfn_smxprocess_t cleanup_func; void *data; /* Here SIMIX stores the smx_process_t containing the context */ char **argv; int argc; unsigned iwannadie:1; } s_smx_ctx_base_t; /* methods of this class */ XBT_PUBLIC(void) smx_ctx_base_factory_init(smx_context_factory_t *factory); XBT_PUBLIC(int) smx_ctx_base_factory_finalize(smx_context_factory_t *factory); XBT_PUBLIC(smx_context_t) smx_ctx_base_factory_create_context_sized(size_t size, xbt_main_func_t code, int argc, char **argv, void_pfn_smxprocess_t cleanup, void* data); XBT_PUBLIC(void) smx_ctx_base_free(smx_context_t context); XBT_PUBLIC(void) smx_ctx_base_stop(smx_context_t context); XBT_PUBLIC(smx_context_t) smx_ctx_base_self(void); XBT_PUBLIC(void) *smx_ctx_base_get_data(smx_context_t context); XBT_PUBLIC(xbt_dynar_t) SIMIX_process_get_runnable(void); XBT_PUBLIC(smx_process_t) SIMIX_process_from_PID(int PID); XBT_PUBLIC(xbt_dynar_t) SIMIX_processes_as_dynar(void); /* parallelism */ XBT_PUBLIC(int) SIMIX_context_is_parallel(void); XBT_PUBLIC(int) SIMIX_context_get_nthreads(void); XBT_PUBLIC(void) SIMIX_context_set_nthreads(int nb_threads); XBT_PUBLIC(int) SIMIX_context_get_parallel_threshold(void); XBT_PUBLIC(void) SIMIX_context_set_parallel_threshold(int threshold); XBT_PUBLIC(e_xbt_parmap_mode_t) SIMIX_context_get_parallel_mode(void); XBT_PUBLIC(void) SIMIX_context_set_parallel_mode(e_xbt_parmap_mode_t mode); /********************************** Global ************************************/ /* Initialization and exit */ XBT_PUBLIC(void) SIMIX_global_init(int *argc, char **argv); XBT_PUBLIC(void) SIMIX_function_register_process_cleanup(void_pfn_smxprocess_t function); XBT_PUBLIC(void) SIMIX_function_register_process_create(smx_creation_func_t function); XBT_PUBLIC(void) SIMIX_function_register_process_kill(void_pfn_smxprocess_t_smxprocess_t function); /* Simulation execution */ XBT_PUBLIC(void) SIMIX_run(void); XBT_PUBLIC(double) SIMIX_get_clock(void); /* Timer functions FIXME: should these be public? */ XBT_PUBLIC(void) SIMIX_timer_set(double date, void *function, void *arg); XBT_PUBLIC(double) SIMIX_timer_next(void); XBT_PUBLIC(void) SIMIX_display_process_status(void); /******************************* Environment **********************************/ XBT_PUBLIC(void) SIMIX_create_environment(const char *file); /******************************** Deployment **********************************/ XBT_PUBLIC(void) SIMIX_function_register(const char *name, xbt_main_func_t code); XBT_PUBLIC(void) SIMIX_function_register_default(xbt_main_func_t code); XBT_PUBLIC(xbt_main_func_t) SIMIX_get_registered_function(const char *name); XBT_PUBLIC(void) SIMIX_init_application(void); XBT_PUBLIC(void) SIMIX_launch_application(const char *file); XBT_PUBLIC(void) SIMIX_process_set_function(const char* process_host, const char *process_function, xbt_dynar_t arguments, double process_start_time, double process_kill_time); /*********************************** Host *************************************/ //XBT_PUBLIC(xbt_dict_t) SIMIX_host_get_dict(u_smx_scalar_t *args); XBT_PUBLIC(smx_host_t) SIMIX_host_get_by_name(const char *name); XBT_PUBLIC(smx_host_t) SIMIX_host_self(void); XBT_PUBLIC(const char*) SIMIX_host_self_get_name(void); XBT_PUBLIC(const char*) SIMIX_host_get_name(smx_host_t host); /* FIXME: make private: only the name of SIMIX_host_self() should be public without request */ XBT_PUBLIC(void) SIMIX_host_self_set_data(void *data); XBT_PUBLIC(void*) SIMIX_host_self_get_data(void); XBT_PUBLIC(void*) SIMIX_host_get_data(smx_host_t host); XBT_PUBLIC(void) SIMIX_host_set_data(smx_host_t host, void *data); XBT_PUBLIC(xbt_dict_t) SIMIX_host_get_storage_list(smx_host_t host); /********************************* Process ************************************/ XBT_PUBLIC(int) SIMIX_process_count(void); XBT_PUBLIC(smx_process_t) SIMIX_process_self(void); XBT_PUBLIC(const char*) SIMIX_process_self_get_name(void); XBT_PUBLIC(void) SIMIX_process_self_set_data(smx_process_t self, void *data); XBT_PUBLIC(void*) SIMIX_process_self_get_data(smx_process_t self); XBT_PUBLIC(smx_context_t) SIMIX_process_get_context(smx_process_t); XBT_PUBLIC(void) SIMIX_process_set_context(smx_process_t p,smx_context_t c); XBT_PUBLIC(int) SIMIX_process_has_pending_comms(smx_process_t process); XBT_PUBLIC(void) SIMIX_process_on_exit_runall(smx_process_t process); XBT_PUBLIC(void) SIMIX_process_on_exit(smx_process_t process, int_f_pvoid_t fun, void *data); /****************************** Communication *********************************/ XBT_PUBLIC(void) SIMIX_comm_set_copy_data_callback(void (*callback) (smx_action_t, void*, size_t)); XBT_PUBLIC(void) SIMIX_comm_copy_pointer_callback(smx_action_t comm, void* buff, size_t buff_size); XBT_PUBLIC(void) SIMIX_comm_copy_buffer_callback(smx_action_t comm, void* buff, size_t buff_size); XBT_PUBLIC(smx_action_t) SIMIX_comm_get_send_match(smx_rdv_t rdv, int (*match_fun)(void*, void*), void* data); XBT_PUBLIC(int) SIMIX_comm_has_send_match(smx_rdv_t rdv, int (*match_fun)(void*, void*), void* data); XBT_PUBLIC(int) SIMIX_comm_has_recv_match(smx_rdv_t rdv, int (*match_fun)(void*, void*), void* data); XBT_PUBLIC(void) SIMIX_comm_finish(smx_action_t action); /*********************************** File *************************************/ XBT_PUBLIC(void*) SIMIX_file_get_data(smx_file_t fd); XBT_PUBLIC(void) SIMIX_file_set_data(smx_file_t fd, void *data); /******************************************************************************/ /* SIMIX simcalls */ /******************************************************************************/ /* These functions are a system call-like interface to the simulation kernel. */ /* They can also be called from maestro's context, and they are thread safe. */ /******************************************************************************/ /******************************* Host simcalls ********************************/ /* TODO use handlers and keep smx_host_t hidden from higher levels */ XBT_PUBLIC(smx_host_t) simcall_host_get_by_name(const char *name); XBT_PUBLIC(const char *) simcall_host_get_name(smx_host_t host); XBT_PUBLIC(xbt_dict_t) simcall_host_get_properties(smx_host_t host); XBT_PUBLIC(int) simcall_host_get_core(smx_host_t host); XBT_PUBLIC(xbt_swag_t) simcall_host_get_process_list(smx_host_t host); XBT_PUBLIC(double) simcall_host_get_speed(smx_host_t host); XBT_PUBLIC(double) simcall_host_get_available_speed(smx_host_t host); /* Two possible states, 1 - CPU ON and 0 CPU OFF */ XBT_PUBLIC(int) simcall_host_get_state(smx_host_t host); XBT_PUBLIC(void *) simcall_host_get_data(smx_host_t host); XBT_PUBLIC(void) simcall_host_set_data(smx_host_t host, void *data); XBT_PUBLIC(double) simcall_host_get_current_power_peak(smx_host_t host); XBT_PUBLIC(double) simcall_host_get_power_peak_at(smx_host_t host, int pstate_index); XBT_PUBLIC(int) simcall_host_get_nb_pstates(smx_host_t host); XBT_PUBLIC(void) simcall_host_set_power_peak_at(smx_host_t host, int pstate_index); XBT_PUBLIC(double) simcall_host_get_consumed_energy(smx_host_t host); XBT_PUBLIC(smx_action_t) simcall_host_execute(const char *name, smx_host_t host, double computation_amount, double priority); XBT_PUBLIC(smx_action_t) simcall_host_parallel_execute(const char *name, int host_nb, smx_host_t *host_list, double *computation_amount, double *communication_amount, double amount, double rate); XBT_PUBLIC(void) simcall_host_execution_destroy(smx_action_t execution); XBT_PUBLIC(void) simcall_host_execution_cancel(smx_action_t execution); XBT_PUBLIC(double) simcall_host_execution_get_remains(smx_action_t execution); XBT_PUBLIC(e_smx_state_t) simcall_host_execution_get_state(smx_action_t execution); XBT_PUBLIC(void) simcall_host_execution_set_priority(smx_action_t execution, double priority); XBT_PUBLIC(e_smx_state_t) simcall_host_execution_wait(smx_action_t execution); XBT_PUBLIC(xbt_dict_t) simcall_host_get_storage_list(smx_host_t host); /**************************** Process simcalls ********************************/ /* Constructor and Destructor */ XBT_PUBLIC(void) simcall_process_create(smx_process_t *process, const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart); XBT_PUBLIC(void) simcall_process_kill(smx_process_t process); XBT_PUBLIC(void) simcall_process_killall(int reset_pid); /* Process handling */ XBT_PUBLIC(void) simcall_process_cleanup(smx_process_t process); XBT_PUBLIC(void) simcall_process_change_host(smx_process_t process, smx_host_t dest); XBT_PUBLIC(void) simcall_process_suspend(smx_process_t process); XBT_PUBLIC(void) simcall_process_resume(smx_process_t process); /* Getters and Setters */ XBT_PUBLIC(int) simcall_process_count(void); XBT_PUBLIC(void *) simcall_process_get_data(smx_process_t process); XBT_PUBLIC(void) simcall_process_set_data(smx_process_t process, void *data); XBT_PUBLIC(smx_host_t) simcall_process_get_host(smx_process_t process); XBT_PUBLIC(const char *) simcall_process_get_name(smx_process_t process); XBT_PUBLIC(int) simcall_process_get_PID(smx_process_t process); XBT_PUBLIC(int) simcall_process_get_PPID(smx_process_t process); XBT_PUBLIC(int) simcall_process_is_suspended(smx_process_t process); XBT_PUBLIC(xbt_dict_t) simcall_process_get_properties(smx_process_t host); XBT_PUBLIC(void) simcall_process_set_kill_time(smx_process_t process, double kill_time); XBT_PUBLIC(void) simcall_process_on_exit(smx_process_t process, int_f_pvoid_t fun, void *data); XBT_PUBLIC(void) simcall_process_auto_restart_set(smx_process_t process, int auto_restart); XBT_PUBLIC(smx_process_t) simcall_process_restart(smx_process_t process); /* Sleep control */ XBT_PUBLIC(e_smx_state_t) simcall_process_sleep(double duration); /************************** Comunication simcalls *****************************/ /***** Rendez-vous points *****/ XBT_PUBLIC(smx_rdv_t) simcall_rdv_create(const char *name); XBT_PUBLIC(void) simcall_rdv_destroy(smx_rdv_t rvp); XBT_PUBLIC(smx_rdv_t) simcall_rdv_get_by_name(const char *name); XBT_PUBLIC(int) simcall_rdv_comm_count_by_host(smx_rdv_t rdv, smx_host_t host); XBT_PUBLIC(smx_action_t) simcall_rdv_get_head(smx_rdv_t rdv); XBT_PUBLIC(smx_process_t) simcall_rdv_get_receiver(smx_rdv_t rdv); XBT_PUBLIC(void) simcall_rdv_set_receiver(smx_rdv_t rdv , smx_process_t process); XBT_PUBLIC(xbt_dict_t) SIMIX_get_rdv_points(void); /***** Communication simcalls *****/ XBT_PUBLIC(void) simcall_comm_send(smx_rdv_t rdv, double task_size, double rate, void *src_buff, size_t src_buff_size, int (*match_fun)(void *, void *, smx_action_t), void *data, double timeout); XBT_PUBLIC(smx_action_t) simcall_comm_isend(smx_rdv_t rdv, double task_size, double rate, void *src_buff, size_t src_buff_size, int (*match_fun)(void *, void *, smx_action_t), void (*clean_fun)(void *), void *data, int detached); XBT_PUBLIC(void) simcall_comm_recv(smx_rdv_t rdv, void *dst_buff, size_t * dst_buff_size, int (*match_fun)(void *, void *, smx_action_t), void *data, double timeout); XBT_PUBLIC(smx_action_t) simcall_comm_irecv(smx_rdv_t rdv, void *dst_buff, size_t * dst_buff_size, int (*match_fun)(void *, void *, smx_action_t), void *data); XBT_PUBLIC(void) simcall_comm_recv_bounded(smx_rdv_t rdv, void *dst_buff, size_t * dst_buff_size, int (*match_fun)(void *, void *, smx_action_t), void *data, double timeout, double rate); XBT_PUBLIC(smx_action_t) simcall_comm_irecv_bounded(smx_rdv_t rdv, void *dst_buff, size_t * dst_buff_size, int (*match_fun)(void *, void *, smx_action_t), void *data, double rate); XBT_PUBLIC(void) simcall_comm_destroy(smx_action_t comm); XBT_PUBLIC(smx_action_t) simcall_comm_iprobe(smx_rdv_t rdv, int src, int tag, int (*match_fun)(void *, void *, smx_action_t), void *data); XBT_PUBLIC(void) simcall_comm_cancel(smx_action_t comm); /* FIXME: waitany is going to be a vararg function, and should take a timeout */ XBT_PUBLIC(unsigned int) simcall_comm_waitany(xbt_dynar_t comms); XBT_PUBLIC(void) simcall_comm_wait(smx_action_t comm, double timeout); XBT_PUBLIC(int) simcall_comm_test(smx_action_t comm); XBT_PUBLIC(int) simcall_comm_testany(xbt_dynar_t comms); /* Getters and setters */ XBT_PUBLIC(double) simcall_comm_get_remains(smx_action_t comm); XBT_PUBLIC(e_smx_state_t) simcall_comm_get_state(smx_action_t comm); XBT_PUBLIC(void *) simcall_comm_get_src_data(smx_action_t comm); XBT_PUBLIC(void *) simcall_comm_get_dst_data(smx_action_t comm); XBT_PUBLIC(smx_process_t) simcall_comm_get_src_proc(smx_action_t comm); XBT_PUBLIC(smx_process_t) simcall_comm_get_dst_proc(smx_action_t comm); #ifdef HAVE_LATENCY_BOUND_TRACKING XBT_PUBLIC(int) simcall_comm_is_latency_bounded(smx_action_t comm); #endif #ifdef HAVE_TRACING /************************** Tracing handling **********************************/ XBT_PUBLIC(void) simcall_set_category(smx_action_t action, const char *category); #endif /************************** Synchro simcalls **********************************/ XBT_PUBLIC(smx_mutex_t) simcall_mutex_init(void); XBT_PUBLIC(void) simcall_mutex_destroy(smx_mutex_t mutex); XBT_PUBLIC(void) simcall_mutex_lock(smx_mutex_t mutex); XBT_PUBLIC(int) simcall_mutex_trylock(smx_mutex_t mutex); XBT_PUBLIC(void) simcall_mutex_unlock(smx_mutex_t mutex); XBT_PUBLIC(smx_cond_t) simcall_cond_init(void); XBT_PUBLIC(void) simcall_cond_destroy(smx_cond_t cond); XBT_PUBLIC(void) simcall_cond_signal(smx_cond_t cond); XBT_PUBLIC(void) simcall_cond_wait(smx_cond_t cond, smx_mutex_t mutex); XBT_PUBLIC(void) simcall_cond_wait_timeout(smx_cond_t cond, smx_mutex_t mutex, double max_duration); XBT_PUBLIC(void) simcall_cond_broadcast(smx_cond_t cond); XBT_PUBLIC(smx_sem_t) simcall_sem_init(int capacity); XBT_PUBLIC(void) simcall_sem_destroy(smx_sem_t sem); XBT_PUBLIC(void) simcall_sem_release(smx_sem_t sem); XBT_PUBLIC(int) simcall_sem_would_block(smx_sem_t sem); XBT_PUBLIC(void) simcall_sem_acquire(smx_sem_t sem); XBT_PUBLIC(void) simcall_sem_acquire_timeout(smx_sem_t sem, double max_duration); XBT_PUBLIC(int) simcall_sem_get_capacity(smx_sem_t sem); /***************************** File **********************************/ XBT_PUBLIC(void *) simcall_file_get_data(smx_file_t fd); XBT_PUBLIC(void) simcall_file_set_data(smx_file_t fd, void *data); XBT_PUBLIC(sg_storage_size_t) simcall_file_read(smx_file_t fd, sg_storage_size_t size); XBT_PUBLIC(sg_storage_size_t) simcall_file_write(smx_file_t fd, sg_storage_size_t size); XBT_PUBLIC(smx_file_t) simcall_file_open(const char* storage, const char* path); XBT_PUBLIC(int) simcall_file_close(smx_file_t fd); XBT_PUBLIC(int) simcall_file_unlink(smx_file_t fd); XBT_PUBLIC(xbt_dict_t) simcall_file_ls(const char* mount, const char* path); XBT_PUBLIC(sg_storage_size_t) simcall_file_get_size(smx_file_t fd); XBT_PUBLIC(xbt_dynar_t) simcall_file_get_info(smx_file_t fd); /***************************** Storage **********************************/ XBT_PUBLIC(sg_storage_size_t) simcall_storage_get_free_size (const char* name); XBT_PUBLIC(sg_storage_size_t) simcall_storage_get_used_size (const char* name); XBT_PUBLIC(xbt_dict_t) simcall_storage_get_properties(smx_storage_t storage); XBT_PUBLIC(void*) SIMIX_storage_get_data(smx_storage_t storage); XBT_PUBLIC(void) SIMIX_storage_set_data(smx_storage_t storage, void *data); XBT_PUBLIC(xbt_dict_t) SIMIX_storage_get_content(smx_storage_t storage); XBT_PUBLIC(xbt_dict_t) simcall_storage_get_content(smx_storage_t storage); XBT_PUBLIC(const char*) SIMIX_storage_get_name(smx_host_t host); XBT_PUBLIC(sg_storage_size_t) SIMIX_storage_get_size(smx_storage_t storage); XBT_PUBLIC(void) simcall_storage_file_rename(smx_storage_t storage, const char* src, const char* dest); /************************** AS router **********************************/ XBT_PUBLIC(xbt_dict_t) SIMIX_asr_get_properties(const char *name); /************************** AS router simcalls ***************************/ XBT_PUBLIC(xbt_dict_t) simcall_asr_get_properties(const char *name); /************************** MC simcalls **********************************/ XBT_PUBLIC(void *) simcall_mc_snapshot(void); XBT_PUBLIC(int) simcall_mc_compare_snapshots(void *s1, void *s2); XBT_PUBLIC(int) simcall_mc_random(int min, int max); /************************** New API simcalls **********************************/ /* TUTORIAL: New API */ /******************************************************************************/ XBT_PUBLIC(int) simcall_new_api_fct(const char* param1, double param2); SG_END_DECL() #endif /* _SIMIX_SIMIX_H */ SimGrid-3.10/include/simgrid/platf.h000640 007661 000620 00000032667 12242224150 017571 0ustar00gierschand000000 000000 /* platf.h - Public interface to the SimGrid platforms */ /* Copyright (c) 2004-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SG_PLATF_H #define SG_PLATF_H #include typedef void *sg_routing_link_t; /* The actual type is model-dependent so use void* instead*/ typedef struct s_routing_edge *sg_routing_edge_t; XBT_PUBLIC(sg_routing_edge_t) sg_routing_edge_by_name_or_null(const char *name); /** Defines whether a given resource is working or not */ typedef enum { SURF_RESOURCE_ON = 1, /**< Up & ready */ SURF_RESOURCE_OFF = 0 /**< Down & broken */ } e_surf_resource_state_t; typedef enum { SURF_LINK_FULLDUPLEX = 2, SURF_LINK_SHARED = 1, SURF_LINK_FATPIPE = 0 } e_surf_link_sharing_policy_t; typedef enum { SURF_TRACE_CONNECT_KIND_HOST_AVAIL = 4, SURF_TRACE_CONNECT_KIND_POWER = 3, SURF_TRACE_CONNECT_KIND_LINK_AVAIL = 2, SURF_TRACE_CONNECT_KIND_BANDWIDTH = 1, SURF_TRACE_CONNECT_KIND_LATENCY = 0 } e_surf_trace_connect_kind_t; typedef enum { SURF_PROCESS_ON_FAILURE_DIE = 1, SURF_PROCESS_ON_FAILURE_RESTART = 0 } e_surf_process_on_failure_t; typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */ /** opaque structure defining a event generator for availability based on a probability distribution */ typedef struct probabilist_event_generator *probabilist_event_generator_t; XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_file(const char *filename); XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_string(const char *id, const char *input, double periodicity); XBT_PUBLIC(tmgr_trace_t) tmgr_trace_generator_value(const char *id, probabilist_event_generator_t date_generator, probabilist_event_generator_t value_generator); XBT_PUBLIC(tmgr_trace_t) tmgr_trace_generator_state(const char *id, probabilist_event_generator_t date_generator, e_surf_resource_state_t first_event_value); XBT_PUBLIC(tmgr_trace_t) tmgr_trace_generator_avail_unavail(const char *id, probabilist_event_generator_t avail_duration_generator, probabilist_event_generator_t unavail_duration_generator, e_surf_resource_state_t first_event_value); XBT_PUBLIC(probabilist_event_generator_t) tmgr_event_generator_new_uniform(const char* id, double min, double max); XBT_PUBLIC(probabilist_event_generator_t) tmgr_event_generator_new_exponential(const char* id, double rate); XBT_PUBLIC(probabilist_event_generator_t) tmgr_event_generator_new_weibull(const char* id, double scale, double shape); typedef xbt_dictelm_t sg_host_t; static inline char* sg_host_name(sg_host_t host) { return host->key; } typedef xbt_dictelm_t sg_storage_t; static inline char* sg_storage_name(sg_storage_t storage) { return storage->key; } /* Type for any integer storage size */ typedef uint64_t sg_storage_size_t; /* * Platform creation functions. Instead of passing 123 arguments to the creation functions * (one for each possible XML attribute), we pass structures containing them all. It removes the * chances of switching arguments by error, and reduce the burden when we add a new attribute: * old models can just continue to ignore it without having to update their headers. * * It shouldn't be too costly at runtime, provided that structures living on the stack are * used, instead of malloced structures. */ typedef struct { const char* id; xbt_dynar_t power_peak; int pstate; int core_amount; double power_scale; tmgr_trace_t power_trace; e_surf_resource_state_t initial_state; tmgr_trace_t state_trace; const char* coord; xbt_dict_t properties; } s_sg_platf_host_cbarg_t, *sg_platf_host_cbarg_t; #define SG_PLATF_HOST_INITIALIZER { \ .id = NULL,\ .power_peak = 0,\ .core_amount = 1.,\ .power_scale = 1,\ .initial_state = SURF_RESOURCE_ON,\ .power_trace = NULL,\ .state_trace = NULL,\ .coord = NULL,\ .properties = NULL\ } typedef struct { const char* id; const char* link_up; const char* link_down; } s_sg_platf_host_link_cbarg_t, *sg_platf_host_link_cbarg_t; #define SG_PLATF_HOST_LINK_INITIALIZER {NULL,NULL,NULL} typedef struct { const char* id; const char* coord; } s_sg_platf_router_cbarg_t, *sg_platf_router_cbarg_t; #define SG_PLATF_ROUTER_INITIALIZER {NULL,NULL} typedef struct { const char* id; double bandwidth; tmgr_trace_t bandwidth_trace; double latency; tmgr_trace_t latency_trace; e_surf_resource_state_t state; tmgr_trace_t state_trace; e_surf_link_sharing_policy_t policy; xbt_dict_t properties; } s_sg_platf_link_cbarg_t, *sg_platf_link_cbarg_t; #define SG_PLATF_LINK_INITIALIZER {\ .id = NULL,\ .bandwidth = 0.,\ .bandwidth_trace = NULL,\ .latency = 0.,\ .latency_trace = NULL,\ .state = SURF_RESOURCE_ON,\ .state_trace = NULL,\ .policy = SURF_LINK_SHARED,\ .properties = NULL\ } typedef struct s_sg_platf_peer_cbarg *sg_platf_peer_cbarg_t; typedef struct s_sg_platf_peer_cbarg { const char* id; double power; double bw_in; double bw_out; double lat; const char* coord; tmgr_trace_t availability_trace; tmgr_trace_t state_trace; } s_sg_platf_peer_cbarg_t; #define SG_PLATF_PEER_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL} typedef struct s_sg_platf_route_cbarg *sg_platf_route_cbarg_t; typedef struct s_sg_platf_route_cbarg { int symmetrical; const char *src; const char *dst; sg_routing_edge_t gw_src; sg_routing_edge_t gw_dst; xbt_dynar_t link_list; } s_sg_platf_route_cbarg_t; #define SG_PLATF_ROUTE_INITIALIZER {TRUE,NULL,NULL,NULL,NULL,NULL} typedef struct s_sg_platf_cluster_cbarg *sg_platf_cluster_cbarg_t; typedef struct s_sg_platf_cluster_cbarg { const char* id; const char* prefix; const char* suffix; const char* radical; double power; int core_amount; double bw; double lat; double bb_bw; double bb_lat; double loopback_bw; double loopback_lat; double limiter_link; xbt_dict_t properties; const char* router_id; e_surf_link_sharing_policy_t sharing_policy; e_surf_link_sharing_policy_t bb_sharing_policy; const char* availability_trace; //don't convert to tmgr_trace_t since there is a trace per host and some rewriting is needed const char* state_trace; } s_sg_platf_cluster_cbarg_t; #define SG_PLATF_CLUSTER_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL \ ,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL} typedef struct s_sg_platf_cabinet_cbarg *sg_platf_cabinet_cbarg_t; typedef struct s_sg_platf_cabinet_cbarg { const char* id; const char* prefix; const char* suffix; const char* radical; double power; double bw; double lat; } s_sg_platf_cabinet_cbarg_t; #define SG_PLATF_CABINET_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL,NULL} typedef struct { const char* id; const char* type_id; const char* content; const char* content_type; xbt_dict_t properties; } s_sg_platf_storage_cbarg_t, *sg_platf_storage_cbarg_t; #define SG_PLATF_STORAGE_INITIALIZER {NULL,NULL,NULL,NULL} typedef struct { const char* id; const char* model; const char* content; const char* content_type; xbt_dict_t properties; sg_storage_size_t size; } s_sg_platf_storage_type_cbarg_t, *sg_platf_storage_type_cbarg_t; #define SG_PLATF_STORAGE_TYPE_INITIALIZER {NULL,NULL,NULL,NULL,NULL} typedef struct { const char* type_id; const char* name; } s_sg_platf_mstorage_cbarg_t, *sg_platf_mstorage_cbarg_t; #define SG_PLATF_MSTORAGE_INITIALIZER {NULL,NULL} typedef struct { const char* storageId; const char* name; } s_sg_platf_mount_cbarg_t, *sg_platf_mount_cbarg_t; #define SG_PLATF_MOUNT_INITIALIZER {NULL,NULL} typedef struct s_sg_platf_prop_cbarg *sg_platf_prop_cbarg_t; typedef struct s_sg_platf_prop_cbarg { const char *id; const char *value; } s_sg_platf_prop_cbarg_t; #define SG_PLATF_PROP_INITIALIZER {NULL,NULL} typedef struct s_sg_platf_trace_cbarg *sg_platf_trace_cbarg_t; typedef struct s_sg_platf_trace_cbarg { const char *id; const char *file; double periodicity; const char *pc_data; } s_sg_platf_trace_cbarg_t; #define SG_PLATF_TRACE_INITIALIZER {NULL,NULL,NULL,NULL} typedef struct s_sg_platf_trace_connect_cbarg *sg_platf_trace_connect_cbarg_t; typedef struct s_sg_platf_trace_connect_cbarg { e_surf_trace_connect_kind_t kind; const char *trace; const char *element; } s_sg_platf_trace_connect_cbarg_t; #define SG_PLATF_TRACE_CONNECT_INITIALIZER {NULL,NULL,NULL} typedef struct s_sg_platf_process_cbarg *sg_platf_process_cbarg_t; typedef struct s_sg_platf_process_cbarg { const char **argv; int argc; xbt_dict_t properties; const char *host; const char *function; double start_time; double kill_time; e_surf_process_on_failure_t on_failure; } s_sg_platf_process_cbarg_t; #define SG_PLATF_PROCESS_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL} typedef struct s_sg_platf_AS_cbarg *sg_platf_AS_cbarg_t; typedef struct s_sg_platf_AS_cbarg { const char *id; int routing; } s_sg_platf_AS_cbarg_t; #define SG_PLATF_AS_INITIALIZER {NULL,0} /* ***************************************** */ /* TUTORIAL: New TAG */ typedef struct s_sg_platf_gpu_cbarg *sg_platf_gpu_cbarg_t; typedef struct s_sg_platf_gpu_cbarg { const char *name; } s_sg_platf_gpu_cbarg_t; #define SG_PLATF_GPU_INITIALIZER {NULL} /* ***************************************** */ XBT_PUBLIC(void) sg_platf_begin(void); // Start a new platform XBT_PUBLIC(void) sg_platf_end(void); // Finish the creation of the platform XBT_PUBLIC(void) sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS); // Begin description of new AS XBT_PUBLIC(void) sg_platf_new_AS_end(void); // That AS is fully described XBT_PUBLIC(void) sg_platf_new_host (sg_platf_host_cbarg_t host); // Add an host to the currently described AS XBT_PUBLIC(void) sg_platf_new_host_link(sg_platf_host_link_cbarg_t h); // Add an host_link to the currently described AS XBT_PUBLIC(void) sg_platf_new_router (sg_platf_router_cbarg_t router); // Add a router to the currently described AS XBT_PUBLIC(void) sg_platf_new_link (sg_platf_link_cbarg_t link); // Add a link to the currently described AS XBT_PUBLIC(void) sg_platf_new_peer (sg_platf_peer_cbarg_t peer); // Add a peer to the currently described AS XBT_PUBLIC(void) sg_platf_new_cluster(sg_platf_cluster_cbarg_t clust); // Add a cluster to the currently described AS XBT_PUBLIC(void) sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet); // Add a cabinet to the currently described AS XBT_PUBLIC(void) sg_platf_new_route (sg_platf_route_cbarg_t route); // Add a route XBT_PUBLIC(void) sg_platf_new_ASroute (sg_platf_route_cbarg_t ASroute); // Add an ASroute XBT_PUBLIC(void) sg_platf_new_bypassRoute (sg_platf_route_cbarg_t bypassroute); // Add a bypassRoute XBT_PUBLIC(void) sg_platf_new_bypassASroute (sg_platf_route_cbarg_t bypassASroute); // Add an bypassASroute XBT_PUBLIC(void) sg_platf_new_prop (sg_platf_prop_cbarg_t prop); // Add a prop XBT_PUBLIC(void) sg_platf_new_trace(sg_platf_trace_cbarg_t trace); XBT_PUBLIC(void) sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect); XBT_PUBLIC(void) sg_platf_new_storage(sg_platf_storage_cbarg_t storage); // Add a storage to the currently described AS XBT_PUBLIC(void) sg_platf_new_storage(sg_platf_storage_cbarg_t storage); // Add a storage to the currently described AS XBT_PUBLIC(void) sg_platf_new_mstorage(sg_platf_mstorage_cbarg_t mstorage); XBT_PUBLIC(void) sg_platf_new_storage_type(sg_platf_storage_type_cbarg_t storage_type); XBT_PUBLIC(void) sg_platf_new_mount(sg_platf_mount_cbarg_t mount); XBT_PUBLIC(void) sg_platf_new_process(sg_platf_process_cbarg_t process); /* ***************************************** */ /* TUTORIAL: New TAG */ XBT_PUBLIC(void) sg_platf_new_gpu(sg_platf_gpu_cbarg_t gpu); /* ***************************************** */ // Add route and Asroute without xml file with those functions XBT_PUBLIC(void) sg_platf_route_begin (sg_platf_route_cbarg_t route); // Initialize route XBT_PUBLIC(void) sg_platf_route_end (sg_platf_route_cbarg_t route); // Finalize and add a route XBT_PUBLIC(void) sg_platf_ASroute_begin (sg_platf_route_cbarg_t ASroute); // Initialize ASroute XBT_PUBLIC(void) sg_platf_ASroute_end (sg_platf_route_cbarg_t ASroute); // Finalize and add a ASroute XBT_PUBLIC(void) sg_platf_route_add_link (const char* link_id, sg_platf_route_cbarg_t route); // Add a link to link list XBT_PUBLIC(void) sg_platf_ASroute_add_link (const char* link_id, sg_platf_route_cbarg_t ASroute); // Add a link to link list typedef void (*sg_platf_process_cb_t)(sg_platf_process_cbarg_t); XBT_PUBLIC(void) sg_platf_process_add_cb(sg_platf_process_cb_t fct); #endif /* SG_PLATF_H */ SimGrid-3.10/include/simgrid/platf_generator.h000640 007661 000620 00000005326 12242224150 021627 0ustar00gierschand000000 000000 /* platf_generator.h - Public interface to the SimGrid platforms generator */ /* Copyright (c) 2004-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SG_PLATF_GEN_H #define SG_PLATF_GEN_H #include "xbt.h" #include "xbt/graph.h" //Only for platf_graph_get() #include "platf.h" typedef enum { ROUTER, HOST, CLUSTER } e_platf_node_kind; typedef struct s_context_node_t { unsigned long id; double x, y; int degree; e_platf_node_kind kind; int connect_checked; union { s_sg_platf_host_cbarg_t host_parameters; s_sg_platf_cluster_cbarg_t cluster_parameters; char* router_id; }; } s_context_node_t, *context_node_t; typedef struct s_context_edge_t { unsigned long id; double length; int labeled; s_sg_platf_link_cbarg_t link_parameters; } s_context_edge_t, *context_edge_t; typedef void (*platf_promoter_cb_t) (context_node_t); typedef void (*platf_labeler_cb_t) (context_edge_t); XBT_PUBLIC(void) platf_random_seed(unsigned long seed[6]); XBT_PUBLIC(void) platf_graph_uniform(unsigned long node_count); XBT_PUBLIC(void) platf_graph_heavytailed(unsigned long node_count); XBT_PUBLIC(void) platf_graph_interconnect_star(void); XBT_PUBLIC(void) platf_graph_interconnect_line(void); XBT_PUBLIC(void) platf_graph_interconnect_ring(void); XBT_PUBLIC(void) platf_graph_interconnect_clique(void); XBT_PUBLIC(void) platf_graph_interconnect_uniform(double alpha); XBT_PUBLIC(void) platf_graph_interconnect_exponential(double alpha); XBT_PUBLIC(void) platf_graph_interconnect_zegura(double alpha, double beta, double r); XBT_PUBLIC(void) platf_graph_interconnect_waxman(double alpha, double beta); XBT_PUBLIC(void) platf_graph_interconnect_barabasi(void); XBT_PUBLIC(int) platf_graph_is_connected(void); XBT_PUBLIC(void) platf_graph_clear_links(void); XBT_PUBLIC(void) platf_graph_promote_to_host(context_node_t node, sg_platf_host_cbarg_t parameters); XBT_PUBLIC(void) platf_graph_promote_to_cluster(context_node_t node, sg_platf_cluster_cbarg_t parameters); XBT_PUBLIC(void) platf_graph_link_label(context_edge_t edge, sg_platf_link_cbarg_t parameters); XBT_PUBLIC(void) platf_graph_promoter(platf_promoter_cb_t promoter_callback); XBT_PUBLIC(void) platf_graph_labeler(platf_labeler_cb_t labeler_callback); XBT_PUBLIC(void) platf_do_promote(void); XBT_PUBLIC(void) platf_do_label(void); XBT_PUBLIC(void) platf_generate(void); // WARNING : Only for debbugging ; should be removed when platform // generation works correctly XBT_PUBLIC(xbt_graph_t) platf_graph_get(void); #endif /* SG_PLATF_GEN_H */ SimGrid-3.10/include/simdag/002750 007661 000620 00000000000 12242224150 016103 5ustar00gierschand000000 000000 SimGrid-3.10/include/simdag/datatypes.h000640 007661 000620 00000007776 12242224150 020272 0ustar00gierschand000000 000000 /* Copyright (c) 2006, 2008-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SIMDAG_DATATYPES_H #define SIMDAG_DATATYPES_H #include "xbt/dict.h" /** @brief Workstation datatype @ingroup SD_datatypes_management A workstation is a place where a task can be executed. A workstation is represented as a physical resource with computing capabilities and has a name. @see SD_workstation_management */ typedef xbt_dictelm_t SD_workstation_t; /** @brief Workstation access mode @ingroup SD_datatypes_management By default, a workstation resource is shared, i.e. several tasks can be executed at the same time on a workstation. The CPU power of the workstation is shared between the running tasks on the workstation. In sequential mode, only one task can use the workstation, and the other tasks wait in a FIFO. @see SD_workstation_get_access_mode(), SD_workstation_set_access_mode() */ typedef enum { SD_WORKSTATION_SHARED_ACCESS, /**< @brief Several tasks can be executed at the same time */ SD_WORKSTATION_SEQUENTIAL_ACCESS /**< @brief Only one task can be executed, the others wait in a FIFO. */ } e_SD_workstation_access_mode_t; typedef enum { SD_LINK_SHARED, SD_LINK_FATPIPE } e_SD_link_sharing_policy_t; /** @brief Link datatype @ingroup SD_datatypes_management A link is a network node represented as a name, a current bandwidth and a current latency. A route is a list of links between two workstations. @see SD_link_management */ typedef struct SD_link *SD_link_t; /** @brief Task datatype @ingroup SD_datatypes_management A task is some computing amount that can be executed in parallel on several workstations. A task may depend on other tasks, this means that the task cannot start until the other tasks are done. Each task has a \ref e_SD_task_state_t "state" indicating whether the task is scheduled, running, done, etc. @see SD_task_management */ typedef struct SD_task *SD_task_t; /** @brief Task states @ingroup SD_datatypes_management @see SD_task_management */ typedef enum { SD_NOT_SCHEDULED = 0, /**< @brief Initial state (not valid for SD_watch and SD_unwatch). */ SD_SCHEDULABLE = 0x0001, /**< @brief A task becomes SD_SCHEDULABLE as soon as its dependencies are satisfied */ SD_SCHEDULED = 0x0002, /**< @brief A task becomes SD_SCHEDULED when you call function SD_task_schedule. SD_simulate will execute it when it becomes SD_RUNNABLE. */ SD_RUNNABLE = 0x0004, /**< @brief A scheduled task becomes runnable is SD_simulate as soon as its dependencies are satisfied. */ SD_IN_FIFO = 0x0008, /**< @brief A runnable task can have to wait in a workstation fifo if the workstation is sequential */ SD_RUNNING = 0x0010, /**< @brief An SD_RUNNABLE or SD_IN_FIFO becomes SD_RUNNING when it is launched. */ SD_DONE = 0x0020, /**< @brief The task is successfully finished. */ SD_FAILED = 0x0040 /**< @brief A problem occurred during the execution of the task. */ } e_SD_task_state_t; /** @brief Task kinds @ingroup SD_datatypes_management @see SD_task_management */ typedef enum { SD_TASK_NOT_TYPED = 0, /**< @brief no specified type */ SD_TASK_COMM_E2E = 1, /**< @brief end to end communication */ SD_TASK_COMP_SEQ = 2, /**< @brief sequential computation */ SD_TASK_COMP_PAR_AMDAHL = 3, /**< @brief parallel computation (Amdahl's law) */ SD_TASK_COMM_PAR_MXN_1D_BLOCK = 4 /**< @brief MxN data redistribution (1D Block distribution) */ } e_SD_task_kind_t; /** @brief Storage datatype @ingroup SD_datatypes_management TODO PV: comment it ! @see SD_storage_management */ typedef xbt_dictelm_t SD_storage_t; #endif SimGrid-3.10/include/simdag/simdag.h000640 007661 000620 00000026677 12242224150 017541 0ustar00gierschand000000 000000 /* Copyright (c) 2006-2010, 2012-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SIMDAG_SIMDAG_H #define SIMDAG_SIMDAG_H #include "simdag/datatypes.h" #include "xbt/misc.h" #include "xbt/dynar.h" #include "xbt/dict.h" SG_BEGIN_DECL() /************************** AS handling *************************************/ XBT_PUBLIC(xbt_dict_t) SD_as_router_get_properties(const char *as); XBT_PUBLIC(const char*) SD_as_router_get_property_value(const char * as, const char *name); /************************** Link handling ***********************************/ /** @defgroup SD_link_management Links * @brief Functions for managing the network links * * This section describes the functions for managing the network links. * * A link is a network node represented as a name, a current * bandwidth and a current latency. The links are created * when you call the function SD_create_environment. * * @see SD_link_t * @{ */ XBT_PUBLIC(const SD_link_t *) SD_link_get_list(void); XBT_PUBLIC(int) SD_link_get_number(void); XBT_PUBLIC(void *) SD_link_get_data(SD_link_t link); XBT_PUBLIC(void) SD_link_set_data(SD_link_t link, void *data); XBT_PUBLIC(const char *) SD_link_get_name(SD_link_t link); XBT_PUBLIC(double) SD_link_get_current_bandwidth(SD_link_t link); XBT_PUBLIC(double) SD_link_get_current_latency(SD_link_t link); XBT_PUBLIC(e_SD_link_sharing_policy_t) SD_link_get_sharing_policy(SD_link_t link); /** @} */ /************************** Workstation handling ****************************/ /** @defgroup SD_workstation_management Workstations * @brief Functions for managing the workstations * * This section describes the functions for managing the workstations. * * A workstation is a place where a task can be executed. * A workstation is represented as a physical * resource with computing capabilities and has a name. * * The workstations are created when you call the function SD_create_environment. * * @see SD_workstation_t * @{ */ XBT_PUBLIC(SD_workstation_t) SD_workstation_get_by_name(const char *name); XBT_PUBLIC(const SD_workstation_t *) SD_workstation_get_list(void); XBT_PUBLIC(int) SD_workstation_get_number(void); XBT_PUBLIC(void) SD_workstation_set_data(SD_workstation_t workstation, void *data); XBT_PUBLIC(void *) SD_workstation_get_data(SD_workstation_t workstation); XBT_PUBLIC(const char *) SD_workstation_get_name(SD_workstation_t workstation); /*property handling functions*/ XBT_PUBLIC(xbt_dict_t) SD_workstation_get_properties(SD_workstation_t workstation); XBT_PUBLIC(const char *) SD_workstation_get_property_value(SD_workstation_t workstation, const char *name); XBT_PUBLIC(void) SD_workstation_dump(SD_workstation_t ws); XBT_PUBLIC(const SD_link_t *) SD_route_get_list(SD_workstation_t src, SD_workstation_t dst); XBT_PUBLIC(int) SD_route_get_size(SD_workstation_t src, SD_workstation_t dst); XBT_PUBLIC(double) SD_workstation_get_power(SD_workstation_t workstation); XBT_PUBLIC(double) SD_workstation_get_available_power(SD_workstation_t workstation); XBT_PUBLIC(e_SD_workstation_access_mode_t) SD_workstation_get_access_mode(SD_workstation_t workstation); XBT_PUBLIC(void) SD_workstation_set_access_mode(SD_workstation_t workstation, e_SD_workstation_access_mode_t access_mode); XBT_PUBLIC(double) SD_workstation_get_computation_time(SD_workstation_t workstation, double computation_amount); XBT_PUBLIC(double) SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst); XBT_PUBLIC(double) SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst); XBT_PUBLIC(double) SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t dst, double communication_amount); XBT_PUBLIC(SD_task_t) SD_workstation_get_current_task(SD_workstation_t workstation); XBT_PUBLIC(xbt_dict_t) SD_workstation_get_storage_list(SD_workstation_t workstation); /** @} */ /************************** Task handling ************************************/ /** @defgroup SD_task_management Tasks * @brief Functions for managing the tasks * * This section describes the functions for managing the tasks. * * A task is some working amount that can be executed * in parallel on several workstations. A task may depend on other * tasks, this means that the task cannot start until the other tasks are done. * Each task has a \ref e_SD_task_state_t "state" indicating whether * the task is scheduled, running, done, etc. * * @see SD_task_t, SD_task_dependency_management * @{ */ XBT_PUBLIC(SD_task_t) SD_task_create(const char *name, void *data, double amount); XBT_PUBLIC(void *) SD_task_get_data(SD_task_t task); XBT_PUBLIC(void) SD_task_set_data(SD_task_t task, void *data); XBT_PUBLIC(e_SD_task_state_t) SD_task_get_state(SD_task_t task); XBT_PUBLIC(const char *) SD_task_get_name(SD_task_t task); XBT_PUBLIC(void) SD_task_set_name(SD_task_t task, const char *name); XBT_PUBLIC(void) SD_task_set_rate(SD_task_t task, double rate); XBT_PUBLIC(void) SD_task_watch(SD_task_t task, e_SD_task_state_t state); XBT_PUBLIC(void) SD_task_unwatch(SD_task_t task, e_SD_task_state_t state); XBT_PUBLIC(double) SD_task_get_amount(SD_task_t task); XBT_PUBLIC(void) SD_task_set_amount(SD_task_t task, double amount); XBT_PUBLIC(double) SD_task_get_alpha(SD_task_t task); XBT_PUBLIC(double) SD_task_get_remaining_amount(SD_task_t task); XBT_PUBLIC(double) SD_task_get_execution_time(SD_task_t task, int workstation_nb, const SD_workstation_t * workstation_list, const double *computation_amount, const double *communication_amount); XBT_PUBLIC(int) SD_task_get_kind(SD_task_t task); XBT_PUBLIC(void) SD_task_schedule(SD_task_t task, int workstation_nb, const SD_workstation_t * workstation_list, const double *computation_amount, const double *communication_amount, double rate); XBT_PUBLIC(void) SD_task_unschedule(SD_task_t task); XBT_PUBLIC(double) SD_task_get_start_time(SD_task_t task); XBT_PUBLIC(double) SD_task_get_finish_time(SD_task_t task); XBT_PUBLIC(xbt_dynar_t) SD_task_get_parents(SD_task_t task); XBT_PUBLIC(xbt_dynar_t) SD_task_get_children(SD_task_t task); XBT_PUBLIC(int) SD_task_get_workstation_count(SD_task_t task); XBT_PUBLIC(SD_workstation_t *) SD_task_get_workstation_list(SD_task_t task); XBT_PUBLIC(void) SD_task_destroy(SD_task_t task); XBT_PUBLIC(void) SD_task_dump(SD_task_t task); XBT_PUBLIC(void) SD_task_dotty(SD_task_t task, void *out_FILE); XBT_PUBLIC(SD_task_t) SD_task_create_comp_seq(const char *name, void *data, double amount); XBT_PUBLIC(SD_task_t) SD_task_create_comp_par_amdahl(const char *name, void *data, double amount, double alpha); XBT_PUBLIC(SD_task_t) SD_task_create_comm_e2e(const char *name, void *data, double amount); XBT_PUBLIC(SD_task_t) SD_task_create_comm_par_mxn_1d_block(const char *name, void *data, double amount); XBT_PUBLIC(void) SD_task_distribute_comp_amdahl(SD_task_t task, int ws_count); XBT_PUBLIC(void) SD_task_schedulev(SD_task_t task, int count, const SD_workstation_t * list); XBT_PUBLIC(void) SD_task_schedulel(SD_task_t task, int count, ...); /** @brief A constant to use in SD_task_schedule to mean that there is no cost. * * For example, create a pure computation task (no comm) like this: * * SD_task_schedule(task, my_workstation_nb, * my_workstation_list, * my_computation_amount, * SD_TASK_SCHED_NO_COST, * my_rate); */ #define SD_SCHED_NO_COST NULL /** @} */ /** @defgroup SD_task_dependency_management Tasks dependencies * @brief Functions for managing the task dependencies * * This section describes the functions for managing the dependencies between the tasks. * * @see SD_task_management * @{ */ XBT_PUBLIC(void) SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst); XBT_PUBLIC(void) SD_task_dependency_remove(SD_task_t src, SD_task_t dst); XBT_PUBLIC(const char *) SD_task_dependency_get_name(SD_task_t src, SD_task_t dst); XBT_PUBLIC(void *) SD_task_dependency_get_data(SD_task_t src, SD_task_t dst); XBT_PUBLIC(int) SD_task_dependency_exists(SD_task_t src, SD_task_t dst); /** @} */ /************************** Global *******************************************/ /** @defgroup SD_simulation Simulation * @brief Functions for creating the environment and launching the simulation * * This section describes the functions for initialising SimDag, launching * the simulation and exiting SimDag. * * @{ */ XBT_PUBLIC(void) SD_init(int *argc, char **argv); XBT_PUBLIC(void) SD_config(const char *key, const char *value); XBT_PUBLIC(void) SD_application_reinit(void); XBT_PUBLIC(void) SD_create_environment(const char *platform_file); XBT_PUBLIC(xbt_dynar_t) SD_simulate(double how_long); XBT_PUBLIC(double) SD_get_clock(void); XBT_PUBLIC(void) SD_exit(void); XBT_PUBLIC(xbt_dynar_t) SD_daxload(const char *filename); XBT_PUBLIC(xbt_dynar_t) SD_dotload(const char *filename); XBT_PUBLIC(xbt_dynar_t) SD_PTG_dotload(const char *filename); XBT_PUBLIC(xbt_dynar_t) SD_dotload_with_sched(const char *filename); XBT_PUBLIC(void) uniq_transfer_task_name(SD_task_t task); /** @} */ #include "instr/instr.h" SG_END_DECL() #endif SimGrid-3.10/include/smpi/002750 007661 000620 00000000000 12242224150 015607 5ustar00gierschand000000 000000 SimGrid-3.10/include/smpi/smpif.h.in000640 007661 000620 00000002223 12242224150 017501 0ustar00gierschand000000 000000 /* Copyright (c) 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SMPIF_H #define SMPIF_H #cmakedefine SMPI_F2C @SMPI_F2C@ #ifdef SMPI_F2C #include #include #include XBT_PUBLIC_DATA(__thread int) smpi_current_rank; XBT_PUBLIC(int) smpi_process_argc(void); XBT_PUBLIC(int) smpi_process_getarg(integer* index, char* dst, ftnlen len); XBT_PUBLIC(int) smpi_global_size(void); #define smpi_sample_local__(pi,pt) \ { \ if(smpi_sample_1(0, __FILE__, __LINE__, *pi, *pt)) { \ smpi_sample_3(0, __FILE__, __LINE__); \ } \ if(!smpi_sample_2(0, __FILE__, __LINE__)) { \ continue; \ } \ } #define smpi_sample_global__(pi,pt) \ { \ if(smpi_sample_1(1, __FILE__, __LINE__, *pi, *pt)) { \ smpi_sample_3(1, __FILE__, __LINE__); \ } \ if(!smpi_sample_2(1, __FILE__, __LINE__)) { \ continue; \ } \ } #endif #endif // SMPI_F2C SimGrid-3.10/include/smpi/smpi_main.h000640 007661 000620 00000000256 12242224150 017736 0ustar00gierschand000000 000000 #define main smpi_windows_main__(int argc, char **argv);\ int main(int argc, char **argv){\ smpi_main(&smpi_windows_main__,argc,argv);\ return 0;\ }\ int smpi_windows_main__ SimGrid-3.10/include/smpi/smpi_cocci.h000640 007661 000620 00000006571 12242224150 020100 0ustar00gierschand000000 000000 /* Copyright (c) 2011-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SMPI_COCCI_H #define SMPI_COCCI_H #include /* Macros used by coccinelle-generated code */ #define SMPI_VARINIT_GLOBAL(name,type) \ type *name = NULL; \ void __attribute__((weak,constructor)) __preinit_##name(void) { \ if(!name) \ name = (type*)malloc(smpi_global_size() * sizeof(type)); \ } \ void __attribute__((weak,destructor)) __postfini_##name(void) { \ free(name); \ name = NULL; \ } #define SMPI_VARINIT_GLOBAL_AND_SET(name,type,expr) \ type *name = NULL; \ void __attribute__((weak,constructor)) __preinit_##name(void) { \ size_t size = smpi_global_size(); \ size_t i; \ type value = expr; \ if(!name) { \ name = (type*)malloc(size * sizeof(type)); \ for(i = 0; i < size; i++) { \ name[i] = value; \ } \ } \ } \ void __attribute__((weak,destructor)) __postfini_##name(void) { \ free(name); \ name = NULL; \ } #define SMPI_VARGET_GLOBAL(name) name[smpi_process_index()] /* The following handle local static variables */ /** @brief Make sure that the passed pointer is freed on process exit. * * This function is rather internal, mainly used for the * privatization of global variables through coccinelle. */ XBT_PUBLIC(void) smpi_register_static(void* arg, void_f_pvoid_t free_fn); XBT_PUBLIC(void) smpi_free_static(void); #define SMPI_VARINIT_STATIC(name,type) \ static type *name = NULL; \ if(!name) { \ name = (type*)malloc(smpi_global_size() * sizeof(type)); \ smpi_register_static(name, xbt_free); \ } #define SMPI_VARINIT_STATIC_AND_SET(name,type,expr) \ static type *name = NULL; \ if(!name) { \ size_t size = smpi_global_size(); \ size_t i; \ type value = expr; \ name = (type*)malloc(size * sizeof(type)); \ for(i = 0; i < size; i++) { \ name[i] = value; \ } \ smpi_register_static(name, xbt_free); \ } #define SMPI_VARGET_STATIC(name) name[smpi_process_index()] #endif SimGrid-3.10/include/smpi/smpi.h000640 007661 000620 00000116760 12242224150 016742 0ustar00gierschand000000 000000 /* Copyright (c) 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SMPI_H #define SMPI_H #include #include #include #include #ifdef _WIN32 #define MPI_CALL(type,name,args) \ type name args; \ type P##name args #else #define MPI_CALL(type,name,args) \ type name args __attribute__((weak)); \ type P##name args #endif SG_BEGIN_DECL() #define MPI_THREAD_SINGLE 0 #define MPI_THREAD_FUNNELED 1 #define MPI_THREAD_SERIALIZED 2 #define MPI_THREAD_MULTIPLE 3 //FIXME: check values #define MPI_MAX_PROCESSOR_NAME 100 #define MPI_MAX_NAME_STRING 100 #define MPI_MAX_ERROR_STRING 100 #define MPI_MAX_DATAREP_STRIN 100 #define MPI_MAX_INFO_KEY 100 #define MPI_MAX_INFO_VAL 100 #define MPI_MAX_OBJECT_NAME 100 #define MPI_MAX_PORT_NAME 100 #define MPI_MAX_LIBRARY_VERSION_STRING 100 #define SMPI_RAND_SEED 5 #define MPI_ANY_SOURCE -555 #define MPI_BOTTOM (void *)-111 #define MPI_PROC_NULL -666 #define MPI_ANY_TAG -444 #define MPI_UNDEFINED -333 #define MPI_IN_PLACE (void *)-222 // errorcodes #define MPI_SUCCESS 0 #define MPI_ERR_COMM 1 #define MPI_ERR_ARG 2 #define MPI_ERR_TYPE 3 #define MPI_ERR_REQUEST 4 #define MPI_ERR_INTERN 5 #define MPI_ERR_COUNT 6 #define MPI_ERR_RANK 7 #define MPI_ERR_TAG 8 #define MPI_ERR_TRUNCATE 9 #define MPI_ERR_GROUP 10 #define MPI_ERR_OP 11 #define MPI_ERR_OTHER 12 #define MPI_ERR_IN_STATUS 13 #define MPI_ERR_PENDING 14 #define MPI_ERR_BUFFER 15 #define MPI_ERR_NAME 16 #define MPI_ERRCODES_IGNORE (int *)0 #define MPI_IDENT 0 #define MPI_SIMILAR 1 #define MPI_UNEQUAL 2 #define MPI_CONGRUENT 3 #define MPI_WTIME_IS_GLOBAL 1 #define MPI_TAG_UB 1000000 #define MPI_HOST 0 #define MPI_IO 0 #define MPI_BSEND_OVERHEAD 0 #define MPI_KEYVAL_INVALID 0 #define MPI_NULL_COPY_FN NULL #define MPI_NULL_DELETE_FN NULL #define MPI_APPNUM 0 #define MPI_LASTUSEDCODE MPI_SUCCESS #define MPI_ERR_LASTCODE MPI_SUCCESS #define MPI_CXX_BOOL MPI_DATATYPE_NULL #define MPI_CXX_FLOAT_COMPLEX MPI_DATATYPE_NULL #define MPI_CXX_DOUBLE_COMPLEX MPI_DATATYPE_NULL #define MPI_CXX_LONG_DOUBLE_COMPLEX MPI_DATATYPE_NULL #define MPI_REAL4 MPI_DATATYPE_NULL #define MPI_REAL8 MPI_DATATYPE_NULL #define MPI_REAL16 MPI_DATATYPE_NULL #define MPI_COMPLEX8 MPI_DATATYPE_NULL #define MPI_COMPLEX16 MPI_DATATYPE_NULL #define MPI_COMPLEX32 MPI_DATATYPE_NULL #define MPI_INTEGER1 MPI_DATATYPE_NULL #define MPI_INTEGER2 MPI_DATATYPE_NULL #define MPI_INTEGER4 MPI_DATATYPE_NULL #define MPI_INTEGER8 MPI_DATATYPE_NULL #define MPI_COMPLEX MPI_DATATYPE_NULL #define MPI_DOUBLE_COMPLEX MPI_DATATYPE_NULL #define MPI_DISTRIBUTE_BLOCK 0 #define MPI_DISTRIBUTE_NONE 1 #define MPI_DISTRIBUTE_CYCLIC 2 #define MPI_DISTRIBUTE_DFLT_DARG 0 #define MPI_ORDER_C 1 #define MPI_ORDER_FORTRAN 0 #define MPI_TYPECLASS_REAL 0 #define MPI_TYPECLASS_INTEGER 1 #define MPI_TYPECLASS_COMPLEX 2 #define MPI_ROOT 0 #define MPI_INFO_NULL -1 #define MPI_COMM_TYPE_SHARED 1 #define MPI_VERSION 1 #define MPI_SUBVERSION 1 #define MPI_UNWEIGHTED (int *)0 #define MPI_ARGV_NULL (char **)0 #define MPI_ARGVS_NULL (char ***)0 #define MPI_LOCK_EXCLUSIVE 1 #define MPI_LOCK_SHARED 2 typedef enum MPIR_Combiner_enum{ MPI_COMBINER_NAMED, MPI_COMBINER_DUP, MPI_COMBINER_CONTIGUOUS, MPI_COMBINER_VECTOR, MPI_COMBINER_HVECTOR_INTEGER, MPI_COMBINER_HVECTOR, MPI_COMBINER_INDEXED, MPI_COMBINER_HINDEXED_INTEGER, MPI_COMBINER_HINDEXED, MPI_COMBINER_INDEXED_BLOCK, MPI_COMBINER_STRUCT_INTEGER, MPI_COMBINER_STRUCT, MPI_COMBINER_SUBARRAY, MPI_COMBINER_DARRAY, MPI_COMBINER_F90_REAL, MPI_COMBINER_F90_COMPLEX, MPI_COMBINER_F90_INTEGER, MPI_COMBINER_RESIZED, MPI_COMBINER_HINDEXED_BLOCK }MPIR_Combiner_enum; typedef enum MPIR_Topo_type { MPI_GRAPH=1, MPI_CART=2, MPI_DIST_GRAPH=3 } MPIR_Topo_type; typedef ptrdiff_t MPI_Aint; typedef long long MPI_Offset; struct s_smpi_mpi_datatype; typedef struct s_smpi_mpi_datatype *MPI_Datatype; typedef struct { int MPI_SOURCE; int MPI_TAG; int MPI_ERROR; int count; } MPI_Status; #define MPI_STATUS_IGNORE ((MPI_Status*)NULL) #define MPI_STATUSES_IGNORE ((MPI_Status*)NULL) #define MPI_DATATYPE_NULL ((MPI_Datatype)NULL) XBT_PUBLIC_DATA( MPI_Datatype ) MPI_CHAR; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_SHORT; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG_LONG; #define MPI_LONG_LONG_INT MPI_LONG_LONG XBT_PUBLIC_DATA( MPI_Datatype ) MPI_SIGNED_CHAR; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_CHAR; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_SHORT; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_LONG; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_LONG_LONG; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_FLOAT; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_DOUBLE; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG_DOUBLE; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_WCHAR; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_BOOL; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT8_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT16_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT32_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT64_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT8_T; #define MPI_BYTE MPI_UINT8_T XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT16_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT32_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT64_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_FLOAT_COMPLEX; #define MPI_C_COMPLEX MPI_C_FLOAT_COMPLEX XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_DOUBLE_COMPLEX; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_LONG_DOUBLE_COMPLEX; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_AINT; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_OFFSET; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LB; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UB; //The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC. XBT_PUBLIC_DATA(MPI_Datatype) MPI_FLOAT_INT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_INT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_DOUBLE_INT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_SHORT_INT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_2INT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_DOUBLE_INT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_2FLOAT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_2DOUBLE; //for now we only send int values at max #define MPI_Count int #define MPI_COUNT MPI_INT typedef void MPI_User_function(void *invec, void *inoutvec, int *len, MPI_Datatype * datatype); struct s_smpi_mpi_op; typedef struct s_smpi_mpi_op *MPI_Op; #define MPI_OP_NULL ((MPI_Op)NULL) XBT_PUBLIC_DATA( MPI_Op ) MPI_MAX; XBT_PUBLIC_DATA( MPI_Op ) MPI_MIN; XBT_PUBLIC_DATA( MPI_Op ) MPI_MAXLOC; XBT_PUBLIC_DATA( MPI_Op ) MPI_MINLOC; XBT_PUBLIC_DATA( MPI_Op ) MPI_SUM; XBT_PUBLIC_DATA( MPI_Op ) MPI_PROD; XBT_PUBLIC_DATA( MPI_Op ) MPI_LAND; XBT_PUBLIC_DATA( MPI_Op ) MPI_LOR; XBT_PUBLIC_DATA( MPI_Op ) MPI_LXOR; XBT_PUBLIC_DATA( MPI_Op ) MPI_BAND; XBT_PUBLIC_DATA( MPI_Op ) MPI_BOR; XBT_PUBLIC_DATA( MPI_Op ) MPI_BXOR; struct s_smpi_mpi_group; typedef struct s_smpi_mpi_group *MPI_Group; #define MPI_GROUP_NULL ((MPI_Group)NULL) XBT_PUBLIC_DATA( MPI_Group ) MPI_GROUP_EMPTY; struct s_smpi_mpi_communicator; typedef struct s_smpi_mpi_communicator *MPI_Comm; #define MPI_COMM_NULL ((MPI_Comm)NULL) XBT_PUBLIC_DATA( MPI_Comm ) MPI_COMM_WORLD; XBT_PUBLIC_DATA( int ) MPI_UNIVERSE_SIZE; #define MPI_COMM_SELF smpi_process_comm_self() struct s_smpi_mpi_request; typedef struct s_smpi_mpi_request *MPI_Request; #define MPI_REQUEST_NULL ((MPI_Request)NULL) #define MPI_FORTRAN_REQUEST_NULL -1 MPI_CALL(XBT_PUBLIC(int), MPI_Init, (int *argc, char ***argv)); MPI_CALL(XBT_PUBLIC(int), MPI_Finalize, (void)); MPI_CALL(XBT_PUBLIC(int), MPI_Finalized, (int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Init_thread, (int *argc, char ***argv, int required, int *provided)); MPI_CALL(XBT_PUBLIC(int), MPI_Query_thread, (int *provided)); MPI_CALL(XBT_PUBLIC(int), MPI_Is_thread_main, (int *flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Abort, (MPI_Comm comm, int errorcode)); MPI_CALL(XBT_PUBLIC(double), MPI_Wtime, (void)); MPI_CALL(XBT_PUBLIC(double), MPI_Wtick,(void)); MPI_CALL(XBT_PUBLIC(int), MPI_Address, (void *location, MPI_Aint * address)); MPI_CALL(XBT_PUBLIC(int), MPI_Get_address, (void *location, MPI_Aint * address)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_free, (MPI_Datatype * datatype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_size, (MPI_Datatype datatype, int *size)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_extent, (MPI_Datatype datatype, MPI_Aint * lb, MPI_Aint * extent)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_true_extent, (MPI_Datatype datatype, MPI_Aint * lb, MPI_Aint * extent)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_extent, (MPI_Datatype datatype, MPI_Aint * extent)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_lb, (MPI_Datatype datatype, MPI_Aint * disp)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_ub, (MPI_Datatype datatype, MPI_Aint * disp)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_commit, (MPI_Datatype* datatype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_hindexed, (int count, int* blocklens, MPI_Aint* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_hindexed, (int count, int* blocklens, MPI_Aint* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_hindexed_block, (int count, int blocklength, MPI_Aint* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_hvector, (int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_hvector, (int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_indexed, (int count, int* blocklens, int* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_indexed, (int count, int* blocklens, int* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_indexed_block, (int count, int blocklength, int* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_struct, (int count, int* blocklens, MPI_Aint* indices, MPI_Datatype* old_types, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_struct, (int count, int* blocklens, MPI_Aint* indices, MPI_Datatype* old_types, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_vector, (int count, int blocklen, int stride, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_contiguous, (int count, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Testall, (int count, MPI_Request* requests, int* flag, MPI_Status* statuses)); MPI_CALL(XBT_PUBLIC(int), MPI_Op_create, (MPI_User_function * function, int commute, MPI_Op * op)); MPI_CALL(XBT_PUBLIC(int), MPI_Op_free, (MPI_Op * op)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_free, (MPI_Group * group)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_size, (MPI_Group group, int *size)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_rank, (MPI_Group group, int *rank)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_translate_ranks, (MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_compare, (MPI_Group group1, MPI_Group group2, int *result)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_union, (MPI_Group group1, MPI_Group group2, MPI_Group * newgroup)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_intersection, (MPI_Group group1, MPI_Group group2, MPI_Group * newgroup)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_difference, (MPI_Group group1, MPI_Group group2, MPI_Group * newgroup)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_incl, (MPI_Group group, int n, int *ranks, MPI_Group * newgroup)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_excl, (MPI_Group group, int n, int *ranks, MPI_Group * newgroup)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_range_incl, (MPI_Group group, int n, int ranges[][3], MPI_Group * newgroup)); MPI_CALL(XBT_PUBLIC(int), MPI_Group_range_excl, (MPI_Group group, int n, int ranges[][3], MPI_Group * newgroup)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_rank, (MPI_Comm comm, int *rank)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_size, (MPI_Comm comm, int *size)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_name, (MPI_Comm comm, char* name, int* len)); MPI_CALL(XBT_PUBLIC(int), MPI_Get_processor_name, (char *name, int *resultlen)); MPI_CALL(XBT_PUBLIC(int), MPI_Get_count, (MPI_Status * status, MPI_Datatype datatype, int *count)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_group, (MPI_Comm comm, MPI_Group * group)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_compare, (MPI_Comm comm1, MPI_Comm comm2, int *result)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_create, (MPI_Comm comm, MPI_Group group, MPI_Comm * newcomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_free, (MPI_Comm * comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_disconnect, (MPI_Comm * comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_split, (MPI_Comm comm, int color, int key, MPI_Comm* comm_out)); MPI_CALL(XBT_PUBLIC(int), MPI_Send_init, (void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request * request)); MPI_CALL(XBT_PUBLIC(int), MPI_Recv_init, (void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request * request)); MPI_CALL(XBT_PUBLIC(int), MPI_Start, (MPI_Request * request)); MPI_CALL(XBT_PUBLIC(int), MPI_Startall, (int count, MPI_Request * requests)); MPI_CALL(XBT_PUBLIC(int), MPI_Request_free, (MPI_Request * request)); MPI_CALL(XBT_PUBLIC(int), MPI_Irecv, (void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request * request)); MPI_CALL(XBT_PUBLIC(int), MPI_Isend, (void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request * request)); MPI_CALL(XBT_PUBLIC(int), MPI_Recv, (void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Status * status)); MPI_CALL(XBT_PUBLIC(int), MPI_Send, (void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Sendrecv, (void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int src, int recvtag, MPI_Comm comm, MPI_Status * status)); MPI_CALL(XBT_PUBLIC(int), MPI_Sendrecv_replace, (void *buf, int count, MPI_Datatype datatype, int dst, int sendtag, int src, int recvtag, MPI_Comm comm, MPI_Status * status)); MPI_CALL(XBT_PUBLIC(int), MPI_Test, (MPI_Request * request, int *flag, MPI_Status* status)); MPI_CALL(XBT_PUBLIC(int), MPI_Testany, (int count, MPI_Request requests[], int *index, int *flag, MPI_Status * status)); MPI_CALL(XBT_PUBLIC(int), MPI_Wait, (MPI_Request * request, MPI_Status * status)); MPI_CALL(XBT_PUBLIC(int), MPI_Waitany, (int count, MPI_Request requests[], int *index, MPI_Status * status)); MPI_CALL(XBT_PUBLIC(int), MPI_Waitall, (int count, MPI_Request requests[], MPI_Status status[])); MPI_CALL(XBT_PUBLIC(int), MPI_Waitsome, (int incount, MPI_Request requests[], int *outcount, int *indices, MPI_Status status[])); MPI_CALL(XBT_PUBLIC(int), MPI_Testsome, (int incount, MPI_Request requests[], int *outcount, int *indices, MPI_Status status[])); MPI_CALL(XBT_PUBLIC(int), MPI_Bcast, (void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Barrier, (MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Gather, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Gatherv, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Allgather, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Allgatherv, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Scatter, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Scatterv, (void *sendbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Reduce, (void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Allreduce, (void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Scan, (void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_scatter, (void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_scatter_block, (void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Alltoall, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Alltoallv, (void *sendbuf, int *sendcounts, int *senddisps, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Iprobe, (int source, int tag, MPI_Comm comm, int* flag, MPI_Status* status)); MPI_CALL(XBT_PUBLIC(int), MPI_Probe, (int source, int tag, MPI_Comm comm, MPI_Status* status)); MPI_CALL(XBT_PUBLIC(int), MPI_Get_version, (int *version,int *subversion)); MPI_CALL(XBT_PUBLIC(int), MPI_Get_library_version, (char *version,int *len)); MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_local,(void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op)); //FIXME: these are not yet implemented typedef void MPI_Handler_function(MPI_Comm*, int*, ...); typedef int MPI_Win; typedef int MPI_Info; typedef void* MPI_Errhandler; typedef int MPI_Copy_function(MPI_Comm oldcomm, int keyval, void* extra_state, void* attribute_val_in, void* attribute_val_out, int* flag); typedef int MPI_Delete_function(MPI_Comm comm, int keyval, void* attribute_val, void* extra_state); typedef int MPI_Comm_copy_attr_function(MPI_Comm oldcomm, int keyval, void* extra_state, void* attribute_val_in, void* attribute_val_out, int* flag); typedef int MPI_Comm_delete_attr_function(MPI_Comm comm, int keyval, void* attribute_val, void* extra_state); typedef int MPI_Type_copy_attr_function(MPI_Datatype type, int keyval, void* extra_state, void* attribute_val_in, void* attribute_val_out, int* flag); typedef int MPI_Type_delete_attr_function(MPI_Datatype type, int keyval, void* attribute_val, void* extra_state); typedef void MPI_Comm_errhandler_function(MPI_Comm *, int *, ...); typedef int MPI_Grequest_query_function(void *extra_state, MPI_Status *status); typedef int MPI_Grequest_free_function(void *extra_state); typedef int MPI_Grequest_cancel_function(void *extra_state, int complete); #define MPI_DUP_FN MPI_Comm_dup #define MPI_COMM_NULL_COPY_FN ((MPI_Comm_copy_attr_function*)0) #define MPI_COMM_NULL_DELETE_FN ((MPI_Comm_delete_attr_function*)0) #define MPI_COMM_DUP_FN ((MPI_Comm_copy_attr_function *)MPI_DUP_FN) #define MPI_TYPE_NULL_COPY_FN ((MPI_Type_copy_attr_function*)0) #define MPI_TYPE_NULL_DELETE_FN ((MPI_Type_delete_attr_function*)0) #define MPI_TYPE_DUP_FN ((MPI_Type_copy_attr_function*)MPI_DUP_FN) typedef MPI_Comm_errhandler_function MPI_Comm_errhandler_fn; #define MPI_INFO_ENV 1 XBT_PUBLIC_DATA(MPI_Datatype) MPI_PACKED; XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRORS_RETURN; XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRORS_ARE_FATAL; XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRHANDLER_NULL; MPI_CALL(XBT_PUBLIC(int), MPI_Pack_size, (int incount, MPI_Datatype datatype, MPI_Comm comm, int* size)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_coords, (MPI_Comm comm, int rank, int maxdims, int* coords)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_create, (MPI_Comm comm_old, int ndims, int* dims, int* periods, int reorder, MPI_Comm* comm_cart)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_get, (MPI_Comm comm, int maxdims, int* dims, int* periods, int* coords)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_map, (MPI_Comm comm_old, int ndims, int* dims, int* periods, int* newrank)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_rank, (MPI_Comm comm, int* coords, int* rank)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_shift, (MPI_Comm comm, int direction, int displ, int* source, int* dest)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_sub, (MPI_Comm comm, int* remain_dims, MPI_Comm* comm_new)); MPI_CALL(XBT_PUBLIC(int), MPI_Cartdim_get, (MPI_Comm comm, int* ndims)); MPI_CALL(XBT_PUBLIC(int), MPI_Graph_create, (MPI_Comm comm_old, int nnodes, int* index, int* edges, int reorder, MPI_Comm* comm_graph)); MPI_CALL(XBT_PUBLIC(int), MPI_Graph_get, (MPI_Comm comm, int maxindex, int maxedges, int* index, int* edges)); MPI_CALL(XBT_PUBLIC(int), MPI_Graph_map, (MPI_Comm comm_old, int nnodes, int* index, int* edges, int* newrank)); MPI_CALL(XBT_PUBLIC(int), MPI_Graph_neighbors, (MPI_Comm comm, int rank, int maxneighbors, int* neighbors)); MPI_CALL(XBT_PUBLIC(int), MPI_Graph_neighbors_count, (MPI_Comm comm, int rank, int* nneighbors)); MPI_CALL(XBT_PUBLIC(int), MPI_Graphdims_get, (MPI_Comm comm, int* nnodes, int* nedges)); MPI_CALL(XBT_PUBLIC(int), MPI_Topo_test, (MPI_Comm comm, int* top_type)); MPI_CALL(XBT_PUBLIC(int), MPI_Error_class, (int errorcode, int* errorclass)); MPI_CALL(XBT_PUBLIC(int), MPI_Errhandler_create, (MPI_Handler_function* function, MPI_Errhandler* errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Errhandler_free, (MPI_Errhandler* errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Errhandler_get, (MPI_Comm comm, MPI_Errhandler* errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Error_string, (int errorcode, char* string, int* resultlen)); MPI_CALL(XBT_PUBLIC(int), MPI_Errhandler_set, (MPI_Comm comm, MPI_Errhandler errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_errhandler, (MPI_Comm comm, MPI_Errhandler errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_errhandler, (MPI_Comm comm, MPI_Errhandler *errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_create_errhandler,( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_call_errhandler,(MPI_Comm comm,int errorcode)); MPI_CALL(XBT_PUBLIC(int), MPI_Add_error_class,( int *errorclass)); MPI_CALL(XBT_PUBLIC(int), MPI_Add_error_code,( int errorclass, int *errorcode)); MPI_CALL(XBT_PUBLIC(int), MPI_Add_error_string,( int errorcode, char *string)); MPI_CALL(XBT_PUBLIC(int), MPI_Cancel, (MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Buffer_attach, (void* buffer, int size)); MPI_CALL(XBT_PUBLIC(int), MPI_Buffer_detach, (void* buffer, int* size)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_test_inter, (MPI_Comm comm, int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_attr, (MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_attr, (MPI_Comm comm, int comm_keyval, void *attribute_val)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_delete_attr, (MPI_Comm comm, int comm_keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_create_keyval,(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_free_keyval,(int* keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_attr, (MPI_Datatype type, int type_keyval, void *attribute_val, int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_set_attr, (MPI_Datatype type, int type_keyval, void *att)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_delete_attr, (MPI_Datatype type, int comm_keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_keyval,(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delete_attr_function* delete_fn, int* keyval, void* extra_state)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_free_keyval,(int* keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_dup,(MPI_Datatype datatype,MPI_Datatype *newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_set_name,(MPI_Datatype datatype, char * name)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_name,(MPI_Datatype datatype, char * name, int* len)); MPI_CALL(XBT_PUBLIC(int), MPI_Unpack, (void* inbuf, int insize, int* position, void* outbuf, int outcount, MPI_Datatype type, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Ssend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Ssend_init, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Intercomm_create, (MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, int remote_leader, int tag, MPI_Comm* comm_out)); MPI_CALL(XBT_PUBLIC(int), MPI_Intercomm_merge, (MPI_Comm comm, int high, MPI_Comm* comm_out)); MPI_CALL(XBT_PUBLIC(int), MPI_Bsend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Bsend_init, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Ibsend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_remote_group, (MPI_Comm comm, MPI_Group* group)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_remote_size, (MPI_Comm comm, int* size)); MPI_CALL(XBT_PUBLIC(int), MPI_Issend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Attr_delete, (MPI_Comm comm, int keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Attr_get, (MPI_Comm comm, int keyval, void* attr_value, int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Attr_put, (MPI_Comm comm, int keyval, void* attr_value)); MPI_CALL(XBT_PUBLIC(int), MPI_Rsend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Rsend_init, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Irsend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Keyval_create, (MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state)); MPI_CALL(XBT_PUBLIC(int), MPI_Keyval_free, (int* keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Test_cancelled, (MPI_Status* status, int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Pack, (void* inbuf, int incount, MPI_Datatype type, void* outbuf, int outcount, int* position, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Get_elements, (MPI_Status* status, MPI_Datatype datatype, int* elements)); MPI_CALL(XBT_PUBLIC(int), MPI_Dims_create, (int nnodes, int ndims, int* dims)); MPI_CALL(XBT_PUBLIC(int), MPI_Initialized, (int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Pcontrol, (const int level )); MPI_CALL(XBT_PUBLIC(int), MPI_Win_fence,( int assert, MPI_Win win)); MPI_CALL(XBT_PUBLIC(int), MPI_Win_free,( MPI_Win* win)); MPI_CALL(XBT_PUBLIC(int), MPI_Win_create,( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_create,( MPI_Info *info)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_set,( MPI_Info info, char *key, char *value)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_get,(MPI_Info info,char *key,int valuelen, char *value, int *flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_free,( MPI_Info *info)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_delete,( MPI_Info info, char *key)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_dup,(MPI_Info info, MPI_Info *newinfo)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_nkeys,( MPI_Info info, int *nkeys)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_nthkey,( MPI_Info info, int n, char *key)); MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_valuelen,( MPI_Info info, char *key, int *valuelen, int *flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_envelope,(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes, int *combiner)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_contents,(MPI_Datatype datatype, int max_integers, int max_addresses, int max_datatypes, int* array_of_integers, MPI_Aint* array_of_addresses, MPI_Datatype *array_of_datatypes)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_darray,(int size, int rank, int ndims, int* array_of_gsizes, int* array_of_distribs, int* array_of_dargs, int* array_of_psizes, int order, MPI_Datatype oldtype, MPI_Datatype *newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Pack_external_size, (char *datarep, int incount, MPI_Datatype datatype, MPI_Aint *size)); MPI_CALL(XBT_PUBLIC(int), MPI_Pack_external, (char *datarep, void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, MPI_Aint outcount, MPI_Aint *position)); MPI_CALL(XBT_PUBLIC(int), MPI_Unpack_external, ( char *datarep, void *inbuf, MPI_Aint insize, MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_resized ,(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_subarray,(int ndims,int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order, MPI_Datatype oldtype, MPI_Datatype *newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_match_size,(int typeclass,int size,MPI_Datatype *datatype)); MPI_CALL(XBT_PUBLIC(int), MPI_Alltoallw, ( void *sendbuf, int *sendcnts, int *sdispls, MPI_Datatype *sendtypes, void *recvbuf, int *recvcnts, int *rdispls, MPI_Datatype *recvtypes, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Exscan,(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_name, (MPI_Comm comm, char* name)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_info, (MPI_Comm comm, MPI_Info info)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_info, (MPI_Comm comm, MPI_Info* info)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_dup, (MPI_Comm comm, MPI_Comm * newcomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_dup_with_info,(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_split_type,(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_connect,( char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Request_get_status,( MPI_Request request, int *flag, MPI_Status *status)); MPI_CALL(XBT_PUBLIC(int), MPI_Grequest_start,( MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn, MPI_Grequest_cancel_function *cancel_fn, void *extra_state, MPI_Request *request)); MPI_CALL(XBT_PUBLIC(int), MPI_Grequest_complete,( MPI_Request request)); MPI_CALL(XBT_PUBLIC(int), MPI_Status_set_cancelled,(MPI_Status *status,int flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Status_set_elements,( MPI_Status *status, MPI_Datatype datatype, int count)); MPI_CALL(XBT_PUBLIC(int), MPI_Unpublish_name,( char *service_name, MPI_Info info, char *port_name)); MPI_CALL(XBT_PUBLIC(int), MPI_Publish_name,( char *service_name, MPI_Info info, char *port_name)); MPI_CALL(XBT_PUBLIC(int), MPI_Lookup_name,( char *service_name, MPI_Info info, char *port_name)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_join,( int fd, MPI_Comm *intercomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Open_port,( MPI_Info info, char *port_name)); MPI_CALL(XBT_PUBLIC(int), MPI_Close_port,( char *port_name)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_accept,( char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_spawn,( char *command, char **argv, int maxprocs, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *intercomm, int* array_of_errcodes)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_spawn_multiple,( int count, char **array_of_commands, char*** array_of_argv, int* array_of_maxprocs, MPI_Info* array_of_info, int root, MPI_Comm comm, MPI_Comm *intercomm, int* array_of_errcodes)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_parent,( MPI_Comm *parent)); //FIXME: End of all the not yet implemented stuff // smpi functions XBT_PUBLIC(MPI_Comm) smpi_process_comm_self(void); /* XBT_PUBLIC(void) smpi_exit(int); */ XBT_PUBLIC(void) smpi_execute_flops(double flops); XBT_PUBLIC(void) smpi_execute(double duration); XBT_PUBLIC(double) smpi_get_host_power_peak_at(int pstate_index); XBT_PUBLIC(double) smpi_get_host_current_power_peak(void); XBT_PUBLIC(int) smpi_get_host_nb_pstates(void); XBT_PUBLIC(void) smpi_set_host_power_peak_at(int pstate_index); XBT_PUBLIC(double) smpi_get_host_consumed_energy(void); XBT_PUBLIC(unsigned int) smpi_sleep(unsigned int secs); XBT_PUBLIC(int) smpi_gettimeofday(struct timeval *tv); XBT_PUBLIC(unsigned long long) smpi_rastro_resolution (void); XBT_PUBLIC(unsigned long long) smpi_rastro_timestamp (void); XBT_PUBLIC(void) smpi_sample_1(int global, const char *file, int line, int iters, double threshold); XBT_PUBLIC(int) smpi_sample_2(int global, const char *file, int line); XBT_PUBLIC(void) smpi_sample_3(int global, const char *file, int line); #define SMPI_SAMPLE_LOCAL(iters,thres) for(smpi_sample_1(0, __FILE__, __LINE__, iters, thres); \ smpi_sample_2(0, __FILE__, __LINE__); \ smpi_sample_3(0, __FILE__, __LINE__)) #define SMPI_SAMPLE_GLOBAL(iters,thres) for(smpi_sample_1(1, __FILE__, __LINE__, iters, thres); \ smpi_sample_2(1, __FILE__, __LINE__); \ smpi_sample_3(1, __FILE__, __LINE__)) #define SMPI_SAMPLE_DELAY(duration) for(smpi_execute(duration); 0; ) #define SMPI_SAMPLE_FLOPS(flops) for(smpi_execute_flops(flops); 0; ) XBT_PUBLIC(void *) smpi_shared_malloc(size_t size, const char *file, int line); #define SMPI_SHARED_MALLOC(size) smpi_shared_malloc(size, __FILE__, __LINE__) XBT_PUBLIC(void) smpi_shared_free(void *data); #define SMPI_SHARED_FREE(data) smpi_shared_free(data) XBT_PUBLIC(int) smpi_shared_known_call(const char* func, const char* input); XBT_PUBLIC(void*) smpi_shared_get_call(const char* func, const char* input); XBT_PUBLIC(void*) smpi_shared_set_call(const char* func, const char* input, void* data); #define SMPI_SHARED_CALL(func, input, ...) \ (smpi_shared_known_call(#func, input) ? smpi_shared_get_call(#func, input) \ : smpi_shared_set_call(#func, input, (func(__VA_ARGS__)))) /* Fortran specific stuff */ XBT_PUBLIC(int) __attribute__((weak)) smpi_simulated_main_(int argc, char** argv); XBT_PUBLIC(int) __attribute__((weak)) MAIN__(void); XBT_PUBLIC(int) smpi_main(int (*realmain) (int argc, char *argv[]),int argc, char *argv[]); XBT_PUBLIC(void) __attribute__((weak)) user_main_(void); XBT_PUBLIC(int) smpi_process_index(void); XBT_PUBLIC(void) smpi_process_init(int *argc, char ***argv); /* Trace replay specific stuff */ XBT_PUBLIC(void) smpi_replay_init(int *argc, char***argv); XBT_PUBLIC(void) smpi_action_trace_run(char *); XBT_PUBLIC(int) smpi_replay_finalize(void); SG_END_DECL() #endif SimGrid-3.10/include/smpi/mpif.h.in000640 007661 000620 00000022250 12242224150 017320 0ustar00gierschand000000 000000 ! -*- fortran -*- ! Copyright (c) 2010, 2012-2013. The SimGrid Team. ! All rights reserved. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the license (GNU LGPL) which comes with this package. ! SMPI's Fortran 77 include file integer MPI_THREAD_SINGLE, MPI_THREAD_FUNNELED integer MPI_THREAD_SERIALIZED, MPI_THREAD_MULTIPLE parameter(MPI_THREAD_SINGLE=0) parameter(MPI_THREAD_FUNNELED=1) parameter(MPI_THREAD_SERIALIZED=2) parameter(MPI_THREAD_MULTIPLE=3) integer MPI_MAX_PROCESSOR_NAME, MPI_MAX_ERROR_STRING integer MPI_MAX_DATAREP_STRIN, MPI_MAX_INFO_KEY integer MPI_MAX_INFO_VAL, MPI_MAX_OBJECT_NAME, MPI_MAX_PORT_NAME integer MPI_ANY_SOURCE, MPI_PROC_NULL, MPI_ANY_TAG, MPI_UNDEFINED integer MPI_TAG_UB, MPI_TAG_LB integer MPI_SOURCE, MPI_TAG, MPI_ERROR integer MPI_VERSION, MPI_SUBVERSION parameter(MPI_MAX_PROCESSOR_NAME=100) parameter(MPI_MAX_ERROR_STRING=100) parameter(MPI_MAX_DATAREP_STRIN =100) parameter(MPI_MAX_INFO_KEY=100) parameter(MPI_MAX_INFO_VAL=100) parameter(MPI_MAX_OBJECT_NAME=100) parameter(MPI_MAX_PORT_NAME=100) parameter(MPI_ANY_SOURCE=-555) parameter(MPI_PROC_NULL=-666) parameter(MPI_ANY_TAG=-444) parameter(MPI_UNDEFINED=-333) parameter(MPI_SOURCE=1) parameter(MPI_TAG=2) parameter(MPI_ERROR=3) parameter(MPI_TAG_UB=0) parameter(MPI_TAG_LB=0) parameter(MPI_VERSION=1) parameter(MPI_SUBVERSION=1) integer MPI_SUCCESS, MPI_ERR_COMM, MPI_ERR_ARG, MPI_ERR_TYPE integer MPI_ERR_REQUEST, MPI_ERR_INTERN, MPI_ERR_COUNT integer MPI_ERR_RANK, MPI_ERR_OTHER, MPI_ERR_UNKNOWN integer MPI_ERR_TAG, MPI_ERR_TRUNCATE, MPI_ERR_GROUP, MPI_ERR_OP integer MPI_LASTUSEDCODE, MPI_ERR_LASTCODE integer MPI_IDENT, MPI_SIMILAR, MPI_UNEQUAL, MPI_CONGRUENT integer MPI_WTIME_IS_GLOBAL parameter(MPI_SUCCESS=0) parameter(MPI_ERR_COMM=1) parameter(MPI_ERR_ARG=2) parameter(MPI_ERR_TYPE=3) parameter(MPI_ERR_REQUEST=4) parameter(MPI_ERR_INTERN=5) parameter(MPI_ERR_COUNT=6) parameter(MPI_ERR_RANK=7) parameter(MPI_ERR_TAG=8) parameter(MPI_ERR_TRUNCATE=9) parameter(MPI_ERR_GROUP=10) parameter(MPI_ERR_OP=11) parameter(MPI_ERR_OTHER=12) parameter(MPI_ERR_UNKNOWN=13) parameter(MPI_LASTUSEDCODE=0) parameter(MPI_ERR_LASTCODE=0) parameter(MPI_IDENT=0) parameter(MPI_SIMILAR=1) parameter(MPI_UNEQUAL=2) parameter(MPI_CONGRUENT=3) parameter(MPI_WTIME_IS_GLOBAL=1) integer MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN parameter(MPI_NULL_COPY_FN =0) parameter(MPI_NULL_DELETE_FN =0) integer MPI_COMM_NULL_COPY_FN, MPI_COMM_NULL_DELETE_FN parameter(MPI_COMM_NULL_COPY_FN =0) parameter(MPI_COMM_NULL_DELETE_FN =0) integer MPI_COMM_NULL_DUP_FN, MPI_COMM_DUP_FN parameter(MPI_COMM_NULL_DUP_FN =0) parameter(MPI_COMM_DUP_FN =0) integer MPI_APPNUM, MPI_HOST, MPI_IO parameter(MPI_APPNUM=0) parameter(MPI_HOST=0) parameter(MPI_IO=0) integer MPI_ROOT, MPI_INFO_NULL,MPI_COMM_TYPE_SHARED parameter(MPI_ROOT=0) parameter(MPI_INFO_NULL=-1) parameter(MPI_COMM_TYPE_SHARED=1) ! These should be ordered as in smpi_f77.c integer MPI_COMM_NULL, MPI_COMM_WORLD, MPI_COMM_SELF integer MPI_UNIVERSE_SIZE parameter(MPI_COMM_NULL=-1) parameter(MPI_COMM_SELF=-2) parameter(MPI_COMM_WORLD=0) parameter(MPI_UNIVERSE_SIZE=0) integer MPI_GROUP_NULL, MPI_GROUP_EMPTY parameter(MPI_GROUP_NULL=-1) parameter(MPI_GROUP_EMPTY=-2) integer MPI_ERRORS_RETURN, MPI_ERRORS_ARE_FATAL integer MPI_ERRHANDLER_NULL parameter(MPI_ERRORS_RETURN=0) parameter(MPI_ERRORS_ARE_FATAL=1) parameter(MPI_ERRHANDLER_NULL=2) ! This should be equal to the number of int fields in MPI_Status integer MPI_STATUS_SIZE parameter(MPI_STATUS_SIZE=4) ! These should be ordered as in smpi_f77.c integer MPI_IN_PLACE, MPI_BOTTOM integer MPI_STATUS_IGNORE, MPI_STATUSES_IGNORE common /smpi/ MPI_IN_PLACE, MPI_BOTTOM common /smpi/ MPI_STATUS_IGNORE, MPI_STATUSES_IGNORE integer MPI_REQUEST_NULL parameter(MPI_REQUEST_NULL=-1) integer MPI_INTEGER_KIND parameter(MPI_INTEGER_KIND=4) integer MPI_DATATYPE_NULL, MPI_BYTE, MPI_CHARACTER, MPI_LOGICAL integer MPI_INTEGER, MPI_INTEGER1, MPI_INTEGER2, MPI_INTEGER4 integer MPI_INTEGER8, MPI_REAL, MPI_REAL4, MPI_REAL8 integer MPI_DOUBLE_PRECISION, MPI_COMPLEX, MPI_DOUBLE_COMPLEX integer MPI_2INTEGER, MPI_LOGICAL1, MPI_LOGICAL2, MPI_LOGICAL4 integer MPI_LOGICAL8, MPI_2REAL, MPI_2DOUBLE_PRECISION integer MPI_AINT, MPI_OFFSET, MPI_COUNT integer MPI_REAL16, MPI_COMPLEX8,MPI_COMPLEX16,MPI_COMPLEX32 parameter(MPI_DATATYPE_NULL=-1) parameter(MPI_BYTE=0) parameter(MPI_CHARACTER=1) parameter(MPI_LOGICAL=2) parameter(MPI_INTEGER=3) parameter(MPI_INTEGER1=4) parameter(MPI_INTEGER2=5) parameter(MPI_INTEGER4=6) parameter(MPI_INTEGER8=7) parameter(MPI_REAL=8) parameter(MPI_REAL4=9) parameter(MPI_REAL8=10) parameter(MPI_DOUBLE_PRECISION=11) parameter(MPI_COMPLEX=12) parameter(MPI_DOUBLE_COMPLEX=13) parameter(MPI_2INTEGER=14) parameter(MPI_LOGICAL1=15) parameter(MPI_LOGICAL2=16) parameter(MPI_LOGICAL4=17) parameter(MPI_LOGICAL8=18) parameter(MPI_2REAL=19) parameter(MPI_2DOUBLE_PRECISION=19) parameter(MPI_AINT=20) parameter(MPI_OFFSET=21) parameter(MPI_COUNT=22) parameter(MPI_REAL16=23) parameter(MPI_COMPLEX8=24) parameter(MPI_COMPLEX16=25) parameter(MPI_COMPLEX32=26) ! These should be ordered as in smpi_f77.c integer MPI_OP_NULL,MPI_MAX, MPI_MIN, MPI_MAXLOC, MPI_MINLOC integer MPI_SUM, MPI_PROD, MPI_LAND, MPI_LOR, MPI_LXOR, MPI_BAND integer MPI_BOR, MPI_BXOR parameter(MPI_OP_NULL=-1) parameter(MPI_MAX=0) parameter(MPI_MIN=1) parameter(MPI_MAXLOC=2) parameter(MPI_MINLOC=3) parameter(MPI_SUM=4) parameter(MPI_PROD=5) parameter(MPI_LAND=6) parameter(MPI_LOR=7) parameter(MPI_LXOR=8) parameter(MPI_BAND=9) parameter(MPI_BOR=10) parameter(MPI_BXOR=11) INTEGER MPI_ADDRESS_KIND, MPI_OFFSET_KIND PARAMETER (MPI_ADDRESS_KIND=@MPI_ADDRESS_SIZE@) PARAMETER (MPI_OFFSET_KIND=@MPI_ADDRESS_SIZE@) INTEGER MPI_MODE_NOPRECEDE PARAMETER (MPI_MODE_NOPRECEDE=8192) integer MPI_COMBINER_NAMED, MPI_COMBINER_DUP integer MPI_COMBINER_CONTIGUOUS, MPI_COMBINER_VECTOR integer MPI_COMBINER_HVECTOR_INTEGER, MPI_COMBINER_HVECTOR integer MPI_COMBINER_INDEXED, MPI_COMBINER_HINDEXED_INTEGER integer MPI_COMBINER_HINDEXED, MPI_COMBINER_INDEXED_BLOCK integer MPI_COMBINER_STRUCT_INTEGER, MPI_COMBINER_STRUCT integer MPI_COMBINER_SUBARRAY, MPI_COMBINER_DARRAY integer MPI_COMBINER_F90_REAL, MPI_COMBINER_F90_COMPLEX integer MPI_COMBINER_F90_INTEGER, MPI_COMBINER_RESIZED integer MPI_COMBINER_HINDEXED_BLOCK parameter( MPI_COMBINER_NAMED=0) parameter( MPI_COMBINER_DUP=1) parameter( MPI_COMBINER_CONTIGUOUS=2) parameter( MPI_COMBINER_VECTOR=3) parameter( MPI_COMBINER_HVECTOR_INTEGER=4) parameter( MPI_COMBINER_HVECTOR=5) parameter( MPI_COMBINER_INDEXED=6) parameter( MPI_COMBINER_HINDEXED_INTEGER=7) parameter( MPI_COMBINER_HINDEXED=8) parameter( MPI_COMBINER_INDEXED_BLOCK=9) parameter( MPI_COMBINER_STRUCT_INTEGER=10) parameter( MPI_COMBINER_STRUCT=11) parameter( MPI_COMBINER_SUBARRAY=12) parameter( MPI_COMBINER_DARRAY=13) parameter( MPI_COMBINER_F90_REAL=14) parameter( MPI_COMBINER_F90_COMPLEX=15) parameter( MPI_COMBINER_F90_INTEGER=16) parameter( MPI_COMBINER_RESIZED=17) parameter( MPI_COMBINER_HINDEXED_BLOCK=18) integer MPI_ORDER_C, MPI_ORDER_FORTRAN parameter(MPI_ORDER_C=1) parameter(MPI_ORDER_FORTRAN=0) external MPI_INIT, MPI_FINALIZE, MPI_ABORT external MPI_COMM_RANK, MPI_COMM_SIZE, MPI_COMM_DUP, MPI_COMM_SPLIT external MPI_SEND_INIT, MPI_ISEND, MPI_SEND external MPI_RECV_INIT, MPI_IRECV, MPI_RECV external MPI_START, MPI_STARTALL external MPI_WAIT, MPI_WAITANY, MPI_WAITALL external MPI_BCAST, MPI_BARRIER, MPI_REDUCE, MPI_ALLREDUCE external MPI_SCATTER, MPI_GATHER, MPI_ALLGATHER, MPI_SCAN external MPI_ALLTOALL, MPI_GATHERV, MPI_SENDRECV external MPI_WTIME external MPI_WTICK double precision MPI_WTIME double precision MPI_WTICK external smpi_execute_flops external smpi_execute external smpi_get_host_power_peak_at external smpi_get_host_current_power_peak external smpi_get_host_nb_pstates external smpi_set_host_power_peak_at external smpi_get_host_consumed_energy double precision smpi_get_host_power_peak_at double precision smpi_get_host_current_power_peak integer smpi_get_host_nb_pstates double precision smpi_get_host_consumed_energy SimGrid-3.10/include/smpi/mpi.h000640 007661 000620 00000001000 12242224150 016533 0ustar00gierschand000000 000000 /* Copyright (c) 2010-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef MPI_H #define MPI_H #define SEED 221238 #define sleep(x) smpi_sleep(x) #define gettimeofday(x, y) smpi_gettimeofday(x) #include #include #include #include #endif SimGrid-3.10/include/simgrid_config.h.in000640 007661 000620 00000011373 12242224150 020404 0ustar00gierschand000000 000000 /* simgrid_config.h - Results of the configure made visible to user code */ /* Copyright (c) 2009-2013. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "xbt/misc.h" /* XBT_PUBLIC */ #include "xbt/dynar.h" /* sg_commandline */ #ifndef SIMGRID_PUBLIC_CONFIG_H #define SIMGRID_PUBLIC_CONFIG_H SG_BEGIN_DECL() /** Define the version numbers of the used header files. sg_version() can be used to retrieve the version of the dynamic library. But actually, if these numbers don't match, SimGrid refuses to start (so you shouldn't have to care about sg_version() yourself) */ #define SIMGRID_VERSION_MAJOR @SIMGRID_VERSION_MAJOR@ #define SIMGRID_VERSION_MINOR @SIMGRID_VERSION_MINOR@ #define SIMGRID_VERSION_PATCH @SIMGRID_VERSION_PATCH@ #define SIMGRID_VERSION_STRING "@SIMGRID_VERSION_STRING@" /* Version X.Y.Z will get version number XYZ: all digits concatenated without dots * (with Y and Z must be on two positions)*/ #define MAKE_SIMGRID_VERSION(major, minor, patch) \ (100UL * (100UL * (major) + (minor)) + (patch)) #define SIMGRID_VERSION MAKE_SIMGRID_VERSION(SIMGRID_VERSION_MAJOR, \ SIMGRID_VERSION_MINOR, \ SIMGRID_VERSION_PATCH) /** Retrieves the version numbers of the used dynamic library (so, DLL or dynlib) , while SIMGRID_VERSION_MAJOR and friends give the version numbers of the used header files */ XBT_PUBLIC(void) sg_version(int *major,int *minor,int *patch); /** Contains all the parameters we got from the command line */ XBT_PUBLIC_DATA(xbt_dynar_t) sg_cmdline; /* take care of DLL usage madness */ #ifdef _XBT_DLL_EXPORT #ifndef DLL_EXPORT #define DLL_EXPORT #endif #else #ifdef _XBT_DLL_STATIC #ifndef DLL_STATIC #define DLL_STATIC #endif #else #ifndef DLL_EXPORT #define DLL_IMPORT #endif #endif #endif #cmakedefine _XBT_WIN32 @_XBT_WIN32@ /*this variable is set if it is a windows platform*/ #cmakedefine _WIN32 @_WIN32@ /*this variable is set if it is a 32 bits windows platform*/ #cmakedefine _WIN64 @_WIN64@ /*this variable is set if it is a 64 bits windows platform*/ #cmakedefine __VISUALC__ @__VISUALC__@ #cmakedefine __BORLANDC__ @__BORLANDC__@ #ifdef _XBT_WIN32 #ifndef __GNUC__ #cmakedefine __GNUC__ @__GNUC__@ #endif #endif /* Define to 1 if you have the `mmap' function. */ #cmakedefine HAVE_MMAP @HAVE_MMAP@ /* Get the config */ #undef SIMGRID_NEED_ASPRINTF #undef SIMGRID_NEED_VASPRINTF @simgrid_need_asprintf@ @simgrid_need_vasprintf@ #include /* snprintf related functions */ /** @addtogroup XBT_str * @{ */ /** @brief print to allocated string (reimplemented when not provided by the system) * * The functions asprintf() and vasprintf() are analogues of * sprintf() and vsprintf(), except that they allocate a string large * enough to hold the output including the terminating null byte, and * return a pointer to it via the first parameter. This pointer * should be passed to free(3) to release the allocated storage when * it is no longer needed. */ #if defined(SIMGRID_NEED_ASPRINTF)||defined(DOXYGEN) XBT_PUBLIC(int) asprintf(char **ptr, const char *fmt, /*args */ ...) _XBT_GNUC_PRINTF(2, 3); #endif /** @brief print to allocated string (reimplemented when not provided by the system) * * See asprintf() */ #if defined(SIMGRID_NEED_VASPRINTF)||defined(DOXYGEN) XBT_PUBLIC(int) vasprintf(char **ptr, const char *fmt, va_list ap); #endif /** @brief print to allocated string * * Works just like vasprintf(), but returns a pointer to the newly * created string, or aborts on error. */ XBT_PUBLIC(char *) bvprintf(const char *fmt, va_list ap); /** @brief print to allocated string * * Works just like asprintf(), but returns a pointer to the newly * created string, or aborts on error. */ XBT_PUBLIC(char *) bprintf(const char *fmt, ...) _XBT_GNUC_PRINTF(1, 2); /** @} */ /* Whether mallocators were enabled in ccmake or not. */ #define MALLOCATOR_COMPILED_IN @MALLOCATOR_IS_WANTED@ /* Define if xbt contexts are based on our threads implementation or not */ #cmakedefine CONTEXT_THREADS @CONTEXT_THREADS@ /* Tracing SimGrid */ #cmakedefine HAVE_TRACING @HAVE_TRACING@ /* Jedule output */ #cmakedefine HAVE_JEDULE @HAVE_JEDULE@ /* Tracking of latency bound */ #cmakedefine HAVE_LATENCY_BOUND_TRACKING @HAVE_LATENCY_BOUND_TRACKING@ /* If __thread is available */ #cmakedefine HAVE_THREAD_LOCAL_STORAGE @HAVE_THREAD_LOCAL_STORAGE@ /* If Model-Checking support was requested */ #cmakedefine HAVE_MC @HAVE_MC@ SG_END_DECL() #endif /* SIMGRID_PUBLIC_CONFIG_H */ SimGrid-3.10/include/xbt.h000640 007661 000620 00000001573 12242224150 015612 0ustar00gierschand000000 000000 /* xbt.h - Public interface to the xbt (SimGrid's toolbox) */ /* Copyright (c) 2004-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef xbt_H #define xbt_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /* xbt_H */ SimGrid-3.10/include/msg/002750 007661 000620 00000000000 12242224150 015425 5ustar00gierschand000000 000000 SimGrid-3.10/include/msg/datatypes.h000640 007661 000620 00000014655 12242224150 017606 0ustar00gierschand000000 000000 /* Copyright (c) 2004-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef MSG_DATATYPE_H #define MSG_DATATYPE_H #include "xbt/misc.h" #include "xbt/lib.h" #include "simgrid/simix.h" #include "simgrid_config.h" // for HAVE_TRACING SG_BEGIN_DECL() /* ******************************** Mailbox ************************************ */ /** @brief Mailbox datatype * @ingroup msg_task_usage * * Object representing a communication rendez-vous point, on which * the sender finds the receiver it wants to communicate with. As a * MSG user, you will only rarely manipulate any of these objects * directly, since most of the public interface (such as * #MSG_task_send and friends) hide this object behind a string * alias. That mean that you don't provide the mailbox on which you * want to send your task, but only the name of this mailbox. */ typedef struct s_smx_rvpoint *msg_mailbox_t; /* ******************************** Environment ************************************ */ typedef struct s_as *msg_as_t; /* ******************************** Host ************************************ */ extern int MSG_HOST_LEVEL; /** @brief Host datatype. @ingroup m_host_management A location (or host) is any possible place where a process may run. Thus it is represented as a physical resource with computing capabilities, some mailboxes to enable running process to communicate with remote ones, and some private data that can be only accessed by local process. */ typedef xbt_dictelm_t msg_host_t; typedef s_xbt_dictelm_t s_msg_host_t; typedef struct msg_host_priv { xbt_swag_t vms; #ifdef MSG_USE_DEPRECATED msg_mailbox_t *mailboxes; /**< the channels */ #endif } s_msg_host_priv_t, *msg_host_priv_t; static inline msg_host_priv_t MSG_host_priv(msg_host_t host){ return (msg_host_priv_t )xbt_lib_get_level(host, MSG_HOST_LEVEL); } /* ******************************** Task ************************************ */ typedef struct simdata_task *simdata_task_t; typedef struct msg_task { char *name; /**< @brief task name if any */ simdata_task_t simdata; /**< @brief simulator data */ void *data; /**< @brief user data */ #ifdef HAVE_TRACING long long int counter; /* task unique identifier for instrumentation */ char *category; /* task category for instrumentation */ #endif } s_msg_task_t; /** @brief Task datatype. @ingroup m_task_management A task may then be defined by a computing amount, a message size and some private data. */ typedef struct msg_task *msg_task_t; /* ******************************** VM ************************************* */ typedef struct msg_vm *msg_vm_t; typedef enum { msg_vm_state_suspended, msg_vm_state_running, msg_vm_state_migrating } e_msg_vm_state_t; typedef struct msg_vm { char *name; s_xbt_swag_hookup_t all_vms_hookup; s_xbt_swag_hookup_t host_vms_hookup; xbt_dynar_t processes; e_msg_vm_state_t state; msg_host_t location; int coreAmount; } s_msg_vm_t; /* ******************************** File ************************************ */ typedef struct simdata_file *simdata_file_t; typedef struct s_msg_file_info { sg_storage_size_t size; char* mount_point; char* storageId; char* storage_type; char* content_type; } s_msg_file_info_t, *msg_file_info_t; typedef struct msg_file { char *fullname; /**< @brief file full name (path+name)*/ simdata_file_t simdata; /**< @brief simulator data */ msg_file_info_t info; } s_msg_file_t; /** @brief File datatype. * @ingroup msg_file_management * * You should consider this as an opaque object. */ typedef struct msg_file *msg_file_t; /* ******************************** Storage ************************************ */ /* TODO: PV: to comment */ extern int MSG_STORAGE_LEVEL; /** @brief Storage datatype. * @ingroup msg_storage_management * * You should consider this as an opaque object. */ typedef xbt_dictelm_t msg_storage_t; typedef s_xbt_dictelm_t s_msg_storage_t; typedef struct msg_storage_priv { // TODO PV: fill it (or not) ! void * dummy; } s_msg_storage_priv_t, *msg_storage_priv_t; /*************** Begin GPU ***************/ typedef struct simdata_gpu_task *simdata_gpu_task_t; typedef struct msg_gpu_task { char *name; /**< @brief task name if any */ simdata_gpu_task_t simdata; /**< @brief simulator data */ #ifdef HAVE_TRACING long long int counter; /* task unique identifier for instrumentation */ char *category; /* task category for instrumentation */ #endif } s_msg_gpu_task_t; /** @brief GPU task datatype. @ingroup m_task_management A task may then be defined by a computing amount, a dispatch latency and a collect latency. \see m_task_management */ typedef struct msg_gpu_task *msg_gpu_task_t; /*************** End GPU ***************/ /** * \brief @brief Communication action. * \ingroup msg_task_usage * * Object representing an ongoing communication between processes. Such beast is usually obtained by using #MSG_task_isend, #MSG_task_irecv or friends. */ typedef struct msg_comm *msg_comm_t; /** \brief Default value for an uninitialized #msg_task_t. \ingroup m_task_management */ #define MSG_TASK_UNINITIALIZED NULL /* ****************************** Process *********************************** */ /** @brief Process datatype. @ingroup m_process_management A process may be defined as a code, with some private data, executing in a location. You should not access directly to the fields of the pointed structure, but always use the provided API to interact with processes. */ typedef struct s_smx_process *msg_process_t; #ifdef MSG_USE_DEPRECATED /* Compatibility typedefs */ typedef int m_channel_t; typedef msg_gpu_task_t m_gpu_task_t; typedef msg_host_t m_host_t; typedef msg_process_t m_process_t; typedef msg_task_t m_task_t; typedef s_msg_gpu_task_t s_m_gpu_task_t; typedef s_msg_host_t s_m_host_t; typedef s_msg_task_t s_m_task_t; #endif SG_END_DECL() #endif SimGrid-3.10/include/msg/msg.h000640 007661 000620 00000056642 12242224150 016400 0ustar00gierschand000000 000000 /* Copyright (c) 2004-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef MSG_H #define MSG_H #include "xbt.h" #include "msg/datatypes.h" #include "simgrid/simix.h" #include "simgrid/platf.h" SG_BEGIN_DECL() /** @brief Return code of most MSG functions @ingroup msg_simulation @{ */ /* Keep these code as binary values: java bindings manipulate | of these values */ typedef enum { MSG_OK = 0, /**< @brief Everything is right. Keep on going this way ! */ MSG_TIMEOUT = 1, /**< @brief nothing good happened before the timer you provided elapsed */ MSG_TRANSFER_FAILURE = 2, /**< @brief There has been a problem during you task transfer. Either the network is down or the remote host has been shutdown. */ MSG_HOST_FAILURE = 4, /**< @brief System shutdown. The host on which you are running has just been rebooted. Free your datastructures and return now !*/ MSG_TASK_CANCELED = 8 /**< @brief Canceled task. This task has been canceled by somebody!*/ } msg_error_t; /** @} */ /************************** Global ******************************************/ XBT_PUBLIC(void) MSG_config(const char *key, const char *value); /** \ingroup msg_simulation * \brief Initialize the MSG internal data. * \hideinitializer * * It also check that the link-time and compile-time versions of SimGrid do * match, so you should use this version instead of the #MSG_init_nocheck * function that does the same initializations, but without this check. * * We allow to link against compiled versions that differ in the patch level. */ #define MSG_init(argc,argv) { \ int ver_major,ver_minor,ver_patch; \ sg_version(&ver_major,&ver_minor,&ver_patch); \ if ((ver_major != SIMGRID_VERSION_MAJOR) || \ (ver_minor != SIMGRID_VERSION_MINOR)) { \ fprintf(stderr,"FATAL ERROR: Your program was compiled with SimGrid version %d.%d.%d, and then linked against SimGrid %d.%d.%d. Please fix this.\n", \ SIMGRID_VERSION_MAJOR,SIMGRID_VERSION_MINOR,SIMGRID_VERSION_PATCH,ver_major,ver_minor,ver_patch); \ } \ MSG_init_nocheck(argc,argv); \ } XBT_PUBLIC(void) MSG_init_nocheck(int *argc, char **argv); XBT_PUBLIC(msg_error_t) MSG_main(void); XBT_PUBLIC(void) MSG_function_register(const char *name, xbt_main_func_t code); XBT_PUBLIC(void) MSG_function_register_default(xbt_main_func_t code); XBT_PUBLIC(xbt_main_func_t) MSG_get_registered_function(const char *name); XBT_PUBLIC(void) MSG_launch_application(const char *file); /*Bypass the parser */ XBT_PUBLIC(void) MSG_set_function(const char *host_id, const char *function_name, xbt_dynar_t arguments); XBT_PUBLIC(double) MSG_get_clock(void); XBT_PUBLIC(unsigned long int) MSG_get_sent_msg(void); /************************** Environment ***********************************/ XBT_PUBLIC(msg_as_t) MSG_environment_get_routing_root(void); XBT_PUBLIC(const char *) MSG_environment_as_get_name(msg_as_t as); XBT_PUBLIC(xbt_dict_t) MSG_environment_as_get_routing_sons(msg_as_t as); XBT_PUBLIC(const char *) MSG_environment_as_get_property_value(msg_as_t as, const char *name); XBT_PUBLIC(const char *) MSG_environment_as_get_model(msg_as_t as); XBT_PUBLIC(xbt_dynar_t) MSG_environment_as_get_hosts(msg_as_t as); /************************** File handling ***********************************/ XBT_PUBLIC(sg_storage_size_t) MSG_file_read(msg_file_t fd, sg_storage_size_t size); XBT_PUBLIC(sg_storage_size_t) MSG_file_write(msg_file_t fd, sg_storage_size_t size); XBT_PUBLIC(msg_file_t) MSG_file_open(const char* mount, const char* path, void* data); XBT_PUBLIC(void*) MSG_file_get_data(msg_file_t fd); XBT_PUBLIC(msg_error_t) MSG_file_set_data(msg_file_t fd, void * data); XBT_PUBLIC(int) MSG_file_close(msg_file_t fd); XBT_PUBLIC(sg_storage_size_t) MSG_file_get_size(msg_file_t fd); XBT_PUBLIC(void) MSG_file_dump(msg_file_t fd); XBT_PUBLIC(int) MSG_file_unlink(msg_file_t fd); XBT_PUBLIC(xbt_dict_t) MSG_file_ls(const char *mount, const char *path); XBT_PUBLIC(msg_error_t) MSG_file_seek(msg_file_t fd, sg_storage_size_t offset, int whence); XBT_PUBLIC(void) __MSG_file_get_info(msg_file_t fd); /************************** Storage handling ***********************************/ XBT_PUBLIC(msg_host_t) MSG_get_storage_by_name(const char *name); XBT_PUBLIC(const char *) MSG_storage_get_name(msg_storage_t storage); XBT_PUBLIC(sg_storage_size_t) MSG_storage_get_free_size(const char* name); XBT_PUBLIC(sg_storage_size_t) MSG_storage_get_used_size(const char* name); XBT_PUBLIC(msg_storage_t) MSG_storage_get_by_name(const char *name); XBT_PUBLIC(xbt_dict_t) MSG_storage_get_properties(msg_storage_t storage); XBT_PUBLIC(void) MSG_storage_set_property_value(msg_storage_t storage, const char *name, char *value,void_f_pvoid_t free_ctn); XBT_PUBLIC(xbt_dynar_t) MSG_storages_as_dynar(void); XBT_PUBLIC(msg_error_t) MSG_storage_set_data(msg_storage_t host, void *data); XBT_PUBLIC(void *) MSG_storage_get_data(msg_storage_t storage); XBT_PUBLIC(xbt_dict_t) MSG_storage_get_content(msg_storage_t storage); XBT_PUBLIC(sg_storage_size_t) MSG_storage_get_size(msg_storage_t storage); XBT_PUBLIC(msg_error_t) MSG_storage_file_move(msg_file_t fd, msg_host_t dest, char* mount, char* fullname); XBT_PUBLIC(msg_error_t) MSG_storage_file_rename(msg_storage_t storage, const char* src, const char* dest); /************************** AS Router handling ************************************/ XBT_PUBLIC(const char *) MSG_as_router_get_property_value(const char* asr, const char *name); XBT_PUBLIC(xbt_dict_t) MSG_as_router_get_properties(const char* asr); XBT_PUBLIC(void) MSG_as_router_set_property_value(const char* asr, const char *name, char *value,void_f_pvoid_t free_ctn); /************************** Host handling ***********************************/ XBT_PUBLIC(msg_error_t) MSG_host_set_data(msg_host_t host, void *data); XBT_PUBLIC(void *) MSG_host_get_data(msg_host_t host); XBT_PUBLIC(const char *) MSG_host_get_name(msg_host_t host); XBT_PUBLIC(msg_host_t) MSG_host_self(void); XBT_PUBLIC(int) MSG_get_host_msgload(msg_host_t host); /* int MSG_get_msgload(void); This function lacks specification; discard it */ XBT_PUBLIC(double) MSG_get_host_speed(msg_host_t h); XBT_PUBLIC(int) MSG_host_get_core_number(msg_host_t h); XBT_PUBLIC(xbt_swag_t) MSG_host_get_process_list(msg_host_t h); XBT_PUBLIC(int) MSG_host_is_avail(msg_host_t h); XBT_PUBLIC(void) __MSG_host_destroy(msg_host_priv_t host); XBT_PUBLIC(double) MSG_get_host_power_peak_at(msg_host_t h, int pstate_index); XBT_PUBLIC(double) MSG_get_host_current_power_peak(msg_host_t h); XBT_PUBLIC(int) MSG_get_host_nb_pstates(msg_host_t h); XBT_PUBLIC(void) MSG_set_host_power_peak_at(msg_host_t h, int pstate); XBT_PUBLIC(double) MSG_get_host_consumed_energy(msg_host_t h); /*property handlers*/ XBT_PUBLIC(xbt_dict_t) MSG_host_get_properties(msg_host_t host); XBT_PUBLIC(const char *) MSG_host_get_property_value(msg_host_t host, const char *name); XBT_PUBLIC(void) MSG_host_set_property_value(msg_host_t host, const char *name, char *value, void_f_pvoid_t free_ctn); XBT_PUBLIC(void) MSG_create_environment(const char *file); XBT_PUBLIC(msg_host_t) MSG_get_host_by_name(const char *name); XBT_PUBLIC(xbt_dynar_t) MSG_hosts_as_dynar(void); XBT_PUBLIC(int) MSG_get_host_number(void); XBT_PUBLIC(xbt_dict_t) MSG_host_get_storage_list(msg_host_t host); XBT_PUBLIC(xbt_dict_t) MSG_host_get_storage_content(msg_host_t host); /************************** Process handling *********************************/ XBT_PUBLIC(msg_process_t) MSG_process_create(const char *name, xbt_main_func_t code, void *data, msg_host_t host); XBT_PUBLIC(msg_process_t) MSG_process_create_with_arguments(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv); XBT_PUBLIC(msg_process_t) MSG_process_create_with_environment(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv, xbt_dict_t properties); XBT_PUBLIC(void) MSG_process_kill(msg_process_t process); XBT_PUBLIC(int) MSG_process_killall(int reset_PIDs); XBT_PUBLIC(msg_error_t) MSG_process_migrate(msg_process_t process, msg_host_t host); XBT_PUBLIC(void *) MSG_process_get_data(msg_process_t process); XBT_PUBLIC(msg_error_t) MSG_process_set_data(msg_process_t process, void *data); XBT_PUBLIC(void) MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup); XBT_PUBLIC(msg_host_t) MSG_process_get_host(msg_process_t process); XBT_PUBLIC(msg_process_t) MSG_process_from_PID(int PID); XBT_PUBLIC(int) MSG_process_get_PID(msg_process_t process); XBT_PUBLIC(int) MSG_process_get_PPID(msg_process_t process); XBT_PUBLIC(const char *) MSG_process_get_name(msg_process_t process); XBT_PUBLIC(int) MSG_process_self_PID(void); XBT_PUBLIC(int) MSG_process_self_PPID(void); XBT_PUBLIC(msg_process_t) MSG_process_self(void); XBT_PUBLIC(xbt_dynar_t) MSG_processes_as_dynar(void); XBT_PUBLIC(int) MSG_process_get_number(void); XBT_PUBLIC(msg_error_t) MSG_process_set_kill_time(msg_process_t process, double kill_time); /*property handlers*/ XBT_PUBLIC(xbt_dict_t) MSG_process_get_properties(msg_process_t process); XBT_PUBLIC(const char *) MSG_process_get_property_value(msg_process_t process, const char *name); XBT_PUBLIC(msg_error_t) MSG_process_suspend(msg_process_t process); XBT_PUBLIC(msg_error_t) MSG_process_resume(msg_process_t process); XBT_PUBLIC(int) MSG_process_is_suspended(msg_process_t process); XBT_PUBLIC(void) MSG_process_on_exit(int_f_pvoid_t fun, void *data); XBT_PUBLIC(void) MSG_process_auto_restart_set(msg_process_t process, int auto_restart); XBT_PUBLIC(msg_process_t) MSG_process_restart(msg_process_t process); /************************** Task handling ************************************/ XBT_PUBLIC(msg_task_t) MSG_task_create(const char *name, double compute_duration, double message_size, void *data); XBT_PUBLIC(msg_gpu_task_t) MSG_gpu_task_create(const char *name, double compute_duration, double dispatch_latency, double collect_latency); XBT_PUBLIC(msg_task_t) MSG_parallel_task_create(const char *name, int host_nb, const msg_host_t * host_list, double *computation_amount, double *communication_amount, void *data); XBT_PUBLIC(void *) MSG_task_get_data(msg_task_t task); XBT_PUBLIC(void) MSG_task_set_data(msg_task_t task, void *data); XBT_PUBLIC(void) MSG_task_set_copy_callback(void (*callback) ( msg_task_t task, msg_process_t src, msg_process_t dst)); XBT_PUBLIC(msg_process_t) MSG_task_get_sender(msg_task_t task); XBT_PUBLIC(msg_host_t) MSG_task_get_source(msg_task_t task); XBT_PUBLIC(const char *) MSG_task_get_name(msg_task_t task); XBT_PUBLIC(void) MSG_task_set_name(msg_task_t task, const char *name); XBT_PUBLIC(msg_error_t) MSG_task_cancel(msg_task_t task); XBT_PUBLIC(msg_error_t) MSG_task_destroy(msg_task_t task); XBT_PUBLIC(msg_error_t) MSG_task_receive_from_host(msg_task_t * task, const char *alias, msg_host_t host); XBT_PUBLIC(msg_error_t) MSG_task_receive_from_host_bounded(msg_task_t * task, const char *alias, msg_host_t host, double rate); XBT_PUBLIC(msg_error_t) MSG_task_execute(msg_task_t task); XBT_PUBLIC(msg_error_t) MSG_parallel_task_execute(msg_task_t task); XBT_PUBLIC(void) MSG_task_set_priority(msg_task_t task, double priority); XBT_PUBLIC(msg_error_t) MSG_process_sleep(double nb_sec); XBT_PUBLIC(double) MSG_task_get_compute_duration(msg_task_t task); XBT_PUBLIC(void) MSG_task_set_compute_duration(msg_task_t task, double compute_duration); XBT_PUBLIC(void) MSG_task_set_data_size(msg_task_t task, double data_size); XBT_PUBLIC(double) MSG_task_get_remaining_computation(msg_task_t task); XBT_PUBLIC(double) MSG_task_get_remaining_communication(msg_task_t task); XBT_PUBLIC(int) MSG_task_is_latency_bounded(msg_task_t task); XBT_PUBLIC(double) MSG_task_get_data_size(msg_task_t task); XBT_PUBLIC(msg_error_t) MSG_task_receive_ext(msg_task_t * task, const char *alias, double timeout, msg_host_t host); XBT_PUBLIC(msg_error_t) MSG_task_receive_with_timeout(msg_task_t * task, const char *alias, double timeout); XBT_PUBLIC(msg_error_t) MSG_task_receive(msg_task_t * task, const char *alias); #define MSG_task_recv(t,a) MSG_task_receive(t,a) XBT_PUBLIC(msg_error_t) MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, double timeout, msg_host_t host, double rate); XBT_PUBLIC(msg_error_t) MSG_task_receive_with_timeout_bounded(msg_task_t * task, const char *alias, double timeout, double rate); XBT_PUBLIC(msg_error_t) MSG_task_receive_bounded(msg_task_t * task, const char *alias,double rate); #define MSG_task_recv_bounded(t,a,r) MSG_task_receive_bounded(t,a,r) XBT_PUBLIC(msg_comm_t) MSG_task_isend(msg_task_t task, const char *alias); XBT_PUBLIC(msg_comm_t) MSG_task_isend_bounded(msg_task_t task, const char *alias, double maxrate); XBT_PUBLIC(msg_comm_t) MSG_task_isend_with_matching(msg_task_t task, const char *alias, int (*match_fun)(void*,void*, smx_action_t), void *match_data); XBT_PUBLIC(void) MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup); XBT_PUBLIC(void) MSG_task_dsend_bounded(msg_task_t task, const char *alias, void_f_pvoid_t cleanup, double maxrate); XBT_PUBLIC(msg_comm_t) MSG_task_irecv(msg_task_t * task, const char *alias); XBT_PUBLIC(msg_comm_t) MSG_task_irecv_bounded(msg_task_t * task, const char *alias, double rate); XBT_PUBLIC(int) MSG_comm_test(msg_comm_t comm); XBT_PUBLIC(int) MSG_comm_testany(xbt_dynar_t comms); XBT_PUBLIC(void) MSG_comm_destroy(msg_comm_t comm); XBT_PUBLIC(msg_error_t) MSG_comm_wait(msg_comm_t comm, double timeout); XBT_PUBLIC(void) MSG_comm_waitall(msg_comm_t * comm, int nb_elem, double timeout); XBT_PUBLIC(int) MSG_comm_waitany(xbt_dynar_t comms); XBT_PUBLIC(msg_task_t) MSG_comm_get_task(msg_comm_t comm); XBT_PUBLIC(msg_error_t) MSG_comm_get_status(msg_comm_t comm); XBT_PUBLIC(int) MSG_task_listen(const char *alias); XBT_PUBLIC(int) MSG_task_listen_from_host(const char *alias, msg_host_t host); XBT_PUBLIC(msg_error_t) MSG_task_send_with_timeout(msg_task_t task, const char *alias, double timeout); XBT_PUBLIC(msg_error_t) MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alias, double timeout, double maxrate); XBT_PUBLIC(msg_error_t) MSG_task_send(msg_task_t task, const char *alias); XBT_PUBLIC(msg_error_t) MSG_task_send_bounded(msg_task_t task, const char *alias, double rate); XBT_PUBLIC(int) MSG_task_listen_from(const char *alias); XBT_PUBLIC(void) MSG_task_set_category (msg_task_t task, const char *category); XBT_PUBLIC(const char *) MSG_task_get_category (msg_task_t task); /************************** Task handling ************************************/ XBT_PUBLIC(msg_error_t) MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t * task, msg_host_t host, double timeout); XBT_PUBLIC(msg_error_t) MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout, double rate); XBT_PUBLIC(msg_error_t) MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task, double timeout); XBT_PUBLIC(void) MSG_mailbox_set_async(const char *alias); /************************** Action handling **********************************/ XBT_PUBLIC(msg_error_t) MSG_action_trace_run(char *path); #ifdef MSG_USE_DEPRECATED typedef msg_error_t MSG_error_t; #define MSG_global_init(argc, argv) MSG_init(argc,argv) #define MSG_global_init_args(argc, argv) MSG_init(argc,argv) /* these are the functions which are deprecated. Do not use them, they may get removed in future releases */ XBT_PUBLIC(msg_host_t *) MSG_get_host_table(void); #define MSG_TIMEOUT_FAILURE MSG_TIMEOUT #define MSG_TASK_CANCELLED MSG_TASK_CANCELED #define MSG_mailbox_put_with_time_out(mailbox, task, timeout) \ MSG_mailbox_put_with_timeout(mailbox, task, timeout) #define MSG_process_change_host(h) MSG_process_migrate(MSG_process_self(),h); XBT_PUBLIC(msg_error_t) MSG_get_errno(void); XBT_PUBLIC(msg_error_t) MSG_clean(void); XBT_PUBLIC(msg_error_t) MSG_task_get(msg_task_t * task, m_channel_t channel); XBT_PUBLIC(msg_error_t) MSG_task_get_with_timeout(msg_task_t * task, m_channel_t channel, double max_duration); XBT_PUBLIC(msg_error_t) MSG_task_get_from_host(msg_task_t * task, int channel, msg_host_t host); XBT_PUBLIC(msg_error_t) MSG_task_get_ext(msg_task_t * task, int channel, double max_duration, msg_host_t host); XBT_PUBLIC(msg_error_t) MSG_task_put(msg_task_t task, msg_host_t dest, m_channel_t channel); XBT_PUBLIC(msg_error_t) MSG_task_put_bounded(msg_task_t task, msg_host_t dest, m_channel_t channel, double max_rate); XBT_PUBLIC(msg_error_t) MSG_task_put_with_timeout(msg_task_t task, msg_host_t dest, m_channel_t channel, double max_duration); XBT_PUBLIC(int) MSG_task_Iprobe(m_channel_t channel); XBT_PUBLIC(int) MSG_task_probe_from(m_channel_t channel); XBT_PUBLIC(int) MSG_task_probe_from_host(int channel, msg_host_t host); XBT_PUBLIC(msg_error_t) MSG_set_channel_number(int number); XBT_PUBLIC(int) MSG_get_channel_number(void); #endif /** @brief Opaque type representing a semaphore * @ingroup msg_synchro * @hideinitializer */ typedef struct s_smx_sem *msg_sem_t; // Yeah that's a rename of the smx_sem_t which doesnt require smx_sem_t to be declared here XBT_PUBLIC(msg_sem_t) MSG_sem_init(int initial_value); XBT_PUBLIC(void) MSG_sem_acquire(msg_sem_t sem); XBT_PUBLIC(msg_error_t) MSG_sem_acquire_timeout(msg_sem_t sem, double timeout); XBT_PUBLIC(void) MSG_sem_release(msg_sem_t sem); XBT_PUBLIC(void) MSG_sem_get_capacity(msg_sem_t sem); XBT_PUBLIC(void) MSG_sem_destroy(msg_sem_t sem); XBT_PUBLIC(int) MSG_sem_would_block(msg_sem_t sem); /** @brief Opaque type describing a Virtual Machine. * @ingroup msg_VMs * * All this is highly experimental and the interface will probably change in the future. * Please don't depend on this yet (although testing is welcomed if you feel so). * Usual lack of guaranty of any kind applies here, and is even increased. * */ /* This function should not be called directly, but rather from MSG_vm_start_from_template that does not exist yet*/ XBT_PUBLIC(msg_vm_t) MSG_vm_start(msg_host_t location, const char *name, int coreAmount); XBT_PUBLIC(int) MSG_vm_is_suspended(msg_vm_t); XBT_PUBLIC(int) MSG_vm_is_running(msg_vm_t); XBT_PUBLIC(void) MSG_vm_bind(msg_vm_t vm, msg_process_t process); XBT_PUBLIC(void) MSG_vm_unbind(msg_vm_t vm, msg_process_t process); // simple wrapper over process_kill XBT_PUBLIC(void) MSG_vm_migrate(msg_vm_t vm, msg_host_t destination); XBT_PUBLIC(void) MSG_vm_suspend(msg_vm_t vm); // \forall p in VM, MSG_process_suspend(p) // Freeze the processes XBT_PUBLIC(void) MSG_vm_resume(msg_vm_t vm); // Simulate the fact of reading the processes from disk and resuming them // \forall p in VM, MSG_process_resume(p) // unfreeze them XBT_PUBLIC(void) MSG_vm_shutdown(msg_vm_t vm); // killall XBT_PUBLIC(void) MSG_vm_reboot(msg_vm_t vm); XBT_PUBLIC(void) MSG_vm_destroy(msg_vm_t vm); XBT_PUBLIC(xbt_dynar_t) MSG_vms_as_dynar(void); /* void* MSG_process_get_property(msg_process_t, char* key) void MSG_process_set_property(msg_process_t, char* key, void* data) void MSG_vm_set_property(msg_vm_t, char* key, void* data) void MSG_vm_setMemoryUsed(msg_vm_t vm, double size); void MSG_vm_setCpuUsed(msg_vm_t vm, double inducedLoad); // inducedLoad: un pourcentage (>100 si ca charge plus d'un coeur; // <100 si c'est pas CPU intensive) // Contraintes à poser: // HOST_Power >= CpuUsedVm (\forall VM) + CpuUsedTask (\forall Task) // VM_coreAmount >= Load de toutes les tasks */ /* xbt_dynar_t MSG_vm_get_list_from_host(msg_host_t) xbt_dynar_t MSG_vm_get_list_from_hosts(msg_dynar_t) + des fonctions de filtrage sur les dynar */ #include "instr/instr.h" /* ****************************************************************************************** */ /* Used only by the bindings -- unclean pimple, please ignore if you're not writing a binding */ XBT_PUBLIC(smx_context_t) MSG_process_get_smx_ctx(msg_process_t process); /* ****************************************************************************************** */ /* TUTORIAL: New API */ /* Declare all functions for the API */ /* ****************************************************************************************** */ XBT_PUBLIC(int) MSG_new_API_fct(const char* param1, double param2); SG_END_DECL() #endif SimGrid-3.10/include/surf/002750 007661 000620 00000000000 12242224150 015616 5ustar00gierschand000000 000000 SimGrid-3.10/include/surf/surf_routing.h000640 007661 000620 00000003725 12242224150 020523 0ustar00gierschand000000 000000 /* Copyright (c) 2004-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _SURF_SURF_ROUTING_H #define _SURF_SURF_ROUTING_H #include "xbt/lib.h" #include "simgrid/platf_interface.h" XBT_PUBLIC(xbt_lib_t) host_lib; XBT_PUBLIC(int) ROUTING_HOST_LEVEL; //Routing level XBT_PUBLIC(int) SURF_CPU_LEVEL; //Surf cpu level XBT_PUBLIC(int) SURF_WKS_LEVEL; //Surf workstation level XBT_PUBLIC(int) SIMIX_HOST_LEVEL; //Simix host level XBT_PUBLIC(int) SIMIX_STORAGE_LEVEL; //Simix storage level XBT_PUBLIC(int) MSG_HOST_LEVEL; //Msg level XBT_PUBLIC(int) SD_HOST_LEVEL; //Simdag host level XBT_PUBLIC(int) SD_STORAGE_LEVEL; //Simdag storage level XBT_PUBLIC(int) COORD_HOST_LEVEL; //Coordinates level XBT_PUBLIC(int) NS3_HOST_LEVEL; //host node for ns3 XBT_PUBLIC(xbt_lib_t) link_lib; XBT_PUBLIC(int) SD_LINK_LEVEL; //Simdag level XBT_PUBLIC(int) SURF_LINK_LEVEL; //Surf level XBT_PUBLIC(int) NS3_LINK_LEVEL; //link for ns3 XBT_PUBLIC(xbt_lib_t) as_router_lib; XBT_PUBLIC(int) ROUTING_ASR_LEVEL; //Routing level XBT_PUBLIC(int) COORD_ASR_LEVEL; //Coordinates level XBT_PUBLIC(int) NS3_ASR_LEVEL; //host node for ns3 XBT_PUBLIC(int) ROUTING_PROP_ASR_LEVEL; //Properties for AS and router XBT_PUBLIC(xbt_lib_t) storage_lib; XBT_PUBLIC(int) ROUTING_STORAGE_LEVEL; //Routing storage level XBT_PUBLIC(int) ROUTING_STORAGE_HOST_LEVEL; XBT_PUBLIC(int) SURF_STORAGE_LEVEL; // Surf storage level XBT_PUBLIC(xbt_lib_t) storage_type_lib; XBT_PUBLIC(int) ROUTING_STORAGE_TYPE_LEVEL; //Routing storage_type level /* The callbacks to register for the routing to work */ void routing_AS_begin(sg_platf_AS_cbarg_t AS); void routing_AS_end(sg_platf_AS_cbarg_t AS); void routing_cluster_add_backbone(void* bb); #endif /* _SURF_SURF_H */ SimGrid-3.10/include/surf/surfxml_parse.h000640 007661 000620 00000006140 12242224150 020661 0ustar00gierschand000000 000000 /* Copyright (c) 2006-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _SURF_SURFXML_PARSE_H #define _SURF_SURFXML_PARSE_H #include /* to have FILE */ #include "xbt/misc.h" #include "xbt/function_types.h" #include "xbt/dict.h" #include "surf/simgrid_dtd.h" SG_BEGIN_DECL() XBT_PUBLIC(void) surf_parse_open(const char *file); XBT_PUBLIC(void) surf_parse_close(void); XBT_PUBLIC(void) surf_parse_init_callbacks(void); XBT_PUBLIC(void) surf_parse_reset_callbacks(void); XBT_PUBLIC(void) surf_parse_free_callbacks(void); XBT_PUBLIC(void) surf_parse_error(const char *msg,...) _XBT_GNUC_PRINTF(1,2) _XBT_GNUC_NORETURN; XBT_PUBLIC(void) surf_parse_warn(const char *msg,...) _XBT_GNUC_PRINTF(1,2); XBT_PUBLIC(double) surf_parse_get_double(const char *string); XBT_PUBLIC(int) surf_parse_get_int(const char *string); XBT_PUBLIC(double) surf_parse_get_time(const char *string); XBT_PUBLIC(double) surf_parse_get_size(const char *string); XBT_PUBLIC(double) surf_parse_get_bandwidth(const char *string); XBT_PUBLIC(double) surf_parse_get_power(const char *string); /* Prototypes of the functions offered by flex */ XBT_PUBLIC(int) surf_parse_lex(void); XBT_PUBLIC(int) surf_parse_get_lineno(void); XBT_PUBLIC(FILE *) surf_parse_get_in(void); XBT_PUBLIC(FILE *) surf_parse_get_out(void); XBT_PUBLIC(int) surf_parse_get_leng(void); XBT_PUBLIC(char *) surf_parse_get_text(void); XBT_PUBLIC(void) surf_parse_set_lineno(int line_number); XBT_PUBLIC(void) surf_parse_set_in(FILE * in_str); XBT_PUBLIC(void) surf_parse_set_out(FILE * out_str); XBT_PUBLIC(int) surf_parse_get_debug(void); XBT_PUBLIC(void) surf_parse_set_debug(int bdebug); XBT_PUBLIC(int) surf_parse_lex_destroy(void); /* What is needed to bypass the parser. */ XBT_PUBLIC_DATA(int_f_void_t) surf_parse; /* Entry-point to the parser. Set this to your function. */ /* Set of macros to make the bypassing work easier. * See examples/msg/masterslave_bypass.c for an example of use */ extern unsigned int surfxml_buffer_stack_stack_ptr; extern unsigned int surfxml_buffer_stack_stack[1024]; #define SURFXML_BUFFER_SET(key,val) do { \ AX_surfxml_##key=AX_ptr; \ strcpy(A_surfxml_##key,val); \ AX_ptr+=(int)strlen(val)+1; } while(0) #define SURFXML_BUFFER_RESET() do { \ AX_ptr = 0; \ memset(surfxml_bufferstack,0,surfxml_bufferstack_size); } while(0) #define SURFXML_START_TAG(tag) \ do{ \ surfxml_buffer_stack_stack[surfxml_buffer_stack_stack_ptr++] = AX_ptr; \ STag_surfxml_##tag(); \ }while(0) #define SURFXML_END_TAG(tag) \ do{ \ AX_ptr = surfxml_buffer_stack_stack[--surfxml_buffer_stack_stack_ptr]; \ ETag_surfxml_##tag(); \ } while(0) SG_END_DECL() #endif SimGrid-3.10/include/surf/simgrid_dtd.h000640 007661 000620 00000115524 12242224150 020267 0ustar00gierschand000000 000000 /* XML processor/application API for src/surf/simgrid.dtd. * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * * Part A * ------ * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: * * 1. The program is distributed WITHOUT ANY WARRANTY from the author of * FleXML; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. * * 2. The program distribution conditions do not in any way affect the * distribution conditions of the FleXML system used to generate this * file or any version of FleXML derived from that system. * * Notice that these are explicit rights granted to you for files * generated by the FleXML system. For your rights in connection with * the FleXML system itself please consult the GNU General Public License. * * Part B * ------ * * The other parts, here collectively called "Part B", and which came * from the DTD used by FleXML to generate this program, can be * distributed (or not, as the case may be) under the terms of whoever * wrote them, provided these terms respect and obey the two conditions * above under the heading "Part A". * * The author of and contributors to FleXML specifically disclaim * any copyright interest in "Part B", unless "Part B" was written * by the author of or contributors to FleXML. * */ #ifndef _FLEXML_simgrid_H #define _FLEXML_simgrid_H /* XML application entry points. */ XBT_PUBLIC(void) STag_surfxml_platform(void); XBT_PUBLIC(void) ETag_surfxml_platform(void); XBT_PUBLIC(void) STag_surfxml_include(void); XBT_PUBLIC(void) ETag_surfxml_include(void); XBT_PUBLIC(void) STag_surfxml_trace(void); XBT_PUBLIC(void) ETag_surfxml_trace(void); XBT_PUBLIC(void) STag_surfxml_random(void); XBT_PUBLIC(void) ETag_surfxml_random(void); XBT_PUBLIC(void) STag_surfxml_trace___connect(void); XBT_PUBLIC(void) ETag_surfxml_trace___connect(void); XBT_PUBLIC(void) STag_surfxml_AS(void); XBT_PUBLIC(void) ETag_surfxml_AS(void); XBT_PUBLIC(void) STag_surfxml_storage___type(void); XBT_PUBLIC(void) ETag_surfxml_storage___type(void); XBT_PUBLIC(void) STag_surfxml_storage(void); XBT_PUBLIC(void) ETag_surfxml_storage(void); XBT_PUBLIC(void) STag_surfxml_mount(void); XBT_PUBLIC(void) ETag_surfxml_mount(void); XBT_PUBLIC(void) STag_surfxml_mstorage(void); XBT_PUBLIC(void) ETag_surfxml_mstorage(void); XBT_PUBLIC(void) STag_surfxml_host(void); XBT_PUBLIC(void) ETag_surfxml_host(void); XBT_PUBLIC(void) STag_surfxml_gpu(void); XBT_PUBLIC(void) ETag_surfxml_gpu(void); XBT_PUBLIC(void) STag_surfxml_host___link(void); XBT_PUBLIC(void) ETag_surfxml_host___link(void); XBT_PUBLIC(void) STag_surfxml_cluster(void); XBT_PUBLIC(void) ETag_surfxml_cluster(void); XBT_PUBLIC(void) STag_surfxml_cabinet(void); XBT_PUBLIC(void) ETag_surfxml_cabinet(void); XBT_PUBLIC(void) STag_surfxml_peer(void); XBT_PUBLIC(void) ETag_surfxml_peer(void); XBT_PUBLIC(void) STag_surfxml_router(void); XBT_PUBLIC(void) ETag_surfxml_router(void); XBT_PUBLIC(void) STag_surfxml_backbone(void); XBT_PUBLIC(void) ETag_surfxml_backbone(void); XBT_PUBLIC(void) STag_surfxml_link(void); XBT_PUBLIC(void) ETag_surfxml_link(void); XBT_PUBLIC(void) STag_surfxml_route(void); XBT_PUBLIC(void) ETag_surfxml_route(void); XBT_PUBLIC(void) STag_surfxml_ASroute(void); XBT_PUBLIC(void) ETag_surfxml_ASroute(void); XBT_PUBLIC(void) STag_surfxml_link___ctn(void); XBT_PUBLIC(void) ETag_surfxml_link___ctn(void); XBT_PUBLIC(void) STag_surfxml_bypassRoute(void); XBT_PUBLIC(void) ETag_surfxml_bypassRoute(void); XBT_PUBLIC(void) STag_surfxml_bypassASroute(void); XBT_PUBLIC(void) ETag_surfxml_bypassASroute(void); XBT_PUBLIC(void) STag_surfxml_process(void); XBT_PUBLIC(void) ETag_surfxml_process(void); XBT_PUBLIC(void) STag_surfxml_argument(void); XBT_PUBLIC(void) ETag_surfxml_argument(void); XBT_PUBLIC(void) STag_surfxml_config(void); XBT_PUBLIC(void) ETag_surfxml_config(void); XBT_PUBLIC(void) STag_surfxml_prop(void); XBT_PUBLIC(void) ETag_surfxml_prop(void); /* XML application data. */ typedef int AT_surfxml_mount_name; #define AU_surfxml_mount_name NULL typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND,A_surfxml_random_generator_RNGSTREAM,A_surfxml_random_generator_NONE } AT_surfxml_random_generator; typedef int AT_surfxml_ASroute_gw___dst; #define AU_surfxml_ASroute_gw___dst NULL typedef int AT_surfxml_trace___connect_element; #define AU_surfxml_trace___connect_element NULL typedef int AT_surfxml_prop_id; #define AU_surfxml_prop_id NULL typedef int AT_surfxml_host___link_up; #define AU_surfxml_host___link_up NULL typedef int AT_surfxml_host_id; #define AU_surfxml_host_id NULL typedef enum { AU_surfxml_ASroute_symmetrical, A_surfxml_ASroute_symmetrical_YES,A_surfxml_ASroute_symmetrical_NO } AT_surfxml_ASroute_symmetrical; typedef int AT_surfxml_peer_lat; #define AU_surfxml_peer_lat NULL typedef enum { AU_surfxml_process_on___failure, A_surfxml_process_on___failure_DIE,A_surfxml_process_on___failure_RESTART } AT_surfxml_process_on___failure; typedef int AT_surfxml_link_latency___file; #define AU_surfxml_link_latency___file NULL typedef int AT_surfxml_peer_availability___file; #define AU_surfxml_peer_availability___file NULL typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction; typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,A_surfxml_host_state_OFF } AT_surfxml_host_state; typedef int AT_surfxml_AS_id; #define AU_surfxml_AS_id NULL typedef int AT_surfxml_host_power; #define AU_surfxml_host_power NULL typedef int AT_surfxml_cabinet_suffix; #define AU_surfxml_cabinet_suffix NULL typedef int AT_surfxml_gpu_name; #define AU_surfxml_gpu_name NULL typedef int AT_surfxml_router_id; #define AU_surfxml_router_id NULL typedef int AT_surfxml_storage___type_id; #define AU_surfxml_storage___type_id NULL typedef int AT_surfxml_process_start___time; #define AU_surfxml_process_start___time NULL typedef int AT_surfxml_cabinet_bw; #define AU_surfxml_cabinet_bw NULL typedef int AT_surfxml_cluster_suffix; #define AU_surfxml_cluster_suffix NULL typedef int AT_surfxml_bypassASroute_dst; #define AU_surfxml_bypassASroute_dst NULL typedef int AT_surfxml_host___link_id; #define AU_surfxml_host___link_id NULL typedef int AT_surfxml_ASroute_src; #define AU_surfxml_ASroute_src NULL typedef int AT_surfxml_cluster_prefix; #define AU_surfxml_cluster_prefix NULL typedef int AT_surfxml_cabinet_prefix; #define AU_surfxml_cabinet_prefix NULL typedef int AT_surfxml_trace_file; #define AU_surfxml_trace_file NULL typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy; typedef int AT_surfxml_storage_typeId; #define AU_surfxml_storage_typeId NULL typedef int AT_surfxml_random_min; #define AU_surfxml_random_min NULL typedef int AT_surfxml_link___ctn_id; #define AU_surfxml_link___ctn_id NULL typedef int AT_surfxml_peer_bw___out; #define AU_surfxml_peer_bw___out NULL typedef int AT_surfxml_cluster_availability___file; #define AU_surfxml_cluster_availability___file NULL typedef int AT_surfxml_storage_content; #define AU_surfxml_storage_content NULL typedef int AT_surfxml_process_kill___time; #define AU_surfxml_process_kill___time NULL typedef int AT_surfxml_cluster_bb___bw; #define AU_surfxml_cluster_bb___bw NULL typedef int AT_surfxml_host_pstate; #define AU_surfxml_host_pstate NULL typedef int AT_surfxml_argument_value; #define AU_surfxml_argument_value NULL typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,A_surfxml_link_state_OFF } AT_surfxml_link_state; typedef int AT_surfxml_cluster_loopback___bw; #define AU_surfxml_cluster_loopback___bw NULL typedef int AT_surfxml_ASroute_gw___src; #define AU_surfxml_ASroute_gw___src NULL typedef enum { AU_surfxml_AS_routing, A_surfxml_AS_routing_Full,A_surfxml_AS_routing_Floyd,A_surfxml_AS_routing_Dijkstra,A_surfxml_AS_routing_DijkstraCache,A_surfxml_AS_routing_None,A_surfxml_AS_routing_Vivaldi,A_surfxml_AS_routing_Cluster } AT_surfxml_AS_routing; typedef int AT_surfxml_link_bandwidth; #define AU_surfxml_link_bandwidth NULL typedef int AT_surfxml_cluster_id; #define AU_surfxml_cluster_id NULL typedef int AT_surfxml_peer_bw___in; #define AU_surfxml_peer_bw___in NULL typedef int AT_surfxml_random_mean; #define AU_surfxml_random_mean NULL typedef int AT_surfxml_storage___type_size; #define AU_surfxml_storage___type_size NULL typedef int AT_surfxml_cluster_bb___lat; #define AU_surfxml_cluster_bb___lat NULL typedef int AT_surfxml_link_latency; #define AU_surfxml_link_latency NULL typedef int AT_surfxml_backbone_bandwidth; #define AU_surfxml_backbone_bandwidth NULL typedef int AT_surfxml_backbone_id; #define AU_surfxml_backbone_id NULL typedef enum { AU_surfxml_trace___connect_kind, A_surfxml_trace___connect_kind_HOST___AVAIL,A_surfxml_trace___connect_kind_POWER,A_surfxml_trace___connect_kind_LINK___AVAIL,A_surfxml_trace___connect_kind_BANDWIDTH,A_surfxml_trace___connect_kind_LATENCY } AT_surfxml_trace___connect_kind; typedef int AT_surfxml_cabinet_lat; #define AU_surfxml_cabinet_lat NULL typedef int AT_surfxml_random_seed; #define AU_surfxml_random_seed NULL typedef int AT_surfxml_cluster_state___file; #define AU_surfxml_cluster_state___file NULL typedef int AT_surfxml_link_bandwidth___file; #define AU_surfxml_link_bandwidth___file NULL typedef int AT_surfxml_storage___type_content; #define AU_surfxml_storage___type_content NULL typedef enum { AU_surfxml_route_symmetrical, A_surfxml_route_symmetrical_YES,A_surfxml_route_symmetrical_NO } AT_surfxml_route_symmetrical; typedef int AT_surfxml_random_id; #define AU_surfxml_random_id NULL typedef int AT_surfxml_mstorage_name; #define AU_surfxml_mstorage_name NULL typedef int AT_surfxml_random_max; #define AU_surfxml_random_max NULL typedef int AT_surfxml_link_id; #define AU_surfxml_link_id NULL typedef int AT_surfxml_process_host; #define AU_surfxml_process_host NULL typedef int AT_surfxml_cabinet_id; #define AU_surfxml_cabinet_id NULL typedef int AT_surfxml_host_availability___file; #define AU_surfxml_host_availability___file NULL typedef int AT_surfxml_cluster_lat; #define AU_surfxml_cluster_lat NULL typedef int AT_surfxml_router_coordinates; #define AU_surfxml_router_coordinates NULL typedef int AT_surfxml_trace_periodicity; #define AU_surfxml_trace_periodicity NULL typedef enum { AU_surfxml_cluster_bb___sharing___policy, A_surfxml_cluster_bb___sharing___policy_SHARED,A_surfxml_cluster_bb___sharing___policy_FATPIPE } AT_surfxml_cluster_bb___sharing___policy; typedef int AT_surfxml_peer_state___file; #define AU_surfxml_peer_state___file NULL typedef int AT_surfxml_peer_coordinates; #define AU_surfxml_peer_coordinates NULL typedef int AT_surfxml_bypassASroute_src; #define AU_surfxml_bypassASroute_src NULL typedef int AT_surfxml_prop_value; #define AU_surfxml_prop_value NULL typedef int AT_surfxml_mstorage_typeId; #define AU_surfxml_mstorage_typeId NULL typedef int AT_surfxml_ASroute_dst; #define AU_surfxml_ASroute_dst NULL typedef int AT_surfxml_link_state___file; #define AU_surfxml_link_state___file NULL typedef int AT_surfxml_random_radical; #define AU_surfxml_random_radical NULL typedef int AT_surfxml_mount_storageId; #define AU_surfxml_mount_storageId NULL typedef int AT_surfxml_bypassASroute_gw___src; #define AU_surfxml_bypassASroute_gw___src NULL typedef int AT_surfxml_trace___connect_trace; #define AU_surfxml_trace___connect_trace NULL typedef int AT_surfxml_cluster_power; #define AU_surfxml_cluster_power NULL typedef int AT_surfxml_process_function; #define AU_surfxml_process_function NULL typedef int AT_surfxml_peer_id; #define AU_surfxml_peer_id NULL typedef int AT_surfxml_cabinet_radical; #define AU_surfxml_cabinet_radical NULL typedef int AT_surfxml_storage_content___type; #define AU_surfxml_storage_content___type NULL typedef int AT_surfxml_cluster_router___id; #define AU_surfxml_cluster_router___id NULL typedef int AT_surfxml_cluster_loopback___lat; #define AU_surfxml_cluster_loopback___lat NULL typedef enum { AU_surfxml_cluster_sharing___policy, A_surfxml_cluster_sharing___policy_SHARED,A_surfxml_cluster_sharing___policy_FULLDUPLEX,A_surfxml_cluster_sharing___policy_FATPIPE } AT_surfxml_cluster_sharing___policy; typedef int AT_surfxml_bypassRoute_dst; #define AU_surfxml_bypassRoute_dst NULL typedef int AT_surfxml_cabinet_power; #define AU_surfxml_cabinet_power NULL typedef int AT_surfxml_host_core; #define AU_surfxml_host_core NULL typedef int AT_surfxml_storage___type_model; #define AU_surfxml_storage___type_model NULL typedef int AT_surfxml_host_availability; #define AU_surfxml_host_availability NULL typedef int AT_surfxml_bypassRoute_src; #define AU_surfxml_bypassRoute_src NULL typedef int AT_surfxml_backbone_latency; #define AU_surfxml_backbone_latency NULL typedef int AT_surfxml_route_src; #define AU_surfxml_route_src NULL typedef int AT_surfxml_storage_id; #define AU_surfxml_storage_id NULL typedef int AT_surfxml_storage___type_content___type; #define AU_surfxml_storage___type_content___type NULL typedef int AT_surfxml_host_coordinates; #define AU_surfxml_host_coordinates NULL typedef int AT_surfxml_trace_id; #define AU_surfxml_trace_id NULL typedef int AT_surfxml_peer_power; #define AU_surfxml_peer_power NULL typedef int AT_surfxml_cluster_radical; #define AU_surfxml_cluster_radical NULL typedef int AT_surfxml_config_id; #define AU_surfxml_config_id NULL typedef int AT_surfxml_bypassASroute_gw___dst; #define AU_surfxml_bypassASroute_gw___dst NULL typedef int AT_surfxml_host___link_down; #define AU_surfxml_host___link_down NULL typedef int AT_surfxml_include_file; #define AU_surfxml_include_file NULL typedef int AT_surfxml_random_std___deviation; #define AU_surfxml_random_std___deviation NULL typedef int AT_surfxml_cluster_core; #define AU_surfxml_cluster_core NULL typedef int AT_surfxml_cluster_limiter___link; #define AU_surfxml_cluster_limiter___link NULL typedef int AT_surfxml_host_state___file; #define AU_surfxml_host_state___file NULL typedef int AT_surfxml_route_dst; #define AU_surfxml_route_dst NULL typedef int AT_surfxml_cluster_bw; #define AU_surfxml_cluster_bw NULL typedef int AT_surfxml_platform_version; #define AU_surfxml_platform_version NULL /* FleXML-provided data. */ XBT_PUBLIC_DATA(int) surfxml_pcdata_ix; XBT_PUBLIC_DATA(char *) surfxml_bufferstack; #define surfxml_pcdata (surfxml_bufferstack + surfxml_pcdata_ix) XBT_PUBLIC_DATA(AT_surfxml_mount_name) AX_surfxml_mount_name; #define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name) XBT_PUBLIC_DATA(short int) surfxml_mount_name_isset; XBT_PUBLIC_DATA(AT_surfxml_random_generator) AX_surfxml_random_generator; #define A_surfxml_random_generator AX_surfxml_random_generator XBT_PUBLIC_DATA(short int) surfxml_random_generator_isset; XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___dst) AX_surfxml_ASroute_gw___dst; #define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst) XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___dst_isset; XBT_PUBLIC_DATA(AT_surfxml_trace___connect_element) AX_surfxml_trace___connect_element; #define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element) XBT_PUBLIC_DATA(short int) surfxml_trace___connect_element_isset; XBT_PUBLIC_DATA(AT_surfxml_prop_id) AX_surfxml_prop_id; #define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id) XBT_PUBLIC_DATA(short int) surfxml_prop_id_isset; XBT_PUBLIC_DATA(AT_surfxml_host___link_up) AX_surfxml_host___link_up; #define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up) XBT_PUBLIC_DATA(short int) surfxml_host___link_up_isset; XBT_PUBLIC_DATA(AT_surfxml_host_id) AX_surfxml_host_id; #define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id) XBT_PUBLIC_DATA(short int) surfxml_host_id_isset; XBT_PUBLIC_DATA(AT_surfxml_ASroute_symmetrical) AX_surfxml_ASroute_symmetrical; #define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical XBT_PUBLIC_DATA(short int) surfxml_ASroute_symmetrical_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_lat) AX_surfxml_peer_lat; #define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat) XBT_PUBLIC_DATA(short int) surfxml_peer_lat_isset; XBT_PUBLIC_DATA(AT_surfxml_process_on___failure) AX_surfxml_process_on___failure; #define A_surfxml_process_on___failure AX_surfxml_process_on___failure XBT_PUBLIC_DATA(short int) surfxml_process_on___failure_isset; XBT_PUBLIC_DATA(AT_surfxml_link_latency___file) AX_surfxml_link_latency___file; #define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file) XBT_PUBLIC_DATA(short int) surfxml_link_latency___file_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_availability___file) AX_surfxml_peer_availability___file; #define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file) XBT_PUBLIC_DATA(short int) surfxml_peer_availability___file_isset; XBT_PUBLIC_DATA(AT_surfxml_link___ctn_direction) AX_surfxml_link___ctn_direction; #define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction XBT_PUBLIC_DATA(short int) surfxml_link___ctn_direction_isset; XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state; #define A_surfxml_host_state AX_surfxml_host_state XBT_PUBLIC_DATA(short int) surfxml_host_state_isset; XBT_PUBLIC_DATA(AT_surfxml_AS_id) AX_surfxml_AS_id; #define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id) XBT_PUBLIC_DATA(short int) surfxml_AS_id_isset; XBT_PUBLIC_DATA(AT_surfxml_host_power) AX_surfxml_host_power; #define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power) XBT_PUBLIC_DATA(short int) surfxml_host_power_isset; XBT_PUBLIC_DATA(AT_surfxml_cabinet_suffix) AX_surfxml_cabinet_suffix; #define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix) XBT_PUBLIC_DATA(short int) surfxml_cabinet_suffix_isset; XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name; #define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name) XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset; XBT_PUBLIC_DATA(AT_surfxml_router_id) AX_surfxml_router_id; #define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id) XBT_PUBLIC_DATA(short int) surfxml_router_id_isset; XBT_PUBLIC_DATA(AT_surfxml_storage___type_id) AX_surfxml_storage___type_id; #define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id) XBT_PUBLIC_DATA(short int) surfxml_storage___type_id_isset; XBT_PUBLIC_DATA(AT_surfxml_process_start___time) AX_surfxml_process_start___time; #define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time) XBT_PUBLIC_DATA(short int) surfxml_process_start___time_isset; XBT_PUBLIC_DATA(AT_surfxml_cabinet_bw) AX_surfxml_cabinet_bw; #define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw) XBT_PUBLIC_DATA(short int) surfxml_cabinet_bw_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_suffix) AX_surfxml_cluster_suffix; #define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix) XBT_PUBLIC_DATA(short int) surfxml_cluster_suffix_isset; XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_dst) AX_surfxml_bypassASroute_dst; #define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst) XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_dst_isset; XBT_PUBLIC_DATA(AT_surfxml_host___link_id) AX_surfxml_host___link_id; #define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id) XBT_PUBLIC_DATA(short int) surfxml_host___link_id_isset; XBT_PUBLIC_DATA(AT_surfxml_ASroute_src) AX_surfxml_ASroute_src; #define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src) XBT_PUBLIC_DATA(short int) surfxml_ASroute_src_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_prefix) AX_surfxml_cluster_prefix; #define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix) XBT_PUBLIC_DATA(short int) surfxml_cluster_prefix_isset; XBT_PUBLIC_DATA(AT_surfxml_cabinet_prefix) AX_surfxml_cabinet_prefix; #define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix) XBT_PUBLIC_DATA(short int) surfxml_cabinet_prefix_isset; XBT_PUBLIC_DATA(AT_surfxml_trace_file) AX_surfxml_trace_file; #define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file) XBT_PUBLIC_DATA(short int) surfxml_trace_file_isset; XBT_PUBLIC_DATA(AT_surfxml_link_sharing___policy) AX_surfxml_link_sharing___policy; #define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy XBT_PUBLIC_DATA(short int) surfxml_link_sharing___policy_isset; XBT_PUBLIC_DATA(AT_surfxml_storage_typeId) AX_surfxml_storage_typeId; #define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId) XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset; XBT_PUBLIC_DATA(AT_surfxml_random_min) AX_surfxml_random_min; #define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min) XBT_PUBLIC_DATA(short int) surfxml_random_min_isset; XBT_PUBLIC_DATA(AT_surfxml_link___ctn_id) AX_surfxml_link___ctn_id; #define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id) XBT_PUBLIC_DATA(short int) surfxml_link___ctn_id_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_bw___out) AX_surfxml_peer_bw___out; #define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out) XBT_PUBLIC_DATA(short int) surfxml_peer_bw___out_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_availability___file) AX_surfxml_cluster_availability___file; #define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file) XBT_PUBLIC_DATA(short int) surfxml_cluster_availability___file_isset; XBT_PUBLIC_DATA(AT_surfxml_storage_content) AX_surfxml_storage_content; #define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content) XBT_PUBLIC_DATA(short int) surfxml_storage_content_isset; XBT_PUBLIC_DATA(AT_surfxml_process_kill___time) AX_surfxml_process_kill___time; #define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time) XBT_PUBLIC_DATA(short int) surfxml_process_kill___time_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___bw) AX_surfxml_cluster_bb___bw; #define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw) XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___bw_isset; XBT_PUBLIC_DATA(AT_surfxml_host_pstate) AX_surfxml_host_pstate; #define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate) XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset; XBT_PUBLIC_DATA(AT_surfxml_argument_value) AX_surfxml_argument_value; #define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value) XBT_PUBLIC_DATA(short int) surfxml_argument_value_isset; XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state; #define A_surfxml_link_state AX_surfxml_link_state XBT_PUBLIC_DATA(short int) surfxml_link_state_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___bw) AX_surfxml_cluster_loopback___bw; #define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw) XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___bw_isset; XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___src) AX_surfxml_ASroute_gw___src; #define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src) XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___src_isset; XBT_PUBLIC_DATA(AT_surfxml_AS_routing) AX_surfxml_AS_routing; #define A_surfxml_AS_routing AX_surfxml_AS_routing XBT_PUBLIC_DATA(short int) surfxml_AS_routing_isset; XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth) AX_surfxml_link_bandwidth; #define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth) XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_id) AX_surfxml_cluster_id; #define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id) XBT_PUBLIC_DATA(short int) surfxml_cluster_id_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_bw___in) AX_surfxml_peer_bw___in; #define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in) XBT_PUBLIC_DATA(short int) surfxml_peer_bw___in_isset; XBT_PUBLIC_DATA(AT_surfxml_random_mean) AX_surfxml_random_mean; #define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean) XBT_PUBLIC_DATA(short int) surfxml_random_mean_isset; XBT_PUBLIC_DATA(AT_surfxml_storage___type_size) AX_surfxml_storage___type_size; #define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size) XBT_PUBLIC_DATA(short int) surfxml_storage___type_size_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___lat) AX_surfxml_cluster_bb___lat; #define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat) XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___lat_isset; XBT_PUBLIC_DATA(AT_surfxml_link_latency) AX_surfxml_link_latency; #define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency) XBT_PUBLIC_DATA(short int) surfxml_link_latency_isset; XBT_PUBLIC_DATA(AT_surfxml_backbone_bandwidth) AX_surfxml_backbone_bandwidth; #define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth) XBT_PUBLIC_DATA(short int) surfxml_backbone_bandwidth_isset; XBT_PUBLIC_DATA(AT_surfxml_backbone_id) AX_surfxml_backbone_id; #define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id) XBT_PUBLIC_DATA(short int) surfxml_backbone_id_isset; XBT_PUBLIC_DATA(AT_surfxml_trace___connect_kind) AX_surfxml_trace___connect_kind; #define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind XBT_PUBLIC_DATA(short int) surfxml_trace___connect_kind_isset; XBT_PUBLIC_DATA(AT_surfxml_cabinet_lat) AX_surfxml_cabinet_lat; #define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat) XBT_PUBLIC_DATA(short int) surfxml_cabinet_lat_isset; XBT_PUBLIC_DATA(AT_surfxml_random_seed) AX_surfxml_random_seed; #define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed) XBT_PUBLIC_DATA(short int) surfxml_random_seed_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_state___file) AX_surfxml_cluster_state___file; #define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file) XBT_PUBLIC_DATA(short int) surfxml_cluster_state___file_isset; XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth___file) AX_surfxml_link_bandwidth___file; #define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file) XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth___file_isset; XBT_PUBLIC_DATA(AT_surfxml_storage___type_content) AX_surfxml_storage___type_content; #define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content) XBT_PUBLIC_DATA(short int) surfxml_storage___type_content_isset; XBT_PUBLIC_DATA(AT_surfxml_route_symmetrical) AX_surfxml_route_symmetrical; #define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical XBT_PUBLIC_DATA(short int) surfxml_route_symmetrical_isset; XBT_PUBLIC_DATA(AT_surfxml_random_id) AX_surfxml_random_id; #define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id) XBT_PUBLIC_DATA(short int) surfxml_random_id_isset; XBT_PUBLIC_DATA(AT_surfxml_mstorage_name) AX_surfxml_mstorage_name; #define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name) XBT_PUBLIC_DATA(short int) surfxml_mstorage_name_isset; XBT_PUBLIC_DATA(AT_surfxml_random_max) AX_surfxml_random_max; #define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max) XBT_PUBLIC_DATA(short int) surfxml_random_max_isset; XBT_PUBLIC_DATA(AT_surfxml_link_id) AX_surfxml_link_id; #define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id) XBT_PUBLIC_DATA(short int) surfxml_link_id_isset; XBT_PUBLIC_DATA(AT_surfxml_process_host) AX_surfxml_process_host; #define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host) XBT_PUBLIC_DATA(short int) surfxml_process_host_isset; XBT_PUBLIC_DATA(AT_surfxml_cabinet_id) AX_surfxml_cabinet_id; #define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id) XBT_PUBLIC_DATA(short int) surfxml_cabinet_id_isset; XBT_PUBLIC_DATA(AT_surfxml_host_availability___file) AX_surfxml_host_availability___file; #define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file) XBT_PUBLIC_DATA(short int) surfxml_host_availability___file_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_lat) AX_surfxml_cluster_lat; #define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat) XBT_PUBLIC_DATA(short int) surfxml_cluster_lat_isset; XBT_PUBLIC_DATA(AT_surfxml_router_coordinates) AX_surfxml_router_coordinates; #define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates) XBT_PUBLIC_DATA(short int) surfxml_router_coordinates_isset; XBT_PUBLIC_DATA(AT_surfxml_trace_periodicity) AX_surfxml_trace_periodicity; #define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity) XBT_PUBLIC_DATA(short int) surfxml_trace_periodicity_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___sharing___policy) AX_surfxml_cluster_bb___sharing___policy; #define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___sharing___policy_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_state___file) AX_surfxml_peer_state___file; #define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file) XBT_PUBLIC_DATA(short int) surfxml_peer_state___file_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_coordinates) AX_surfxml_peer_coordinates; #define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates) XBT_PUBLIC_DATA(short int) surfxml_peer_coordinates_isset; XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_src) AX_surfxml_bypassASroute_src; #define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src) XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_src_isset; XBT_PUBLIC_DATA(AT_surfxml_prop_value) AX_surfxml_prop_value; #define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value) XBT_PUBLIC_DATA(short int) surfxml_prop_value_isset; XBT_PUBLIC_DATA(AT_surfxml_mstorage_typeId) AX_surfxml_mstorage_typeId; #define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId) XBT_PUBLIC_DATA(short int) surfxml_mstorage_typeId_isset; XBT_PUBLIC_DATA(AT_surfxml_ASroute_dst) AX_surfxml_ASroute_dst; #define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst) XBT_PUBLIC_DATA(short int) surfxml_ASroute_dst_isset; XBT_PUBLIC_DATA(AT_surfxml_link_state___file) AX_surfxml_link_state___file; #define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file) XBT_PUBLIC_DATA(short int) surfxml_link_state___file_isset; XBT_PUBLIC_DATA(AT_surfxml_random_radical) AX_surfxml_random_radical; #define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical) XBT_PUBLIC_DATA(short int) surfxml_random_radical_isset; XBT_PUBLIC_DATA(AT_surfxml_mount_storageId) AX_surfxml_mount_storageId; #define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId) XBT_PUBLIC_DATA(short int) surfxml_mount_storageId_isset; XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___src) AX_surfxml_bypassASroute_gw___src; #define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src) XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___src_isset; XBT_PUBLIC_DATA(AT_surfxml_trace___connect_trace) AX_surfxml_trace___connect_trace; #define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace) XBT_PUBLIC_DATA(short int) surfxml_trace___connect_trace_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_power) AX_surfxml_cluster_power; #define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power) XBT_PUBLIC_DATA(short int) surfxml_cluster_power_isset; XBT_PUBLIC_DATA(AT_surfxml_process_function) AX_surfxml_process_function; #define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function) XBT_PUBLIC_DATA(short int) surfxml_process_function_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_id) AX_surfxml_peer_id; #define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id) XBT_PUBLIC_DATA(short int) surfxml_peer_id_isset; XBT_PUBLIC_DATA(AT_surfxml_cabinet_radical) AX_surfxml_cabinet_radical; #define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical) XBT_PUBLIC_DATA(short int) surfxml_cabinet_radical_isset; XBT_PUBLIC_DATA(AT_surfxml_storage_content___type) AX_surfxml_storage_content___type; #define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type) XBT_PUBLIC_DATA(short int) surfxml_storage_content___type_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_router___id) AX_surfxml_cluster_router___id; #define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id) XBT_PUBLIC_DATA(short int) surfxml_cluster_router___id_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___lat) AX_surfxml_cluster_loopback___lat; #define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat) XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___lat_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_sharing___policy) AX_surfxml_cluster_sharing___policy; #define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy XBT_PUBLIC_DATA(short int) surfxml_cluster_sharing___policy_isset; XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_dst) AX_surfxml_bypassRoute_dst; #define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst) XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_dst_isset; XBT_PUBLIC_DATA(AT_surfxml_cabinet_power) AX_surfxml_cabinet_power; #define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power) XBT_PUBLIC_DATA(short int) surfxml_cabinet_power_isset; XBT_PUBLIC_DATA(AT_surfxml_host_core) AX_surfxml_host_core; #define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core) XBT_PUBLIC_DATA(short int) surfxml_host_core_isset; XBT_PUBLIC_DATA(AT_surfxml_storage___type_model) AX_surfxml_storage___type_model; #define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model) XBT_PUBLIC_DATA(short int) surfxml_storage___type_model_isset; XBT_PUBLIC_DATA(AT_surfxml_host_availability) AX_surfxml_host_availability; #define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability) XBT_PUBLIC_DATA(short int) surfxml_host_availability_isset; XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_src) AX_surfxml_bypassRoute_src; #define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src) XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_src_isset; XBT_PUBLIC_DATA(AT_surfxml_backbone_latency) AX_surfxml_backbone_latency; #define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency) XBT_PUBLIC_DATA(short int) surfxml_backbone_latency_isset; XBT_PUBLIC_DATA(AT_surfxml_route_src) AX_surfxml_route_src; #define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src) XBT_PUBLIC_DATA(short int) surfxml_route_src_isset; XBT_PUBLIC_DATA(AT_surfxml_storage_id) AX_surfxml_storage_id; #define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id) XBT_PUBLIC_DATA(short int) surfxml_storage_id_isset; XBT_PUBLIC_DATA(AT_surfxml_storage___type_content___type) AX_surfxml_storage___type_content___type; #define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type) XBT_PUBLIC_DATA(short int) surfxml_storage___type_content___type_isset; XBT_PUBLIC_DATA(AT_surfxml_host_coordinates) AX_surfxml_host_coordinates; #define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates) XBT_PUBLIC_DATA(short int) surfxml_host_coordinates_isset; XBT_PUBLIC_DATA(AT_surfxml_trace_id) AX_surfxml_trace_id; #define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id) XBT_PUBLIC_DATA(short int) surfxml_trace_id_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_power) AX_surfxml_peer_power; #define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power) XBT_PUBLIC_DATA(short int) surfxml_peer_power_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_radical) AX_surfxml_cluster_radical; #define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical) XBT_PUBLIC_DATA(short int) surfxml_cluster_radical_isset; XBT_PUBLIC_DATA(AT_surfxml_config_id) AX_surfxml_config_id; #define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id) XBT_PUBLIC_DATA(short int) surfxml_config_id_isset; XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___dst) AX_surfxml_bypassASroute_gw___dst; #define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst) XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___dst_isset; XBT_PUBLIC_DATA(AT_surfxml_host___link_down) AX_surfxml_host___link_down; #define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down) XBT_PUBLIC_DATA(short int) surfxml_host___link_down_isset; XBT_PUBLIC_DATA(AT_surfxml_include_file) AX_surfxml_include_file; #define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file) XBT_PUBLIC_DATA(short int) surfxml_include_file_isset; XBT_PUBLIC_DATA(AT_surfxml_random_std___deviation) AX_surfxml_random_std___deviation; #define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation) XBT_PUBLIC_DATA(short int) surfxml_random_std___deviation_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_core) AX_surfxml_cluster_core; #define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core) XBT_PUBLIC_DATA(short int) surfxml_cluster_core_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_limiter___link) AX_surfxml_cluster_limiter___link; #define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link) XBT_PUBLIC_DATA(short int) surfxml_cluster_limiter___link_isset; XBT_PUBLIC_DATA(AT_surfxml_host_state___file) AX_surfxml_host_state___file; #define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file) XBT_PUBLIC_DATA(short int) surfxml_host_state___file_isset; XBT_PUBLIC_DATA(AT_surfxml_route_dst) AX_surfxml_route_dst; #define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst) XBT_PUBLIC_DATA(short int) surfxml_route_dst_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_bw) AX_surfxml_cluster_bw; #define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw) XBT_PUBLIC_DATA(short int) surfxml_cluster_bw_isset; XBT_PUBLIC_DATA(AT_surfxml_platform_version) AX_surfxml_platform_version; #define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version) XBT_PUBLIC_DATA(short int) surfxml_platform_version_isset; /* XML application utilities. */ XBT_PUBLIC(int) surfxml_element_context(int); /* XML processor entry point. */ XBT_PUBLIC(int) yylex(void); /* Flexml error handling function (useful only when -q flag passed to flexml) */ const char * surfxml_parse_err_msg(void); #endif SimGrid-3.10/include/xbt/002750 007661 000620 00000000000 12242224151 015435 5ustar00gierschand000000 000000 SimGrid-3.10/include/xbt/module.h000640 007661 000620 00000001141 12242224150 017066 0ustar00gierschand000000 000000 /* module - modularize the code */ /* Copyright (c) 2004-2007, 2009-2010, 2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_MODULE_H #define _XBT_MODULE_H #include /* XBT_PUBLIC */ XBT_PUBLIC(void) xbt_init(int *argc, char **argv); XBT_PUBLIC(void) xbt_exit(void); #endif /* _XBT_MODULE_H */ SimGrid-3.10/include/xbt/replay.h000640 007661 000620 00000002765 12242224150 017112 0ustar00gierschand000000 000000 /* xbt/replay_reader.h -- Tools to parse a replay file */ /* Copyright (c) 2010, 2012-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_REPLAY_H #define XBT_REPLAY_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ SG_BEGIN_DECL() typedef struct s_replay_reader *xbt_replay_reader_t; typedef void (*action_fun) (const char *const *args); XBT_PUBLIC_DATA(xbt_dict_t) action_funs; XBT_PUBLIC_DATA(xbt_dict_t) action_queues; /* To split the file if a unique one is given (specific variable for the other case live in runner()) */ XBT_PUBLIC_DATA(FILE *) action_fp; XBT_PUBLIC(xbt_replay_reader_t) xbt_replay_reader_new(const char*filename); XBT_PUBLIC(const char **) xbt_replay_reader_get(xbt_replay_reader_t reader); XBT_PUBLIC(void) xbt_replay_reader_free(xbt_replay_reader_t *reader); XBT_PUBLIC(const char *) xbt_replay_reader_position(xbt_replay_reader_t reader); XBT_PUBLIC(int) xbt_replay_action_runner(int argc, char *argv[]); XBT_PUBLIC(void) _xbt_replay_action_init(void); XBT_PUBLIC(void) _xbt_replay_action_exit(void); XBT_PUBLIC(void) xbt_replay_action_register(const char *action_name, action_fun function); XBT_PUBLIC(void) xbt_replay_action_unregister(const char *action_name); SG_END_DECL() #endif /* XBT_REPLAY_H */ SimGrid-3.10/include/xbt/peer.h000640 007661 000620 00000002373 12242224150 016544 0ustar00gierschand000000 000000 /* peer.h - peer (remote processes) management functions */ /* Copyright (c) 2006-2007, 2009-2010, 2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_PEER_H #define XBT_PEER_H #include "xbt/misc.h" SG_BEGIN_DECL() /** @addtogroup XBT_peer * \brief Helper functions to manipulate remote hosts * * This module simply introduces some rather trivial functions to manipulate remote host denomination (in the form hostname:port) * * @{ */ /** @brief Object describing a remote host (as name:port) */ typedef struct s_xbt_peer *xbt_peer_t; /** @brief Structure describing a remote host (as name:port) */ typedef struct s_xbt_peer { char *name; int port; } s_xbt_peer_t; XBT_PUBLIC(xbt_peer_t) xbt_peer_new(const char *name, int port); XBT_PUBLIC(xbt_peer_t) xbt_peer_from_string(const char *peerport); XBT_PUBLIC(xbt_peer_t) xbt_peer_copy(xbt_peer_t h); XBT_PUBLIC(void) xbt_peer_free(xbt_peer_t peer); XBT_PUBLIC(void) xbt_peer_free_voidp(void *d); /** @} */ SG_END_DECL() #endif /* XBT_PEER_H */ SimGrid-3.10/include/xbt/ex.h000640 007661 000620 00000053612 12242224150 016227 0ustar00gierschand000000 000000 /* ex - Exception Handling */ /* Copyright (c) 2005-2013. The SimGrid Team. */ /* Copyright (c) 2002-2004 Ralf S. Engelschall */ /* Copyright (c) 2002-2004 The OSSP Project */ /* Copyright (c) 2002-2004 Cable & Wireless */ /* All rights reserved. */ /* This code is inspirated from the OSSP version (as retrieved back in 2004)*/ /* It was heavily modified to fit the SimGrid framework. */ /* The OSSP version has the following copyright notice: ** OSSP ex - Exception Handling ** Copyright (c) 2002-2004 Ralf S. Engelschall ** Copyright (c) 2002-2004 The OSSP Project ** Copyright (c) 2002-2004 Cable & Wireless ** ** This file is part of OSSP ex, an exception handling library ** which can be found at http://www.ossp.org/pkg/lib/ex/. ** ** Permission to use, copy, modify, and distribute this software for ** any purpose with or without fee is hereby granted, provided that ** the above copyright notice and this permission notice appear in all ** copies. ** ** THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESSED OR IMPLIED ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR ** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. */ /* The extensions made for the SimGrid project can either be distributed */ /* under the same license, or under the LGPL v2.1 */ #ifndef __XBT_EX_H__ #define __XBT_EX_H__ #include "xbt/sysdep.h" #include "xbt/misc.h" #include "xbt/virtu.h" SG_BEGIN_DECL() /*-*-* Emergency debuging: define this when the exceptions get crazy *-*-*/ #undef __EX_MAYDAY #ifdef __EX_MAYDAY # include #include # define MAYDAY_SAVE(m) printf("%d %s:%d save %p\n", \ xbt_getpid(), __FILE__, __LINE__, \ (m)->jb \ ), # define MAYDAY_RESTORE(m) printf("%d %s:%d restore %p\n", \ xbt_getpid(), __FILE__, __LINE__, \ (m)->jb \ ), # define MAYDAY_CATCH(e) printf("%d %s:%d Catched '%s'\n", \ xbt_getpid(), __FILE__, __LINE__, \ (e).msg \ ), #else # define MAYDAY_SAVE(m) # define MAYDAY_RESTORE(m) # define MAYDAY_CATCH(e) #endif /*-*-* end of debugging stuff *-*-*/ #if defined(__EX_MCTX_MCSC__) #include /* POSIX.1 ucontext(3) */ #define __ex_mctx_struct ucontext_t uc; #define __ex_mctx_save(mctx) (getcontext(&(mctx)->uc) == 0) #define __ex_mctx_restored(mctx) /* noop */ #define __ex_mctx_restore(mctx) (void)setcontext(&(mctx)->uc) #elif defined(__EX_MCTX_SSJLJ__) #include /* POSIX.1 sigjmp_buf(3) */ #define __ex_mctx_struct sigjmp_buf jb; #define __ex_mctx_save(mctx) (sigsetjmp((mctx)->jb, 1) == 0) #define __ex_mctx_restored(mctx) /* noop */ #define __ex_mctx_restore(mctx) (void)siglongjmp((mctx)->jb, 1) #elif defined(__EX_MCTX_SJLJ__) || !defined(__EX_MCTX_CUSTOM__) || defined(__EX_MAYDAY) #include /* ISO-C jmp_buf(3) */ #define __ex_mctx_struct jmp_buf jb; #define __ex_mctx_save(mctx) ( MAYDAY_SAVE(mctx) setjmp((mctx)->jb) == 0) #define __ex_mctx_restored(mctx) /* noop */ #define __ex_mctx_restore(mctx) ( MAYDAY_RESTORE(mctx) (void)longjmp((mctx)->jb, 1)) #endif /* declare the machine context type */ typedef struct { __ex_mctx_struct} __ex_mctx_t; /** @addtogroup XBT_ex * @brief A set of macros providing exception a la C++ in ANSI C (grounding feature) * * This module is a small ISO-C++ style exception handling library * for use in the ISO-C language. It allows you to use the paradigm * of throwing and catching exceptions in order to reduce the amount * of error handling code without hindering program robustness. * * This is achieved by directly transferring exceptional return codes * (and the program control flow) from the location where the exception * is raised (throw point) to the location where it is handled (catch * point) -- usually from a deeply nested sub-routine to a parent * routine. All intermediate routines no longer have to make sure that * the exceptional return codes from sub-routines are correctly passed * back to the parent. * * These features are brought to you by a modified version of the libex * library, one of the numerous masterpiece of Ralf S. Engelschall. * * \htmlonly
\endhtmlonly * * @section XBT_ex_toc TABLE OF CONTENTS * * - \ref XBT_ex_intro * - \ref XBT_ex_base * - \ref XBT_ex_pitfalls * * \htmlonly
\endhtmlonly * * @section XBT_ex_intro DESCRIPTION * * In SimGrid, an exception is a triple <\a msg , \a category , \a value> * where \a msg is a human-readable text describing the exceptional * condition, \a code an integer describing what went wrong and \a value * providing a sort of sub-category. (this is different in the original libex). * * @section XBT_ex_base BASIC USAGE * * \em TRY \b TRIED_BLOCK [\em TRY_CLEANUP \b CLEANUP_BLOCK] \em CATCH (variable) \b CATCH_BLOCK * * This is the primary syntactical construct provided. It is modeled after the * ISO-C++ try-catch clause and should sound familiar to most of you. * * Any exception thrown directly from the TRIED_BLOCK block or from called * subroutines is caught. Cleanups which must be done after this block * (whenever an exception arose or not) should be placed into the optionnal * CLEANUP_BLOCK. The code dealing with the exceptions when they arise should * be placed into the (mandatory) CATCH_BLOCK. * * * In absence of exception, the control flow goes into the blocks TRIED_BLOCK * and CLEANUP_BLOCK (if present); The CATCH_BLOCK block is then ignored. * * When an exception is thrown, the control flow goes through the following * blocks: TRIED_BLOCK (up to the statement throwing the exception), * CLEANUP_BLOCK (if any) and CATCH_BLOCK. The exception is stored in a * variable for inspection inside the CATCH_BLOCK. This variable must be * declared in the outter scope, but its value is only valid within the * CATCH_BLOCK block. * * Some notes: * - TRY, CLEANUP and CATCH cannot be used separately, they work * only in combination and form a language clause as a whole. * - In contrast to the syntax of other languages (such as C++ or Jave) there * is only one CATCH block and not multiple ones (all exceptions are * of the same \em xbt_ex_t C type). * - the variable of CATCH can naturally be reused in subsequent * CATCH clauses. * - it is possible to nest TRY clauses. * * The TRY block is a regular ISO-C language statement block, but * *
it is not * allowed to jump into it via "goto" or longjmp(3) or out of it via "break", * "return", "goto" or longjmp(3).
* * This is because there is some hidden setup and * cleanup that needs to be done regardless of whether an exception is * caught. Bypassing these steps will break the exception handling facility. * The symptom are likely to be a segfault at the next exception raising point, * ie far away from the point where you did the mistake. If you suspect * that kind of error in your code, have a look at the little script * tools/xbt_exception_checker in the CVS. It extracts all the TRY * blocks from a set of C files you give it and display them (and only * them) on the standard output. You can then grep for the forbidden * keywords on that output. * * The CLEANUP and CATCH blocks are regular ISO-C language statement * blocks without any restrictions. You are even allowed to throw (and, in the * CATCH block, to re-throw) exceptions. * * There is one subtle detail you should remember about TRY blocks: * Variables used in the CLEANUP or CATCH clauses must be declared with * the storage class "volatile", otherwise they might contain outdated * information if an exception is thrown. * * * This is because you usually do not know which commands in the TRY * were already successful before the exception was thrown (logically speaking) * and because the underlying ISO-C setjmp(3) facility applies those * restrictions (technically speaking). As a matter of fact, value changes * between the TRY and the THROW may be discarded if you forget the * "volatile" keyword. * * \section XBT_ex_pitfalls PROGRAMMING PITFALLS * * Exception handling is a very elegant and efficient way of dealing with * exceptional situation. Nevertheless it requires additional discipline in * programming and there are a few pitfalls one must be aware of. Look the * following code which shows some pitfalls and contains many errors (assuming * a mallocex() function which throws an exception if malloc(3) fails): * * \dontinclude ex.c * \skip BAD_EXAMPLE * \until end_of_bad_example * * This example raises a few issues: * -# \b variable \b scope \n * Variables which are used in the CLEANUP or CATCH clauses must be * declared before the TRY clause, otherwise they only exist inside the * TRY block. In the example above, cp1, cp2 and cp3 only exist in the * TRY block and are invisible from the CLEANUP and CATCH * blocks. * -# \b variable \b initialization \n * Variables which are used in the CLEANUP or CATCH clauses must * be initialized before the point of the first possible THROW is * reached. In the example above, CLEANUP would have trouble using cp3 * if mallocex() throws a exception when allocating a TOOBIG buffer. * -# \b volatile \b variable \n * Variables which are used in the CLEANUP or CATCH clauses MUST BE * DECLARED AS "volatile", otherwise they might contain outdated * information when an exception is thrown. * -# \b clean \b before \b catch \n * The CLEANUP clause is not only place before the CATCH clause in * the source code, it also occures before in the control flow. So, * resources being cleaned up cannot be used in the CATCH block. In the * example, c3 gets freed before the printf placed in CATCH. * -# \b variable \b uninitialization \n * If resources are passed out of the scope of the * TRY/CLEANUP/CATCH construct, they naturally shouldn't get * cleaned up. The example above does free(3) cp1 in CLEANUP although * its value was affected to globalcontext->first, invalidating this * pointer. * The following is fixed version of the code (annotated with the pitfall items * for reference): * * \skip GOOD_EXAMPLE * \until end_of_good_example * * @{ */ /** @brief different kind of errors */ typedef enum { unknown_error = 0, /**< unknown error */ arg_error, /**< Invalid argument */ bound_error, /**< Out of bounds argument */ mismatch_error, /**< The provided ID does not match */ not_found_error, /**< The searched element was not found */ system_error, /**< a syscall did fail */ network_error, /**< error while sending/receiving data */ timeout_error, /**< not quick enough, dude */ cancel_error, /**< an action was canceled */ thread_error, /**< error while [un]locking */ host_error, /**< host failed */ tracing_error, /**< error during the simulation tracing */ io_error /**< disk or file error */ } xbt_errcat_t; XBT_PUBLIC(const char *) xbt_ex_catname(xbt_errcat_t cat); /** @brief Structure describing an exception */ typedef struct { char *msg; /**< human readable message */ xbt_errcat_t category; /**< category like HTTP (what went wrong) */ int value; /**< like errno (why did it went wrong) */ /* throw point */ char *procname; /**< Name of the process who thrown this */ int pid; /**< PID of the process who thrown this */ char *file; /**< Thrown point */ int line; /**< Thrown point */ char *func; /**< Thrown point */ /* Backtrace */ int used; char **bt_strings; /* only filed on display (or before the network propagation) */ void *bt[XBT_BACKTRACE_SIZE]; } xbt_ex_t; /* declare the running context type * (that's where we get the process name for the logs and the exception storage) * -- do not mess with it -- */ typedef struct { __ex_mctx_t *ctx_mctx; /* permanent machine context of enclosing try/catch */ int ctx_caught; /* temporary flag whether exception was caught */ volatile xbt_ex_t exception; /* temporary exception storage */ } xbt_running_ctx_t; /* the static and dynamic initializers for a context structure */ #define XBT_RUNNING_CTX_INITIALIZER \ { NULL, 0, { /* content */ NULL, unknown_error, 0, \ /* throw point*/ NULL, 0, NULL, 0, NULL, \ /* backtrace */ 0, NULL, /* bt[] */ } } XBT_PUBLIC_DATA(const xbt_running_ctx_t) __xbt_ex_ctx_initializer; #define XBT_RUNNING_CTX_INITIALIZE(ctx) (*(ctx) = __xbt_ex_ctx_initializer) /* the exception context */ typedef xbt_running_ctx_t *(*xbt_running_ctx_fetcher_t) (void); XBT_PUBLIC_DATA(xbt_running_ctx_fetcher_t) __xbt_running_ctx_fetch; XBT_PUBLIC( xbt_running_ctx_t *)__xbt_ex_ctx_default(void); /* the termination handler */ typedef void (*ex_term_cb_t) (xbt_ex_t *); XBT_PUBLIC_DATA(ex_term_cb_t) __xbt_ex_terminate; XBT_PUBLIC( void )__xbt_ex_terminate_default(xbt_ex_t * e); /** @brief Introduce a block where exception may be dealed with * @hideinitializer */ #define TRY \ { \ xbt_running_ctx_t *__xbt_ex_ctx_ptr = __xbt_running_ctx_fetch(); \ int __ex_cleanup = 0; \ __ex_mctx_t *__ex_mctx_en; \ __ex_mctx_t __ex_mctx_me; \ __ex_mctx_en = __xbt_ex_ctx_ptr->ctx_mctx; \ __xbt_ex_ctx_ptr->ctx_mctx = &__ex_mctx_me; \ if (__ex_mctx_save(&__ex_mctx_me)) { \ if (1) /** @brief optional(!) block for cleanup * @hideinitializer */ #define TRY_CLEANUP \ else { \ } \ __xbt_ex_ctx_ptr->ctx_caught = 0; \ } else { \ __ex_mctx_restored(&__ex_mctx_me); \ __xbt_ex_ctx_ptr->ctx_caught = 1; \ } \ __xbt_ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \ __ex_cleanup = 1; \ if (1) { \ if (1) #ifndef DOXYGEN_SKIP # ifdef __cplusplus # define XBT_EX_T_CPLUSPLUSCAST (xbt_ex_t&) # else # define XBT_EX_T_CPLUSPLUSCAST # endif #endif /** @brief the block for catching (ie, deal with) an exception * @hideinitializer */ #define CATCH(e) \ DO_CATCH((e) = XBT_EX_T_CPLUSPLUSCAST __xbt_running_ctx_fetch()->exception) /** @brief like CATCH(e) but without argument * @hideinitializer * * Useful if you only want to rethrow the exception caught, and do not want to * bother with an unused variable. */ #define CATCH_ANONYMOUS DO_CATCH(0) #define DO_CATCH(_xbt_do_catch_set_e) \ else { \ } \ if (!(__ex_cleanup)) \ __xbt_ex_ctx_ptr->ctx_caught = 0; \ } else { \ if (!(__ex_cleanup)) { \ __ex_mctx_restored(&__ex_mctx_me); \ __xbt_ex_ctx_ptr->ctx_caught = 1; \ } \ } \ __xbt_ex_ctx_ptr->ctx_mctx = __ex_mctx_en; \ } \ if ( !(__xbt_running_ctx_fetch()->ctx_caught) \ || ((void)(_xbt_do_catch_set_e), \ MAYDAY_CATCH(__xbt_running_ctx_fetch()->exception) 0)) { \ } \ else #define DO_THROW(running_ctx) \ do { /* deal with the exception */ \ xbt_running_ctx_t *ctx = (running_ctx); \ if (ctx->ctx_mctx == NULL) \ __xbt_ex_terminate((xbt_ex_t*)&(ctx->exception)); /* not catched */ \ else \ __ex_mctx_restore(ctx->ctx_mctx); /* catched somewhere */ \ abort(); /* nope, stupid GCC, we won't survive a THROW */ \ /* (this won't be reached) */ \ } while(0) /** @brief Helper macro for THROW and THROWF * @hideinitializer * * @param _throw_ctx: the throwing context in which we should construct the exception * @param c: category code (integer) * @param v: value (integer) * @param m: message text * * If called from within a TRY/CATCH construct, this exception * is copied into the CATCH relevant variable program control flow * is derouted to the CATCH (after the optional sg_cleanup). * * If no TRY/CATCH construct embeds this call, the program calls * abort(3). * * The THROW can be performed everywhere, including inside TRY, * CLEANUP and CATCH blocks. */ #define THROW_PREPARE(_throw_ctx, c, v, m) \ /* build the exception */ \ _throw_ctx->exception.msg = (m); \ _throw_ctx->exception.category = (xbt_errcat_t)(c); \ _throw_ctx->exception.value = (v); \ _throw_ctx->exception.procname = (char*)xbt_procname(); \ _throw_ctx->exception.pid = xbt_getpid(); \ _throw_ctx->exception.file = (char*)__FILE__; \ _throw_ctx->exception.line = __LINE__; \ _throw_ctx->exception.func = (char*)_XBT_FUNCTION; \ _throw_ctx->exception.bt_strings = NULL; \ xbt_backtrace_current((xbt_ex_t *)&(_throw_ctx->exception)); #define _THROW(c, v, m) \ do { /* change this sequence into one block */ \ xbt_running_ctx_t *_throw_ctx = __xbt_running_ctx_fetch(); \ THROW_PREPARE(_throw_ctx, c, v, m); \ DO_THROW(_throw_ctx); \ } while (0) /** @brief Builds and throws an exception @hideinitializer */ #define THROW(c, v) _THROW(c, v, NULL) /** @brief Builds and throws an exception with a printf-like formatted message @hideinitializer */ #define THROWF(c, v, ...) _THROW(c, v, bprintf(__VA_ARGS__)) #define THROW_IMPOSSIBLE \ THROWF(unknown_error, 0, "The Impossible Did Happen (yet again)") #define THROW_UNIMPLEMENTED \ THROWF(unknown_error, 0, "Function %s unimplemented",_XBT_FUNCTION) #define DIE_IMPOSSIBLE xbt_die("The Impossible Did Happen (yet again)") /** @brief re-throwing of an already caught exception (ie, pass it to the upper catch block) * @hideinitializer */ #define RETHROW DO_THROW(__xbt_running_ctx_fetch()) /** @brief like THROWF, but adding some details to the message of an existing exception * @hideinitializer */ #define RETHROWF(...) \ do { \ char *_xbt_ex_internal_msg = __xbt_running_ctx_fetch()->exception.msg; \ __xbt_running_ctx_fetch()->exception.msg = bprintf(__VA_ARGS__, \ _xbt_ex_internal_msg); \ free(_xbt_ex_internal_msg); \ RETHROW; \ } while (0) /** @brief Exception destructor */ XBT_PUBLIC(void) xbt_ex_free(xbt_ex_t e); /** @brief Shows a backtrace of the current location */ XBT_PUBLIC(void) xbt_backtrace_display_current(void); /** @brief reimplementation of glibc backtrace based directly on gcc library, without implicit malloc */ XBT_PUBLIC(int) xbt_backtrace_no_malloc(void**bt, int size); /** @brief Captures a backtrace for further use */ XBT_PUBLIC(void) xbt_backtrace_current(xbt_ex_t * e); /** @brief Display a previously captured backtrace */ XBT_PUBLIC(void) xbt_backtrace_display(xbt_ex_t * e); /** @brief Get current backtrace with libunwind */ XBT_PUBLIC(int) xbt_libunwind_backtrace(void *bt[XBT_BACKTRACE_SIZE], int size); #ifdef XBT_USE_DEPRECATED /* Kept for backward compatibility. */ #define THROW0(c, v, m) \ do { if (m) THROWF(c, v, m); else THROW(c, v); } while (0) #define THROW1(c, v, ...) THROWF(c, v, __VA_ARGS__) #define THROW2(c, v, ...) THROWF(c, v, __VA_ARGS__) #define THROW3(c, v, ...) THROWF(c, v, __VA_ARGS__) #define THROW4(c, v, ...) THROWF(c, v, __VA_ARGS__) #define THROW5(c, v, ...) THROWF(c, v, __VA_ARGS__) #define THROW6(c, v, ...) THROWF(c, v, __VA_ARGS__) #define THROW7(c, v, ...) THROWF(c, v, __VA_ARGS__) #define RETHROW0(...) RETHROWF(__VA_ARGS__) #define RETHROW1(...) RETHROWF(__VA_ARGS__) #define RETHROW2(...) RETHROWF(__VA_ARGS__) #define RETHROW3(...) RETHROWF(__VA_ARGS__) #define RETHROW4(...) RETHROWF(__VA_ARGS__) #define RETHROW5(...) RETHROWF(__VA_ARGS__) #endif SG_END_DECL() /** @} */ #endif /* __XBT_EX_H__ */ SimGrid-3.10/include/xbt/swag.h000640 007661 000620 00000012367 12242224150 016556 0ustar00gierschand000000 000000 /* Copyright (c) 2004-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ /* Warning, this module is done to be efficient and performs tons of cast and dirty things. So avoid using it unless you really know what you are doing. */ #ifndef _XBT_SWAG_H #define _XBT_SWAG_H #include "xbt/misc.h" #include "xbt/sysdep.h" /* size_t */ SG_BEGIN_DECL() /** * @addtogroup XBT_swag * @brief a O(1) set based on linked lists * * Warning, this module is done to be efficient and performs tons of * cast and dirty things. So make sure you know what you are doing while using it. * It is basically a fifo but with restrictions so that * it can be used as a set. Any operation (add, remove, belongs) is O(1) and * no call to malloc/free is done. * */ /** @defgroup XBT_swag_type Swag types @ingroup XBT_swag Specific set. These typedefs are public so that the compiler can do his job but believe me, you don't want to try to play with those structs directly. Use them as an abstract datatype. */ /* @{ */ typedef struct xbt_swag_hookup { void *next; void *prev; } s_xbt_swag_hookup_t; /**< This type should be added to a type that is to be used in a swag. * * Whenever a new object with this struct is created, all fields have * to be set to NULL * * Here is an example like that : \code typedef struct foo { s_xbt_swag_hookup_t set1_hookup; s_xbt_swag_hookup_t set2_hookup; double value; } s_foo_t, *foo_t; ... { s_foo_t elem; xbt_swag_t set1=NULL; xbt_swag_t set2=NULL; set1 = xbt_swag_new(xbt_swag_offset(elem, set1_hookup)); set2 = xbt_swag_new(xbt_swag_offset(elem, set2_hookup)); } \endcode */ typedef s_xbt_swag_hookup_t *xbt_swag_hookup_t; typedef struct xbt_swag { void *head; void *tail; size_t offset; int count; } s_xbt_swag_t, *xbt_swag_t; /**< A typical swag */ /* @} */ /** @defgroup XBT_swag_func SWAG functions * @ingroup XBT_swag * @{ */ XBT_PUBLIC(xbt_swag_t) xbt_swag_new(size_t offset); XBT_PUBLIC(void) xbt_swag_free(xbt_swag_t swag); XBT_PUBLIC(void) xbt_swag_init(xbt_swag_t swag, size_t offset); /** * \brief Makes a swag empty. * \param swag a swag * @hideinitializer */ #define xbt_swag_reset(swag) do {} while(xbt_swag_extract(swag)) /** * \param obj the objet to insert in the swag * \param swag a swag * @hideinitializer * * insert \a obj in \a swag */ #define xbt_swag_insert(obj, swag) xbt_swag_insert_at_tail(obj, swag) XBT_PUBLIC(void) xbt_swag_insert_at_head(void *obj, xbt_swag_t swag); XBT_PUBLIC(void) xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag); XBT_PUBLIC(void *) xbt_swag_remove(void *obj, xbt_swag_t swag); XBT_PUBLIC(void *) xbt_swag_extract(xbt_swag_t swag); XBT_PUBLIC(int) xbt_swag_size(xbt_swag_t swag); #define xbt_swag_getPrev(obj, offset) (((xbt_swag_hookup_t)(((char *) (obj)) + (offset)))->prev) #define xbt_swag_getNext(obj, offset) (((xbt_swag_hookup_t)(((char *) (obj)) + (offset)))->next) #define xbt_swag_belongs(obj, swag) (xbt_swag_getNext((obj), (swag)->offset) || (swag)->tail == (obj)) static XBT_INLINE void *xbt_swag_getFirst(xbt_swag_t swag) { return (swag->head); } /** * \brief Offset computation * \arg var a variable of type struct something * \arg field a field of struct something * \return the offset of \a field in struct something. * @hideinitializer * * It is very similar to offsetof except that is done at runtime and that * you have to declare a variable. Why defining such a macro then ? * Because it is portable... */ #define xbt_swag_offset(var,field) ((char *)&( (var).field ) - (char *)&(var)) /* @} */ /** * \defgroup XBT_swag_curs Swag cursor * @ingroup XBT_swag * Iterates over the whole swag. * * @{ */ /** @brief A simple swag iterator * @param obj the indice of the loop * @param swag what to iterate over * @warning you cannot modify the \a swag while using this loop * @hideinitializer */ #define xbt_swag_foreach(obj,swag) \ for((obj)=xbt_swag_getFirst((swag)); \ (obj)!=NULL; \ (obj)=xbt_swag_getNext((obj),(swag)->offset)) /** * @brief A safe swag iterator * @param obj the indice of the loop * @param obj_next the object that is right after (if any) \a obj in the swag * @param swag what to iterate over * @hideinitializer You can safely modify the \a swag while using this loop. Well, safely... Err. You can remove \a obj without having any trouble at least. */ #define xbt_swag_foreach_safe(obj,obj_next,swag) \ for((obj)=xbt_swag_getFirst((swag)), \ ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \ (obj_next=NULL)); \ (obj)!=NULL; \ (obj)=obj_next, \ ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)): \ (obj_next=NULL)) ) /* @} */ SG_END_DECL() #endif /* _XBT_SWAG_H */ SimGrid-3.10/include/xbt/xbt_os_thread.h000640 007661 000620 00000011646 12242224150 020441 0ustar00gierschand000000 000000 /* xbt/xbt_os_thread.h -- Thread portability layer */ /* Copyright (c) 2007-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_OS_THREAD_H #define _XBT_OS_THREAD_H #include "simgrid_config.h" /* Windows or Posix */ #include "xbt/function_types.h" SG_BEGIN_DECL() /** @addtogroup XBT_thread * @brief Thread portability layer * * This section describes the thread portability layer. It defines types and * functions very close to the pthread API, but it's portable to windows too. * * @{ */ /** \brief Thread data type (opaque structure) */ typedef struct xbt_os_thread_ *xbt_os_thread_t; #include #ifdef _XBT_WIN32 /* defined if this is a windows system, 32bits or 64bits) */ #include typedef DWORD xbt_os_thread_key_t; #else /* assume that every non-windows system is POSIX-compatible */ typedef pthread_key_t xbt_os_thread_key_t; #endif /** Calls pthread_atfork() if present, and raise an exception otherwise. * * The only known user of this wrapper is mmalloc_preinit(), but it is absolutely mandatory there: * when used with tesh, mmalloc *must* be mutex protected and resistant to forks. * This functionality is the only way to get it working (by ensuring that the mutex is consistently released on forks) */ XBT_PUBLIC(int) xbt_os_thread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)); XBT_PUBLIC(int) xbt_os_get_numcores(void); XBT_PUBLIC(xbt_os_thread_t) xbt_os_thread_create(const char *name, pvoid_f_pvoid_t start_routine, void *param, void *data); XBT_PUBLIC(void) xbt_os_thread_exit(int *retcode); XBT_PUBLIC(void) xbt_os_thread_detach(xbt_os_thread_t thread); XBT_PUBLIC(xbt_os_thread_t) xbt_os_thread_self(void); XBT_PUBLIC(const char *) xbt_os_thread_self_name(void); XBT_PUBLIC(const char *) xbt_os_thread_name(xbt_os_thread_t); XBT_PUBLIC(void) xbt_os_thread_set_extra_data(void *data); XBT_PUBLIC(void *) xbt_os_thread_get_extra_data(void); XBT_PUBLIC(void) xbt_os_thread_key_create(xbt_os_thread_key_t* key); XBT_PUBLIC(void) xbt_os_thread_set_specific(xbt_os_thread_key_t key, void* value); XBT_PUBLIC(void*) xbt_os_thread_get_specific(xbt_os_thread_key_t key); /* xbt_os_thread_join frees the joined thread (ie the XBT wrapper around it, the OS frees the rest) */ XBT_PUBLIC(void) xbt_os_thread_join(xbt_os_thread_t thread, void **thread_return); XBT_PUBLIC(void) xbt_os_thread_yield(void); XBT_PUBLIC(void) xbt_os_thread_cancel(xbt_os_thread_t thread); XBT_PUBLIC(void *) xbt_os_thread_getparam(void); XBT_PUBLIC(void) xbt_os_thread_setstacksize(int stack_size); /** \brief Thread mutex data type (opaque structure) */ typedef struct xbt_os_mutex_ *xbt_os_mutex_t; XBT_PUBLIC(xbt_os_mutex_t) xbt_os_mutex_init(void); XBT_PUBLIC(void) xbt_os_mutex_acquire(xbt_os_mutex_t mutex); XBT_PUBLIC(void) xbt_os_mutex_timedacquire(xbt_os_mutex_t mutex, double delay); XBT_PUBLIC(void) xbt_os_mutex_release(xbt_os_mutex_t mutex); XBT_PUBLIC(void) xbt_os_mutex_destroy(xbt_os_mutex_t mutex); /** \brief Thread reentrant mutex data type (opaque structure) */ typedef struct xbt_os_rmutex_ *xbt_os_rmutex_t; XBT_PUBLIC(xbt_os_rmutex_t) xbt_os_rmutex_init(void); XBT_PUBLIC(void) xbt_os_rmutex_acquire(xbt_os_rmutex_t rmutex); XBT_PUBLIC(void) xbt_os_rmutex_release(xbt_os_rmutex_t rmutex); XBT_PUBLIC(void) xbt_os_rmutex_destroy(xbt_os_rmutex_t rmutex); /** \brief Thread condition data type (opaque structure) */ typedef struct xbt_os_cond_ *xbt_os_cond_t; XBT_PUBLIC(xbt_os_cond_t) xbt_os_cond_init(void); XBT_PUBLIC(void) xbt_os_cond_wait(xbt_os_cond_t cond, xbt_os_mutex_t mutex); XBT_PUBLIC(void) xbt_os_cond_timedwait(xbt_os_cond_t cond, xbt_os_mutex_t mutex, double delay); XBT_PUBLIC(void) xbt_os_cond_signal(xbt_os_cond_t cond); XBT_PUBLIC(void) xbt_os_cond_broadcast(xbt_os_cond_t cond); XBT_PUBLIC(void) xbt_os_cond_destroy(xbt_os_cond_t cond); /** \brief Semaphore data type (opaque structure) */ typedef struct xbt_os_sem_ *xbt_os_sem_t; XBT_PUBLIC(xbt_os_sem_t) xbt_os_sem_init(unsigned int value); XBT_PUBLIC(void) xbt_os_sem_acquire(xbt_os_sem_t sem); XBT_PUBLIC(void) xbt_os_sem_timedacquire(xbt_os_sem_t sem, double timeout); XBT_PUBLIC(void) xbt_os_sem_release(xbt_os_sem_t sem); XBT_PUBLIC(void) xbt_os_sem_destroy(xbt_os_sem_t sem); XBT_PUBLIC(void) xbt_os_sem_get_value(xbt_os_sem_t sem, int *svalue); /** @} */ SG_END_DECL() #endif /* _XBT_OS_THREAD_H */ SimGrid-3.10/include/xbt/graphxml.h000640 007661 000620 00000013720 12242224150 017431 0ustar00gierschand000000 000000 /* XML processor/application API for src/xbt/graphxml.dtd. * * This program was generated with the FleXML XML processor generator. * FleXML is Copyright (C) 1999-2005 Kristoffer Rose. All rights reserved. * FleXML is Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * (1.9.6). * * There are two, intertwined parts to this program, part A and part B. * * Part A * ------ * * Some parts, here collectively called "Part A", are found in the * FleXML package. They are Copyright (C) 1999-2005 Kristoffer Rose * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved. * * You can redistribute, use, perform, display and/or modify "Part A" * provided the following two conditions hold: * * 1. The program is distributed WITHOUT ANY WARRANTY from the author of * FleXML; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. * * 2. The program distribution conditions do not in any way affect the * distribution conditions of the FleXML system used to generate this * file or any version of FleXML derived from that system. * * Notice that these are explicit rights granted to you for files * generated by the FleXML system. For your rights in connection with * the FleXML system itself please consult the GNU General Public License. * * Part B * ------ * * The other parts, here collectively called "Part B", and which came * from the DTD used by FleXML to generate this program, can be * distributed (or not, as the case may be) under the terms of whoever * wrote them, provided these terms respect and obey the two conditions * above under the heading "Part A". * * The author of and contributors to FleXML specifically disclaim * any copyright interest in "Part B", unless "Part B" was written * by the author of or contributors to FleXML. * */ #ifndef _FLEXML_graphxml_H #define _FLEXML_graphxml_H /* XML application entry points. */ XBT_PUBLIC(void) STag_graphxml_graph(void); XBT_PUBLIC(void) ETag_graphxml_graph(void); XBT_PUBLIC(void) STag_graphxml_node(void); XBT_PUBLIC(void) ETag_graphxml_node(void); XBT_PUBLIC(void) STag_graphxml_edge(void); XBT_PUBLIC(void) ETag_graphxml_edge(void); /* XML application data. */ typedef int AT_graphxml_node_name; #define AU_graphxml_node_name NULL typedef int AT_graphxml_edge_source; #define AU_graphxml_edge_source NULL typedef int AT_graphxml_node_position___y; #define AU_graphxml_node_position___y NULL typedef int AT_graphxml_node_position___x; #define AU_graphxml_node_position___x NULL typedef int AT_graphxml_edge_data; #define AU_graphxml_edge_data NULL typedef int AT_graphxml_edge_target; #define AU_graphxml_edge_target NULL typedef enum { AU_graphxml_graph_isDirected, A_graphxml_graph_isDirected_true,A_graphxml_graph_isDirected_false } AT_graphxml_graph_isDirected; typedef int AT_graphxml_node_label; #define AU_graphxml_node_label NULL typedef int AT_graphxml_node_data; #define AU_graphxml_node_data NULL typedef int AT_graphxml_edge_label; #define AU_graphxml_edge_label NULL typedef int AT_graphxml_edge_length; #define AU_graphxml_edge_length NULL typedef int AT_graphxml_edge_name; #define AU_graphxml_edge_name NULL /* FleXML-provided data. */ XBT_PUBLIC_DATA(int) graphxml_pcdata_ix; XBT_PUBLIC_DATA(char *) graphxml_bufferstack; #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix) XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name; #define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name) XBT_PUBLIC_DATA(short int) graphxml_node_name_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_source) AX_graphxml_edge_source; #define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source) XBT_PUBLIC_DATA(short int) graphxml_edge_source_isset; XBT_PUBLIC_DATA(AT_graphxml_node_position___y) AX_graphxml_node_position___y; #define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y) XBT_PUBLIC_DATA(short int) graphxml_node_position___y_isset; XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x; #define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x) XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_data) AX_graphxml_edge_data; #define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data) XBT_PUBLIC_DATA(short int) graphxml_edge_data_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_target) AX_graphxml_edge_target; #define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target) XBT_PUBLIC_DATA(short int) graphxml_edge_target_isset; XBT_PUBLIC_DATA(AT_graphxml_graph_isDirected) AX_graphxml_graph_isDirected; #define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected XBT_PUBLIC_DATA(short int) graphxml_graph_isDirected_isset; XBT_PUBLIC_DATA(AT_graphxml_node_label) AX_graphxml_node_label; #define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label) XBT_PUBLIC_DATA(short int) graphxml_node_label_isset; XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data; #define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data) XBT_PUBLIC_DATA(short int) graphxml_node_data_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_label) AX_graphxml_edge_label; #define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label) XBT_PUBLIC_DATA(short int) graphxml_edge_label_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_length) AX_graphxml_edge_length; #define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length) XBT_PUBLIC_DATA(short int) graphxml_edge_length_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_name) AX_graphxml_edge_name; #define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name) XBT_PUBLIC_DATA(short int) graphxml_edge_name_isset; /* XML application utilities. */ XBT_PUBLIC(int) graphxml_element_context(int); /* XML processor entry point. */ XBT_PUBLIC(int) yylex(void); /* Flexml error handling function (useful only when -q flag passed to flexml) */ const char * graphxml_parse_err_msg(void); #endif SimGrid-3.10/include/xbt/mmalloc.h000640 007661 000620 00000005333 12242224150 017234 0ustar00gierschand000000 000000 /* Copyright (C) 1991, 1992 Free Software Foundation, Inc. This file was then part of the GNU C Library. */ /* Copyright (c) 2010-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef MMALLOC_H #define MMALLOC_H 1 #ifdef HAVE_STDDEF_H # include #else # include /* for size_t */ # include /* for NULL */ #endif #include "xbt/dynar.h" #include "xbt/dict.h" /* Datatype representing a separate heap. The whole point of the mmalloc module * is to allow several such heaps in the process. It thus works by redefining * all the classical memory management functions (malloc and friends) with an * extra first argument: the heap in which the memory is to be taken. * * The heap structure itself is an opaque object that shouldnt be messed with. */ typedef struct mdesc *xbt_mheap_t; /* Allocate SIZE bytes of memory (and memset it to 0). */ XBT_PUBLIC( void ) *mmalloc(xbt_mheap_t md, size_t size); /* Allocate SIZE bytes of memory (and don't mess with it) */ void *mmalloc_no_memset(xbt_mheap_t mdp, size_t size); /* Re-allocate the previously allocated block in void*, making the new block SIZE bytes long. */ XBT_PUBLIC( void ) *mrealloc(xbt_mheap_t md, void *ptr, size_t size); /* Free a block allocated by `mmalloc', `mrealloc' or `mcalloc'. */ XBT_PUBLIC( void ) mfree(xbt_mheap_t md, void *ptr); XBT_PUBLIC( xbt_mheap_t ) xbt_mheap_new(int fd, void *baseaddr); XBT_PUBLIC( void ) xbt_mheap_destroy_no_free(xbt_mheap_t md); XBT_PUBLIC( void ) *xbt_mheap_destroy(xbt_mheap_t md); /* return the heap used when NULL is passed as first argument to any mm* function */ XBT_PUBLIC( xbt_mheap_t ) mmalloc_get_default_md(void); /* To change the heap used when using the legacy version malloc/free/realloc and such */ void mmalloc_set_current_heap(xbt_mheap_t new_heap); xbt_mheap_t mmalloc_get_current_heap(void); int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dict_t all_types, xbt_dict_t other_types); int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2); int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t to_ignore1, xbt_dynar_t to_ignore2); int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, xbt_dict_t all_types, xbt_dict_t other_types, char *type, int pointer_level); void reset_heap_information(void); int get_pointed_area_size(void *area, int heap); size_t mmalloc_get_bytes_used(xbt_mheap_t); ssize_t mmalloc_get_busy_size(xbt_mheap_t, void *ptr); #endif /* MMALLOC_H */ SimGrid-3.10/include/xbt/parmap.h000640 007661 000620 00000004263 12242224150 017071 0ustar00gierschand000000 000000 /* A thread pool. */ /* Copyright (c) 2007, 2009-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_PARMAP_H #define _XBT_PARMAP_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ #include "xbt/function_types.h" #include "xbt/dynar.h" SG_BEGIN_DECL() /** \addtogroup XBT_parmap * \ingroup XBT_misc * \brief Parallel map. * * A function is applied to all elements of a dynar in parallel with n worker * threads. * The worker threads are persistent until the destruction of the parmap. * * If there are more than n elements in the dynar, the worker threads are * allowed to fetch themselves remaining work with xbt_parmap_next() and * execute it. * * \{ */ /** \brief Parallel map data type (opaque type) */ typedef struct s_xbt_parmap *xbt_parmap_t; /** * \brief Synchronization mode of the worker threads of a parmap. */ typedef enum { XBT_PARMAP_POSIX, /**< use POSIX synchronization primitives */ XBT_PARMAP_FUTEX, /**< use Linux futex system call */ XBT_PARMAP_BUSY_WAIT, /**< busy waits (no system calls, maximum CPU usage) */ XBT_PARMAP_DEFAULT /**< futex if available, posix otherwise */ } e_xbt_parmap_mode_t; XBT_PUBLIC(xbt_parmap_t) xbt_parmap_new(unsigned int num_workers, e_xbt_parmap_mode_t mode); XBT_PUBLIC(void) xbt_parmap_destroy(xbt_parmap_t parmap); XBT_PUBLIC(void) xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data); XBT_PUBLIC(void*) xbt_parmap_next(xbt_parmap_t parmap); #ifdef HAVE_MC XBT_PUBLIC(xbt_parmap_t) xbt_parmap_mc_new(unsigned int num_workers, e_xbt_parmap_mode_t mode); XBT_PUBLIC(int) xbt_parmap_mc_apply(xbt_parmap_t parmap, int_f_pvoid_pvoid_t fun, void *data, unsigned int length, void* ref_snapshot); #endif /** \} */ SG_END_DECL() #endif SimGrid-3.10/include/xbt/hash.h000640 007661 000620 00000001746 12242224150 016537 0ustar00gierschand000000 000000 /* hash.h - Various hashing functions. */ /* Copyright (c) 2008-2011. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_HASH_H #define XBT_HASH_H #include "xbt/str.h" /* Chord needs a SHA1 algorithm. Let's drop it in there */ typedef struct s_xbt_sha_ s_xbt_sha_t, *xbt_sha_t; XBT_PUBLIC(xbt_sha_t) xbt_sha_new(void); XBT_PUBLIC(void) xbt_sha_free(xbt_sha_t sha); XBT_PUBLIC(void) xbt_sha_feed(xbt_sha_t sha, const unsigned char *data, size_t len); XBT_PUBLIC(void) xbt_sha_reset(xbt_sha_t sha); XBT_PUBLIC(void) xbt_sha_print(xbt_sha_t sha, char *hash); XBT_PUBLIC(char *) xbt_sha_read(xbt_sha_t sha); XBT_PUBLIC(void) xbt_sha(const char *data, char *hash); #endif /* XBT_HASH_H */ SimGrid-3.10/include/xbt/automaton.h000640 007661 000620 00000010040 12242224150 017606 0ustar00gierschand000000 000000 #ifndef _XBT_AUTOMATON_H #define _XBT_AUTOMATON_H #include #include #include #include #include SG_BEGIN_DECL() typedef struct xbt_automaton_state { char* id; int type; /* -1 = init, 0 = inter, 1 = final */ xbt_dynar_t in; xbt_dynar_t out; } s_xbt_automaton_state; typedef struct xbt_automaton_state* xbt_automaton_state_t; typedef struct xbt_automaton { xbt_dynar_t propositional_symbols; xbt_dynar_t transitions; xbt_dynar_t states; xbt_automaton_state_t current_state; } s_xbt_automaton; typedef struct xbt_automaton* xbt_automaton_t; typedef struct xbt_automaton_exp_label{ enum{or=0, and=1, not=2, predicat=3, one=4} type; union{ struct{ struct xbt_automaton_exp_label* left_exp; struct xbt_automaton_exp_label* right_exp; }or_and; struct xbt_automaton_exp_label* exp_not; char* predicat; }u; } s_xbt_automaton_exp_label; typedef struct xbt_automaton_exp_label* xbt_automaton_exp_label_t; typedef struct xbt_automaton_transition { xbt_automaton_state_t src; xbt_automaton_state_t dst; xbt_automaton_exp_label_t label; } s_xbt_automaton_transition; typedef struct xbt_automaton_transition* xbt_automaton_transition_t; typedef struct xbt_automaton_propositional_symbol{ char* pred; void* function; } s_xbt_automaton_propositional_symbol; typedef struct xbt_automaton_propositional_symbol* xbt_automaton_propositional_symbol_t; XBT_PUBLIC(xbt_automaton_t) xbt_automaton_new(void); XBT_PUBLIC(void) xbt_automaton_load(xbt_automaton_t automaton, const char *file); XBT_PUBLIC(xbt_automaton_state_t) xbt_automaton_state_new(xbt_automaton_t a, int type, char* id); XBT_PUBLIC(xbt_automaton_transition_t) xbt_automaton_transition_new(xbt_automaton_t a, xbt_automaton_state_t src, xbt_automaton_state_t dst, xbt_automaton_exp_label_t label); XBT_PUBLIC(xbt_automaton_exp_label_t) xbt_automaton_exp_label_new(int type, ...); XBT_PUBLIC(xbt_dynar_t) xbt_automaton_get_states(xbt_automaton_t a); XBT_PUBLIC(xbt_dynar_t) xbt_automaton_get_transitions(xbt_automaton_t a); XBT_PUBLIC(xbt_automaton_transition_t) xbt_automaton_get_transition(xbt_automaton_t a, xbt_automaton_state_t src, xbt_automaton_state_t dst); XBT_PUBLIC(xbt_automaton_state_t) xbt_automaton_transition_get_source(xbt_automaton_transition_t t); XBT_PUBLIC(xbt_automaton_state_t) xbt_automaton_transition_get_destination(xbt_automaton_transition_t t); XBT_PUBLIC(void) xbt_automaton_transition_set_source(xbt_automaton_transition_t t, xbt_automaton_state_t src); XBT_PUBLIC(void) xbt_automaton_transition_set_destination(xbt_automaton_transition_t t, xbt_automaton_state_t dst); XBT_PUBLIC(xbt_dynar_t) xbt_automaton_state_get_out_transitions(xbt_automaton_state_t s); XBT_PUBLIC(xbt_dynar_t) xbt_automaton_state_get_in_transitions(xbt_automaton_state_t s); XBT_PUBLIC(xbt_automaton_state_t) xbt_automaton_state_exists(xbt_automaton_t a, char *id); XBT_PUBLIC(void) xbt_automaton_display(xbt_automaton_t a); XBT_PUBLIC(void) xbt_automaton_exp_label_display(xbt_automaton_exp_label_t l); XBT_PUBLIC(xbt_automaton_propositional_symbol_t) xbt_automaton_propositional_symbol_new(xbt_automaton_t a, const char* id, void* fct); XBT_PUBLIC(xbt_automaton_state_t) xbt_automaton_get_current_state(xbt_automaton_t a); XBT_PUBLIC(int) xbt_automaton_state_compare(xbt_automaton_state_t s1, xbt_automaton_state_t s2); XBT_PUBLIC(int) xbt_automaton_propositional_symbols_compare_value(xbt_dynar_t s1, xbt_dynar_t s2); XBT_PUBLIC(int) xbt_automaton_transition_compare(const void *t1, const void *t2); XBT_PUBLIC(int) xbt_automaton_exp_label_compare(xbt_automaton_exp_label_t l1, xbt_automaton_exp_label_t l2); XBT_PUBLIC(void) xbt_automaton_state_free_voidp(void *s); XBT_PUBLIC(void) xbt_automaton_state_free(xbt_automaton_state_t s); XBT_PUBLIC(void) xbt_automaton_transition_free_voidp(void *t); XBT_PUBLIC(void) xbt_automaton_exp_label_free_voidp(void *e); XBT_PUBLIC(void) xbt_automaton_propositional_symbol_free_voidp(void *ps); XBT_PUBLIC(void) xbt_automaton_free(xbt_automaton_t a); SG_END_DECL() #endif SimGrid-3.10/include/xbt/queue.h000640 007661 000620 00000005142 12242224150 016732 0ustar00gierschand000000 000000 /* A (synchronized) message queue. */ /* Popping an empty queue is blocking, as well as pushing a full one */ /* Copyright (c) 2007, 2009-2011. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_QUEUE_H #define _XBT_QUEUE_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ /* #include "xbt/function_types.h" */ SG_BEGIN_DECL() /** @addtogroup XBT_queue * \brief Synchronized message exchanging queue. * * These is the classical producer/consumer synchronization scheme, * which all concurrent programmer recode one day or another. * * The good thing of this implementation is that it works seamlessly * in your universe. When using one of the classical simulation * interface (such as MSG), it achieves the synchronization on top * of the simulator. If you use instead the real life implementation * comming with GRAS, it uses the synchronization of your OS * (whatever could it be). The choice is done at link time. * * For performance concerns, the content of queue must be homogeneous, * just like dynars (see the \ref XBT_dynar section). Actually, queues use a * dynar to store the data, and add the synchronization on top of it. * * @{ */ /** \brief Queue data type (opaque type) */ typedef struct s_xbt_queue_ *xbt_queue_t; XBT_PUBLIC(xbt_queue_t) xbt_queue_new(int capacity, unsigned long elm_size); XBT_PUBLIC(void) xbt_queue_free(xbt_queue_t * queue); XBT_PUBLIC(unsigned long) xbt_queue_length(const xbt_queue_t queue); XBT_PUBLIC(void) xbt_queue_push(xbt_queue_t queue, const void *src); XBT_PUBLIC(void) xbt_queue_pop(xbt_queue_t queue, void *const dst); XBT_PUBLIC(void) xbt_queue_unshift(xbt_queue_t queue, const void *src); XBT_PUBLIC(void) xbt_queue_shift(xbt_queue_t queue, void *const dst); XBT_PUBLIC(void) xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay); XBT_PUBLIC(void) xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay); XBT_PUBLIC(void) xbt_queue_shift_timed(xbt_queue_t queue, void *const dst, double delay); XBT_PUBLIC(void) xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay); /** @} */ SG_END_DECL() #endif /* _XBT_QUEUE_H */ SimGrid-3.10/include/xbt/log.h000640 007661 000620 00000063014 12242224150 016371 0ustar00gierschand000000 000000 /* log - a generic logging facility in the spirit of log4j */ /* Copyright (c) 2004-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ /** @addtogroup XBT_log * @brief A generic logging facility in the spirit of log4j (grounding feature) * * */ /** \defgroup XBT_log_cats Existing log categories * \ingroup XBT_log * \brief (automatically extracted) * * This is the list of all existing log categories in SimGrid. * This list was automatically extracted from the source code by * the tools/doxygen/xbt_log_extract_hierarchy.pl utility. * * You can thus be certain that it is uptodate, but it may somehow * lack a final manual touch. * Anyway, nothing's perfect ;) */ /* XBT_LOG_MAYDAY: define this to replace the logging facilities with basic printf function. Useful to debug the logging facilities themselves */ #undef XBT_LOG_MAYDAY //#define XBT_LOG_MAYDAY #ifndef _XBT_LOG_H_ #define _XBT_LOG_H_ #include "xbt/misc.h" #include #include /* NULL */ SG_BEGIN_DECL() /**\brief Log priorities * \ingroup XBT_log * * The different existing priorities. */ typedef enum { xbt_log_priority_none = 0, /* used internally (don't poke with) */ xbt_log_priority_trace = 1, /**< enter and return of some functions */ xbt_log_priority_debug = 2, /**< crufty output */ xbt_log_priority_verbose = 3, /**< verbose output for the user wanting more */ xbt_log_priority_info = 4, /**< output about the regular functionning */ xbt_log_priority_warning = 5, /**< minor issue encountered */ xbt_log_priority_error = 6, /**< issue encountered */ xbt_log_priority_critical = 7, /**< major issue encountered */ xbt_log_priority_infinite = 8, /**< value for XBT_LOG_STATIC_THRESHOLD to not log */ xbt_log_priority_uninitialized = -1 /* used internally (don't poke with) */ } e_xbt_log_priority_t; /* * define NLOG to disable at compilation time any logging request * define NDEBUG to disable at compilation time any logging request of priority below VERBOSE */ /** * @def XBT_LOG_STATIC_THRESHOLD * @ingroup XBT_log * * All logging requests with priority < XBT_LOG_STATIC_THRESHOLD are disabled at * compile time, i.e., compiled out. */ #ifdef NLOG # define XBT_LOG_STATIC_THRESHOLD xbt_log_priority_infinite #else # ifdef NDEBUG # define XBT_LOG_STATIC_THRESHOLD xbt_log_priority_verbose # else /* !NLOG && !NDEBUG */ # ifndef XBT_LOG_STATIC_THRESHOLD # define XBT_LOG_STATIC_THRESHOLD xbt_log_priority_none # endif /* !XBT_LOG_STATIC_THRESHOLD */ # endif /* NDEBUG */ #endif /* !defined(NLOG) */ /* Transforms a category name to a global variable name. */ #define _XBT_LOGV(cat) _XBT_LOG_CONCAT(_simgrid_log_category__, cat) #define _XBT_LOGV_CTOR(cat) _XBT_LOG_CONCAT2(_XBT_LOGV(cat), __constructor__) #define _XBT_LOG_CONCAT(x, y) x ## y #define _XBT_LOG_CONCAT2(x, y) _XBT_LOG_CONCAT(x, y) /* Apparently, constructor priorities are not supported by gcc on Macs */ #if __GNUC__ && __APPLE__ # define _XBT_LOGV_CTOR_ATTRIBUTE #else # define _XBT_LOGV_CTOR_ATTRIBUTE _XBT_GNUC_CONSTRUCTOR(600) #endif /* The root of the category hierarchy. */ #define XBT_LOG_ROOT_CAT root /* The whole tree of categories is connected by setting the address of the * parent category as a field of the child one. This is normally done at the * first use of the category. * * It is however necessary to make this connections as early as possible, if we * want the category to be listed by --help-log-categories. * * When possible, the initializations takes place automatically before the start * of main(). It's the case when compiling with gcc. * * For the other cases, you can use the XBT_LOG_CONNECT(cat) macro to force * early initialization. See, for example, in xbt/log.c, the function * xbt_log_connect_categories(). */ #define XBT_LOG_CONNECT(cat) \ if (1) { \ extern void _XBT_LOGV_CTOR(cat)(void); \ _XBT_LOGV_CTOR(cat)(); \ } else ((void)0) /* XBT_LOG_NEW_SUBCATEGORY_helper: * Implementation of XBT_LOG_NEW_SUBCATEGORY, which must declare "extern parent" in addition * to avoid an extra declaration of root when XBT_LOG_NEW_SUBCATEGORY is called by * XBT_LOG_NEW_CATEGORY */ #define XBT_LOG_NEW_SUBCATEGORY_helper(catName, parent, desc) \ XBT_PUBLIC(void) _XBT_LOGV_CTOR(catName)(void) _XBT_LOGV_CTOR_ATTRIBUTE; \ void _XBT_LOGV_CTOR(catName)(void) \ { \ XBT_LOG_EXTERNAL_CATEGORY(catName); \ if (!_XBT_LOGV(catName).initialized) { \ _xbt_log_cat_init(&_XBT_LOGV(catName), xbt_log_priority_uninitialized); \ } \ } \ XBT_EXPORT_NO_IMPORT(s_xbt_log_category_t) _XBT_LOGV(catName) = { \ &_XBT_LOGV(parent), \ NULL /* firstChild */, \ NULL /* nextSibling */, \ #catName, \ desc, \ 0 /*initialized */, \ xbt_log_priority_uninitialized /* threshold */, \ 1 /* isThreshInherited */, \ NULL /* appender */, \ NULL /* layout */, \ 1 /* additivity */ \ } /** * \ingroup XBT_log * \param catName name of new category * \param parent father of the new category in the tree * \param desc string describing the purpose of this category * \hideinitializer * * Defines a new subcategory of the parent. */ #define XBT_LOG_NEW_SUBCATEGORY(catName, parent, desc) \ XBT_LOG_EXTERNAL_CATEGORY(parent); \ XBT_LOG_NEW_SUBCATEGORY_helper(catName, parent, desc) \ /** * \ingroup XBT_log * \param catName name of new category * \param desc string describing the purpose of this category * \hideinitializer * * Creates a new subcategory of the root category. */ # define XBT_LOG_NEW_CATEGORY(catName,desc) \ XBT_LOG_NEW_SUBCATEGORY_helper(catName, XBT_LOG_ROOT_CAT, desc) /** * \ingroup XBT_log * \param cname name of the cat * \hideinitializer * * Indicates which category is the default one. */ #if defined(XBT_LOG_MAYDAY) || defined(SUPERNOVAE_MODE) /*|| defined (NLOG) * turning logging off */ # define XBT_LOG_DEFAULT_CATEGORY(cname) #else # define XBT_LOG_DEFAULT_CATEGORY(cname) \ static xbt_log_category_t _XBT_LOGV(default) _XBT_GNUC_UNUSED = &_XBT_LOGV(cname) #endif /** * \ingroup XBT_log * \param cname name of the cat * \param desc string describing the purpose of this category * \hideinitializer * * Creates a new subcategory of the root category and makes it the default * (used by macros that don't explicitly specify a category). */ # define XBT_LOG_NEW_DEFAULT_CATEGORY(cname,desc) \ XBT_LOG_NEW_CATEGORY(cname,desc); \ XBT_LOG_DEFAULT_CATEGORY(cname) /** * \ingroup XBT_log * \param cname name of the cat * \param parent name of the parent * \param desc string describing the purpose of this category * \hideinitializer * * Creates a new subcategory of the parent category and makes it the default * (used by macros that don't explicitly specify a category). */ #define XBT_LOG_NEW_DEFAULT_SUBCATEGORY(cname, parent, desc) \ XBT_LOG_NEW_SUBCATEGORY(cname, parent, desc); \ XBT_LOG_DEFAULT_CATEGORY(cname) /** * \ingroup XBT_log * \param cname name of the cat * \hideinitializer * * Indicates that a category you'll use in this file (to get subcategories of it, * for example) really lives in another file. */ #define XBT_LOG_EXTERNAL_CATEGORY(cname) \ extern s_xbt_log_category_t _XBT_LOGV(cname) /** * \ingroup XBT_log * \param cname name of the cat * \hideinitializer * * Indicates that the default category of this file was declared in another file. */ #define XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(cname) \ XBT_LOG_EXTERNAL_CATEGORY(cname);\ XBT_LOG_DEFAULT_CATEGORY(cname) /* Functions you may call */ XBT_PUBLIC(void) xbt_log_control_set(const char *cs); /* Forward declarations */ typedef struct xbt_log_appender_s s_xbt_log_appender_t, *xbt_log_appender_t; typedef struct xbt_log_layout_s s_xbt_log_layout_t, *xbt_log_layout_t; typedef struct xbt_log_event_s s_xbt_log_event_t, *xbt_log_event_t; typedef struct xbt_log_category_s s_xbt_log_category_t, *xbt_log_category_t; /* * Do NOT access any members of this structure directly. FIXME: move to private? */ struct xbt_log_category_s { xbt_log_category_t parent; xbt_log_category_t firstChild; xbt_log_category_t nextSibling; const char *name; const char *description; int initialized; int threshold; int isThreshInherited; xbt_log_appender_t appender; xbt_log_layout_t layout; int additivity; }; struct xbt_log_event_s { xbt_log_category_t cat; e_xbt_log_priority_t priority; const char *fileName; const char *functionName; int lineNum; va_list ap; char *buffer; int buffer_size; }; /** * \ingroup XBT_log_implem * \param cat the category (not only its name, but the variable) * \param thresholdPriority the priority * * Programatically alters a category's threshold priority (don't use). */ XBT_PUBLIC(void) xbt_log_threshold_set(xbt_log_category_t cat, e_xbt_log_priority_t thresholdPriority); /** * \ingroup XBT_log_implem * \param cat the category (not only its name, but the variable) * \param app the appender * * Programatically sets the category's appender. * (the prefered interface is throught xbt_log_control_set()) * */ XBT_PUBLIC(void) xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app); /** * \ingroup XBT_log_implem * \param cat the category (not only its name, but the variable) * \param lay the layout * * Programatically sets the category's layout. * (the prefered interface is throught xbt_log_control_set()) * */ XBT_PUBLIC(void) xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay); /** * \ingroup XBT_log_implem * \param cat the category (not only its name, but the variable) * \param additivity whether logging actions must be passed to parent. * * Programatically sets whether the logging actions must be passed to * the parent category. * (the prefered interface is throught xbt_log_control_set()) * */ XBT_PUBLIC(void) xbt_log_additivity_set(xbt_log_category_t cat, int additivity); /** @brief create a new simple layout * * This layout is not as flexible as the pattern one */ XBT_PUBLIC(xbt_log_layout_t) xbt_log_layout_simple_new(char *arg); XBT_PUBLIC(xbt_log_layout_t) xbt_log_layout_format_new(char *arg); XBT_PUBLIC(xbt_log_appender_t) xbt_log_appender_file_new(char *arg); /* ********************************** */ /* Functions that you shouldn't call */ /* ********************************** */ XBT_PUBLIC(void) _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) _XBT_GNUC_PRINTF(2, 3); XBT_PUBLIC(int) _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority); XBT_PUBLIC_DATA(s_xbt_log_category_t) _XBT_LOGV(XBT_LOG_ROOT_CAT); extern xbt_log_appender_t xbt_log_default_appender; extern xbt_log_layout_t xbt_log_default_layout; /* ********************** */ /* Public functions again */ /* ********************** */ /** * \ingroup XBT_log * \param catName name of the category * \param priority minimal priority to be enabled to return true (must be #e_xbt_log_priority_t) * \hideinitializer * * Returns true if the given priority is enabled for the category. * If you have expensive expressions that are computed outside of the log * command and used only within it, you should make its evaluation conditional * using this macro. */ #define XBT_LOG_ISENABLED(catName, priority) \ _XBT_LOG_ISENABLEDV(_XBT_LOGV(catName), priority) /* * Helper function that implements XBT_LOG_ISENABLED. * * NOTES * First part is a compile-time constant. * Call to xbt_log_cat_init only happens once. */ #define _XBT_LOG_ISENABLEDV(catv, priority) \ (priority >= XBT_LOG_STATIC_THRESHOLD \ && (catv.initialized || _xbt_log_cat_init(&catv, priority)) \ && priority >= catv.threshold) /* * Internal Macros * Some kludge macros to ease maintenance. See how they're used below. * * IMPLEMENTATION NOTE: To reduce the parameter passing overhead of an enabled * message, the many parameters passed to the logging function are packed in a * structure. Since these values will be usually be passed to at least 3 * functions, this is a win. * It also allows adding new values (such as a timestamp) without breaking * code. * Setting the LogEvent's valist member is done inside _log_logEvent. */ /* Logging Macros */ #ifdef XBT_LOG_MAYDAY # define XBT_CLOG(cat, prio, ...) \ _XBT_IF_ONE_ARG(_XBT_CLOG_ARG1, _XBT_CLOG_ARGN, __VA_ARGS__)(__VA_ARGS__) # define _XBT_CLOG_ARG1(f) \ fprintf(stderr,"%s:%d:\n" f, __FILE__, __LINE__) # define _XBT_CLOG_ARGN(f, ...) \ fprintf(stderr,"%s:%d:\n" f, __FILE__, __LINE__, __VA_ARGS__) # define XBT_LOG(...) XBT_CLOG(0, __VA_ARGS__) #else # define XBT_CLOG_(catv, prio, ...) \ do { \ if (_XBT_LOG_ISENABLEDV(catv, prio)) { \ s_xbt_log_event_t _log_ev; \ _log_ev.cat = &(catv); \ _log_ev.priority = (prio); \ _log_ev.fileName = __FILE__; \ _log_ev.functionName = _XBT_FUNCTION; \ _log_ev.lineNum = __LINE__; \ _xbt_log_event_log(&_log_ev, __VA_ARGS__); \ } \ } while (0) # define XBT_CLOG(cat, prio, ...) XBT_CLOG_(_XBT_LOGV(cat), prio, __VA_ARGS__) # define XBT_LOG(...) XBT_CLOG_((*_XBT_LOGV(default)), __VA_ARGS__) #endif /** @ingroup XBT_log * @hideinitializer * \param c the category on which to log * \param ... the format string and its arguments * @brief Log an event at the DEBUG priority on the specified category with these args. */ #define XBT_CDEBUG(c, ...) XBT_CLOG(c, xbt_log_priority_debug, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the VERB priority on the specified category with these args. */ #define XBT_CVERB(c, ...) XBT_CLOG(c, xbt_log_priority_verbose, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the INFO priority on the specified category with these args. */ #define XBT_CINFO(c, ...) XBT_CLOG(c, xbt_log_priority_info, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the WARN priority on the specified category with these args. */ #define XBT_CWARN(c, ...) XBT_CLOG(c, xbt_log_priority_warning, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the ERROR priority on the specified category with these args. */ #define XBT_CERROR(c, ...) XBT_CLOG(c, xbt_log_priority_error, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the CRITICAL priority on the specified category with these args (CCRITICALn exists for any n<10). */ #define XBT_CCRITICAL(c, ...) XBT_CLOG(c, xbt_log_priority_critical, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * \param ... the format string and its arguments * @brief Log an event at the DEBUG priority on the default category with these args. */ #define XBT_DEBUG(...) XBT_LOG(xbt_log_priority_debug, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the VERB priority on the default category with these args. */ #define XBT_VERB(...) XBT_LOG(xbt_log_priority_verbose, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the INFO priority on the default category with these args. */ #define XBT_INFO(...) XBT_LOG(xbt_log_priority_info, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the WARN priority on the default category with these args. */ #define XBT_WARN(...) XBT_LOG(xbt_log_priority_warning, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the ERROR priority on the default category with these args. */ #define XBT_ERROR(...) XBT_LOG(xbt_log_priority_error, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log an event at the CRITICAL priority on the default category with these args. */ #define XBT_CRITICAL(...) XBT_LOG(xbt_log_priority_critical, __VA_ARGS__) #define _XBT_IN_OUT(...) \ _XBT_IF_ONE_ARG(_XBT_IN_OUT_ARG1, _XBT_IN_OUT_ARGN, __VA_ARGS__)(__VA_ARGS__) #define _XBT_IN_OUT_ARG1(fmt) \ XBT_LOG(xbt_log_priority_trace, fmt, _XBT_FUNCTION) #define _XBT_IN_OUT_ARGN(fmt, ...) \ XBT_LOG(xbt_log_priority_trace, fmt, _XBT_FUNCTION, __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log at TRACE priority that we entered in current function, appending a user specified format. */ #define XBT_IN(...) _XBT_IN_OUT(">> begin of %s" __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log at TRACE priority that we exited the current function, appending a user specified format. */ #define XBT_OUT(...) _XBT_IN_OUT("<< end of %s" __VA_ARGS__) /** @ingroup XBT_log * @hideinitializer * @brief Log at TRACE priority a message indicating that we reached that point, appending a user specified format. */ #define XBT_HERE(...) XBT_LOG(xbt_log_priority_trace, "-- was here" __VA_ARGS__) #ifdef XBT_USE_DEPRECATED /* Kept for backward compatibility. */ #define CLOG0(...) XBT_CLOG(__VA_ARGS__) #define CLOG1(...) XBT_CLOG(__VA_ARGS__) #define CLOG2(...) XBT_CLOG(__VA_ARGS__) #define CLOG3(...) XBT_CLOG(__VA_ARGS__) #define CLOG4(...) XBT_CLOG(__VA_ARGS__) #define CLOG5(...) XBT_CLOG(__VA_ARGS__) #define CLOG6(...) XBT_CLOG(__VA_ARGS__) #define CLOG7(...) XBT_CLOG(__VA_ARGS__) #define CLOG8(...) XBT_CLOG(__VA_ARGS__) #define CLOG9(...) XBT_CLOG(__VA_ARGS__) #define CLOG10(...) XBT_CLOG(__VA_ARGS__) #define CDEBUG0(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG1(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG2(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG3(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG4(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG5(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG6(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG7(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG8(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG9(...) XBT_CDEBUG(__VA_ARGS__) #define CDEBUG10(...) XBT_CDEBUG(__VA_ARGS__) #define CVERB0(...) XBT_CVERB(__VA_ARGS__) #define CVERB1(...) XBT_CVERB(__VA_ARGS__) #define CVERB2(...) XBT_CVERB(__VA_ARGS__) #define CVERB3(...) XBT_CVERB(__VA_ARGS__) #define CVERB4(...) XBT_CVERB(__VA_ARGS__) #define CVERB5(...) XBT_CVERB(__VA_ARGS__) #define CVERB6(...) XBT_CVERB(__VA_ARGS__) #define CVERB7(...) XBT_CVERB(__VA_ARGS__) #define CVERB8(...) XBT_CVERB(__VA_ARGS__) #define CVERB9(...) XBT_CVERB(__VA_ARGS__) #define CVERB10(...) XBT_CVERB(__VA_ARGS__) #define CINFO0(...) XBT_CINFO(__VA_ARGS__) #define CINFO1(...) XBT_CINFO(__VA_ARGS__) #define CINFO2(...) XBT_CINFO(__VA_ARGS__) #define CINFO3(...) XBT_CINFO(__VA_ARGS__) #define CINFO4(...) XBT_CINFO(__VA_ARGS__) #define CINFO5(...) XBT_CINFO(__VA_ARGS__) #define CINFO6(...) XBT_CINFO(__VA_ARGS__) #define CINFO7(...) XBT_CINFO(__VA_ARGS__) #define CINFO8(...) XBT_CINFO(__VA_ARGS__) #define CINFO9(...) XBT_CINFO(__VA_ARGS__) #define CINFO10(...) XBT_CINFO(__VA_ARGS__) #define CWARN0(...) XBT_CWARN(__VA_ARGS__) #define CWARN1(...) XBT_CWARN(__VA_ARGS__) #define CWARN2(...) XBT_CWARN(__VA_ARGS__) #define CWARN3(...) XBT_CWARN(__VA_ARGS__) #define CWARN4(...) XBT_CWARN(__VA_ARGS__) #define CWARN5(...) XBT_CWARN(__VA_ARGS__) #define CWARN6(...) XBT_CWARN(__VA_ARGS__) #define CWARN7(...) XBT_CWARN(__VA_ARGS__) #define CWARN8(...) XBT_CWARN(__VA_ARGS__) #define CWARN9(...) XBT_CWARN(__VA_ARGS__) #define CWARN10(...) XBT_CWARN(__VA_ARGS__) #define CERROR0(...) XBT_CERROR(__VA_ARGS__) #define CERROR1(...) XBT_CERROR(__VA_ARGS__) #define CERROR2(...) XBT_CERROR(__VA_ARGS__) #define CERROR3(...) XBT_CERROR(__VA_ARGS__) #define CERROR4(...) XBT_CERROR(__VA_ARGS__) #define CERROR5(...) XBT_CERROR(__VA_ARGS__) #define CERROR6(...) XBT_CERROR(__VA_ARGS__) #define CERROR7(...) XBT_CERROR(__VA_ARGS__) #define CERROR8(...) XBT_CERROR(__VA_ARGS__) #define CERROR9(...) XBT_CERROR(__VA_ARGS__) #define CERROR10(...) XBT_CERROR(__VA_ARGS__) #define CCRITICAL0(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL1(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL2(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL3(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL4(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL5(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL6(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL7(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL8(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL9(...) XBT_CCRITICAL(__VA_ARGS__) #define CCRITICAL10(...) XBT_CCRITICAL(__VA_ARGS__) #define LOG0(...) XBT_LOG(__VA_ARGS__) #define LOG1(...) XBT_LOG(__VA_ARGS__) #define LOG2(...) XBT_LOG(__VA_ARGS__) #define LOG3(...) XBT_LOG(__VA_ARGS__) #define LOG4(...) XBT_LOG(__VA_ARGS__) #define LOG5(...) XBT_LOG(__VA_ARGS__) #define LOG6(...) XBT_LOG(__VA_ARGS__) #define LOG7(...) XBT_LOG(__VA_ARGS__) #define LOG8(...) XBT_LOG(__VA_ARGS__) #define LOG9(...) XBT_LOG(__VA_ARGS__) #define LOG10(...) XBT_LOG(__VA_ARGS__) #define DEBUG0(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG1(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG2(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG3(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG4(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG5(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG6(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG7(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG8(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG9(...) XBT_DEBUG(__VA_ARGS__) #define DEBUG10(...) XBT_DEBUG(__VA_ARGS__) #define VERB0(...) XBT_VERB(__VA_ARGS__) #define VERB1(...) XBT_VERB(__VA_ARGS__) #define VERB2(...) XBT_VERB(__VA_ARGS__) #define VERB3(...) XBT_VERB(__VA_ARGS__) #define VERB4(...) XBT_VERB(__VA_ARGS__) #define VERB5(...) XBT_VERB(__VA_ARGS__) #define VERB6(...) XBT_VERB(__VA_ARGS__) #define VERB7(...) XBT_VERB(__VA_ARGS__) #define VERB8(...) XBT_VERB(__VA_ARGS__) #define VERB9(...) XBT_VERB(__VA_ARGS__) #define VERB10(...) XBT_VERB(__VA_ARGS__) #define INFO0(...) XBT_INFO(__VA_ARGS__) #define INFO1(...) XBT_INFO(__VA_ARGS__) #define INFO2(...) XBT_INFO(__VA_ARGS__) #define INFO3(...) XBT_INFO(__VA_ARGS__) #define INFO4(...) XBT_INFO(__VA_ARGS__) #define INFO5(...) XBT_INFO(__VA_ARGS__) #define INFO6(...) XBT_INFO(__VA_ARGS__) #define INFO7(...) XBT_INFO(__VA_ARGS__) #define INFO8(...) XBT_INFO(__VA_ARGS__) #define INFO9(...) XBT_INFO(__VA_ARGS__) #define INFO10(...) XBT_INFO(__VA_ARGS__) #define WARN0(...) XBT_WARN(__VA_ARGS__) #define WARN1(...) XBT_WARN(__VA_ARGS__) #define WARN2(...) XBT_WARN(__VA_ARGS__) #define WARN3(...) XBT_WARN(__VA_ARGS__) #define WARN4(...) XBT_WARN(__VA_ARGS__) #define WARN5(...) XBT_WARN(__VA_ARGS__) #define WARN6(...) XBT_WARN(__VA_ARGS__) #define WARN7(...) XBT_WARN(__VA_ARGS__) #define WARN8(...) XBT_WARN(__VA_ARGS__) #define WARN9(...) XBT_WARN(__VA_ARGS__) #define WARN10(...) XBT_WARN(__VA_ARGS__) #define ERROR0(...) XBT_ERROR(__VA_ARGS__) #define ERROR1(...) XBT_ERROR(__VA_ARGS__) #define ERROR2(...) XBT_ERROR(__VA_ARGS__) #define ERROR3(...) XBT_ERROR(__VA_ARGS__) #define ERROR4(...) XBT_ERROR(__VA_ARGS__) #define ERROR5(...) XBT_ERROR(__VA_ARGS__) #define ERROR6(...) XBT_ERROR(__VA_ARGS__) #define ERROR7(...) XBT_ERROR(__VA_ARGS__) #define ERROR8(...) XBT_ERROR(__VA_ARGS__) #define ERROR9(...) XBT_ERROR(__VA_ARGS__) #define ERROR10(...) XBT_ERROR(__VA_ARGS__) #define CRITICAL0(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL1(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL2(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL3(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL4(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL5(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL6(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL7(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL8(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL9(...) XBT_CRITICAL(__VA_ARGS__) #define CRITICAL10(...) XBT_CRITICAL(__VA_ARGS__) #define XBT_IN1(...) XBT_IN(__VA_ARGS__); #define XBT_IN2(...) XBT_IN(__VA_ARGS__); #define XBT_IN3(...) XBT_IN(__VA_ARGS__); #define XBT_IN4(...) XBT_IN(__VA_ARGS__); #define XBT_IN5(...) XBT_IN(__VA_ARGS__); #define XBT_IN6(...) XBT_IN(__VA_ARGS__); #endif SG_END_DECL() #endif /* ! _XBT_LOG_H_ */ SimGrid-3.10/include/xbt/fifo.h000640 007661 000620 00000007302 12242224150 016531 0ustar00gierschand000000 000000 /* Copyright (c) 2004-2007, 2009-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_FIFO_H #define _XBT_FIFO_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ #include "xbt/function_types.h" /* int_f_pvoid_pvoid_t */ SG_BEGIN_DECL() /** @addtogroup XBT_fifo * @brief This section describes the API to generic workqueue. * * These functions provide the same kind of functionnality as dynamic arrays but in time O(1). * However these functions use malloc/free way too much often. */ /** @defgroup XBT_fifo_cons Fifo constructor and destructor * @ingroup XBT_fifo * * @{ */ /** \brief Bucket structure */ typedef struct xbt_fifo_item *xbt_fifo_item_t; /** \brief FIFO structure */ typedef struct xbt_fifo *xbt_fifo_t; XBT_PUBLIC(xbt_fifo_t) xbt_fifo_new(void); XBT_PUBLIC(void) xbt_fifo_free(xbt_fifo_t); XBT_PUBLIC(void) xbt_fifo_reset(xbt_fifo_t); /** @} */ /** @defgroup XBT_fifo_perl Fifo perl-like functions * @ingroup XBT_fifo * * @{ */ XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_push(xbt_fifo_t, void *); XBT_PUBLIC(void *) xbt_fifo_pop(xbt_fifo_t); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_unshift(xbt_fifo_t, void *); XBT_PUBLIC(void *) xbt_fifo_shift(xbt_fifo_t); XBT_PUBLIC(int) xbt_fifo_size(xbt_fifo_t); XBT_PUBLIC(int) xbt_fifo_is_in(xbt_fifo_t, void *); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_search_item(xbt_fifo_t f, int_f_pvoid_pvoid_t cmp_fun, void *closure); /** @} */ /** @defgroup XBT_fifo_direct Direct access to fifo elements * @ingroup XBT_fifo * * @{ */ XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_new_item(void); XBT_PUBLIC(void) xbt_fifo_set_item_content(xbt_fifo_item_t, void *); XBT_PUBLIC(void *) xbt_fifo_get_item_content(xbt_fifo_item_t); XBT_PUBLIC(void) xbt_fifo_free_item(xbt_fifo_item_t); XBT_PUBLIC(void) xbt_fifo_push_item(xbt_fifo_t, xbt_fifo_item_t); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_pop_item(xbt_fifo_t); XBT_PUBLIC(void) xbt_fifo_unshift_item(xbt_fifo_t, xbt_fifo_item_t); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_shift_item(xbt_fifo_t); XBT_PUBLIC(int) xbt_fifo_remove(xbt_fifo_t, void *); XBT_PUBLIC(int) xbt_fifo_remove_all(xbt_fifo_t, void *); XBT_PUBLIC(void) xbt_fifo_remove_item(xbt_fifo_t, xbt_fifo_item_t); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_get_first_item(xbt_fifo_t l); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_get_last_item(xbt_fifo_t l); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_get_next_item(xbt_fifo_item_t i); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_get_prev_item(xbt_fifo_item_t i); /** * \brief List iterator * asserts and stuff * \param f a list (#xbt_fifo_t) * \param i a bucket (#xbt_fifo_item_t) * \param type a type * \param n an object of type \a type. * @hideinitializer * * Iterates over the whole list. */ #define xbt_fifo_foreach(f,i,n,type) \ for(i=xbt_fifo_get_first_item(f); \ ((i)?(n=(type)(xbt_fifo_get_item_content(i))):(NULL)); \ i=xbt_fifo_get_next_item(i)) /** @} */ /** @defgroup XBT_fifo_misc Misc fifo functions * @ingroup XBT_fifo * * @{ */ XBT_PUBLIC(void **) xbt_fifo_to_array(xbt_fifo_t); XBT_PUBLIC(xbt_fifo_t) xbt_fifo_copy(xbt_fifo_t); /** @} */ /* Deprecated functions: don't use! */ XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_newitem(void); XBT_PUBLIC(void) xbt_fifo_freeitem(xbt_fifo_item_t); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_getFirstItem(xbt_fifo_t l); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_getNextItem(xbt_fifo_item_t i); XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_getPrevItem(xbt_fifo_item_t i); SG_END_DECL() #endif /* _XBT_FIFO_H */ SimGrid-3.10/include/xbt/function_types.h000640 007661 000620 00000002201 12242224150 020650 0ustar00gierschand000000 000000 /* function_type.h - classical types for pointer to function */ /* Copyright (c) 2006-2007, 2009-2010, 2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_FUNCTION_TYPE_H #define XBT_FUNCTION_TYPE_H #include "xbt/misc.h" SG_BEGIN_DECL() typedef void (*void_f_ppvoid_t) (void **); typedef void (*void_f_pvoid_t) (void *); typedef void (*void_f_int_pvoid_t) (int, void *); typedef void *(*pvoid_f_void_t) (void); typedef void *(*pvoid_f_pvoid_t) (void *); typedef void (*void_f_void_t) (void); typedef int (*int_f_void_t) (void); typedef int (*int_f_pvoid_t) (void*); typedef int (*int_f_pvoid_pvoid_t) (void *, void *); typedef int (*int_f_cpvoid_cpvoid_t) (const void *, const void *); typedef int (*xbt_main_func_t) (int argc, char *argv[]); typedef double(*double_f_pvoid_t) (void *); typedef double(*double_f_cpvoid_t) (const void *); SG_END_DECL() #endif /* XBT_FUNCTION_TYPE_H */ SimGrid-3.10/include/xbt/str.h000640 007661 000620 00000010042 12242224150 016411 0ustar00gierschand000000 000000 /* str.h - XBT string related functions. */ /* Copyright (c) 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_STR_H #define XBT_STR_H #include /* va_* */ #include "xbt/misc.h" #include "xbt/dynar.h" #include "xbt/dict.h" #include "simgrid_config.h" /* FILE for getline */ SG_BEGIN_DECL() /** @addtogroup XBT_str * @brief String manipulation functions * * This module defines several string related functions. We redefine some quite classical * functions on the platforms were they are not nativaly defined (such as xbt_getline() or * asprintf()), while some other are a bit more exotic. * @{ */ /* Our own implementation of getline, mainly useful on the platforms not enjoying this function */ #include /* FILE */ #include /* size_t, ssize_t */ XBT_PUBLIC(ssize_t) xbt_getline(char **lineptr, size_t * n, FILE * stream); /* Trim related functions */ XBT_PUBLIC(void) xbt_str_rtrim(char *s, const char *char_list); XBT_PUBLIC(void) xbt_str_ltrim(char *s, const char *char_list); XBT_PUBLIC(void) xbt_str_trim(char *s, const char *char_list); XBT_PUBLIC(xbt_dynar_t) xbt_str_split(const char *s, const char *sep); XBT_PUBLIC(xbt_dynar_t) xbt_str_split_quoted(const char *s); XBT_PUBLIC(xbt_dynar_t) xbt_str_split_quoted_in_place(char *s); XBT_PUBLIC(xbt_dynar_t) xbt_str_split_str(const char *s, const char *sep); XBT_PUBLIC(char *) xbt_str_join(xbt_dynar_t dynar, const char *sep); XBT_PUBLIC(char *) xbt_str_join_array(const char *const *strs, const char *sep); /* */ XBT_PUBLIC(void) xbt_str_subst(char *str, char from, char to, int amount); XBT_PUBLIC(char *) xbt_str_varsubst(const char *str, xbt_dict_t patterns); /* */ XBT_PUBLIC(void) xbt_str_strip_spaces(char *); XBT_PUBLIC(char *) xbt_str_diff(const char *a, const char *b); XBT_PUBLIC(char *) xbt_str_from_file(FILE * file); XBT_PUBLIC(int) xbt_str_start_with(const char* str, const char* start); #define DJB2_HASH_FUNCTION //#define FNV_HASH_FUNCTION /** * @brief Returns the hash code of a string. */ static XBT_INLINE unsigned int xbt_str_hash_ext(const char *str, int str_len) { #ifdef DJB2_HASH_FUNCTION /* fast implementation of djb2 algorithm */ int c; register unsigned int hash = 5381; while (str_len--) { c = *str++; hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ } # elif defined(FNV_HASH_FUNCTION) register unsigned int hash = 0x811c9dc5; unsigned char *bp = (unsigned char *) str; /* start of buffer */ unsigned char *be = bp + str_len; /* beyond end of buffer */ while (bp < be) { /* multiply by the 32 bit FNV magic prime mod 2^32 */ hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24); /* xor the bottom with the current octet */ hash ^= (unsigned int) *bp++; } # else register unsigned int hash = 0; while (str_len--) { hash += (*str) * (*str); str++; } #endif return hash; } /** * @brief Returns the hash code of a string. */ static XBT_INLINE unsigned int xbt_str_hash(const char *str) { #ifdef DJB2_HASH_FUNCTION /* fast implementation of djb2 algorithm */ int c; register unsigned int hash = 5381; while ((c = *str++)) { hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ } # elif defined(FNV_HASH_FUNCTION) register unsigned int hash = 0x811c9dc5; while (*str) { /* multiply by the 32 bit FNV magic prime mod 2^32 */ hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24); /* xor the bottom with the current byte */ hash ^= (unsigned int) *str++; } # else register unsigned int hash = 0; while (*str) { hash += (*str) * (*str); str++; } #endif return hash; } /**@}*/ SG_END_DECL() #endif /* XBT_STR_H */ SimGrid-3.10/include/xbt/win32_ucontext.h000640 007661 000620 00000003212 12242224151 020476 0ustar00gierschand000000 000000 /* * win32-ucontext: Unix ucontext_t operations on Windows platforms * Copyright(C) 2007 Panagiotis E. Hadjidoukas * * Contact Email: phadjido@cs.uoi.gr, xdoukas@ceid.upatras.gr * * win32-ucontext 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 2 of the License, or (at your option) any later version. * * win32-ucontext is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with SimGrid in the file LICENSE-LGPL-2.1; * if not, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef UCONTEXT_H #define UCONTEXT_H #include typedef struct __stack { void *ss_sp; size_t ss_size; int ss_flags; } stack_t; typedef CONTEXT mcontext_t; typedef unsigned long __sigset_t; typedef struct __ucontext { unsigned long int uc_flags; struct __ucontext *uc_link; stack_t uc_stack; mcontext_t uc_mcontext; __sigset_t uc_sigmask; } ucontext_t; int getcontext(ucontext_t * ucp); int setcontext(const ucontext_t * ucp); int makecontext(ucontext_t *, void (*)(), int, ...); int swapcontext(ucontext_t *, const ucontext_t *); #endif /* UCONTEXT_H */ SimGrid-3.10/include/xbt/synchro_core.h000640 007661 000620 00000010176 12242224150 020306 0ustar00gierschand000000 000000 /* xbt/synchro_core.h -- Synchronization tools */ /* Usable in simulator, (or in real life when mixing with GRAS) */ /* Copyright (c) 2009-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ /* splited away from synchro.h since we are used by dynar.h, and synchro.h uses dynar */ #ifndef _XBT_THREAD_H #define _XBT_THREAD_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ #include "xbt/function_types.h" SG_BEGIN_DECL() /** @addtogroup XBT_synchro * @brief XBT synchronization tools * * This section describes the XBT synchronization tools. It defines types and * functions very close to the pthread API, but widly usable. When used from * the simulator, you will lock simulated processes as expected. When used * from GRAS programs compiled for in-situ execution, you have synchronization * mecanism portable to windows and UNIX. Nice, isn't it? * * @{ */ /** @brief Thread data type (opaque object) * @hideinitializer */ typedef struct s_xbt_thread_ *xbt_thread_t; /** @brief Creates a new thread. * * @param name the name used in the logs for the newly created thread * @param start_routine function to run * @param param parameter to pass to the function to run * @param joinable whether the new thread should be started joinable or detached */ XBT_PUBLIC(xbt_thread_t) xbt_thread_create(const char *name, void_f_pvoid_t start_routine, void *param, int joinable); /** @brief Get a reference to the currently running thread */ XBT_PUBLIC(xbt_thread_t) xbt_thread_self(void); /** @brief Get the name of a given thread */ XBT_PUBLIC(const char *) xbt_thread_name(xbt_thread_t t); /** @brief Get a reference to the name of the currently running thread */ XBT_PUBLIC(const char *) xbt_thread_self_name(void); /** @brief Wait for the termination of the given thread, and free it (ie the XBT wrapper around it, the OS frees the rest) */ XBT_PUBLIC(void) xbt_thread_join(xbt_thread_t thread); /** @brief Ends the life of the poor victim (not always working if it's computing, but working if it's blocked in the OS) */ XBT_PUBLIC(void) xbt_thread_cancel(xbt_thread_t thread); /** @brief commit suicide */ XBT_PUBLIC(void) xbt_thread_exit(void); /** @brief the current thread passes control to any possible thread wanting it */ XBT_PUBLIC(void) xbt_thread_yield(void); /** @brief Thread mutex data type (opaque object) * @hideinitializer */ typedef struct s_xbt_mutex_ *xbt_mutex_t; /** @brief Creates a new mutex variable */ XBT_PUBLIC(xbt_mutex_t) xbt_mutex_init(void); /** @brief Blocks onto the given mutex variable */ XBT_PUBLIC(void) xbt_mutex_acquire(xbt_mutex_t mutex); /** @brief Releases the given mutex variable */ XBT_PUBLIC(void) xbt_mutex_release(xbt_mutex_t mutex); /** @brief Destroyes the given mutex variable */ XBT_PUBLIC(void) xbt_mutex_destroy(xbt_mutex_t mutex); /** @brief Thread condition data type (opaque object) * @hideinitializer */ typedef struct s_xbt_cond_ *xbt_cond_t; /** @brief Creates a condition variable */ XBT_PUBLIC(xbt_cond_t) xbt_cond_init(void); /** @brief Blocks onto the given condition variable */ XBT_PUBLIC(void) xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex); /** @brief Blocks onto the given condition variable, but only for the given amount of time. a timeout exception is raised if it was impossible to acquire it in the given time frame */ XBT_PUBLIC(void) xbt_cond_timedwait(xbt_cond_t cond, xbt_mutex_t mutex, double delay); /** @brief Signals the given mutex variable */ XBT_PUBLIC(void) xbt_cond_signal(xbt_cond_t cond); /** @brief Broadcasts the given mutex variable */ XBT_PUBLIC(void) xbt_cond_broadcast(xbt_cond_t cond); /** @brief Destroys the given mutex variable */ XBT_PUBLIC(void) xbt_cond_destroy(xbt_cond_t cond); /** @} */ SG_END_DECL() #endif /* _XBT_THREAD_H */ SimGrid-3.10/include/xbt/matrix.h000640 007661 000620 00000005721 12242224150 017115 0ustar00gierschand000000 000000 /* xbt_matrix_t management functions */ /* Copyright (c) 2006-2007, 2009-2010. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_MATRIX_H #define XBT_MATRIX_H #include "xbt/misc.h" #include "xbt/function_types.h" SG_BEGIN_DECL() typedef struct { unsigned int lines, rows; unsigned long elmsize; char *data; void_f_pvoid_t free_f; } s_xbt_matrix_t, *xbt_matrix_t; /** @brief Retrieve the address of a cell (not its content) * @hideinitializer */ #define xbt_matrix_get_ptr(mat,l,c) \ ((void*)&(mat)->data[(c)*(mat)->lines*(mat)->elmsize + (l)*(mat)->elmsize]) /** @brief Quick retrieval of scalar content * @hideinitializer */ #define xbt_matrix_get_as(mat,l,c,type) *(type*)xbt_matrix_get_ptr(mat,l,c) XBT_PUBLIC(xbt_matrix_t) xbt_matrix_new(int lines, int rows, const unsigned long elmsize, void_f_pvoid_t const free_f); XBT_PUBLIC(xbt_matrix_t) xbt_matrix_new_sub(xbt_matrix_t from, int lsize, int rsize, int lpos, int rpos, pvoid_f_pvoid_t const cpy_f); XBT_PUBLIC(void) xbt_matrix_free(xbt_matrix_t matrix); XBT_PUBLIC(void) xbt_matrix_free_voidp(void *d); XBT_PUBLIC(void) xbt_matrix_copy_values(xbt_matrix_t dest, xbt_matrix_t src, unsigned int lsize, unsigned int rsize, unsigned int lpos_dst, unsigned int rpos_dst, unsigned int lpos_src, unsigned int rpos_src, pvoid_f_pvoid_t const cpy_f); XBT_PUBLIC(void) xbt_matrix_dump(xbt_matrix_t matrix, const char *name, int coords, void_f_pvoid_t display_fun); XBT_PUBLIC(void) xbt_matrix_dump_display_double(void *d); XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_zeros(int lines, int rows); XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_id(int lines, int rows); XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_rand(int lines, int rows); XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_seq(int lines, int rows); XBT_PUBLIC(int) xbt_matrix_double_is_seq(xbt_matrix_t mat); XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_mult(xbt_matrix_t A, xbt_matrix_t B); XBT_PUBLIC(void) xbt_matrix_double_addmult(xbt_matrix_t A, xbt_matrix_t B, /*OUT*/ xbt_matrix_t C); SG_END_DECL() #endif /* XBT_MATRIX_H */ SimGrid-3.10/include/xbt/config.h000640 007661 000620 00000023122 12242224150 017051 0ustar00gierschand000000 000000 /* config - Dictionary where the type of each cell is provided. */ /* This is useful to build named structs, like option or property sets. */ /* Copyright (c) 2004-2007, 2009-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_CONFIG_H_ #define _XBT_CONFIG_H_ #include #include "xbt/dynar.h" SG_BEGIN_DECL() /** @addtogroup XBT_config * @brief Changing the configuration of SimGrid components (grounding feature) * * All modules of the SimGrid toolkit can be configured with this API. * User modules and libraries can also use these facilities to handle * their own configuration. * * A configuration set contain several \e variables which have a unique name * in the set and can take a given type of value. For example, it may * contain a \a size variable, accepting \e int values. * * It is impossible to set a value to a variable which has not been registered before. * Usually, the module registers all the options it accepts in the configuration set, * during its initialization and user code then set and unset values. * * The easiest way to register a variable is to use the xbt_str_register_str function, * which accepts a string representation of the config element descriptor. The syntax * is the following: \verbatim :_to__\endverbatim * * For example, size:1_to_1_int describes a variable called \e size which * must take exactly one value, and the value being an integer. Set the maximum to 0 to * disable the upper bound on data count. * * Another example could be outputfiles:0_to_10_string which describes a variable * called \e outputfiles and which can take between 0 and 10 strings as value. * * To some extend, configuration sets can be seen as typed hash structures. * * * \section XBT_cfg_ex Example of use * * \dontinclude config.c * * First, let's create a configuration set with some registered variables. * This must be done by the configurable library before the user interactions. * * \skip make_set * \until end_of_make_set * * Now, set and get a single value * \skip get_single_value * \skip int * \until cfg_free * * And now, set and get a multiple value * \skip get_multiple_value * \skip dyn * \until cfg_free * * All those functions throws mismatch_error if asked to deal with an * unregistered variable. * \skip myset * \until cfg_free * */ /** @defgroup XBT_cfg_use User interface: changing values * @ingroup XBT_config * * This is the only interface you should use unless you want to let your * own code become configurable with this. * * If the variable accept at most one value, those functions replace the * current value with the provided one. If max>1, the provided value is * appended to the list. * * string values are strdup'ed before use, so you can (and should) free * your copy * * @{ */ /** @brief Configuration set's data type is opaque. */ typedef void* xbt_cfg_t; XBT_PUBLIC(void) xbt_cfg_set(xbt_cfg_t cfg, const char *name, ...); XBT_PUBLIC(void) xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa); XBT_PUBLIC(void) xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options); /* Set the value of the cell \a name in \a cfg with the provided value. */ XBT_PUBLIC(void) xbt_cfg_set_int(xbt_cfg_t cfg, const char *name, int val); XBT_PUBLIC(void) xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, double val); XBT_PUBLIC(void) xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, const char *val); XBT_PUBLIC(void) xbt_cfg_set_boolean(xbt_cfg_t cfg, const char *name, const char *val); XBT_PUBLIC(void) xbt_cfg_set_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port); XBT_PUBLIC(void*) xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *name, const char *val); /* Set the default value of the cell \a name in \a cfg with the provided value. If it was already set to something (possibly from the command line), do nothing. */ XBT_PUBLIC(void) xbt_cfg_setdefault_int(xbt_cfg_t cfg, const char *name, int val); XBT_PUBLIC(void) xbt_cfg_setdefault_double(xbt_cfg_t cfg, const char *name, double val); XBT_PUBLIC(void) xbt_cfg_setdefault_string(xbt_cfg_t cfg, const char *name, const char *val); XBT_PUBLIC(void) xbt_cfg_setdefault_boolean(xbt_cfg_t cfg, const char *name, const char *val); XBT_PUBLIC(void) xbt_cfg_setdefault_peer(xbt_cfg_t cfg, const char *name, const char *host, int port); /* Remove the provided value from the cell @name in @cfg. */ XBT_PUBLIC(void) xbt_cfg_rm_int(xbt_cfg_t cfg, const char *name, int val); XBT_PUBLIC(void) xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, double val); XBT_PUBLIC(void) xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, const char *val); XBT_PUBLIC(void) xbt_cfg_rm_boolean(xbt_cfg_t cfg, const char *name, int val); XBT_PUBLIC(void) xbt_cfg_rm_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port); /* Remove the value at position \e pos from the config \e cfg */ XBT_PUBLIC(void) xbt_cfg_rm_at(xbt_cfg_t cfg, const char *name, int pos); /* rm every values */ XBT_PUBLIC(void) xbt_cfg_empty(xbt_cfg_t cfg, const char *name); /* Return if configuration is set by default*/ XBT_PUBLIC(int) xbt_cfg_is_default_value(xbt_cfg_t cfg, const char *name); /* @} */ /** @defgroup XBT_cfg_decl Configuration type declaration and memory management * @ingroup XBT_config * * @{ */ /** @brief possible content of each configuration cell */ typedef enum { xbt_cfgelm_int = 0, /**< int */ xbt_cfgelm_double, /**< double */ xbt_cfgelm_string, /**< char* */ xbt_cfgelm_boolean, /**< int */ xbt_cfgelm_peer, /**< both a char* (representing the peername) and an integer (representing the port) */ xbt_cfgelm_any, /* not shown to users to prevent errors */ xbt_cfgelm_type_count } e_xbt_cfgelm_type_t; /** Boolean possible values **/ struct xbt_boolean_couple { const char *true_val; const char *false_val; }; /** \brief Callback types. They get the name of the modified entry, and the position of the changed value */ typedef void (*xbt_cfg_cb_t) (const char *, int); XBT_PUBLIC(xbt_cfg_t) xbt_cfg_new(void); XBT_PUBLIC(void) xbt_cfg_cpy(xbt_cfg_t tocopy, /* OUT */ xbt_cfg_t * whereto); XBT_PUBLIC(void) xbt_cfg_free(xbt_cfg_t * cfg); XBT_PUBLIC(void) xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cfg); /** @} */ /** @defgroup XBT_cfg_register Registering stuff * @ingroup XBT_config * * This how to add new variables to an existing configuration set. Use it to make your code * configurable. * * @{ */ XBT_PUBLIC(void) xbt_cfg_register(xbt_cfg_t * cfg, const char *name, const char *description, e_xbt_cfgelm_type_t type, int min, int max, xbt_cfg_cb_t cb_set, xbt_cfg_cb_t cb_rm); XBT_PUBLIC(void) xbt_cfg_unregister(xbt_cfg_t cfg, const char *name); XBT_PUBLIC(void) xbt_cfg_register_str(xbt_cfg_t * cfg, const char *entry); XBT_PUBLIC(void) xbt_cfg_help(xbt_cfg_t cfg); XBT_PUBLIC(void) xbt_cfg_check(xbt_cfg_t cfg); XBT_PUBLIC(e_xbt_cfgelm_type_t) xbt_cfg_get_type(xbt_cfg_t cfg, const char *name); /* @} */ /** @defgroup XBT_cfg_get Getting the stored values * @ingroup XBT_config * * This is how to retrieve the values stored in the configuration set. This is only * intended to configurable code, naturally. * * Note that those function return a pointer to the values actually stored * in the set. Do not modify them unless you really know what you're doing. * Likewise, do not free the strings after use, they are not copy of the data, * but the data themselves. * * @{ */ XBT_PUBLIC(int) xbt_cfg_get_int(xbt_cfg_t cfg, const char *name); XBT_PUBLIC(double) xbt_cfg_get_double(xbt_cfg_t cfg, const char *name); XBT_PUBLIC(char *) xbt_cfg_get_string(xbt_cfg_t cfg, const char *name); XBT_PUBLIC(int) xbt_cfg_get_boolean(xbt_cfg_t cfg, const char *name); XBT_PUBLIC(void) xbt_cfg_get_peer(xbt_cfg_t cfg, const char *name, char **peer, int *port); XBT_PUBLIC(xbt_dynar_t) xbt_cfg_get_dynar(xbt_cfg_t cfg, const char *name); XBT_PUBLIC(int) xbt_cfg_get_int_at(xbt_cfg_t cfg, const char *name, int pos); XBT_PUBLIC(double) xbt_cfg_get_double_at(xbt_cfg_t cfg, const char *name, int pos); XBT_PUBLIC(char *) xbt_cfg_get_string_at(xbt_cfg_t cfg, const char *name, int pos); XBT_PUBLIC(int) xbt_cfg_get_boolean_at(xbt_cfg_t cfg, const char *name, int pos); XBT_PUBLIC(void) xbt_cfg_get_peer_at(xbt_cfg_t cfg, const char *name, int pos, char **peer, int *port); /** @} */ SG_END_DECL() #endif /* _XBT_CONFIG_H_ */ SimGrid-3.10/include/xbt/sysdep.h000640 007661 000620 00000012044 12242224150 017114 0ustar00gierschand000000 000000 /* xbt/sysdep.h -- all system dependency */ /* no system header should be loaded out of this file so that we have only */ /* one file to check when porting to another OS */ /* Copyright (c) 2004-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_SYSDEP_H #define _XBT_SYSDEP_H #include "xbt/log.h" #include "xbt/misc.h" #include "xbt/asserts.h" #include "simgrid_config.h" #include #include #include /* va_list */ SG_BEGIN_DECL() /* They live in asserts.h, but need to be declared before this module. double declaration to cut dependency cycle */ /** * @addtogroup XBT_error * * @{ */ /** @brief Kill the program in silence */ #ifdef COVERAGE /* Call __gcov_flush on abort when compiling with coverage options. */ #define xbt_abort() \ do { \ extern void __gcov_flush(void); \ __gcov_flush(); \ abort(); \ } while (0) #else #define xbt_abort() abort() #endif /** * @brief Kill the program with an error message * \param ... a format string and its arguments * * Things are so messed up that the only thing to do now, is to stop the * program. * * The message is handled by a CRITICAL logging request, and may consist of a * format string with arguments. */ #define xbt_die(...) \ do { \ XBT_LOG_EXTERNAL_CATEGORY(xbt); \ XBT_CCRITICAL(xbt, __VA_ARGS__); \ xbt_abort(); \ } while (0) /** @} */ /* these ones live in str.h, but redeclare them here so that we do not need to load the whole str.h and its heavy dependencies */ #ifndef __USE_GNU /* do not redeclare existing headers */ XBT_PUBLIC(int) asprintf(char **ptr, const char *fmt, /*args */ ...) _XBT_GNUC_PRINTF(2, 3); XBT_PUBLIC(int) vasprintf(char **ptr, const char *fmt, va_list ap); #endif XBT_PUBLIC(char *) bprintf(const char *fmt, ...) _XBT_GNUC_PRINTF(1, 2); /** @addtogroup XBT_syscall * @brief Malloc and associated functions, killing the program on error (with \ref XBT_ex) * * @{ */ #if defined(__GNUC__) || defined(DOXYGEN) /** @brief Like strdup, but xbt_die() on error */ static inline __attribute__ ((always_inline)) char *xbt_strdup(const char *s) { char *res = NULL; if (s) { res = strdup(s); if (!res) xbt_die("memory allocation error (strdup returned NULL)"); } return res; } XBT_PUBLIC(void) xbt_backtrace_display_current(void); /** @brief Like malloc, but xbt_die() on error @hideinitializer */ static inline __attribute__ ((always_inline)) void *xbt_malloc(size_t n) { void *res; /* if (n==0) { xbt_backtrace_display_current(); xbt_die("malloc(0) is not portable"); }*/ res = malloc(n); if (!res) xbt_die("Memory allocation of %lu bytes failed", (unsigned long)n); return res; } /** @brief like malloc, but xbt_die() on error and memset data to 0 @hideinitializer */ static inline __attribute__ ((always_inline)) void *xbt_malloc0(size_t n) { void *res; //if (n==0) xbt_die("calloc(0) is not portable"); res = calloc(n, 1); if (!res) xbt_die("Memory callocation of %lu bytes failed", (unsigned long)n); return res; } /** @brief like realloc, but xbt_die() on error @hideinitializer */ static inline __attribute__ ((always_inline)) void *xbt_realloc(void *p, size_t s) { void *res = NULL; //if (s==0) xbt_die("realloc(0) is not portable"); if (s) { if (p) { res = realloc(p, s); if (!res) xbt_die("memory (re)allocation of %lu bytes failed", (unsigned long)s); } else { res = xbt_malloc(s); } } else { free(p); } return res; } #else /* non __GNUC__ */ # define xbt_strdup(s) strdup(s) # define xbt_malloc(n) malloc(n) # define xbt_malloc0(n) calloc(n,1) # define xbt_realloc(p,s) realloc(p,s) #endif /* __GNUC__ ? */ /** @brief like free @hideinitializer */ #define xbt_free free /*nothing specific to do here. A poor valgrind replacement? */ /** @brief like free, but you can be sure that it is a function */ XBT_PUBLIC(void) xbt_free_f(void *p); /** @brief should be given a pointer to pointer, and frees the second one */ XBT_PUBLIC(void) xbt_free_ref(void *d); /** @brief like calloc, but xbt_die() on error and don't memset to 0 @hideinitializer */ #define xbt_new(type, count) ((type*)xbt_malloc (sizeof (type) * (count))) /** @brief like calloc, but xbt_die() on error @hideinitializer */ #define xbt_new0(type, count) ((type*)xbt_malloc0 (sizeof (type) * (count))) /** @} */ SG_END_DECL() #endif /* _XBT_SYSDEP_H */ SimGrid-3.10/include/xbt/mallocator.h000640 007661 000620 00000004502 12242224150 017742 0ustar00gierschand000000 000000 /* xbt/mallocator.h -- api to recycle allocated objects */ /* Copyright (c) 2006-2007, 2009-2010, 2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_MALLOCATOR_H #define _XBT_MALLOCATOR_H #include "xbt/function_types.h" #include "xbt/misc.h" /* SG_BEGIN_DECL */ SG_BEGIN_DECL() /** @addtogroup XBT_mallocator * @brief The mallocator system * * This section describes the API to a mallocator. * A mallocator allows you to recycle the objects you don't need anymore * instead of freeing them. A mallocator is a stack which stores the unused objects * or a given type. If you often need to malloc() / free() objects of a certain * type, you should use a mallocator and call \a xbt_mallocator_get() and * \a xbt_mallocator_release() instead of malloc() and free(). * * When you release an object, it is not freed but it is stored * into the mallocator (unless the mallocator is full). And when you want to get a * new object, the object is just extracted from the mallocator. No malloc() is * done, unless there is no more object in the mallocator. */ /** @defgroup XBT_mallocator_cons Mallocator constructor and destructor * @ingroup XBT_mallocator * * @{ */ /** \brief Mallocator data type (opaque structure) */ typedef struct s_xbt_mallocator *xbt_mallocator_t; XBT_PUBLIC(xbt_mallocator_t) xbt_mallocator_new(int size, pvoid_f_void_t new_f, void_f_pvoid_t free_f, void_f_pvoid_t reset_f); XBT_PUBLIC(void) xbt_mallocator_free(xbt_mallocator_t mallocator); /** @} */ /* object handling */ /** @defgroup XBT_mallocator_objects Mallocator object handling * @ingroup XBT_mallocator * * @{ */ XBT_PUBLIC(void *) xbt_mallocator_get(xbt_mallocator_t mallocator); XBT_PUBLIC(void) xbt_mallocator_release(xbt_mallocator_t mallocator, void *object); XBT_PUBLIC(void) xbt_mallocator_initialization_is_done(int protect); /** @} */ SG_END_DECL() #endif /* _XBT_MALLOCATOR_H */ SimGrid-3.10/include/xbt/dict.h000640 007661 000620 00000020107 12242224150 016527 0ustar00gierschand000000 000000 /* xbt/dict.h -- api to a generic dictionary */ /* Copyright (c) 2004-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_DICT_H #define _XBT_DICT_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ #include "xbt/dynar.h" /* void_f_pvoid_t */ #include /* uintptr_t */ SG_BEGIN_DECL() /** @addtogroup XBT_dict * @brief The dictionary data structure (comparable to hash tables) * * This section describes the API to a dictionary structure that * associates as string to a void* key. It provides the same * functionality than an hash table. * * Here is a little example of use: \verbatim xbt_dict_t mydict = xbt_dict_new(); char buff[512]; sprintf(buff,"some very precious data"); xbt_dict_set(mydict,"my data", strdup(buff), free); sprintf(buff,"another good stuff"); xbt_dict_set(mydict,"my data", strdup(buff), free); // previous data gets erased (and freed) by second add \endverbatim * */ /** @defgroup XBT_dict_cons Dict constructor and destructor * @ingroup XBT_dict * * @{ */ /** \brief Dictionary data type (opaque structure) */ typedef struct s_xbt_dict *xbt_dict_t; typedef struct s_xbt_dictelm *xbt_dictelm_t; typedef struct s_xbt_dictelm { char *key; int key_len; unsigned int hash_code; void *content; xbt_dictelm_t next; } s_xbt_dictelm_t; XBT_PUBLIC(xbt_dict_t) xbt_dict_new(void); XBT_PUBLIC(xbt_dict_t) xbt_dict_new_homogeneous(void_f_pvoid_t free_ctn); XBT_PUBLIC(void) xbt_dict_free(xbt_dict_t * dict); XBT_PUBLIC(unsigned int) xbt_dict_size(xbt_dict_t dict); /** @} */ /** @defgroup XBT_dict_basic Dictionaries basic usage * @ingroup XBT_dict * * Careful, those functions assume that the key is null-terminated. * * @{ */ XBT_PUBLIC(void) xbt_dict_set(xbt_dict_t dict, const char *key, void *data, void_f_pvoid_t free_ctn); XBT_PUBLIC(void *) xbt_dict_get(xbt_dict_t dict, const char *key); XBT_PUBLIC(void *) xbt_dict_get_or_null(xbt_dict_t dict, const char *key); XBT_PUBLIC(char *) xbt_dict_get_key(xbt_dict_t dict, const void *data); XBT_PUBLIC(xbt_dictelm_t) xbt_dict_get_elm(xbt_dict_t dict, const char *key); XBT_PUBLIC(xbt_dictelm_t) xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key); XBT_PUBLIC(void) xbt_dict_remove(xbt_dict_t dict, const char *key); XBT_PUBLIC(void) xbt_dict_reset(xbt_dict_t dict); XBT_PUBLIC(int) xbt_dict_length(xbt_dict_t dict); XBT_PUBLIC(void) xbt_dict_dump_output_string(void *s); XBT_PUBLIC(void) xbt_dict_dump(xbt_dict_t dict, void (*output) (void *)); XBT_PUBLIC(void) xbt_dict_dump_sizes(xbt_dict_t dict); XBT_PUBLIC(int) xbt_dict_is_empty(xbt_dict_t dict); /** @} */ /** @defgroup XBT_dict_nnul Dictionaries with non-nul terminated keys * @ingroup XBT_dict * * Those functions work even with non-null terminated keys. * * @{ */ XBT_PUBLIC(void) xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn); XBT_PUBLIC(void *) xbt_dict_get_ext(xbt_dict_t dict, const char *key, int key_len); XBT_PUBLIC(void *) xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key, int key_len); XBT_PUBLIC(void) xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len); #ifdef XBT_USE_DEPRECATED XBT_PUBLIC(void) xbt_dicti_set(xbt_dict_t dict, uintptr_t key, uintptr_t data); XBT_PUBLIC(uintptr_t) xbt_dicti_get(xbt_dict_t dict, uintptr_t key); XBT_PUBLIC(void) xbt_dicti_remove(xbt_dict_t dict, uintptr_t key); #endif /** @} */ /** @defgroup XBT_dict_curs Cursors on dictionaries * @ingroup XBT_dict * * Don't get impressed, there is a lot of functions here, but traversing a * dictionary is immediate with the xbt_dict_foreach macro. * You only need the other functions in rare cases (they are not used directly in SG itself). * * Here is an example (assuming that the dictionary contains strings, ie * that the data argument of xbt_dict_set was always a null-terminated char*): \verbatim xbt_dict_cursor_t cursor=NULL; char *key,*data; xbt_dict_foreach(dict,cursor,key,data) { printf(" - Seen: %s->%s\n",key,data); }\endverbatim * * \warning Do not add or remove entries to the cache while traversing !! * * @{ */ /** @brief Cursor on dictionaries (opaque type) */ struct s_xbt_dict_cursor { xbt_dictelm_t current; int line; xbt_dict_t dict; }; typedef struct s_xbt_dict_cursor *xbt_dict_cursor_t; static inline xbt_dictelm_t xbt_dict_cursor_get_elm(xbt_dict_cursor_t cursor) { return cursor->current; } XBT_PUBLIC(xbt_dict_cursor_t) xbt_dict_cursor_new(const xbt_dict_t dict); XBT_PUBLIC(void) xbt_dict_cursor_free(xbt_dict_cursor_t * cursor); XBT_PUBLIC(void) xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor); xbt_dictelm_t xbt_dict_cursor_get_elm(xbt_dict_cursor_t cursor); XBT_PUBLIC(char *) xbt_dict_cursor_get_key(xbt_dict_cursor_t cursor); XBT_PUBLIC(void *) xbt_dict_cursor_get_data(xbt_dict_cursor_t cursor); XBT_PUBLIC(void) xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn); XBT_PUBLIC(void) xbt_dict_cursor_first(const xbt_dict_t dict, xbt_dict_cursor_t * cursor); XBT_PUBLIC(void) xbt_dict_cursor_step(xbt_dict_cursor_t cursor); XBT_PUBLIC(int) xbt_dict_cursor_get_or_free(xbt_dict_cursor_t * cursor, char **key, void **data); /** @def xbt_dict_foreach * @param dict a \ref xbt_dict_t iterator * @param cursor an \ref xbt_dict_cursor_t used as cursor * @param key a char* * @param data a void** output * @hideinitializer * * \note An example of usage: * \code xbt_dict_cursor_t cursor = NULL; char *key; char *data; xbt_dict_foreach(head, cursor, key, data) { printf("Key %s with data %s\n",key,data); } \endcode */ # define xbt_dict_foreach(dict,cursor,key,data) \ for (cursor=NULL, xbt_dict_cursor_first((dict),&(cursor)) ; \ xbt_dict_cursor_get_or_free(&(cursor),(char**)&(key),(void**)(&data));\ xbt_dict_cursor_step(cursor) ) /** @} */ #ifdef XBT_USE_DEPRECATED /** @defgroup XBT_dict_multi Multi-level dictionaries * @ingroup XBT_dict * * They can be seen as dictionary of multiple keys or as dictionary of * dictionary of ... of data. Most of the functions here work the same way * than their simple dictionary counterpart. * * Note that there is no xbt_multidict_free neither xbt_multi_dict_new functions. * Use xbt_dict_free() and xbt_dict_new() instead. * * @{ */ /*----[ xbt_multidict_set ]--------------------------------------------------*/ XBT_PUBLIC(void) xbt_multidict_set(xbt_dict_t mdict, xbt_dynar_t keys, void *data, void (*free_ctn) (void *)); XBT_PUBLIC(void) xbt_multidict_set_ext(xbt_dict_t mdict, xbt_dynar_t keys, xbt_dynar_t lens, void *data, void_f_pvoid_t free_ctn); /*----[ xbt_multidict_get ]--------------------------------------------------*/ XBT_PUBLIC(void *) xbt_multidict_get(xbt_dict_t mdict, xbt_dynar_t keys); XBT_PUBLIC(void *) xbt_multidict_get_ext(xbt_dict_t mdict, xbt_dynar_t keys, xbt_dynar_t lens); /*----[ xbt_multidict_remove ]-----------------------------------------------*/ /*---------------------------------------------------------------------------*/ XBT_PUBLIC(void) xbt_multidict_remove(xbt_dict_t mdict, xbt_dynar_t keys); XBT_PUBLIC(void) xbt_multidict_remove_ext(xbt_dict_t mdict, xbt_dynar_t keys, xbt_dynar_t lens); /** @} */ #endif SG_END_DECL() #endif /* _XBT_DICT_H */ SimGrid-3.10/include/xbt/misc.h000640 007661 000620 00000020225 12242224150 016540 0ustar00gierschand000000 000000 /* xbt.h - Public interface to the xbt (simgrid's toolbox) */ /* Copyright (c) 2004-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_MISC_H #define XBT_MISC_H /* Define _GNU_SOURCE for getline, isfinite, etc. */ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif /* Attributes are only in recent versions of GCC */ #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)) # define _XBT_GNUC_PRINTF( format_idx, arg_idx ) \ __attribute__((__format__ (__printf__, format_idx, arg_idx))) # define _XBT_GNUC_SCANF( format_idx, arg_idx ) \ __attribute__((__format__ (__scanf__, format_idx, arg_idx))) # define _XBT_GNUC_NORETURN __attribute__((__noreturn__)) # define _XBT_GNUC_UNUSED __attribute__((__unused__)) /* Constructor priorities exist since gcc 4.3. Apparently, they are however not * supported on Macs. */ # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && !defined(__APPLE__) # define _XBT_GNUC_CONSTRUCTOR(prio) __attribute__((__constructor__ (prio))) # define _XBT_GNUC_DESTRUCTOR(prio) __attribute__((__destructor__ (prio))) # else # define _XBT_GNUC_CONSTRUCTOR(prio) __attribute__((__constructor__)) # define _XBT_GNUC_DESTRUCTOR(prio) __attribute__((__destructor__)) # endif # undef _XBT_NEED_INIT_PRAGMA #else /* !__GNUC__ */ # define _XBT_GNUC_PRINTF( format_idx, arg_idx ) # define _XBT_GNUC_SCANF( format_idx, arg_idx ) # define _XBT_GNUC_NORETURN # define _XBT_GNUC_UNUSED # define _XBT_GNUC_CONSTRUCTOR(prio) # define _XBT_GNUC_DESTRUCTOR(prio) # define _XBT_NEED_INIT_PRAGMA 1 #endif /* !__GNUC__ */ /* inline and __FUNCTION__ are only in GCC when -ansi is off */ #if defined(__GNUC__) && ! defined(__STRICT_ANSI__) # define _XBT_FUNCTION __FUNCTION__ #elif (defined(__STDC__) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) # define _XBT_FUNCTION __func__ /* ISO-C99 compliant */ #else # define _XBT_FUNCTION "function" #endif #ifdef DOXYGEN # define XBT_INLINE #else # ifndef __cplusplus # if defined(__GNUC__) && ! defined(__STRICT_ANSI__) # define XBT_INLINE inline # elif (defined(__STDC__) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) # define XBT_INLINE inline # elif defined(__BORLANDC__) && !defined(__STRICT_ANSI__) # define XBT_INLINE __inline # else # define XBT_INLINE # endif # else # if defined (__VISUALC__) # define XBT_INLINE __inline # else # define XBT_INLINE inline # endif # endif /* __cplusplus */ #endif /* improvable on gcc (by evaluating arguments only once), but wouldn't be portable */ #ifdef MIN # undef MIN #endif #define MIN(a,b) ((a)<(b)?(a):(b)) #ifdef MAX # undef MAX #endif #define MAX(a,b) ((a)>(b)?(a):(b)) /* * Expands to `one' if there is only one argument for the variadic part. * Otherwise, expands to `more'. * Works with up to 63 arguments, which is the maximum mandated by the C99 * standard. */ #define _XBT_IF_ONE_ARG(one, more, ...) \ _XBT_IF_ONE_ARG_(__VA_ARGS__, \ more, more, more, more, more, more, more, more, \ more, more, more, more, more, more, more, more, \ more, more, more, more, more, more, more, more, \ more, more, more, more, more, more, more, more, \ more, more, more, more, more, more, more, more, \ more, more, more, more, more, more, more, more, \ more, more, more, more, more, more, more, more, \ more, more, more, more, more, more, more, one) #define _XBT_IF_ONE_ARG_(a64, a63, a62, a61, a60, a59, a58, a57, \ a56, a55, a54, a53, a52, a51, a50, a49, \ a48, a47, a46, a45, a44, a43, a42, a41, \ a40, a39, a38, a37, a36, a35, a34, a33, \ a32, a31, a30, a29, a28, a27, a26, a25, \ a24, a23, a22, a21, a20, a19, a18, a17, \ a16, a15, a14, a13, a12, a11, a10, a9, \ a8, a7, a6, a5, a4, a3, a2, a1, N, ...) N /* * Function calling convention (not used for now) */ #ifdef _XBT_WIN32 # ifndef _XBT_CALL # define _XBT_CALL __cdecl # endif #else # define _XBT_CALL #endif /* Handle import/export stuff * * Rational of XBT_PUBLIC: * * This is for library symbols visible from the application-land. * Basically, any symbols defined in the include/directory must be * like this (plus some other globals). * * UNIX coders should just think of it as a special way to say "extern". * * * If you build the DLL, define the DLL_EXPORT symbol so that all symbols * actually get exported by this file. * * If you do a static windows compilation, define DLL_STATIC, both when * compiling the application files and when compiling the library. * * * If you link your application against the DLL or if you do a UNIX build, * don't do anything special. This file will do the right thing for you * by default. * * * Rational of XBT_EXPORT_NO_IMPORT: (windows-only cruft) * * Symbols which must be exported in the DLL, but not imported from it. * * * This is obviously useful for initialized globals (which cannot be * extern or similar). * * This is also used in the log mecanism where a macro creates the * variable automatically. When the macro is called from within SimGrid, * the symbol must be exported, but when called from within the client * code, it must not try to retrieve the symbol from the DLL since it's * not in there. * * Rational of XBT_IMPORT_NO_EXPORT: (windows-only cruft) * * Symbols which must be imported from the DLL, but not explicitely * exported from it. * * * The root log category is already exported, but not imported explicitely * when creating a subcategory since we cannot import the parent category * to deal with the fact that the parent may be in application space, not * DLL space. */ /* Build the DLL */ #if defined(DLL_EXPORT) # define XBT_PUBLIC(type) extern __declspec(dllexport) type # define XBT_EXPORT_NO_IMPORT(type) __declspec(dllexport) type # define XBT_IMPORT_NO_EXPORT(type) type # define XBT_PUBLIC_DATA(type) extern __declspec(dllexport) type /* Pack everything up statically */ #elif defined(DLL_STATIC) # define XBT_PUBLIC(type) extern type # define XBT_EXPORT_NO_IMPORT(type) type # define XBT_IMPORT_NO_EXPORT(type) type # define XBT_PUBLIC_DATA(type) extern type /* Link against the DLL */ #elif (defined(_XBT_WIN32) && !defined(DLL_EXPORT) && !defined(DLL_STATIC)) # define XBT_PUBLIC(type) extern __declspec(dllimport) type # define XBT_EXPORT_NO_IMPORT(type) type # define XBT_IMPORT_NO_EXPORT(type) __declspec(dllimport) type # define XBT_PUBLIC_DATA(type) extern __declspec(dllimport) type /* UNIX build */ #else # define XBT_PUBLIC(type) extern type # define XBT_EXPORT_NO_IMPORT(type) type # define XBT_IMPORT_NO_EXPORT(type) type # define XBT_PUBLIC_DATA(type) extern type #endif #if !defined (max) && !defined(__cplusplus) # define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #if !defined (min) && !defined(__cplusplus) # define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #define TRUE 1 #define FALSE 0 /*! C++ users need love */ #ifndef SG_BEGIN_DECL # ifdef __cplusplus # define SG_BEGIN_DECL() extern "C" { # else # define SG_BEGIN_DECL() # endif #endif #ifndef SG_END_DECL # ifdef __cplusplus # define SG_END_DECL() } # else # define SG_END_DECL() # endif #endif /* End of cruft for C++ */ SG_BEGIN_DECL() XBT_PUBLIC(const char *) xbt_procname(void); #define XBT_BACKTRACE_SIZE 10 /* FIXME: better place? Do document */ SG_END_DECL() #endif /* XBT_MISC_H */ SimGrid-3.10/include/xbt/asserts.h000640 007661 000620 00000003510 12242224150 017267 0ustar00gierschand000000 000000 /* xbt/asserts.h -- assertion mecanism */ /* Copyright (c) 2005-2007, 2009-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_ASSERTS_H #define _XBT_ASSERTS_H #include "xbt/misc.h" #include "xbt/log.h" #include "xbt/ex.h" SG_BEGIN_DECL() /** * @addtogroup XBT_error * @brief Those are the SimGrid version of the good ol' assert macro. * * You can pass them a format message and arguments, just as if it where a * printf. * It is converted to a XBT_CRITICAL logging request. * Be careful: the boolean expression that you want to test should not have * side effects, because assertions are disabled at compile time if NDEBUG * is set. * * @{ */ #ifdef NDEBUG #define xbt_assert(...) ((void)0) #else /** @brief The condition which failed will be displayed. @hideinitializer */ #define xbt_assert(...) \ _XBT_IF_ONE_ARG(_xbt_assert_ARG1, _xbt_assert_ARGN, __VA_ARGS__)(__VA_ARGS__) #define _xbt_assert_ARG1(cond) \ _xbt_assert_ARGN(cond, "Assertion %s failed", #cond) #define _xbt_assert_ARGN(cond, ...) \ do { if (!(cond)) THROWF(0, 0, __VA_ARGS__); } while (0) #endif #ifdef XBT_USE_DEPRECATED #define xbt_assert0(...) xbt_assert(__VA_ARGS__) #define xbt_assert1(...) xbt_assert(__VA_ARGS__) #define xbt_assert2(...) xbt_assert(__VA_ARGS__) #define xbt_assert3(...) xbt_assert(__VA_ARGS__) #define xbt_assert4(...) xbt_assert(__VA_ARGS__) #define xbt_assert5(...) xbt_assert(__VA_ARGS__) #define xbt_assert6(...) xbt_assert(__VA_ARGS__) #endif /** @} */ SG_END_DECL() #endif /* _XBT_ASSERTS_H */ SimGrid-3.10/include/xbt/virtu.h000640 007661 000620 00000002127 12242224150 016757 0ustar00gierschand000000 000000 /* virtu - virtualization layer for XBT to choose between GRAS and MSG implementation */ /* Copyright (c) 2007, 2009-2010, 2012-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef __XBT_VIRTU_H__ #define __XBT_VIRTU_H__ #include "xbt/misc.h" #include "xbt/sysdep.h" #include "xbt/function_types.h" #include "xbt/dynar.h" SG_BEGIN_DECL() /* Get the PID of the current (simulated) process */ XBT_PUBLIC_DATA(int_f_void_t) xbt_getpid; /* Get the name of the UNIX process englobing the world */ XBT_PUBLIC_DATA(char*) xbt_binary_name; /** Contains all the parameters we got from the command line (including argv[0]) */ XBT_PUBLIC_DATA(xbt_dynar_t) xbt_cmdline; /** * * Time management functions, returns the system time or sleeps a process. */ XBT_PUBLIC(double) xbt_time(void); XBT_PUBLIC(void) xbt_sleep(double sec); SG_END_DECL() #endif /* __XBT_VIRTU_H__ */ SimGrid-3.10/include/xbt/setset.h000640 007661 000620 00000004566 12242224150 017126 0ustar00gierschand000000 000000 #ifndef _XBT_SETSET_H #define _XBT_SETSET_H #include "xbt/misc.h" typedef struct s_xbt_setset *xbt_setset_t; typedef struct s_xbt_setset_set *xbt_setset_set_t; typedef struct s_xbt_setset_cursor *xbt_setset_cursor_t; #define XBT_SETSET_HEADERS \ unsigned long ID /* Constructor */ xbt_setset_t xbt_setset_new(unsigned int size); /* Destructor */ void xbt_setset_destroy(xbt_setset_t setset); /* Add an object to the setset, this will calculate its ID */ void xbt_setset_elm_add(xbt_setset_t setset, void *obj); /* Remove an object from the setset */ void xbt_setset_elm_remove(xbt_setset_t setset, void *obj); /* Create a new set in the setset */ xbt_setset_set_t xbt_setset_new_set(xbt_setset_t setset); /* Destroy a set in the setset */ void xbt_setset_destroy_set(xbt_setset_set_t); /* Insert an element into a set */ void xbt_setset_set_insert(xbt_setset_set_t set, void *obj); /* Remove an element from a set */ void xbt_setset_set_remove(xbt_setset_set_t set, void *obj); /* Remove all the elements of a set */ void xbt_setset_set_reset(xbt_setset_set_t set); /* Select one element of a set */ void *xbt_setset_set_choose(xbt_setset_set_t set); /* Extract one element of a set */ void *xbt_setset_set_extract(xbt_setset_set_t set); /* Test if an element belongs to a set */ int xbt_setset_set_belongs(xbt_setset_set_t set, void *obj); /* Get the number of elements in a set */ int xbt_setset_set_size(xbt_setset_set_t set); /* Add all elements of set2 to set1 */ void xbt_setset_add(xbt_setset_set_t set1, xbt_setset_set_t set2); /* Substract all elements of set2 from set1 */ void xbt_setset_substract(xbt_setset_set_t set1, xbt_setset_set_t set2); /* Intersect set1 and set2 storing the result in set1 */ void xbt_setset_intersect(xbt_setset_set_t set1, xbt_setset_set_t set2); /* Get the cursor to point to the first element of a set */ void xbt_setset_cursor_first(xbt_setset_set_t set, xbt_setset_cursor_t * cursor); /* Get the data pointed by a cursor */ int xbt_setset_cursor_get_data(xbt_setset_cursor_t cursor, void **data); /* Advance a cursor to the next element */ void xbt_setset_cursor_next(xbt_setset_cursor_t cursor); #define xbt_setset_foreach(set, cursor, data) \ for(xbt_setset_cursor_first(set, &cursor); \ xbt_setset_cursor_get_data(cursor, (void **)&data); \ xbt_setset_cursor_next(cursor)) #endif SimGrid-3.10/include/xbt/lib.h000640 007661 000620 00000002673 12242224150 016362 0ustar00gierschand000000 000000 /* xbt/lib.h - api to a generic library */ /* Copyright (c) 2011, 2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_LIB_H #define _XBT_LIB_H #include SG_BEGIN_DECL() typedef struct s_xbt_lib { xbt_dict_t dict; int levels; void_f_pvoid_t *free_f; /* This is actually a table */ } s_xbt_lib_t, *xbt_lib_t; #define xbt_lib_cursor_t xbt_dict_cursor_t XBT_PUBLIC(xbt_lib_t) xbt_lib_new(void); XBT_PUBLIC(void) xbt_lib_free(xbt_lib_t * lib); XBT_PUBLIC(int) xbt_lib_add_level(xbt_lib_t lib, void_f_pvoid_t free_f); XBT_PUBLIC(void) xbt_lib_set(xbt_lib_t lib, const char *name, int level, void *obj); XBT_PUBLIC(void *) xbt_lib_get_or_null(xbt_lib_t lib, const char *name, int level); XBT_PUBLIC(xbt_dictelm_t) xbt_lib_get_elm_or_null(xbt_lib_t lib, const char *key); XBT_PUBLIC(void *) xbt_lib_get_level(xbt_dictelm_t elm, int level); #define xbt_lib_length(lib) xbt_dict_length((lib)->dict) /** @def xbt_lib_foreach @hideinitializer */ #define xbt_lib_foreach(lib, cursor, key, data) \ xbt_dict_foreach((lib)->dict, cursor, key, data) SG_END_DECL() #endif /* _XBT_LIB_H */ SimGrid-3.10/include/xbt/graph.h000640 007661 000620 00000016122 12242224150 016707 0ustar00gierschand000000 000000 /* Copyright (c) 2006-2007, 2009-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_GRAPH_H #define _XBT_GRAPH_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ #include "xbt/dynar.h" SG_BEGIN_DECL() /** @addtogroup XBT_graph * @brief A graph data type with several interesting algorithms * * @{ */ typedef struct xbt_node *xbt_node_t; typedef struct xbt_edge *xbt_edge_t; typedef struct xbt_graph *xbt_graph_t; /* Node structure */ /* Be carfull of what you do with this structure */ /* typedef struct xbt_node *xbt_node_t; */ typedef struct xbt_node { xbt_dynar_t out; xbt_dynar_t in; /* not used when the graph is directed */ double position_x; /* positive value: negative means undefined */ double position_y; /* positive value: negative means undefined */ void *data; /* user data */ void *xbtdata; /* private xbt data: should be reinitialized at the beginning of your algorithm if you need to use it */ } s_xbt_node_t; /* edge structure */ /* Be carfull of what you do with this structure */ /* typedef struct xbt_edge *xbt_edge_t; */ typedef struct xbt_edge { xbt_node_t src; xbt_node_t dst; void *data; /* user data */ void *xbtdata; /* private xbt data: should be reinitialized at the beginning of your algorithm if you need to use it */ double length; /* positive value: negative means undefined */ } s_xbt_edge_t; /* Graph structure */ /* Be carfull of what you do with this structure */ /* typedef struct xbt_graph *xbt_graph_t; */ typedef struct xbt_graph { xbt_dynar_t nodes; xbt_dynar_t edges; unsigned short int directed; void *data; /* user data */ void *xbtdata; /* private xbt data: should be reinitialized at the beginning of your algorithm if you need to use it */ } s_xbt_graph_t; /* API */ XBT_PUBLIC(xbt_graph_t) xbt_graph_new_graph(unsigned short int directed, void *data); XBT_PUBLIC(xbt_node_t) xbt_graph_new_node(xbt_graph_t g, void *data); XBT_PUBLIC(xbt_edge_t) xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data); XBT_PUBLIC(void *) xbt_graph_node_get_data(xbt_node_t node); XBT_PUBLIC(void) xbt_graph_node_set_data(xbt_node_t node, void *data); XBT_PUBLIC(void *) xbt_graph_edge_get_data(xbt_edge_t edge); XBT_PUBLIC(void) xbt_graph_edge_set_data(xbt_edge_t edge, void *data); XBT_PUBLIC(xbt_edge_t) xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst); XBT_PUBLIC(void) xbt_graph_edge_set_length(xbt_edge_t e, double length); XBT_PUBLIC(double) xbt_graph_edge_get_length(xbt_edge_t e); XBT_PUBLIC(double *) xbt_graph_get_length_matrix(xbt_graph_t g); XBT_PUBLIC(void) xbt_graph_free_node(xbt_graph_t g, xbt_node_t n, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function); XBT_PUBLIC(void) xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e, void_f_pvoid_t free_function); XBT_PUBLIC(void) xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function); XBT_PUBLIC(int) __xbt_find_in_dynar(xbt_dynar_t dynar, void *p); XBT_PUBLIC(xbt_dynar_t) xbt_graph_get_nodes(xbt_graph_t g); XBT_PUBLIC(xbt_dynar_t) xbt_graph_get_edges(xbt_graph_t g); XBT_PUBLIC(xbt_dynar_t) xbt_graph_node_get_outedges(xbt_node_t n); XBT_PUBLIC(xbt_node_t) xbt_graph_edge_get_source(xbt_edge_t e); XBT_PUBLIC(xbt_node_t) xbt_graph_edge_get_target(xbt_edge_t e); XBT_PUBLIC(xbt_graph_t) xbt_graph_read(const char *filename, void *(node_label_and_data) (xbt_node_t, const char *, const char *), void *(edge_label_and_data) (xbt_edge_t, const char *, const char *) ); XBT_PUBLIC(void) xbt_graph_export_graphviz(xbt_graph_t g, const char *filename, const char *(node_name) (xbt_node_t), const char *(edge_name) (xbt_edge_t)); XBT_PUBLIC(void) xbt_graph_export_graphxml(xbt_graph_t g, const char *filename, const char *(node_name) (xbt_node_t), const char *(edge_name) (xbt_edge_t), const char *(node_data_print) (void *), const char *(edge_data_print) (void *)); XBT_PUBLIC(xbt_graph_t) xbt_graph_load (const char *filename); XBT_PUBLIC(void) xbt_graph_save (xbt_graph_t span, const char *filename, const char *(nname) (xbt_node_t), const char *(ename) (xbt_edge_t)); /* Not implemented yet ! */ /* void *xbt_graph_to_array(xbt_graph_t g); */ XBT_PUBLIC(xbt_node_t *) xbt_graph_shortest_paths(xbt_graph_t g); /** @brief transforms the network structure of a directed acyclic graph given into a linear structure @return: an array containing the nodes of the graph sorted in order reverse to the path of exploration if a cycle is detected an exception is raised */ XBT_PUBLIC(xbt_node_t *) xbt_graph_topo_sort(xbt_graph_t g); XBT_PUBLIC(xbt_edge_t *) xbt_graph_spanning_tree_prim(xbt_graph_t g); /** Convenient for loop : g is a graph, n a node, e an edge, b a bucket and i an item **/ /* #define xbt_graph_foreachInNeighbor(v,n,i) \ */ /* for(i=xbt_fifo_get_first_item((v)->in); \ */ /* ((i)?(n=((xbt_edge_t)((xbt_fifo_get_item_content(i)) */ /* )->src):(NULL));\ */ /* i=xbt_fifo_get_next_item(i)) */ /* #define xbt_graph_foreachOutNeighbor(v,n,i) \ */ /* for(i=xbt_fifo_get_first_item((v)->out); \ */ /* ((i)?(n=((xbt_edge_t)(xbt_fifo_get_item_content(i)))->dst):(NULL));\ */ /* i=xbt_fifo_get_next_item(i)) */ SG_END_DECL() #endif /* _XBT_GRAPH_H */ /** @} */ SimGrid-3.10/include/xbt/heap.h000640 007661 000620 00000002634 12242224150 016526 0ustar00gierschand000000 000000 /* Copyright (c) 2004-2007, 2009-2011. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_HEAP_H #define _XBT_HEAP_H #include "xbt/misc.h" #include "xbt/dynar.h" /* void_f_pvoid_t */ /** @addtogroup XBT_heap * @brief This section describes the API to generic heap with O(log(n)) access. * * @{ */ /* @brief heap datatype */ typedef struct xbt_heap *xbt_heap_t; XBT_PUBLIC(xbt_heap_t) xbt_heap_new(int init_size, void_f_pvoid_t const free_func); XBT_PUBLIC(void) xbt_heap_free(xbt_heap_t H); XBT_PUBLIC(int) xbt_heap_size(xbt_heap_t H); XBT_PUBLIC(void) xbt_heap_push(xbt_heap_t H, void *content, double key); XBT_PUBLIC(void *) xbt_heap_pop(xbt_heap_t H); XBT_PUBLIC(double) xbt_heap_maxkey(xbt_heap_t H); XBT_PUBLIC(void *) xbt_heap_maxcontent(xbt_heap_t H); XBT_PUBLIC(void) xbt_heap_set_update_callback(xbt_heap_t H, void (*update_callback) (void *, int)); XBT_PUBLIC(void *) xbt_heap_remove(xbt_heap_t H, int i); /* @} */ #endif /* _XBT_HEAP_H */ SimGrid-3.10/include/xbt/dynar.h000640 007661 000620 00000023155 12242224150 016727 0ustar00gierschand000000 000000 /* dynar - a generic dynamic array */ /* Copyright (c) 2004-2007, 2009-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_DYNAR_H #define _XBT_DYNAR_H #include /* memcpy */ #include "xbt/misc.h" /* SG_BEGIN_DECL */ #include "xbt/function_types.h" SG_BEGIN_DECL() /** @addtogroup XBT_dynar * @brief DynArr are dynamically sized vector which may contain any type of variables. * * These are the SimGrid version of the dynamically size arrays, which all C programmer recode one day or another. * * For performance concerns, the content of DynArr must be homogeneous (in * contrary to dictionnaries -- see the \ref XBT_dict section). You thus * have to provide the function which will be used to free the content at * structure creation (of type void_f_ppvoid_t or void_f_pvoid_t). * * \section XBT_dynar_exscal Example with scalar * \dontinclude dynar.c * * \skip Vars_decl * \skip dyn * \until iptr * \skip Populate_ints * \skip dyn * \until end_of_traversal * \skip shifting * \skip val * \until xbt_dynar_free * * \section XBT_dynar_exptr Example with pointed data * * \skip test_dynar_string * \skip dynar_t * \until s2 * \skip Populate_str * \skip dyn * \until } * \skip macro * \until dynar_free * \skip end_of_doxygen * \until } * * Note that if you use dynars to store pointed data, the * xbt_dynar_search(), xbt_dynar_search_or_negative() and * xbt_dynar_member() won't be for you. Instead of comparing * your pointed elements, they compare the pointer to them. See * the documentation of xbt_dynar_search() for more info. * */ /** @defgroup XBT_dynar_cons Dynar constructor and destructor * @ingroup XBT_dynar * * @{ */ /** \brief Dynar data type (opaque type) */ typedef struct xbt_dynar_s *xbt_dynar_t; XBT_PUBLIC(xbt_dynar_t) xbt_dynar_new(const unsigned long elm_size, void_f_pvoid_t const free_f); XBT_PUBLIC(void) xbt_dynar_free(xbt_dynar_t * dynar); XBT_PUBLIC(void) xbt_dynar_free_voidp(void *dynar); XBT_PUBLIC(void) xbt_dynar_free_container(xbt_dynar_t * dynar); XBT_PUBLIC(void) xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots); XBT_PUBLIC(void) xbt_dynar_dump(xbt_dynar_t dynar); /** @} */ /** @defgroup XBT_dynar_array Dynar as a regular array * @ingroup XBT_dynar * * @{ */ XBT_PUBLIC(void) xbt_dynar_get_cpy(const xbt_dynar_t dynar, const unsigned long idx, void *const dst); XBT_PUBLIC(void) xbt_dynar_set(xbt_dynar_t dynar, const int idx, const void *src); XBT_PUBLIC(void) xbt_dynar_replace(xbt_dynar_t dynar, const unsigned long idx, const void *object); XBT_PUBLIC(void) xbt_dynar_insert_at(xbt_dynar_t const dynar, const int idx, const void *src); XBT_PUBLIC(void) xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void *const dst); XBT_PUBLIC(void) xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned int n, const int idx); XBT_PUBLIC(unsigned int) xbt_dynar_search(xbt_dynar_t const dynar, void *elem); XBT_PUBLIC(signed int) xbt_dynar_search_or_negative(xbt_dynar_t const dynar, void *const elem); XBT_PUBLIC(int) xbt_dynar_member(xbt_dynar_t const dynar, void *elem); XBT_PUBLIC(void) xbt_dynar_sort(xbt_dynar_t const dynar, int_f_cpvoid_cpvoid_t compar_fn); XBT_PUBLIC(void) xbt_dynar_three_way_partition(xbt_dynar_t const dynar, int_f_pvoid_t color); XBT_PUBLIC(int) xbt_dynar_compare(xbt_dynar_t d1, xbt_dynar_t d2, int(*compar)(const void *, const void *)); XBT_PUBLIC(void *) xbt_dynar_to_array (xbt_dynar_t dynar); /** @} */ /** @defgroup XBT_dynar_misc Dynar miscellaneous functions * @ingroup XBT_dynar * * @{ */ XBT_PUBLIC(unsigned long) xbt_dynar_length(const xbt_dynar_t dynar); XBT_PUBLIC(int) xbt_dynar_is_empty(const xbt_dynar_t dynar); XBT_PUBLIC(void) xbt_dynar_reset(xbt_dynar_t const dynar); XBT_PUBLIC(void) xbt_dynar_merge(xbt_dynar_t *d1, xbt_dynar_t *d2); /** @} */ /** @defgroup XBT_dynar_perl Perl-like use of dynars * @ingroup XBT_dynar * * @{ */ XBT_PUBLIC(void) xbt_dynar_push(xbt_dynar_t const dynar, const void *src); XBT_PUBLIC(void) xbt_dynar_pop(xbt_dynar_t const dynar, void *const dst); XBT_PUBLIC(void) xbt_dynar_unshift(xbt_dynar_t const dynar, const void *src); XBT_PUBLIC(void) xbt_dynar_shift(xbt_dynar_t const dynar, void *const dst); XBT_PUBLIC(void) xbt_dynar_map(const xbt_dynar_t dynar, void_f_pvoid_t const op); /** @} */ /** @defgroup XBT_dynar_ctn Direct manipulation to the dynars content * @ingroup XBT_dynar * * Those functions do not retrieve the content, but only their address. * * @{ */ XBT_PUBLIC(void *) xbt_dynar_set_at_ptr(const xbt_dynar_t dynar, const unsigned long idx); XBT_PUBLIC(void *) xbt_dynar_get_ptr(const xbt_dynar_t dynar, const unsigned long idx); XBT_PUBLIC(void *) xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, const int idx); XBT_PUBLIC(void *) xbt_dynar_push_ptr(xbt_dynar_t const dynar); XBT_PUBLIC(void *) xbt_dynar_pop_ptr(xbt_dynar_t const dynar); /** @} */ /** @defgroup XBT_dynar_speed Speed optimized access to dynars of scalars * @ingroup XBT_dynar * * While the other functions use a memcpy to retrieve the content into the * user provided area, those ones use a regular affectation. It only works * for scalar values, but should be a little faster. * * @{ */ /** @brief Quick retrieval of scalar content * @hideinitializer */ # define xbt_dynar_get_as(dynar,idx,type) \ (*(type*)xbt_dynar_get_ptr((dynar),(idx))) /** @brief Quick setting of scalar content * @hideinitializer */ # define xbt_dynar_set_as(dynar,idx,type,val) \ (*(type*)xbt_dynar_set_at_ptr((dynar),(idx))) = val /** @brief Quick retrieval of scalar content * @hideinitializer */ # define xbt_dynar_getlast_as(dynar,type) \ (*(type*)xbt_dynar_get_ptr((dynar),xbt_dynar_length(dynar)-1)) /** @brief Quick retrieval of scalar content * @hideinitializer */ # define xbt_dynar_getfirst_as(dynar,type) \ (*(type*)xbt_dynar_get_ptr((dynar),0)) /** @brief Quick insertion of scalar content * @hideinitializer */ # define xbt_dynar_insert_at_as(dynar,idx,type,value) \ *(type*)xbt_dynar_insert_at_ptr(dynar,idx)=value /** @brief Quick insertion of scalar content * @hideinitializer */ # define xbt_dynar_push_as(dynar,type,value) \ *(type*)xbt_dynar_push_ptr(dynar)=value /** @brief Quick removal of scalar content * @hideinitializer */ # define xbt_dynar_pop_as(dynar,type) \ (*(type*)xbt_dynar_pop_ptr(dynar)) /** @} */ /** @defgroup XBT_dynar_cursor Cursors on dynar * @ingroup XBT_dynar * * Cursors are used to iterate over the structure. Never add elements to the * DynArr during the traversal. To remove elements, use the * xbt_dynar_cursor_rm() function. * * Do not call these function directly, but only within the xbt_dynar_foreach * macro. * * @{ */ XBT_PUBLIC(void) xbt_dynar_cursor_rm(xbt_dynar_t dynar, unsigned int *const cursor); /* do not use this structure internals directly, but use the public interface * This was made public to allow: * - the inlining of the foreach elements * - sending such beasts over the network */ typedef struct xbt_dynar_s { unsigned long size; unsigned long used; unsigned long elmsize; void *data; void_f_pvoid_t free_f; } s_xbt_dynar_t; static XBT_INLINE void _xbt_dynar_cursor_first(const xbt_dynar_t dynar _XBT_GNUC_UNUSED, unsigned int *const cursor) { /* iterating over a NULL dynar is a no-op (but we don't want to have uninitialized counters) */ //XBT_DEBUG("Set cursor on %p to the first position", (void *) dynar); *cursor = 0; } static XBT_INLINE int _xbt_dynar_cursor_get(const xbt_dynar_t dynar, unsigned int idx, void *const dst) { if (!dynar) /* iterating over a NULL dynar is a no-op */ return FALSE; if (idx >= dynar->used) { //XBT_DEBUG("Cursor on %p already on last elem", (void *) dynar); return FALSE; } // XBT_DEBUG("Cash out cursor on %p at %u", (void *) dynar, *idx); memcpy(dst, ((char *) dynar->data) + idx * dynar->elmsize, dynar->elmsize); return TRUE; } /** @brief Iterates over the whole dynar. * * @param _dynar what to iterate over * @param _cursor an integer used as cursor * @param _data * @hideinitializer * * Here is an example of usage: * \code xbt_dynar_t dyn; unsigned int cpt; string *str; xbt_dynar_foreach (dyn,cpt,str) { printf("Seen %s\n",str); } \endcode * * Note that underneath, that's a simple for loop with no real black * magic involved. It's perfectly safe to interrupt a foreach with a * break or a return statement. */ #define xbt_dynar_foreach(_dynar,_cursor,_data) \ for (_xbt_dynar_cursor_first(_dynar,&(_cursor)) ; \ _xbt_dynar_cursor_get(_dynar,_cursor,&_data) ; \ (_cursor)++ ) /** @} */ SG_END_DECL() #endif /* _XBT_DYNAR_H */ SimGrid-3.10/include/xbt/graphxml_parse.h000640 007661 000620 00000003474 12242224150 020630 0ustar00gierschand000000 000000 /* Copyright (c) 2006-2007, 2009-2011. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_GRAPHXML_PARSE_H #define _XBT_GRAPHXML_PARSE_H #include /* to have FILE */ #include "xbt/misc.h" #include "xbt/graphxml.h" #include "simgrid_config.h" /* Entry-point of the graphxml parser. */ extern int_f_void_t xbt_graph_parse; /* Hook for the different tags. They can be redefined at will whereas the versions without the _fun can't. */ extern void_f_void_t STag_graphxml_graph_fun; extern void_f_void_t ETag_graphxml_graph_fun; extern void_f_void_t STag_graphxml_node_fun; extern void_f_void_t ETag_graphxml_node_fun; extern void_f_void_t STag_graphxml_edge_fun; extern void_f_void_t ETag_graphxml_edge_fun; XBT_PUBLIC(void) xbt_graph_parse_open(const char *file); XBT_PUBLIC(void) xbt_graph_parse_close(void); XBT_PUBLIC(void) xbt_graph_parse_reset_parser(void); XBT_PUBLIC(double) xbt_graph_parse_get_double(const char *string); /* Prototypes of the functions offered by flex */ XBT_PUBLIC(int) xbt_graph_parse_lex(void); XBT_PUBLIC(int) xbt_graph_parse_get_lineno(void); XBT_PUBLIC(FILE *) xbt_graph_parse_get_in(void); XBT_PUBLIC(FILE *) xbt_graph_parse_get_out(void); XBT_PUBLIC(int) xbt_graph_parse_get_leng(void); XBT_PUBLIC(char *) xbt_graph_parse_get_text(void); XBT_PUBLIC(void) xbt_graph_parse_set_lineno(int line_number); XBT_PUBLIC(void) xbt_graph_parse_set_in(FILE * in_str); XBT_PUBLIC(void) xbt_graph_parse_set_out(FILE * out_str); XBT_PUBLIC(int) xbt_graph_parse_get_debug(void); XBT_PUBLIC(void) xbt_graph_parse_set_debug(int bdebug); XBT_PUBLIC(int) xbt_graph_parse_lex_destroy(void); #endif SimGrid-3.10/include/xbt/set.h000640 007661 000620 00000010434 12242224150 016401 0ustar00gierschand000000 000000 /* xbt/set.h -- api to a generic dictionary */ /* Copyright (c) 2004-2007, 2009-2010, 2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef _XBT_SET_H #define _XBT_SET_H #include "xbt/misc.h" /* SG_BEGIN_DECL */ #include "xbt/function_types.h" SG_BEGIN_DECL() /** @addtogroup XBT_set * @brief A data container consisting in \ref XBT_dict and \ref XBT_dynar * * The elements stored in such a data structure can be retrieve both by * name and by ID. For this to work, the first fields of the structures * stored must begin with the following fields: \verbatim struct { unsigned int ID; char *name; unsigned int name_len; // my other fields, constituting the payload } my_element_type_t; \endverbatim * * Since we are casting elements around, no protection is ensured by the * compiler. It is thus safer to define the headers using the macro * defined to that extend: * \verbatim struct { XBT_SET_HEADERS; // my other fields, constituting the payload } my_element_type_t; \endverbatim * * It is now possible to remove an element from such a data structure. * * @todo * Such a datastructure was necessary/useful to store the GRAS type * descriptions, but it should be reworked to become generic. * */ /** @defgroup XBT_set_cons Set and set elements, constructor/destructor * @ingroup XBT_set * * @{ */ /** \brief Opaque type representing a set */ typedef struct xbt_set_ *xbt_set_t; #define XBT_SET_HEADERS \ unsigned int ID; \ char *name; \ unsigned int name_len /** \brief It must be possible to cast set elements to this type */ typedef struct xbt_set_elm_ { unsigned int ID; /**< Identificator (system assigned) */ char *name; /**< Name (user assigned) */ unsigned int name_len; /**< Length of the name */ } s_xbt_set_elm_t, *xbt_set_elm_t; /*####[ Functions ]##########################################################*/ XBT_PUBLIC(xbt_set_t) xbt_set_new(void); XBT_PUBLIC(void) xbt_set_free(xbt_set_t * set); /** @} */ /** @defgroup XBT_set_basic Sets basic usage * @ingroup XBT_set * * @{ */ XBT_PUBLIC(void) xbt_set_add(xbt_set_t set, xbt_set_elm_t elm, void_f_pvoid_t free_func); XBT_PUBLIC(void) xbt_set_remove(xbt_set_t set, xbt_set_elm_t elm); XBT_PUBLIC(void) xbt_set_remove_by_name(xbt_set_t set, const char *key); XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_name_or_null(xbt_set_t set, const char *key); XBT_PUBLIC(void) xbt_set_remove_by_name_ext(xbt_set_t set, const char *key, int key_len); XBT_PUBLIC(void) xbt_set_remove_by_id(xbt_set_t set, int id); XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_name(xbt_set_t set, const char *key); XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_name_ext(xbt_set_t set, const char *key, int key_len); XBT_PUBLIC(xbt_set_elm_t) xbt_set_get_by_id(xbt_set_t set, int id); XBT_PUBLIC(unsigned long) xbt_set_length(const xbt_set_t set); /** @} */ /** @defgroup XBT_set_curs Sets cursors * @ingroup XBT_set * * \warning Don't add or remove entries to the cache while traversing * * @{ */ /** @brief Cursor type */ typedef struct xbt_set_cursor_ *xbt_set_cursor_t; XBT_PUBLIC(void) xbt_set_cursor_first(xbt_set_t set, xbt_set_cursor_t * cursor); XBT_PUBLIC(void) xbt_set_cursor_step(xbt_set_cursor_t cursor); XBT_PUBLIC(int) xbt_set_cursor_get_or_free(xbt_set_cursor_t * cursor, xbt_set_elm_t * elm); /** @brief Iterates over the whole set * @hideinitializer */ #define xbt_set_foreach(set,cursor,elm) \ for ((cursor) = NULL, xbt_set_cursor_first((set),&(cursor)) ; \ xbt_set_cursor_get_or_free(&(cursor),(xbt_set_elm_t*)&(elm)); \ xbt_set_cursor_step(cursor) ) /* @} */ SG_END_DECL() #endif /* _XBT_SET_H */ SimGrid-3.10/include/xbt/strbuff.h000640 007661 000620 00000002302 12242224150 017254 0ustar00gierschand000000 000000 /* strbuff -- string buffers */ /* Copyright (c) 2007-2011. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef XBT_STRBUFF_H #define XBT_STRBUFF_H #include "xbt/sysdep.h" #include "xbt/function_types.h" #include "xbt/log.h" #include "xbt/str.h" #include "xbt/dict.h" /** ** Buffer code **/ typedef struct { char *data; int used, size; } s_xbt_strbuff_t, *xbt_strbuff_t; XBT_PUBLIC(void) xbt_strbuff_empty(xbt_strbuff_t b); XBT_PUBLIC(xbt_strbuff_t) xbt_strbuff_new(void); XBT_PUBLIC(xbt_strbuff_t) xbt_strbuff_new_from(const char *s); XBT_PUBLIC(void) xbt_strbuff_free(xbt_strbuff_t b); XBT_PUBLIC(void) xbt_strbuff_free_container(xbt_strbuff_t b); XBT_PUBLIC(void) xbt_strbuff_append(xbt_strbuff_t b, const char *toadd); XBT_PUBLIC(void) xbt_strbuff_chomp(xbt_strbuff_t b); XBT_PUBLIC(void) xbt_strbuff_trim(xbt_strbuff_t b); XBT_PUBLIC(void) xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns); #endif SimGrid-3.10/include/xbt/RngStream.h000640 007661 000620 00000002423 12242224150 017507 0ustar00gierschand000000 000000 /* RngStream.h for ANSI C */ #ifndef RNGSTREAM_H #define RNGSTREAM_H #include "misc.h" typedef struct RngStream_InfoState * RngStream; struct RngStream_InfoState { double Cg[6], Bg[6], Ig[6]; int Anti; int IncPrec; char *name; }; XBT_PUBLIC(int) RngStream_SetPackageSeed (unsigned long seed[6]); XBT_PUBLIC(RngStream) RngStream_CreateStream (const char name[]); XBT_PUBLIC(void) RngStream_DeleteStream (RngStream *pg); XBT_PUBLIC(RngStream) RngStream_CopyStream (const RngStream src); XBT_PUBLIC(void) RngStream_ResetStartStream (RngStream g); XBT_PUBLIC(void) RngStream_ResetStartSubstream (RngStream g); XBT_PUBLIC(void) RngStream_ResetNextSubstream (RngStream g); XBT_PUBLIC(void) RngStream_SetAntithetic (RngStream g, int a); XBT_PUBLIC(void) RngStream_IncreasedPrecis (RngStream g, int incp); XBT_PUBLIC(int) RngStream_SetSeed (RngStream g, unsigned long seed[6]); XBT_PUBLIC(void) RngStream_AdvanceState (RngStream g, long e, long c); XBT_PUBLIC(void) RngStream_GetState (RngStream g, unsigned long seed[6]); XBT_PUBLIC(void) RngStream_WriteState (RngStream g); XBT_PUBLIC(void) RngStream_WriteStateFull (RngStream g); XBT_PUBLIC(double) RngStream_RandU01 (RngStream g); XBT_PUBLIC(int) RngStream_RandInt (RngStream g, int i, int j); #endif SimGrid-3.10/include/xbt/cunit.h000640 007661 000620 00000021056 12242224150 016732 0ustar00gierschand000000 000000 /* cunit - A little C Unit facility */ /* Copyright (c) 2005-2012. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ /* This is partially inspirated from the OSSP ts (Test Suite Library) */ #ifndef _XBT_CUNIT_H_ #define _XBT_CUNIT_H_ #include "xbt/sysdep.h" /* XBT_GNU_PRINTF */ #include "xbt/ex.h" SG_BEGIN_DECL() /* note that the internals of testall, that follow, are not publicly documented */ /* test suite object type */ typedef struct s_xbt_test_suite *xbt_test_suite_t; /* test object type */ typedef struct s_xbt_test_unit *xbt_test_unit_t; /* test callback function type */ typedef void (*ts_test_cb_t) (void); /* test suite operations */ XBT_PUBLIC(xbt_test_suite_t) xbt_test_suite_new(const char *name, const char *fmt, ...); XBT_PUBLIC(xbt_test_suite_t) xbt_test_suite_by_name(const char *name, const char *fmt, ...); XBT_PUBLIC(void) xbt_test_suite_dump(xbt_test_suite_t suite); XBT_PUBLIC(void) xbt_test_suite_push(xbt_test_suite_t suite, const char *name, ts_test_cb_t func, const char *fmt, ...); /* Run all the specified tests. what_to_do allows to disable some tests. * It is a coma (,) separated list of directives. They are applied from left to right. * * Each of them of form: * * [-|+]suitename[:unitname[:testname]] * * * First char: * if it's a '-', the directive disables something * if it's a '+', the directive enables something * By default, everything is enabled, but you can disable a suite and reenable some parts * * Suitename: the suite on which the directive acts * * unitname: if given, the unit on which the directive acts. If not, acts on any units. * * testname: if given, the test on which the directive acts. If not, acts on any tests. */ XBT_PUBLIC(int) xbt_test_run(char *selection, int verbosity); /* Show information about the selection of tests */ XBT_PUBLIC(void) xbt_test_dump(char *selection); /* Cleanup the mess */ XBT_PUBLIC(void) xbt_test_exit(void); /** * @addtogroup XBT_cunit * @brief Unit test mechanism (to test a set of functions) * * This module is mainly intended to allow the tests of SimGrid * itself and may lack the level of genericity that you would expect * as a user. Only use it in external projects at your own risk (but * it work rather well for us). We play with the idea of migrating * to an external solution for our unit tests, possibly offering * more features, but having absolutely no dependencies is a nice * feature of SimGrid (and this code is sufficient to cover our * needs, actually, so why should we bother switching?) * * Note that if you want to test a full binary (such as an example), * you want to use our integration testing mechanism, not our unit * testing one. Please refer to Section \ref * inside_cmake_addtest_integration * * Some more information on our unit testing is available in Section @ref inside_cmake_addtest_unit. * * All code intended to be executed as a unit test will be extracted * by a script (tools/sg_unit_extract.pl), and must thus be protected * between preprocessor definitions, as follows. Note that * SIMGRID_TEST string must appear on the endif line too for the * script to work, and that this script does not allow to have more * than one suite per file. For now, but patches are naturally * welcome. * @verbatim #ifdef SIMGRID_TEST #endif // SIMGRID_TEST @endverbatim * * * @{ */ /** @brief Provide informations about the suite declared in this file * @hideinitializer * * Actually, this macro is not used by C, but by the script * extracting the test units, but that should be transparent for you. * * @param suite_name the short name of this suite, to be used in the --tests argument of testall afterward. Avoid spaces and any other strange chars * @param suite_title instructive title that testall should display when your suite is run */ #define XBT_TEST_SUITE(suite_name,suite_title) /** @brief Declare a new test units (containing individual tests) * @hideinitializer * * @param name the short name that will be used in test all to enable/disable this test * @param func a valid function name that will be used to contain all code of this unit * @param title human informative description of your test (displayed in testall) */ #define XBT_TEST_UNIT(name,func,title) \ void func(void); /*prototype*/ \ void func(void) /* test operations */ XBT_PUBLIC(void) _xbt_test_add(const char *file, int line, const char *fmt, ...) _XBT_GNUC_PRINTF(3, 4); XBT_PUBLIC(void) _xbt_test_fail(const char *file, int line, const char *fmt, ...) _XBT_GNUC_PRINTF(3, 4); XBT_PUBLIC(void) _xbt_test_log(const char *file, int line, const char *fmt, ...) _XBT_GNUC_PRINTF(3, 4); /** @brief Declare that a new test begins (printf-like parameters, describing the test) * @hideinitializer */ #define xbt_test_add(...) _xbt_test_add(__FILE__, __LINE__, __VA_ARGS__) /** @brief Declare that the lastly started test failed (printf-like parameters, describing failure cause) * @hideinitializer */ #define xbt_test_fail(...) _xbt_test_fail(__FILE__, __LINE__, __VA_ARGS__) /** @brief The lastly started test is actually an assert * @hideinitializer * * - If provided a uniq parameter, this is assumed to be a condition that is expected to be true * - If provided more parameters, the first one is a condition, and the other ones are printf-like arguments that are to be displayed when the condition fails. */ #define xbt_test_assert(...) _XBT_IF_ONE_ARG(_xbt_test_assert_ARG1, \ _xbt_test_assert_ARGN, \ __VA_ARGS__)(__VA_ARGS__) #define _xbt_test_assert_ARG1(cond) _xbt_test_assert_CHECK(cond, \ "%s", #cond) #define _xbt_test_assert_ARGN(cond, ...) _xbt_test_assert_CHECK(cond, \ __VA_ARGS__) #define _xbt_test_assert_CHECK(cond, ...) \ do { if (!(cond)) xbt_test_fail(__VA_ARGS__); } while (0) #define xbt_test_log(...) _xbt_test_log(__FILE__, __LINE__, __VA_ARGS__) /** @brief Declare that the lastly started test failed because of the provided exception */ XBT_PUBLIC(void) xbt_test_exception(xbt_ex_t e); /** @brief Declare that the lastly started test was expected to fail (and actually failed) */ XBT_PUBLIC(void) xbt_test_expect_failure(void); /** @brief Declare that the lastly started test should be skiped today */ XBT_PUBLIC(void) xbt_test_skip(void); /** @} */ #ifdef XBT_USE_DEPRECATED /* Kept for backward compatibility. */ #define xbt_test_add0(...) xbt_test_add(__VA_ARGS__) #define xbt_test_add1(...) xbt_test_add(__VA_ARGS__) #define xbt_test_add2(...) xbt_test_add(__VA_ARGS__) #define xbt_test_add3(...) xbt_test_add(__VA_ARGS__) #define xbt_test_add4(...) xbt_test_add(__VA_ARGS__) #define xbt_test_add5(...) xbt_test_add(__VA_ARGS__) #define xbt_test_fail0(...) xbt_test_fail(__VA_ARGS__) #define xbt_test_fail1(...) xbt_test_fail(__VA_ARGS__) #define xbt_test_fail2(...) xbt_test_fail(__VA_ARGS__) #define xbt_test_fail3(...) xbt_test_fail(__VA_ARGS__) #define xbt_test_fail4(...) xbt_test_fail(__VA_ARGS__) #define xbt_test_fail5(...) xbt_test_fail(__VA_ARGS__) #define xbt_test_assert0(...) xbt_test_assert(__VA_ARGS__) #define xbt_test_assert1(...) xbt_test_assert(__VA_ARGS__) #define xbt_test_assert2(...) xbt_test_assert(__VA_ARGS__) #define xbt_test_assert3(...) xbt_test_assert(__VA_ARGS__) #define xbt_test_assert4(...) xbt_test_assert(__VA_ARGS__) #define xbt_test_assert5(...) xbt_test_assert(__VA_ARGS__) #define xbt_test_log0(...) xbt_test_log(__VA_ARGS__) #define xbt_test_log1(...) xbt_test_log(__VA_ARGS__) #define xbt_test_log2(...) xbt_test_log(__VA_ARGS__) #define xbt_test_log3(...) xbt_test_log(__VA_ARGS__) #define xbt_test_log4(...) xbt_test_log(__VA_ARGS__) #define xbt_test_log5(...) xbt_test_log(__VA_ARGS__) #endif SG_END_DECL() #endif /* _TS_H_ */ SimGrid-3.10/include/instr/002750 007661 000620 00000000000 12242224150 015776 5ustar00gierschand000000 000000 SimGrid-3.10/include/instr/instr.h000640 007661 000620 00000017752 12242224150 017321 0ustar00gierschand000000 000000 /* Copyright (c) 2010-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef INSTR_H_ #define INSTR_H_ #include "simgrid_config.h" #ifdef HAVE_TRACING #include "xbt.h" #include "xbt/graph.h" #include "msg/msg.h" #include "simdag/simdag.h" /* * Functions to manage tracing categories */ XBT_PUBLIC(void) TRACE_category(const char *category); XBT_PUBLIC(void) TRACE_category_with_color (const char *category, const char *color); XBT_PUBLIC(xbt_dynar_t) TRACE_get_categories (void); XBT_PUBLIC(void) TRACE_smpi_set_category(const char *category); XBT_PUBLIC(void) TRACE_sd_set_task_category(SD_task_t task, const char *category); /* * Functions to manage tracing marks (used for trace comparison experiments) */ XBT_PUBLIC(void) TRACE_declare_mark(const char *mark_type); XBT_PUBLIC(void) TRACE_declare_mark_value_with_color (const char *mark_type, const char *mark_value, const char *mark_color); XBT_PUBLIC(void) TRACE_declare_mark_value (const char *mark_type, const char *mark_value); XBT_PUBLIC(void) TRACE_mark(const char *mark_type, const char *mark_value); XBT_PUBLIC(xbt_dynar_t) TRACE_get_marks (void); /* * Function used by graphicator (transform a SimGrid platform * file in a graphviz dot file with the network topology) */ XBT_PUBLIC(int) TRACE_platform_graph_export_graphviz (const char *filename); /* * User-variables related functions */ /* for VM variables */ XBT_PUBLIC(void) TRACE_vm_variable_declare (const char *variable); XBT_PUBLIC(void) TRACE_vm_variable_declare_with_color (const char *variable, const char *color); XBT_PUBLIC(void) TRACE_vm_variable_set (const char *vm, const char *variable, double value); XBT_PUBLIC(void) TRACE_vm_variable_add (const char *vm, const char *variable, double value); XBT_PUBLIC(void) TRACE_vm_variable_sub (const char *vm, const char *variable, double value); XBT_PUBLIC(void) TRACE_vm_variable_set_with_time (double time, const char *vm, const char *variable, double value); XBT_PUBLIC(void) TRACE_vm_variable_add_with_time (double time, const char *vm, const char *variable, double value); XBT_PUBLIC(void) TRACE_vm_variable_sub_with_time (double time, const char *vm, const char *variable, double value); XBT_PUBLIC(xbt_dynar_t) TRACE_get_vm_variables (void); /* for host variables */ XBT_PUBLIC(void) TRACE_host_variable_declare (const char *variable); XBT_PUBLIC(void) TRACE_host_variable_declare_with_color (const char *variable, const char *color); XBT_PUBLIC(void) TRACE_host_variable_set (const char *host, const char *variable, double value); XBT_PUBLIC(void) TRACE_host_variable_add (const char *host, const char *variable, double value); XBT_PUBLIC(void) TRACE_host_variable_sub (const char *host, const char *variable, double value); XBT_PUBLIC(void) TRACE_host_variable_set_with_time (double time, const char *host, const char *variable, double value); XBT_PUBLIC(void) TRACE_host_variable_add_with_time (double time, const char *host, const char *variable, double value); XBT_PUBLIC(void) TRACE_host_variable_sub_with_time (double time, const char *host, const char *variable, double value); XBT_PUBLIC(xbt_dynar_t) TRACE_get_host_variables (void); /* for link variables */ XBT_PUBLIC(void) TRACE_link_variable_declare (const char *var); XBT_PUBLIC(void) TRACE_link_variable_declare_with_color (const char *var, const char *color); XBT_PUBLIC(void) TRACE_link_variable_set (const char *link, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_variable_add (const char *link, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_variable_sub (const char *link, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_variable_set_with_time (double time, const char *link, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_variable_add_with_time (double time, const char *link, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_variable_sub_with_time (double time, const char *link, const char *variable, double value); /* for link variables, but with src and dst used for get_route */ XBT_PUBLIC(void) TRACE_link_srcdst_variable_set (const char *src, const char *dst, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_srcdst_variable_add (const char *src, const char *dst, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub (const char *src, const char *dst, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_srcdst_variable_set_with_time (double time, const char *src, const char *dst, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_srcdst_variable_add_with_time (double time, const char *src, const char *dst, const char *variable, double value); XBT_PUBLIC(void) TRACE_link_srcdst_variable_sub_with_time (double time, const char *src, const char *dst, const char *variable, double value); XBT_PUBLIC(xbt_dynar_t) TRACE_get_link_variables (void); XBT_PUBLIC(void) TRACE_host_state_declare (const char *state); XBT_PUBLIC(void) TRACE_host_state_declare_value (const char *state, const char *value, const char *color); XBT_PUBLIC(void) TRACE_host_set_state (const char *host, const char *state, const char *value); XBT_PUBLIC(void) TRACE_host_push_state (const char *host, const char *state, const char *value); XBT_PUBLIC(void) TRACE_host_pop_state (const char *host, const char *state); XBT_PUBLIC(void) TRACE_host_reset_state (const char *host, const char *state); /* for creating graph configuration files for Viva by hand */ XBT_PUBLIC(xbt_dynar_t) TRACE_get_node_types (void); XBT_PUBLIC(xbt_dynar_t) TRACE_get_edge_types (void); XBT_PUBLIC(void) TRACE_pause (void); XBT_PUBLIC(void) TRACE_resume (void); #else /* HAVE_TRACING */ #define TRACE_category(category) #define TRACE_category_with_color(category,color) #define TRACE_get_categories() #define TRACE_smpi_set_category(category) #define TRACE_declare_mark(mark_type) #define TRACE_mark(mark_type,mark_value) #define TRACE_get_marks() #define TRACE_platform_graph_export_graphviz(filename) #define TRACE_vm_variable_declare(var) #define TRACE_vm_variable_declare_with_color(var,color) #define TRACE_vm_variable_set(vm,var,value) #define TRACE_vm_variable_add(vm,var,value) #define TRACE_vm_variable_sub(vm,var,value) #define TRACE_vm_variable_set_with_time(time,vm,var,value) #define TRACE_vm_variable_add_with_time(time,vm,var,value) #define TRACE_vm_variable_sub_with_time(time,vm,var,value) #define TRACE_get_vm_variables() #define TRACE_host_variable_declare(var) #define TRACE_host_variable_declare_with_color(var,color) #define TRACE_host_variable_set(host,var,value) #define TRACE_host_variable_add(host,var,value) #define TRACE_host_variable_sub(host,var,value) #define TRACE_host_variable_set_with_time(time,host,var,value) #define TRACE_host_variable_add_with_time(time,host,var,value) #define TRACE_host_variable_sub_with_time(time,host,var,value) #define TRACE_get_host_variables() #define TRACE_link_variable_declare(var) #define TRACE_link_variable_declare_with_color(var,color) #define TRACE_link_variable_set(link,var,value) #define TRACE_link_variable_add(link,var,value) #define TRACE_link_variable_sub(link,var,value) #define TRACE_link_variable_set_with_time(time,link,var,value) #define TRACE_link_variable_add_with_time(time,link,var,value) #define TRACE_link_variable_sub_with_time(time,link,var,value) #define TRACE_link_srcdst_variable_set(src,dst,var,value) #define TRACE_link_srcdst_variable_add(src,dst,var,value) #define TRACE_link_srcdst_variable_sub(src,dst,var,value) #define TRACE_link_srcdst_variable_set_with_time(time,src,dst,var,value) #define TRACE_link_srcdst_variable_add_with_time(time,src,dst,var,value) #define TRACE_link_srcdst_variable_sub_with_time(time,src,dst,var,value) #define TRACE_get_host_variables() #define TRACE_get_node_types() #define TRACE_get_edge_types() #endif /* HAVE_TRACING */ #endif /* INSTR_H_ */ SimGrid-3.10/include/instr/jedule/002750 007661 000620 00000000000 12242224151 017247 5ustar00gierschand000000 000000 SimGrid-3.10/include/instr/jedule/jedule_output.h000640 007661 000620 00000001057 12242224151 022312 0ustar00gierschand000000 000000 /* * jedule_output.h * * Created on: Nov 30, 2010 * Author: sascha */ #ifndef JEDULE_OUTPUT_H_ #define JEDULE_OUTPUT_H_ #include "simgrid_config.h" #include #include "jedule_events.h" #include "jedule_platform.h" #ifdef HAVE_JEDULE extern xbt_dynar_t jedule_event_list; void jedule_init_output(void); void jedule_cleanup_output(void); void jedule_store_event(jed_event_t event); void write_jedule_output(FILE *file, jedule_t jedule, xbt_dynar_t event_list, xbt_dict_t meta_info_dict); #endif #endif /* JEDULE_OUTPUT_H_ */ SimGrid-3.10/include/instr/jedule/jedule_events.h000640 007661 000620 00000002052 12242224151 022252 0ustar00gierschand000000 000000 /* * jedule_events.h * * Created on: Nov 30, 2010 * Author: sascha */ #ifndef JEDULE_EVENTS_H_ #define JEDULE_EVENTS_H_ #include "simgrid_config.h" #include "xbt/dynar.h" #include "xbt/dict.h" #include "instr/jedule/jedule_platform.h" #ifdef HAVE_JEDULE struct jed_event { int event_id; char *name; double start_time; double end_time; char *type; xbt_dynar_t resource_subsets; xbt_dynar_t characteristics_list; /* just a list of names (strings) */ xbt_dict_t info_hash; /* key/value pairs */ }; typedef struct jed_event s_jed_event_t, *jed_event_t; /************************************************************/ void create_jed_event(jed_event_t *event, char *name, double start_time, double end_time, const char *type); void jed_event_free(jed_event_t event); void jed_event_add_resources(jed_event_t event, xbt_dynar_t host_selection); void jed_event_add_characteristic(jed_event_t event, char *characteristic); void jed_event_add_info(jed_event_t event, char *key, char *value); #endif #endif /* JEDULE_EVENTS_H_ */ SimGrid-3.10/include/instr/jedule/jedule_platform.h000640 007661 000620 00000004107 12242224151 022575 0ustar00gierschand000000 000000 /* * jed_simgrid_platform.h * * Created on: Nov 30, 2010 * Author: sascha */ #ifndef JED_SIMGRID_PLATFORM_H_ #define JED_SIMGRID_PLATFORM_H_ #include "simgrid_config.h" #include "xbt/dynar.h" #include "xbt/hash.h" #ifdef HAVE_JEDULE typedef struct jed_simgrid_container s_jed_simgrid_container_t, *jed_simgrid_container_t; struct jed_simgrid_container { char *name; xbt_dynar_t container_children; jed_simgrid_container_t parent; xbt_dynar_t resource_list; xbt_dict_t name2id; int last_id; int is_lowest; }; /** * selection of a subset of resources from the original set * */ struct jed_res_subset { jed_simgrid_container_t parent; int start_idx; // start idx in resource_list of container int nres; // number of resources spanning starting at start_idx }; typedef struct jed_res_subset s_jed_res_subset_t, *jed_res_subset_t; struct jedule_struct { jed_simgrid_container_t root_container; xbt_dict_t jedule_meta_info; }; typedef struct jedule_struct s_jedule_t, *jedule_t; /*********************************************************/ void jed_create_jedule(jedule_t *jedule); void jed_free_jedule(jedule_t jedule); void jedule_add_meta_info(jedule_t jedule, char *key, char *value); void jed_simgrid_create_container(jed_simgrid_container_t *container, char *name); void jed_simgrid_add_container(jed_simgrid_container_t parent, jed_simgrid_container_t child); void jed_simgrid_add_resources(jed_simgrid_container_t parent, xbt_dynar_t host_names); /** * * it is assumed that the host_names in the entire system are unique * that means that we don't need parent references * * subset_list must be allocated * host_names is the list of host_names associated with an event */ void jed_simgrid_get_resource_selection_by_hosts(xbt_dynar_t subset_list, xbt_dynar_t host_names); /* global: hash host_id -> container container: hash host_id -> jed_host_id list <- [ jed_host_ids ] list <- sort( list ) list_chunks <- chunk( list ) -> [ 1, 3-5, 7-9 ] */ #endif #endif /* JED_SIMGRID_PLATFORM_H_ */ SimGrid-3.10/include/instr/jedule/jedule_sd_binding.h000640 007661 000620 00000001003 12242224151 023041 0ustar00gierschand000000 000000 /* * jedule_sd_binding.h * * Created on: Dec 2, 2010 * Author: sascha */ #ifndef JEDULE_SD_BINDING_H_ #define JEDULE_SD_BINDING_H_ #include "simgrid_config.h" #include "simdag/private.h" #include "simdag/datatypes.h" #include "simdag/simdag.h" #ifdef HAVE_JEDULE void jedule_log_sd_event(SD_task_t task); void jedule_setup_platform(void); void jedule_sd_init(void); void jedule_sd_cleanup(void); void jedule_sd_exit(void); void jedule_sd_dump(void); #endif /* JEDULE_SD_BINDING_H_ */ #endif SimGrid-3.10/AUTHORS000640 007661 000620 00000001565 12242224154 014276 0ustar00gierschand000000 000000 SimGrid team is composed of a core team and a bunch of crew members. Simgrid Core Team _________________ SimGrid is a joint project between University of Hawaii at Manoa, LIG Laboratory (INRIA MEScal project, Grenoble, France) and University of Nancy (INRIA Algorille project, Nancy, France). The authors of SimGrid are: Henri Casanova Information and Computer Sciences Department, University of Hawaii at Manoa Arnaud Legrand CNRS, LIG Laboratory (Grenoble, France), INRIA MEScal project Martin Quinson University of Nancy I (Nancy, France), LORIA Laboratory, INRIA Algorille project Fred Suter CNRS, IN2P3 Computing Center Project Crew Members ____________________ Check out our website http://simgrid.gforge.inria.fr/ to see who's doing what in SimGrid! SimGrid-3.10/CMakeLists.txt000640 007661 000620 00000020344 12242224151 015757 0ustar00gierschand000000 000000 cmake_minimum_required(VERSION 2.6) ### Need to set rc ccompiler before enable language if(WIN32) SET(CMAKE_RC_COMPILER "windres") endif() project(SimGrid C) if (enable_gtnets OR enable_ns3) enable_language(CXX) endif() if (NOT DEFINED enable_smpi OR enable_smpi) # smpi is enabled by default # Call enable_language(Fortran) in order to load the build rules for # this language, needed by teshsuite/smpi/mpich-test/. Use # CMAKE_FORCE_Fortran_COMPILER to bypass checks for a working # compiler (smpiff don't exist at configure time). include(CMakeForceCompiler) if(NOT COMMAND CMAKE_FORCE_Fortran_COMPILER) MACRO(CMAKE_FORCE_Fortran_COMPILER compiler id) SET(CMAKE_Fortran_COMPILER "${compiler}") SET(CMAKE_Fortran_COMPILER_ID_RUN TRUE) SET(CMAKE_Fortran_COMPILER_ID ${id}) SET(CMAKE_Fortran_COMPILER_WORKS TRUE) SET(CMAKE_Fortran_COMPILER_FORCED TRUE) # Set old compiler id variables. IF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU") SET(CMAKE_COMPILER_IS_GNUG77 1) ENDIF("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU") ENDMACRO(CMAKE_FORCE_Fortran_COMPILER) endif() CMAKE_FORCE_Fortran_COMPILER(smpiff smpiff) enable_language(Fortran OPTIONAL) endif() set(CMAKE_C_FLAGS "" CACHE TYPE INTERNAL FORCE) set(CMAKE_CXX_FLAGS "" CACHE TYPE INTERNAL FORCE) set(CMAKE_EXE_LINKER_FLAGS "" CACHE TYPE INTERNAL FORCE) set(CMAKE_C_LINK_FLAGS "" CACHE TYPE INTERNAL FORCE) set(CMAKE_Fortran_FLAGS "" CACHE TYPE INTERNAL FORCE) set(CMAKE_Fortran_LINK_FLAGS "" CACHE TYPE INTERNAL FORCE) ## Mapping version number -> version name # 3.5.99 -> alpha1 (oops) # 3.5.9{1,2} -> beta{1,2} # 3.5.9{3,4,5} -> rc{1,2,3} # 3.6.{0,1,2} -> release 3.6, 3.6.1, 3.6.2 # 3.7.{0,1} -> release 3.7, 3.7.1 # 3.8.{0,1} -> release 3.8, 3.8.1 # 3.9.0 -> release 3.9 # 3.9.90 -> release 3.10pre1 # 3.10.0 -> release 3.10 set(SIMGRID_VERSION_MAJOR "3") set(SIMGRID_VERSION_MINOR "10") set(SIMGRID_VERSION_PATCH "0") set(SIMGRID_VERSION_EXTRA "") # Extra words to add to version string (e.g. -rc1) set(SIMGRID_VERSION_DATE "2013") # Year for copyright information if(${SIMGRID_VERSION_PATCH} EQUAL "0") set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}") else() set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}") endif() set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}${SIMGRID_VERSION_EXTRA}\\nCopyright (c) ${SIMGRID_VERSION_DATE}. The Simgrid Team.") set(libsimgrid_version "${release_version}") set(libsimgrid-java_version "${release_version}") set(GCC_NEED_VERSION "4.0") set(APPLE_NEED_GCC_VERSION "4.6") ### SET THE LIBRARY EXTENSION AND GCC VERSION if(APPLE) #MAC set(LIB_EXE "dylib") else() if(WIN32) #WINDOWS set(LIB_EXE "a") set(BIN_EXE ".exe") else() #UNIX set(LIB_EXE "so") endif() endif() if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION") exec_program("${CMAKE_CXX_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_CXX_VERSION") string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}") string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_CXX_VERSION "${COMPILER_CXX_VERSION}") string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_VERSION_MAJOR_MINOR "${COMPILER_C_VERSION}") string(REPLACE "${COMPILER_C_VERSION_MAJOR_MINOR}." "" COMPILER_C_VERSION_PATCH "${COMPILER_C_VERSION}") if(${GCC_NEED_VERSION} GREATER COMPILER_C_VERSION_MAJOR_MINOR) message(FATAL_ERROR "Gcc must be to version ${GCC_NEED_VERSION} current version ${COMPILER_C_VERSION_MAJOR_MINOR}") endif() endif() string(REGEX MATCH "cl.exe" VBC "${CMAKE_C_COMPILER}") if(VBC) message(FATAL_ERROR "VB is not yet supported by Simgrid.") endif() ### Find programs and paths FIND_PROGRAM(GCOV_PATH gcov) include(FindPerl) if(NOT PERL_EXECUTABLE) message(FATAL_ERROR "-- SimGrid cannot be compiled without Perl installed -- sorry. Bailling out.") endif() ### Set some variables for Cmake SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) set(INCLUDES ${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/include ${CMAKE_HOME_DIRECTORY}/src ${CMAKE_HOME_DIRECTORY}/src/include ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/include ${CMAKE_BINARY_DIR}/src ) if(WIN32) set(INCLUDES ${INCLUDES} ${CMAKE_HOME_DIRECTORY}/include/xbt ${CMAKE_HOME_DIRECTORY}/src/xbt) #for win32_ucontext.[ch] endif() set(CMAKE_SOURCE_DIR ${PROJECT_SOURCE_DIRECTORY}) if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/) set(INCLUDES ${INCLUDES} /usr/include/) endif() ### Check 32bits or 64bits INCLUDE (CheckTypeSize) CHECK_TYPE_SIZE("void*" SIZEOF_VOIDSTAR) IF(SIZEOF_VOIDSTAR EQUAL 4) SET(ARCH_32_BITS 1) ELSE() SET(ARCH_32_BITS 0) ENDIF() if(WIN32) #Need env INCLUDE set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}") set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}") string(REGEX REPLACE "/bin/gcc.*" "/include" CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}") string(REGEX REPLACE "/bin/gcc.*" "/lib" CMAKE_LIB_WIN "${CMAKE_LIB_WIN}") set(INCLUDES ${INCLUDES} ${CMAKE_INCLUDE_WIN}) if(CMAKE_COMPILER_IS_GNUCC) set(__GNUC__ 1) exec_program("${CMAKE_C_COMPILER} --version" OUTPUT_VARIABLE "COMPILER_C_VERSION") string(REGEX MATCH "[0-9].[0-9].[0-9]" COMPILER_C_VERSION "${COMPILER_C_VERSION}") string(REGEX MATCH "^[0-9]" COMPILER_C_MAJOR_VERSION "${COMPILER_C_VERSION}") string(REGEX MATCH "^[0-9].[0-9]" COMPILER_C_MINOR_VERSION "${COMPILER_C_VERSION}") string(REGEX REPLACE "^${COMPILER_C_MAJOR_VERSION}." "" COMPILER_C_MINOR_VERSION "${COMPILER_C_MINOR_VERSION}") if(COMPILER_C_MAJOR_VERSION) # set(__GNUC__ ${COMPILER_C_MAJOR_VERSION}) endif() if(COMPILER_C_MINOR_VERSION) # set(__GNUC_MINOR__ ${COMPILER_C_MINOR_VERSION}) endif() set(MSVC 0) set(BORLAND 0) else() message(FATAL_ERROR "Please use MinGW to compile SimGrid!") endif() if(ARCH_32_BITS) ### Arch 32bits set(_WIN32 1) else() ### Arch 64bits set(_WIN64 1) endif() set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITEW6432}) if(NSIS_WIN_VERSION MATCHES "") set(NSIS_WIN_VERSION $ENV{PROCESSOR_ARCHITECTURE}) endif() string(TOLOWER ${NSIS_WIN_VERSION} NSIS_WIN_VERSION) set(_XBT_WIN32 1) message(STATUS "C_COMPILER ${CMAKE_C_COMPILER} ${COMPILER_C_VERSION}") message(STATUS "CXX_COMPILER ${CMAKE_CXX_COMPILER} ${COMPILER_CXX_VERSION}") message(STATUS "CMAKE_RC_COMPILER ${CMAKE_RC_COMPILER}") message(STATUS "INCLUDE ${CMAKE_INCLUDE_WIN}") message(STATUS "LIB ${CMAKE_LIB_WIN}") message(STATUS "MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}") message(STATUS "CMAKE_BUILD_TOOL ${CMAKE_BUILD_TOOL}") message(STATUS "LINKER ${CMAKE_LINKER}") message(STATUS "CMAKE_GENERATOR ${CMAKE_GENERATOR}") message(STATUS "BORLAND ${BORLAND}") message(STATUS "VISUALC ${MSVC}") message(STATUS "GNUC ${CMAKE_COMPILER_IS_GNUCC}") endif() include_directories(${INCLUDES}) ### Setup Options include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Option.cmake) ### Make the *.h files with *.h.in files include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/CompleteInFiles.cmake) ### Define source packages for Libs include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/DefinePackages.cmake) ### Build some Maintainer files include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/MaintainerMode.cmake) include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/UnitTesting.cmake) ### Setup gcc flags include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Flags.cmake) ### Make Libs if(NOT WIN32) include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/MakeLib.cmake) else() include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/MakeLibWin.cmake) endif() ### Make Exes include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/MakeExe.cmake) ### Make tests include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/AddTests.cmake) include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/CTestConfig.cmake) ### Setup the distrib include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Distrib.cmake) ### Pipol compilation include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Pipol.cmake) ### Build the doc if(NOT WIN32) include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/GenerateDoc.cmake) else() include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/GenerateDocWin.cmake) endif() ### Print ARGS include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/PrintArgs.cmake) INCLUDE(Dart) SimGrid-3.10/doc/002750 007661 000620 00000000000 12242224152 013763 5ustar00gierschand000000 000000 SimGrid-3.10/doc/triva-time_interval.png000664 007661 000620 00000162412 12242224152 020471 0ustar00gierschand000000 000000 PNG  IHDR>TջbKGD IDATxy|Uչߙs2#!#I@ B &CVT[U굷UkWjmۢuDĪL)d!1 y:ΰy9&d$$뇏Y{}TÁ۷'O#kG7@ !96,Xĉ("1Xh:1xoadDMNZ谄S`8=zSc` Ў 8J79EQ^^E:С !D4 8m`:41HH#ّm]9A~TTVRW' +ԧ &24`Ol 99O!Mvlvia̛?o+s53Z0u{ ߠ[l} x@qd'h#s͗(U% 򧴬&eCtsO!ӿlu}KH;(pMUPhAտwzw5e_;-&i#-{MNcvE=nO{͌n+ͻ/\{d}nwၩKdᑸ5գ+kc}k$>jj154`?dlpQq5q5h@h?KZ(<_:ԞT5*P._ًU.Qƈ^=p!X)=!:Up /.p`w40pj !^:ئv{8/&>jl!9Xo&jL4ZxmoPQe U]zy`4ljonW*bGaٰlXjl?6Z8:f̿QcPSYAIQy)*˥VƼ'~s$h&+4DpX,ϳĸopr{GTdXz]:Jx1|nέ]UCqn^=Ra͝ &ܻ&dr|L"6N+|.T֛t~oo5_G48TLnyG2ɫ8 ,!dTm?~paoNħ,VMSUďw|9v7.TrKLh۞gl9XOvŊsUI\.OJ=6E @17ɲi05NTk fT!WZ Zt*aǦ80kЪ;9`pGKjpK#&[GNPWXShbkvSbveXLa)wPDC|}_{P.nz=.7#͹Mw&~qUZ4ZwSqqΜ?îjE[F S%8iwyz=6=VÁǧu'x`Rʛ|>m!N5pŽE勩 Q5jD(tݗݓ@W]s._ZozbS2O{iAXw.?iA F#3f1ulJigL!j.-9:q%텗F5?KsQf>dU.di5}yհV;mz||}A U-JUU=^7Z6Oe1_[~(EqӒRIu\ Ih/ixr;/W_V5VQogƸ8"ԗ/kAjttAObRm["F `TZ~ g 󙿨8ju8ZsP'>a].?.q} bx? vi͉UWo2Kgľqivyh`X;j=.z!M UA+:;eeUU7bջE7 JI'fe[txㆷ=j(jdFl6f7wwB|vv"^ˠAQ*L5U7b8-`zYM\|-FUrS#^)JNň/x$*W5РAƚ+ȠP[SKJn,Tts]5iK| m%U5DġNمbFS 6:&LMuxblsxt,E%%WbSTYϞoY&=>CݟVuZ-:+v<=hT6TkD7bvZr[Dy_5恴h4**=^F ssoCX΋c:墳uxyzi5M3`G^NŹCER7Qc4iڿTR04h/-J':ZZiCGqi.h0>ҠpYz-^ iKZ\<=wtIK> vodn鎯{ۥU=]=YqݓG+cԸu6OMWɥ NN_NNqt^%,7& wJ˥Q\:-nƎʺv^۾j?q S¾MZ\VӜSI#ZH#:SB#*jj눋#"zDl3mz|l&ZH#kԈB`?/.tAn7\&ZGY!o!ބz|&ZGcw8X_/עξrE =vrOnxB\̖A 6=yS=GqYB*:<NC<,B!C!B !bȐG!C$>B!2$B!Đ!B! I|B1dM&So_bb@ڭ+W2e<<[oL26m⥗^dۗS?<B Uu^4vs7w8ZiF#+Vh3gĈ~#F8{f֮]˝ww믿NYY/'99Wuٕ}M+l7 --9-**y9OKKc$&&˘1c/~App0[lq~CԩSl'$$$L\\\5k)))<^h"~0L~#̙/^^^j"##۬?o޼z:v_3Lk̘1ɓ'ϧ~ѣG]&￟g2|^կB 5{z^v,X_~٦,?;v,=˖-cŊcܸq,_ydĈ?zj_.+quuol3bK/b Μ9f<ͱc3f f[SO9R͛7tRgT*r j >lټy3٬[?_W<]ߓrtUW&$$6G @QQ_qd͚5TUUaZQThZBCC;8GXXsν*ٹ~\Z; >4??6{{{;QQQ?Fo6CFƍG\\\RWvYG14<1HMMÃ*Ҝ݂(Bpppn9W^i3OQEQ)))췺sK/#z=)GWp5lhMh4l>_qp>lٲK.`0 Gaٹ~0^ѠlZfa]];վz|ҥKO/9{j\pxyyhxXdIor{ewx=)ǵ?Wi0<+ ޕjQSSn^MM͠ћUc۱X,xzz2``ڴi|7Œ3ؼy3/e '66Cj^Q9Ѷ֯-[(feͩSgܹ~hm0]hd„ lܸ9C9EoWVIOO;v\7|ݲ:u*ӧO'$$'Or/3efΜ?LXXdggc;|ŬY1b'** Lff&v=^u&L``ر=.GW:`ћJNNNG ѣ,XH6mڄ+K.͍>#GAuu5w>>>\jQGyOOOAR;w%eHOOgժU;wEa0X|9ǎln[TTD^^UUUW;uEffC~krewgo#?O(++{.+^o6<cǎEד֒ٱc< ?0DFFйLRR{7 =2qD~ӟvK/ħ~ʟgKoҥKvm<..4 s̡b9}4@hh({JYns,4[+00We%00^OXXV799ŋ8 þ}`h}˭.]j|G<3>@דJRR^^^l6>#ʈbDEEk櫾_!&DrK1ɭ.[rK!C$>`XxN3! c|zaΜ9lٲZy䑁G!ݐ^hyqF!{ĥhKz|z[naż{,XݻwKЮyhr, M&ʕ+y?<7xn|0! qMXd s0 B.CIO/gʦM7o_|E/=# vFcAtnr'IO6l7n$<<[:,!C@MM 7|3f̘1{'`[ IDATTkВħdzuVbccٳg&L૯谄B\˙5k۷o'""k1a jHvܹsp<ӘM!uo>F֭[6l@5IXf ox?~<۷o@SSB y>瓒֭[>|@uMħj}YCrr2Gaԩ,\GtxW`0ꫯsϑd萄bH)**./x[<С]3$Gƍc%88իW3f/^́:˦R9vo&?/yyybPll޶sE:^X,d|gGob0:k$>L'Ns3g+V(۷/ロ_ڵ 2Q !2Nnn.o n?(|@BB?8555,^Çswtx$yU3<O<[oş'233ߟEq3c ,XX,lڴM6ĉIJJB\ǏgΝ|m#9Upz&~?O:u 3f? & pt6"]ennng?G7˖-?77Ϗs璑AFFƠo;bp~SS۶mc۶mBZZGFNF1RZZ~~~^*sO}vk͏dꍓpk.|rPT̙3'|Yf tI|ZfΜ9̙3rV\ɪUزe ||*8RRRHIIaĉ7nPMLL{L&'ˋT҈/r8~zN:Ett4 , ..Fӣj:fѹZ6lÇY`~~~=::ZF͛)**"44tƍdffL0wwN z-cܹ]̃ٳgYjk֬e-Π>l6k>S>SΞ= 4%Xd >(cǎ(/ EQcǎdeeqFjjjHRSS{EDAϏ{{y:;;l7|Þ={سgO4 Ç'..  ((  ǧOWTT__G||<}[_9<L>yaXسgmlf$>ݛ3gSNeʕqzzZ->>> 6|L&ӧOSRR´iHIIAJb׮];{,nnn1vXz}I;v2<|z޽={;}wjם,\PsH3T*㉏g@ w^?Ή'ϧ;nnnggbt7ڬ46755FEt&F :777۽l6۠'퍷7nnnmww,t^kIII?uֱfIHH`֭4445k`ۙ?>f͢y-svACC>>>r-L2ww.IUVqaΞ=qIKHHHFֹR.}FaرqM7}: FCTTQQQ.[__OSS555m~XcB=*GSUkBV\Ņ_v̜93g_M-afՊdť-lfr==RYYI]]>>>[鱗ш`Ϗ`Z466v9Ņp|||puu%88C]=|AAAuyw?b3X{V9&;=>:񩯯)z=̚5ɓ$''_'mѽS[[nl COg¥Μ99vX0 lڀQ-pqٶo.鉍eѢE$$$t},ٳyg9x ~!G/̱Ǚp#$>(ºupuu%--P.ݓYB^gS\\̦Mزe!27nG!,xzz|o^ONN@%BBB{뮻!++`XnO=zG)I|ebА։r,! nc Ak7McA : 1ȱ OrK!C$>B!2$B!Đ!B! ,IJe:!1cƌA\$& !6y]\)I|DB!2G!C$>B!2$B!Đ!B! I|B1dH#B!C!B !bȐG!CY,335kPUUjERj ;d߾}1w>wCCvb۶mTVV2l0fϞͨQ,[̹? o۩#>>sF|@OXXfͺ1$$>rrr8y@1%''{E놄ΪU8w-`0|r;ӧl<#xzzONN*1cƴVZZAAA~z 117P]]}݇+WhZE~qssCusyN"""#//N ( sog9rnCƘ1c?;Hz ɦMpuueҥp#,,d߫N|o{C$>O,YDuva߾}W|!%00^OXXV"֭[fs l-Nȑ#5jf<݋Z&99@hh({J{_///t:VMo8~8!!!DDDj5jyyy8h4h4Vku?텇wSߊ#&&FÜ9sbN> UY~EC$>ȉPTm~7<L:F(455ն `֬Y ͥ9w 4~é` n+nwNP=~np8lzk( ֒رBILLĉ]zS;{D[999̘1[qgb?ݲ111TTTpIV+Nh4###ի&&&9r$l۶ ؽ{7j̙3(Çt\QĴѣGĥ1466rJKK;Vaa!?ZMcccӲ!qKLLl6GQVVFTTg dEaμy1bDONNfΝTfh̟?^xF#F`۝q;\Q7O]])))8MXϟODD@&`!;:TRSS:! #B1dH#B!C!B !bȐG!C$>B!2$B!Đ!B! I|B1dH#B!C!B ]]bP?~bطo'OurssOHKKG!DVB! םe˖ܹs֛e˖V̙3IMMۻײ*O_khh`׮]l۶J ٳ5jzMY*W۷}vꈏgܹšh:z'}d֭xY?`ܹvXv-۷ogxxxyvݻ$ cǎ7ߠj@ 6`4/+999V1 !:'#'NܹsWZ&((tGՕQF1|~v_;wF4 Ġ-;P:z(xĉd2aۯzLBI-[F]]PSSÜ9sPdggqFjkkIJJ󄅅PTT͛9x $fϞMaa!GxyyaZgHOO'!! 1LTTT8cULRRpqEa„ ĉIKKO?ՕiӦ|6EAsQ }Eee%7p$''3w\Μ99~8cǎeل:`Xػw/[lp222HHH@v6lGA2vX|||4iRmƬY:mCݻ;mK:""r={|||z}Z,['NOFFaaaSaaaW>3g첌B u!KqwPWW7|uuurw͡C8~sҥKqss>ȑ#GXX`xG$??T*cƌ6.^OSSi,XH6ma PSSCqq1uuu466RZZjWWvS9sp|r9Bqq1ϟ; 22<ܹMEEE`?;3:y맣^TDNNׯۛ qqqiٳ۶i]׫V겜ոlWF`=zNdrۧ'eb(G Y={(--bbbj=l:s̡b9}4m[PPulizeXpqqh4:F4`pDDDLJA`` Fj%??"##j5M98y${e̘1"""QRRL|:t:#GdԨQfػw/jsԩN۰'mӺ+':ڦG8ZFV;1uO$>VEQ`0tCКJBRu:ǎMbb"'Nhh`ԩh4EVwJKKqssksmuj3gCBBUUU:uX|}};ܟZvnnp?Ϙ1ѣGs!VZɓ?~shno3ޥ^?$ Yfa0HJJ"77N {6뺻rSUUEee%@s~zpWn?crۧǟ;,;TUUqi, hZBBB,wiJJJ(((@@tt4Nk=Nh4v{ղrۦr9RmFEEMMM޽Z@zrLuT/ϕB @\wQ{R7o111mkhhޣ bbbPX,>c0aBq1&MbÆ رx)**"??vɬY ⣏>(fϞMTTT|@-Yf]fCMPPuٓuqax#%%8QFvZV^̈́ HHHhQ˗S^^|it-/_NQQ̛7#Ft{gmlqtWNOOOϟW_} /@ccsrWq=*cgsebQ9Z^M3{(o)aƌ^WN?~<ʊy9Pk%%%8|}}466f ɓ:!o(oC;1,\yU IDATVRvɓ'ill2@vɭ.1h:tya0ʾE L&>eDDD thi!zC1(|';vOKK/}hKӑJjj@": #ĕG cƌ !w2G!C$>B!2$B!Đ!B! gc2qտDy,K\)SNczdff:((GObݴi/R?-B fΧF#+Vh3gĈ,=2ydΝ˖-[xꫯ8>c׮]{_Q;%%%̙3%Kp9ΝfB!/Y\^^ʕ+ 44[[[l©StYy饗 Hbb";/^L|||裏4iΌ9^x믿vBR0jԨFXXXG߾}1~xƏ9<<u3 7YΡB_N}cjj+z,--qtt$**Q___Z+$ 'Nd߾}h4JJJ}JJJ K.el۶Xxv篩aϞ=L2EW\{3@166fȐ!ֺ211aĈjS! :O>}lS*M+Jquuu,[˗7:VѠhHKKk(V}BHHp5Oll,K.e̙8::FCǴ7k[%̙3׿oMXXfffܸqpuǙ5ۗH!譺"(J̙ôiZ<߿]ӦUXZZիW9kGt45k7on;%BK- ccc"##IJJbɒ%7̌#G6ٞW'Nٹ]9`ڵ,Xڒf522q bnnhsR]w^qqq!::??6Gݭ|ݵqvv&66\Ak>._Laa!N!V(|{=Fɘ1c1cΔJCCK,iܱcҿ&L555$&&zj}Q˖-cԨQ=8::ñcXV*++YjCȈGTT}>(}eӦM|'ǖj)))/V9}4GE__كnjbhhHxxnh=jRɀ(++=9{,.|Z:ҥKaeemf" S\\,O}B{g`-ȑ?ɕmNdd$vvvNL^IIIdee=8x 6mBO@RRDtt4šhׯ ]ohZ033kv:u ƍS̷9s $::RRRt윝Vٵk儆2zh9tvWWWƍ-汵%55~R%$$f999QTTDzz:QB󦟫#fZv=CGD_?;6O|ޞtdܸqJff& ͣO>Y,] ~a7|;N׮]ںũ 4 111<[&Orr2$dff h1)/^dʔ)׏'Np̙V999aff͛7{ū=!> ##___ :/QSSCff&BOOICQQW\ʕ+\pWWW~ooo<==[rMZJRlp{{{rrr8tذvZmۦn-GbggGAAj'''J%O?4 M6akk;ɵktOsyΝ;-Ojjjn֕TVV7#:ao[o1xV;2Yv-?#7n4}ݶ~~G*++ h$vq[{IOO6"##yGhhh`dddR>}:֭cÆ [O>#Gj=USSCuu.Ý.544ju${mvF !Dw%]3f Z=z"xzzRTTDNNiJ޾ɱ/^ښGUUUV10039sLMM)--ˋR򨯯'55[rEKEEW\xRSS𠤤\4 'O9Gaa3$//|pksss,,,ޅ'W]wi̜9+W2i$8 cQpp0uqe\]]?~<nINNҒÇ}vπdgg7iBCCu]\\(((9Ϗ~x666԰~z ::\]]INN?0]Cn: u===[A_7n`С|Ř^} !Do!AUUcƌ!%%Çsλ Q]ZUU@۷JE``=J^uJ<<ݝ0vX.]Ddd$K.m4B!DjDx y?qF4hPWǻ'Z'$..۷ߗԩS§)J,Yĉy9|0C gѢEtuĻP(#F0hРNU2~xBBB:͞l„ y|o#((໚H?tuIs1#Gl2 ֭[/ٱt̙3{bjj GfD>ǏuzH!z3s?l^}UVX'< {QEQQQcUVqرu?B!z)|[[[VX Xp!YѣGŋ2~&***غu+SNe֬Y|? !-cѢEW_3gx7Ϗ sNjkk:nlmmnqAA[n*6l ??&B!Z&}|Jⷿ-o9}4~-7o&++,,Y)#F` 6f zBu6mĦMpwwgĈcggR !MI ooMVV駟طo$&&uwwgذa 6 _vKnn.֭10CB!yRt#?rIII!--T]i&9J777_~ۣVqttZ~X9{,gϞeոCmmm=Y!Dא§255eܸq7N-7748ugϞ%''sy~S՘cii ƺP(XZZ{jjkk3//ݻwcddc8BsHӃΤIt4 yyydgg͹sv\rׯSPP.T*H\\\WGB H)J<<< :: (--JuԠj)))aXYYկ/W]LPRR† :UP@TTCյ'B<(RjZqJ}zPHJ&Ǥv֌3cǶ+BqH#:= (J"((==2n|رJ!z.)|D?~}6mbŊ;vj4hfxFsw٤P(Xj̰,T*7nl^̟?_‚#/`ڴiDGGbaaAnn. l߾QAq';;z))zpKOO'22_u !D[:M?WG |zIn8BCCّ;U@@FFF:tIZڍ]NdBтŋcjjy޼y888pFJˋ͛7rJ<==166fԨQg<#XZZRg޽suDZ13c= xyyhѢ{ڑwfGP4{Ϲ@ !C***xgy爏חɓ'3w\l{W_}yꩧ{1FAII WŅv !!!+Vp{t¸|2VbΝ,X{z9j_P(>kGL4^{^{ gggF /@LLL_]vR5jndۜ~x"߾\ O|B155=8::+z|}}tO%%%nsss#55.]ٶmÔ)StEϝڛ%Gy 6l؀=y#BtH>}lS*M+Jquuu,[˗7:VѠhHKK#,,C !$$ptll,K.e̙8::y%%%h4ެmۜZ{ .eG!x,,,P*̙3yQn=qzIII!;;]%\zvDGr.\m۶ݩFee%d޽Btt4~~~s"??_wNm]|BQ81$%%d+̌#G6/;;//&O8sڵkY`&&&w%s,^>NRn$%%2^~ej5Oѣ@XXX1FӨj;ёSNQ__Qx9r$cƌaƌ8;;SRRBjj* ,YǎK0aԐիyGׯ_,[QF1zh~HNNǎ>w3++SKtt4N355?C)|D=jRɀ(++Й3{^t ### ifIPLqq1G,((4z-̙Cqq1 6YfyҥKٲe >W\ͽyu(Kpp0g…̘1 o{z9O>MUU ֆ!!!?CY4ҕ37'%%ʪ;_?!%%5G}+++ݫ2gggi2ajaff֨84 :u ƍS6nO~Htt46664ArAvEyy9=sss:Į](((Օqヾ~ylmmIMM姟~ rss !66|NNNnԉ=YGtۓNBB7&M8'hHJJ:9s&dggBhkװnv'zO>T<<<())!77Fɓ'100hs.~QXX233k5ܚ6 w!DZf T*Ǝqzy#`4 ֭˸2~xݻw޽{ӻU?{{{֯_OAADGG| (++k2E{?СCƆf3NEEaaaՇbݺu:7{zzzAQ[[˿/nܸСCKs177׽B,L>+Vʼnz%Q]RUU@۷JE``=NoՕȑ#wVH=JΎ^ɷCCClll9s 3vX#ɫ.kRQQ{Udz!Dvatix IDAT~a^ȑ#ٲe.?Ry*LMMӧ,U!D_իW7n۷o @ !q/SNٳg qB\\۷oB"C]]iӦM̞=WbffG}3<ձ~ -0a=FPPTUUuR:!z~۬ѣ$''?xPRSS][.~Ǹum_)|Ç7;DDD`mm0O^A芝K899??]xZ-,^ɓ'wu_)|BZb޽888?w2j>G!DvY9pceeExxNqݻwyf֯_???~3`dd)٤B撜~zLJ6 qwPTTO?Caa!FFFL<_|cǶ<!Ε+Wطo ??CܧTSHMM%--rQ[;'xɓ'cmmʼn{)|Bt89]Չڧl9qSZZ8aĉ>H#b۶m|s{JKKNHn޼իW~:ׯ_}]pkY???BBB6l 4W-I#j={/vJ+VJmWTX[S[UN:~?QUYY͛7j}aa!555m^/// $$!C`nn)%)|B<0 @^uCRROFuuuu8plw888`gg{ooo]Oă!BNP0zhFMyy9wfΝ\x{hhhh4zUUf}CJZ: Qebb*2L !]Ԕ~~3gΰc8@uuupwwɩ~jbHΌ.z )|耯;vÔS 퍷7/#))g϶y^NNN?'4k,Z=FPjl+((b dllLTTQQQcKyyygdd0jԨRDRN&L`„ ֞.D /3ϰ~zh􏌃2uFh>ضm۶mB,00300Ϗ/ݻws jjjصkǏF -L6iӦuu !DSO=œO>Çٹs'[l!"">}tu<эI#R* 6aÆq JJJG!/VVV]CtsxB!z )|BkH#B^C !BR!אG!>B!5B!D!B!z )|BkH#B^C !BR!אG!>B!5:dK0sL(G!iӰk=|/MOOg=^L !ziӦɿ{ÇcnnNiiiWGב>>B!5B!D!B!z )|BkH#JvɢExWYlG]3?? #!!]._LFF>7''? >qƍ // 2h BBBXr%ׯ_/[wGyV,[uO>$w瑩Nm}~-'^dT6RRR(++_FVsi=>ٳkkk:nKi4N>Zښ0LMM;#NkkkJeh4^Z͎;w%)))SgnܸLqq1!C())/_~,^ .vZ0aBmwյo>Μ9ѣ9~8[ne͚5̜9QTrrrxj߿ 7|~/_NRRocܹL2 -fϧ{oooIKKO> :՜{k !y#|T*jRɀgϒv[:ҥKaeennnv@PLMM :gҒz׿ ߿?TUUq…F痖2d"##Ϗ:._fT*T*ddd퍿?VVVDGG$#GP1dL€tmj4jjjFPT*/~avء{rRZlll#FPQQٳgZڽv{'>pqq!++ }}}ÇdeeqIppp )) jkk "::gggtYVUUquy]xKKKpvv&66V׆!NLJq(snn. 9s )))ݻbVٵk儆2zhlmmkkkKnn.v}~J~Q[[ˌ3O3gWhT*)))Qnnn⯡}aii_ۨeÆ B#??kRXX̙3yo~üy?>'"" GXX߿{baaȑ#[̒Gnn.Ǐˋ@9[Bt/GtDFFr%ys! חhĄy׿:tmUTTÜ9swk׮Q__Jj6F!&&?6jdy뭷pqq49s&˖-Gff]II SN)++رch4F횙qMnܸАUVq HMMp,^]iii2hРv:O>|g:u"55BÇQ̘1kkk=i)ˤIpqqaԩ}vju !~y䉏6 Ϗ2339tzzzMr W\… {{{j7obff{s١T*Q*:fooONN"00֮]˶mۨghhjP*<( J*++ܸqd\]]8p >>>h4]g`'''B`mmIV%))DNttt⥭6jkkIHH oov嶵ÃjotNeeeWWW***/ #%%sss]ߠdffˀ122jWߜ]3W]+WdĈdff2g[,YO>$}WG찝;wtҮѥ<==)**"'':Ν;J޾ɱ/^ښj]q7~Μ9CHHEii)yyyד֭[x"}+WP^^N||6v玊ɓ'3sL|}}ux Z-?8%<<~_Hpp0~!ÇgfёW^yaÆqbccթ{B =ρxWyX~}G/;訚:Oܽ`4 ֭˸2~xz%Çg߿`gg˗n煆궻PPP@YYYN? :lllaAtt4NEEaaaϿo]bͱP6}J__l\;poIkm׿n5ߝ׹̌ٳg3{&lll7ok/44=YLLLxy;{off 8P3<éS8tPc"##7oe͚5,X Mʕ+[ݗo={!88K2j(ݵnqF^u= ӟ3g>pk(3] ׍B(t?Ϙ1㼼Z=6WWW),,ޞiӦ}s?֯_?f͚dÛT*3f cƌikcbbm$sgΝDDD`mmݩ햔 ___[w1 f՘駟ErrrIΝ|76l`ƌߟI&pBs-vGRaggGCCwԧbhhM!h[͛m7}1118::1cǎ%$$ŋ?\4wqqqlܸI&ammzzzYɨ+!G>Ce[jkkIJJb޼yrR(L8?^xxxpҥNq7J%].LYY7nωpgG΢jȑ#< :ۼsbO!~ zTcaa9ϟtkw Xl˗/otFi2]s"DGM2o ?Ž;|pWTTD}}=BdrF!~G>pu)..n~9Snݰ@T2gΜ; q?9r#G<544p!郷7RtCXZZ2j(Z-&Bglݺӧ7膳2gggРqM?~OkIRRK,锎FFF2 _Gϯ~+144ihh ''+++Ȟ={v횮 F͛7aȐ!#GPXXH@@9rqttúOv cŊlٲl26ng}Ɣ)SիL4"z-JJJ8}4O>d*Of̘1]ݻww?Y7L#dժUFw hZZ-.]ɓ6DUt"CCCMi``)Sxܹs潪Q*kJ̞=aÆ|r/_Naa!yf~aVzKśoyϯHKK㭷bΜ9WoÆ kv^7|bz<>;w.W\᧟~B__``` O~|իu=۷/jҸ~:~~~mtspݬ2izdfmݰaC=s֯_[:)J>B&==v=Fùsկ~y7Xz5X[[']N ={cDzh" )((`Ν^w ===͛79v&&&.'#Dwc !ăЀ-ݻwP(t+K~ӦMήS B EI/ի].\ڵkchhZֵھ\\\ѣDFFvDB<RуM6̯RSSٳihh@̢Ex7h4 4H:<Ç177Sڻx"*QT*ׯ׮]7|CEEƍSw|kn>}RBBvħ^  pu>crrrfZs}9::2sL}f;> SH#/V?d֭Ϝ9S֝_?… 4h!!!\ _w6ܹs @jj*999ۼ;f<߳g7n?fdffr6̒:B=fTJbƍKߟYXXpF3v/iӦ͇~$$$}vƍvvv^xQ՜>}GO@@aaaVj4N>ZںS۾:uz;4dʊfWs݋/orFj nO|JJJݝ0#** JB'//V/]lR QWW˗[kGj066 ֚}ߟ:˅ 2dHZ˹m۶Vg&CzLT*4iRmfɩvӧ?hmZ|9l߾Q9sdd^|ݴJPVV 3K.addU}/ S\\ܡ...omm-6lƆ&T0o3!Dc^uuDs͛GaȑT*ؼy3+WcccFd6Ռ y,--QTwv~:NNN͎hk%##{  bѢE+ݻu >ooo?̟?Sw߱g׿2w\/_NFFF*MڎO?嫯#_}IÝrssO;w.WԴݻwh"^u6< IDAToެ;RVV{! j Wbb"&++T iLII~9z(3N:;x>3!Dct }Y^yx 2yd^y9{Guu5㩧"%%cǎNpp0WԔO?([<춐Xboprr{HOO'""VZ#gϞ5茼])<<{{{IHHҒqqc'Nĉh4$%%Q^^N]]̜9sssIOOGPk׮ammJj6F!&&'xu֑w;O=qܹ3TVVRRRԩSbӦM;vFF̸yfz%!!''']1s'OۛjYf yyy׶L<HII'11fϞJbڵwj$%%Ény7S'''B`mmmZy}fBW>\HBlٲSNadd;^"//777ϟ#|ǎKHH/&>>~GL4^{^{ gggF /@LLL_޽EU 3 (B(x-LSE),)3xtTکE.걋R )"- ?2?`P|}pEJJJܹ3nnnk*Φg0 C%>n=ⰷ'::Z?yyyّH\\D¨QXlp͛75kxBrr2$&&̎;ذa>+G(3gl.EMM^Wk׮ښ(###b322(,,GGG 'OfHRJ%UUU:d2JR@TfFFFҫW/N<͛ i2-[h^]] {[JCCfӧ166Ic aԩB`ʔ)0p@._Lll, ___f5gS곰0=* sf̘㞙ܸ߷u tp"ivɎ;OtΕ"tlU]{Ǭ#K@$> 17n /PXX;˗?҃9Oz駟npYozG{'N뷺^ħuڕo}]z⏡&c >6Μ Z8[+{{{,--oŅuXBY|y[ tpgֶlԨQL>jFͶm:$AAx$ħXhӧOqƱtRAA7"i'$ K,a(Jz-x _֡ #C$>ܹsپ};l߾>}b T*U[& =CÇĉ;k׮1i$ٷo_[& 5S666l޼DIKKcРA 8~AA v.22V\ &&///>c1HAZ@$>^z%Nvvv&,,P(RAM$>\.'<%J177ry>|xuTWWS[[Kyy9555TVVT*PO&ذ_R556z)eeel۶# b␖u D#Jrrr.kllL ԔpLAH|?~BoooLpppAG$> ~,,,`b=.AvH$>p9. AG$>p n0A=uwA"A  H|A D엯/ow$$$rFݻe=ǃ&7 B`ӦM^{5wΌ3Aب+V0i$ ²e077''';wk.8vumA$> B$J7nƶiӦ࠵`*f-YvڅD"Qo&OܮΣ-G] Ќ;aggGZZ( <==ټy3}ݺuؘU'=z4( 8p^\~ASo6ĉ3"## k׮lٲ3g`dd.kq%\\\1c޽ccc blݺɶ?sƍә>}:+0lذǻヒCP0`{ s׮m[[qόKJ:AhUngooOtt: //jjjHLL$..NHōGŲeP*ܼySM \\\HNN&99Dٱc6lgzCuu5g̙v0 sfW{͚C;tIkT*ް~_]]ֲpB,YQVTT*8z(___}PPAAA0|p:u*͞CII JEa"Ahlm9aw*9R&իE-,,x9rϟ+񱰰@&q{a"Ahn::m ؘHY`2b333u;axb4hSLёQT,X㣢޽;#GݝjvͪUCX.\Ȁޞ,Yt=ވGg+Aرcm=ѣ̙3X_~L6ٲe ~)w͛G\\\b СC̞=)SP^^/RH)%thK77wGq2Iy8cfX dm͂  t"A  H|AA0D# B!AA:  aGA"_|nnnHRj폒hxV  <$rss6mF"))}uH횮KVB;{n~gE" pppgرc8::2|VoÇsprrbȐ!`hhmP__֭[IKK#&&@k8T݂R.\@R+pUWWcdd vu#СCO_#>>}iȑ#ܼy_%Ks)Ξ=U(,,Rɍ7֎cUg_ ƍ___nݪݻ EP`nnΨQ8uV}'N`XXXP( YYY3.] ɰeȑܼy_~e"""xǐH$W\\vvvٳ` H$<.l2$ fRo;w Ǝr[[[^ynܸW6mR 97_"...\ HRzIn044qbaaژ֎ܹsޗg_~ڵy1k,_~aȑXYYm6V\ŋ #''G].==PJJJXj?NNNDGG @LL 999\C_IMMMq.Zu֩cfzPRRBll, ,… ;caa޽{݋B&8p pO>|۷ŋ̘1cbygcΝ̝;:;s΍x%;7`ff3/^… ٓÇcmm͑#GԏK+qrrd2C.]n2AqaGYY!!!DDD`ffw*,tB>}ؿ?׮]YݖRА3gСCqpphq899Gbb"'N??? ˗9}4NƆ4"%%}QPP3C Ld|B6o<|}}(гgOn݊Lv388OOO>#>sf̘=w(?>k֬!33ouGn2ή]bggnnn- n=bKXXF$11ٳgRߘ2e K. SSSy033`Ĉ1B]GXXA޽lgo߾[D@o=K$>=KMM%++xӫW/,--h6oLnn.ƍȈupE:u*;w۷q[lmmIMMeΝXXX0tP|}}tqJJJ8q"]t!!!td2JRv 166[[[ )**BRdذar9P]]Mff&)))4:2;;kkkJfԩlذ333 v[$մ"MP0yd T*ETRUUq`ڵX[[~~~ddd4S__###UT;w(Ν!ݻWqRСC\||}}9w\u4uT*T*z*W^mimRSSw71009SSS[purׯ_W'HRbcc4iRrJN>˙9s&L0A9{k׮ݻ4uƍqvvPQ՚5k㭷RoЫ~/--WZZw]fA<==?tuuu$''?peݺu,jkkp [[Fwss|غu+tMvoܸD"J=Ғ:^]-qe,--6<<<())!''RɩS^ B 00Ϟ=Kff{cccHHHPߵg߾}DFFEFF'^^^Z_wfѢE( ۄ7H$"##_8pFⓖ֭[ йsgz6oެW{ 믿jloA|}}fΐ!Cpww*Rdݺü#޽{7|Cyy9sssm7HR<<cРAѷoի}zi|||111$&&jMg`>| ͶqFfϞMvv6ő1?S}9/D#B{v;?O~a x% theee̞=ӵkWrrr裏ԩ/b['2 L&ٳ^B͉dڵXYYuxB+ С3DxtAA0D# B!AA: 133C.ѣٽ{w[ϟTMtt4ODDDP(t^dyA}7 4uQ۠:--p ?3u놱1 Zc݄P(077gԨQZ5-oF>} >sƍә>}:+0l0uw};;;ۇBPzj6l0ٽ{7?>[n`ƌzkhoO>,_M61n8;L[bbbGwͩaٲesϑ6mrsҷo_֭[ֽ{w1b#FP?dddлwo100M={osAhfϞRdժU8q5sr}Y׿yf{=wgMLL r+Wbggǵk_n4idgg`ƌ5ʖ3a|Mf͚}Y|MXx1UUUsq~FɈ#ضm̞=0?kFҥKѣ7ndʔ)>j4 $''Hrr2;v`Æ ̟?j̙3IOcLLL U_SSCbb"qqqYD¨QXlY5P'= ݹrew,LLLaܹGwH+I:t(1'Oˋ͛n߾}ѣV}555dzi&rrr4~zh,{9UAeeee,]vo^dŴ>gWK k׮lٲ3gΨ֖kq%\\\ٳ'[nU'xzzG7iwhFDs}S [ÉgԩT*nff]\\Lmm- .עT*Q*-*@׀iꚍN۷o?d޼y`ggGll,3fh )tZJM: 6cffFqq1aaaTUU5KKY#355%**Jcor1ݒZSSSun @^^666=zYfiqqpp 22~ui{M9rL&ի-nTJll,&Mr++W,_3g t#ɨڮ+())JKx3RcKKKcY8z-Oyz#tI+idM^dtK.j;uuT*.JJֱ6665[SZFă`py;N< #FFF 8kRQQѢ$11OOOZR~fѢE( uȥKPTm::Iׯ___ ebPTйsg Q[[Kslcc9 k~:Ng̙^֬YCll,oAAAx{{cffjqYXX```׵]~KKK-Ȣ޽;#GݝjvͪU 2`"""x'++t.]d#/&<n)Y||<[lO?%??_=?ϼy󈋋S СC̞=)SP^^/RqQ̙Cll,EEEXZZү_?Mr'''/^LNNR___6l!C=ߟ+W2g>Й n:|MӱfѢEL>]]fȑ_ٳg3sL5v~-'OO>^vALL 'O>rssKtٳgV/6>h˗/ёÇkͥ'''nhIS ޸q{{{CԅbKŴj޼y >ѣG3uT***;w.FFF̘1C]%h>W{{N}~htEXh}^^^_6)X;?k,f͚ܜUV5{./"/ƶ/:_'lO?O?7*gooϏ?ےR/_yɢ}_|hR5߿CLcoooϙ3gR}).[n/A{5dv9sxꩧDDDaW[rq{%Oh5qqq^%;#8I~AqǤDY-ܝ8/]ĥKpuuٹk}\|$ܼyM}}=}% @c:;v!TUUQPP76l^^^>||J%zĄӧOS\\-X[[saΝ;GMM x{{siLLL8yƱZQ_PPVVVi& j7((ds߿?666l߾;;;F}hgllw}Qҿ7ֳrzC#;n]+<:n!ASMM )))۷:t(^^^d2/_R" $//ݻwӯ_?زe &&& 89q5551d5kXB_?Ϗ+W˗[W|04ihhș3gbС888hԑΝ;9{,}aȐ!XYYq8@QQDGGE}}=f߾}BDD;w֫k׮$''7zsppk׮pƍG"9v?xTn#+Vb C ޞJy\]]$33\NϞ=[>ՑKii)ܼyJ_Nmm-~LLLSNYӧO?~:/_/ IIIsϑLaa!.\SҹsgΟ?Ojj* JJJ8q"]t!!!t W\itcjj333S/<._;wRe*++g˖-HR"""sdeeaaa-22ʨ1+V`믿RPPC(--edggӣGzuΝ;bMMMZ0Μ9 ...\xQ]???EvvF?cj7rHϧaYHHV}ԩSG!!!h׫W/4 xT?)Sdɒ6]a#kn:nܸۭ[7쨫C*Z+++Rpp0vСCs&}RSSÆ (..&00Ѥɉn޼y׉۷og֭兕լ_2d8;;7|Cyy9333RRR3}WW|pk͹Ν;}=6lۧ ""Bcãz*Э[76o,nAmiɍ#UMG```@^IiÓ(Th'=z4( 8pЦMH$8qB#G֣';;;Cpp0 wym۶!HHMMj'::@'?OJKKo蕑ADD {{{EOϟ1*>++1cХKd297oCR);wVҩS'T '_} ҥK 0~JII V⧟~ɉhu2j(Yz׮]cAII ,X .;O쬵ٻwufϞʹi033#;;l>Qg}~m۶1zh{=휘rrrXr%믿ӓzWAŋ>|8:UUU[ٳG=Opwd3fޞݻwR b0Q IDATlݺcccƏڵkW_nzS}jP]]_4z{T+˗/g׮]m J[CMM ǎ\*è? PVVgpdiܚH$5e˖|7ݻh{=555[ܚ-44T+^{yfx jjjXr%/:u555Xcח+W,obbsΥ|}}Nh#Fh,~x#G6O_}׿# ѹ{AoުՑNRR)))XYYGjJMM }sʕ+o4(;Ymm- .dɒ%;Jlḹӧ9vWqq1ЕD2vXKx 6oLAAAթS'd22wھ};~!ͣ;;;bcc1cHȱctšl;RHNNfӦM$''kLA+ 0+--嫯O>!//uG}˗3sL0aGٳ/|Wk1&wCTrlBee%33fh&Ydd$,XL0e֬YرcsӒA^1cgժUcdds͢E9y}kGA]pCsƍ&:Euw8p[lzR]sss&MĴiԋ lń3h L#%%%$''R4^ѣ̜9+WjВ3eMF.]4oL^/ 00###O!'''2~x#!!J'A]|$}ǨZǏ/oT*ɫرcQ(mm!ѣ̙3X_~L6M &0m44hƾՔ3m4^z%Da|@nnnڼNNN,^R)lذ!Cu k׮ġC+ZiJ? 99G5D3dƎ˘1ckx;2ׯ뀩S2uFSעEXhQevwaQǟp>8"il,M-svӯֶ۶n%5AAESE! ?Kb@:uq]x=u?NR*|m꨽|yׁ;M!D\|?SN;v("x"&Zokk˘1c#%%DYbww}brJ^lN,]FFq 6aÆn#ABBgڵ:tȸ޽{yꩧdE>˗/… ̟?y1c lmmܶÆ Lw9sxq[!eP(CUU{aݔuV&Ol pY f"**[ǘ;w.sdBaY\]]:u*SLԩS߿ZMSVyyyKbb"FBP`6ǹU˖-ɩWcǘ2e nnn޽{;<_!( ʜ9sp#F࣏>bϞ=dee*4n駟f̙l޼C_W^yM6j* >}zn߾|wwwj*(+W+wYd ٙB =fg2fݺu|dɒ6jг{Qr ꫯ'99Çw !w3xx!>>#G2|pZuBa$%%6mԩSƾ.555W 8ŋ3d6oތ'lcƌAvyy ^̈#MZZ9ӦM@Vꊕ 1;øojгh"4 |q &òeؼys2!w3F|MqqqΎQFpV;;99)hHNNnwСvfڴiƂIII|]f,zn ŋ]>V_e^Fv?jBɓB!ĝ:55[o1vX$>>V;znT*l1sfSSp`˫rpS#mvU_d^J]{_V677z !zڵ,\^zɸ1//WqssSeeeaM/t6cRd2$\!Ucc#...6I[숉!==݇Rc|1 }zTrڵ^mIII޽VKhhh/!Burr2}SNeРAzCo&&Mbʔ)RWWo--`ڴidҥ\t^zU >hlmm Jƾj}?~>tz222Xt)=666$&&~z9r$Vbҥ;hZ/^ܣG]SNeܹ,^ |}}pB3U=Avv6K.eTTTV=z46̙3_]ӧDV3vV;ݭ4 N Z-+j !nEKg8/q_RyOP{>LRR^^^&'V[%?H@@,O>MEEZ&33BZZZ$** {{{>R`رxyye|||By[CC=gΜ`8s 477FTTNNN7oooo:̗.]N}}=ݗ3qDƍצץyYª5ģQ'KV;BZZzBCCe޽TTTGrr2( >̎; **"4iR_7<~xF83gqvv6WYYw}Gff&&L0nmȑ# {1\]]/ۛg}&vӧĉ:u Fñc䡇⫯noMMMz&N7n$((gy˗/SRRb6Lmuœʊ+Xb)))L:>C=ŋijj"559|0 ^Ϲs6m!!!?~'O޲vycf&Nc=ƺu8y$NNN\rٳg3`9z(aaa&??Z{v/]Znu'fy~>}:YYY\|g϶{>uuu&3sEx 9q'NƆ!Ctx y' K_>+..ZZZjO}}=lڴ RIbb" L0B~ hNǾ}`0PSSCMM cooqpp0NT5kXb&M2ٯAAAa2d6نm.B>ݴyfHII1wٳ}:dt<<< ښaÆq .]d,|L9{,PWWG]]->Rdь?&nɓ';v-߫qss'ڵkl۶ wwwYt)466RZZZ81inn.L>}qYjkk1 /<_v=~8 0w$p㗭=seܸq(Jihhںt 6m2Ƶ VKscޮ9rϋ @uu5׮]CVz뱱lmm;=QF'''ZZZEדĴi(//ȑ#駟ryG@CCr?S+++ٻw/>>> 8wWWWg6 BYYYm5[EE n2e dff /nݺ?EjNdggSTTѣ c]^o%_VV; \\\{8qb/'&&fS߼͍~>]Ot{?S###lF[aj[W {>(+W3Ϙ;Rs8{_10]vѣ#nV__ρ&,,3L D$EOY;lʔ)ٳgܑD?Buu5ٵ8/// ɷ^J]!m%z(55z-Zļy駟Xd VVRSO?i&\\\ gСZ+++Œv§,\gggRSSy78t|`NT*,|s!,=l߾OOOk"##0w,!BDǓ̙3ٵk> 3fO-w;pOm۶>9hR!>Ϗ;v… Yf _|/oqvv6wn1 ̝;H5jTwJ}zaW==ns ""({)w-[;pRBs=ɓy7o|yx[-p'?N<3闳9 !L 1c3f̠t6nHVV+Wdʕ~5G&&&"##lTUgue˗/__C\\aB!}RYPP**.\`l۶;wrΜ9ç~ ᄇjj <߶ |||Ew}7f2޴i3f̘CB!z>?fb֬Y9slȑ#䐓^^^hZOOO4 ^^^xzz#=ZAVSZZggB\\MMMfB>'O?vnvyyy呟O~~PYYeee>J2Y54cog4ihh0^WWGmmmR$88.eB!K ; QQQ&GVϥK())Aӡ(-- Ng,Zhll~!!!w}7[[[v}s!P(:5 uDDDoBGV__ρZmaȐ!̝;ҜAFFFOc.a6li󅇇;`RNۺu+ T*ƌÄ 6l999{Μ9̙3 !I#:Ç3{lprr2w$!ˤIJeC!;0;YNB!@ !BX y%ȑ#j'RSSihhykIDAT`ҤI",>Bhzl۶DsGLu !bH#B!B!,>B!R!bȨ.! sNk4&MDLL 'ʅőG!R3gdҤI طoDEE;f#.geeE`` TTT;f%w|.w[KJJؽ{7ǎRRR(++ÇhEFg!DG!R+V`Ŋ>>?0m;v,\GGG֮]ɓ'N7jokBٳ;yyĉ\|RJKK)**" wwwz=:RFR݆B #n߾}l߾:/poPpp0 G 3R!+..FV3rH7Ouu5(Jj sK!,ܘ1cضmcȐ!xyyQRRB~~>AAAFAT;="B܅̙׃yz-"BBuu5jHB>B!L駟Xz5P # cK!ITsW!BX )|Ba1QBC999l۶1H#'11G!9sr!DH!BX )|Ba1B!ŐG!C !BX )|Ba1B!Őy|DHKK3w!HJJ2wqGs=V5w !1wqGXnn.!BܒB!ŐG!C !BX )|Ba1mUW1w !ɨ.J҄dVҊA!;BH]ܹ2wa1Wŋ!#8{P{qQ;BtZmulV@R/KsGNNv'2čRje!De"  @TT!!!fN&M ͅ wnYqHLȨVۤp鹷ƅIENDB`SimGrid-3.10/doc/triva-graph_visualization.svg000664 007661 000620 00000164272 12242224152 021732 0ustar00gierschand000000 000000 image/svg+xml Red Color indicating hostutilization by "compute"task category Red Color indicating linkutilization by "compute"task category Hosts are representedby squares Links arerepresented by diamonds SimGrid-3.10/doc/shared/002750 007661 000620 00000000000 12242224152 015231 5ustar00gierschand000000 000000 SimGrid-3.10/doc/shared/fig/002750 007661 000620 00000000000 12242224152 015776 5ustar00gierschand000000 000000 SimGrid-3.10/doc/shared/fig/simgrid_modules2.fig000664 007661 000620 00000006507 12242224152 021752 0ustar00gierschand000000 000000 #FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Metric A4 100.00 Single -2 1200 2 0 32 #84e373 0 33 #ffcb84 0 34 #adbeff 0 35 #ff4952 0 36 #a5a6a5 0 37 #ff9700 6 -158 4680 7987 5175 4 1 0 50 -1 4 12 0.0000 2 195 8085 3914 5115 Grounding features (logging, etc.), usual data structures (lists, sets, etc.) and portability layer\001 4 1 0 50 -1 4 14 0.0000 2 180 480 3914 4860 XBT\001 -6 6 -1215 -900 9045 -180 2 2 0 1 0 31 70 -1 20 0.000 0 0 -1 0 0 5 -1215 -180 9045 -180 9045 -900 -1215 -900 -1215 -180 # href="/contrib.html" ALT="Contrib" 2 2 0 1 0 37 55 -1 20 0.000 0 0 -1 0 0 5 5670 -315 8370 -315 8370 -810 5670 -810 5670 -315 4 1 0 50 -1 4 14 0.0000 2 180 1155 3914 -465 User Code\001 4 1 0 50 -1 4 14 0.0000 2 180 780 7020 -480 Contrib\001 -6 6 -675 0 1665 3375 6 -518 1282 1507 2092 4 1 0 50 -1 4 14 0.0000 2 225 870 494 1462 SimDag\001 4 1 0 50 -1 4 12 0.0000 2 150 1245 494 1777 Framework for\001 4 1 0 50 -1 4 12 0.0000 2 195 1965 494 2047 DAGs of parallel tasks\001 -6 # href="group__SD__API.html" ALT="SimDag" 2 2 0 1 0 23 60 -1 30 0.000 0 0 -1 0 0 5 -675 0 1665 0 1665 3375 -675 3375 -675 0 -6 6 4815 1305 9045 2070 6 5332 1440 8527 1935 6 6952 1440 8527 1935 4 1 0 50 -1 4 12 0.0000 2 195 1485 7739 1620 SIMIX-like Proxy\001 4 1 0 50 -1 4 12 0.0000 2 180 1230 7739 1890 (sockets/MPI)\001 -6 4 1 0 50 -1 4 14 0.0000 2 180 870 5782 1777 SMURF\001 -6 # href="group__MSG__API.html" ALT="MSG" 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 4815 1305 9045 1305 9045 2070 4815 2070 4815 1305 -6 6 -675 3510 7200 4365 6 2159 3667 4364 4207 4 1 0 50 -1 4 12 0.0000 2 195 2145 3261 4124 virtual platform simulator\001 4 1 0 50 -1 4 14 0.0000 2 180 675 3261 3869 SURF\001 -6 # href="group__SURF__API.html" ALT="SMPI" 2 2 0 1 0 34 60 -1 20 0.000 0 0 -1 0 0 5 -675 3510 7200 3510 7200 4365 -675 4365 -675 3510 -6 6 1800 2205 7200 3375 6 3554 2385 5444 3195 4 1 0 50 -1 4 12 0.0000 2 195 1725 4498 3150 on a virtual platform\001 4 1 0 50 -1 4 14 0.0000 2 180 645 4498 2565 SimIX\001 4 1 0 50 -1 4 12 0.0000 2 150 1365 4498 2880 "UNIX-like" API\001 -6 # href="group__SD__API.html" ALT="SimDag" 2 2 0 1 0 10 60 -1 28 0.000 0 0 -1 0 0 5 1800 2205 7200 2205 7200 3375 1800 3375 1800 2205 -6 6 7335 2205 9045 4365 6 7470 3015 8955 3555 4 1 0 50 -1 4 14 0.0000 2 180 375 8211 3217 MC\001 4 1 0 50 -1 4 12 0.0000 2 150 1305 8211 3532 Model Checker\001 -6 # href="group__MSG__API.html" ALT="MSG" 2 2 0 1 0 20 60 -1 23 0.000 0 0 -1 0 0 5 7335 2205 9045 2205 9045 4365 7335 4365 7335 2205 -6 6 2317 652 4162 1417 4 1 0 50 -1 4 14 0.0000 2 180 555 3239 832 MSG\001 4 1 0 50 -1 4 12 0.0000 2 195 1650 3239 1147 Simple application-\001 4 1 0 50 -1 4 12 0.0000 2 150 1260 3239 1417 level simulator\001 -6 6 5895 135 7965 1035 4 1 0 50 -1 4 12 0.0000 2 195 1860 6930 750 applications on top of\001 4 1 0 50 -1 4 12 0.0000 2 150 1815 6930 1005 a virtual environment\001 4 1 0 50 -1 4 12 0.0000 2 195 1560 6930 540 Library to run MPI\001 4 1 0 50 -1 4 14 0.0000 2 180 585 6930 315 SMPI\001 -6 # href="group__XBT__API.html" ALT="XBT" 2 3 0 1 0 33 60 -1 20 0.000 0 0 -1 0 0 7 -765 0 -1215 0 -1215 5400 9045 5400 9045 4500 -765 4500 -765 0 # href="group__MSG__API.html" ALT="MSG" 2 2 0 1 0 23 60 -1 23 0.000 0 0 -1 0 0 5 1800 0 4680 0 4680 2070 1800 2070 1800 0 # href="group__SMPI__API.html" ALT="SMPI" 2 2 0 1 0 36 60 -1 20 0.000 0 0 -1 0 0 5 4815 0 9045 0 9045 1170 4815 1170 4815 0 SimGrid-3.10/doc/shared/fig/simgrid_modules.fig000664 007661 000620 00000005010 12242224152 021654 0ustar00gierschand000000 000000 #FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Metric A4 100.00 Single -2 1200 2 0 32 #83e273 0 33 #feca83 0 34 #acbdfe 0 35 #fe4952 0 36 #a4a5a4 0 37 #fe9600 6 -360 2340 1305 3105 4 1 0 50 -1 4 14 0.0000 2 180 555 472 2520 MSG\001 4 1 0 50 -1 4 12 0.0000 2 195 1650 472 2835 Simple application-\001 4 1 0 50 -1 4 12 0.0000 2 150 1260 472 3105 level simulator\001 -6 6 1755 2205 6570 3375 6 4365 2340 6390 3150 4 1 0 50 -1 4 14 0.0000 2 225 870 5377 2520 SimDag\001 4 1 0 50 -1 4 12 0.0000 2 150 1245 5377 2835 Framework for\001 4 1 0 50 -1 4 12 0.0000 2 195 1965 5377 3105 DAGs of parallel tasks\001 -6 # href="group__SMPI__API.html" ALT="SMPI" 2 2 0 1 0 36 60 -1 20 0.000 0 0 -1 0 0 5 1755 2205 4095 2205 4095 3375 1755 3375 1755 2205 # href="group__SD__API.html" ALT="SimDag" 2 2 0 1 0 23 60 -1 30 0.000 0 0 -1 0 0 5 4230 2205 6570 2205 6570 3375 4230 3375 4230 2205 4 1 0 50 -1 4 12 0.0000 2 195 1860 2925 2955 applications on top of\001 4 1 0 50 -1 4 12 0.0000 2 150 1815 2925 3210 a virtual environment\001 4 1 0 50 -1 4 12 0.0000 2 195 1560 2925 2745 Library to run MPI\001 4 1 0 50 -1 4 14 0.0000 2 180 585 2925 2520 SMPI\001 -6 6 1822 3645 4027 4185 4 1 0 50 -1 4 12 0.0000 2 195 2145 2924 4102 virtual platform simulator\001 4 1 0 50 -1 4 14 0.0000 2 180 675 2924 3847 SURF\001 -6 6 3375 1305 6258 1800 # href="/contrib.html" ALT="Contrib" 2 2 0 1 0 37 55 -1 20 0.000 0 0 -1 0 0 5 3375 1800 6258 1800 6258 1305 3375 1305 3375 1800 4 1 0 50 -1 4 15 0.0000 2 180 780 4816 1635 Contrib\001 -6 6 -278 4560 6307 5040 4 1 0 50 -1 4 12 0.0000 2 195 6585 3014 4995 Grounding features (logging, etc.), data structures (lists, etc.) and portability\001 4 1 0 50 -1 4 14 0.0000 2 180 480 3014 4740 XBT\001 -6 6 6840 2115 7380 5220 # href="group__TRACE__API.html" ALT="TRACE" 2 2 0 1 0 3 50 -1 30 0.000 0 0 -1 0 0 5 6840 2115 7380 2115 7380 5220 6840 5220 6840 2115 4 0 0 50 -1 4 15 1.5708 2 180 840 7200 5083 TRACE\001 4 0 0 50 -1 4 12 1.5708 2 195 1590 7155 4033 Tracing simulation\001 -6 # href="group__XBT__API.html" ALT="XBT" 2 3 0 1 0 33 80 -1 20 0.000 0 0 -1 0 0 5 -810 2115 -810 5220 6705 5220 6705 2115 -810 2115 # href="group__SURF__API.html" ALT="SMPI" 2 2 0 1 0 34 60 -1 20 0.000 0 0 -1 0 0 5 -675 3510 6570 3510 6570 4365 -675 4365 -675 3510 # href="group__MSG__API.html" ALT="MSG" 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 -675 2205 1620 2205 1620 3375 -675 3375 -675 2205 2 2 0 1 0 31 70 -1 20 0.000 0 0 -1 0 0 5 -810 1935 7380 1935 7380 1215 -810 1215 -810 1935 4 1 0 50 -1 4 15 0.0000 2 180 1170 1620 1650 User Code\001 SimGrid-3.10/doc/surf_nutshell.fig000664 007661 000620 00000104511 12242224152 017356 0ustar00gierschand000000 000000 #FIG 3.2 Produced by xfig version 3.2.5-alpha5 Landscape Center Metric A4 100.00 Single -2 1200 2 0 32 #bcd1d2 6 225 -225 5400 5400 6 405 225 1980 2025 6 405 225 1980 450 2 2 0 1 0 7 50 -1 18 0.000 0 0 -1 0 0 5 405 225 1980 225 1980 450 405 450 405 225 4 0 0 40 -1 0 12 0.0000 2 165 915 450 405 surf_action\001 -6 6 495 900 1845 1620 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 495 900 1845 900 1845 1620 495 1620 495 900 4 0 0 40 -1 0 12 0.0000 2 120 330 540 1080 cost\001 4 0 0 40 -1 0 12 0.0000 2 165 1140 540 1215 max_duration\001 4 0 0 40 -1 0 12 0.0000 2 135 630 540 1350 remains\001 4 0 0 40 -1 0 12 0.0000 2 30 135 540 1485 ...\001 -6 2 2 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 5 1980 450 405 450 405 2025 1980 2025 1980 450 4 0 0 40 -1 0 12 0.0000 2 120 375 495 720 state\001 4 0 0 50 -1 0 12 0.0000 2 165 1140 495 1890 model_type\001 -6 6 2700 225 5310 5175 6 2700 225 4275 450 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 2700 225 4275 225 4275 450 2700 450 2700 225 4 0 0 140 -1 0 12 0.0000 2 165 1080 2745 405 surf_model\001 -6 6 3015 540 5220 1710 6 3015 540 5220 1710 6 3015 540 4950 765 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 3015 540 4950 540 4950 765 3015 765 3015 540 4 0 0 40 -1 0 12 0.0000 2 180 1380 3060 720 common_private\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 5220 765 3015 765 3015 1710 5220 1710 5220 765 4 0 0 50 -1 0 12 0.0000 2 165 1275 3105 990 resource_used()\001 4 0 0 50 -1 0 12 0.0000 2 165 1395 3105 1170 share_resources()\001 4 0 0 50 -1 0 12 0.0000 2 180 1845 3105 1350 update_actions_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 2010 3105 1530 update_resources_state()\001 -6 -6 6 3015 1845 5085 5040 6 3105 2160 4365 2430 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 3105 2160 4365 2160 4365 2430 3105 2430 3105 2160 4 0 0 50 -1 0 12 0.0000 2 120 450 3195 2340 states\001 -6 6 3015 1845 4950 2070 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 3015 1845 4950 1845 4950 2070 3015 2070 3015 1845 4 0 0 40 -1 0 12 0.0000 2 180 1335 3060 2025 common_public\001 -6 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 3105 2520 4860 2520 4860 4770 3105 4770 3105 2520 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 5085 2070 3015 2070 3015 5040 5085 5040 5085 2070 4 0 0 50 -1 0 12 0.0000 2 165 1230 3150 2655 name_service()\001 4 0 0 50 -1 0 12 0.0000 2 165 1005 3150 2880 action_use()\001 4 0 0 50 -1 0 12 0.0000 2 165 1035 3150 3105 action_free()\001 4 0 0 50 -1 0 12 0.0000 2 165 1260 3150 3330 action_cancel()\001 4 0 0 50 -1 0 12 0.0000 2 180 1800 3150 3555 action_change_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 780 3150 3780 suspend()\001 4 0 0 50 -1 0 12 0.0000 2 165 690 3150 4005 resume()\001 4 0 0 50 -1 0 12 0.0000 2 180 1215 3150 4230 is_suspended()\001 4 0 0 50 -1 0 12 0.0000 2 165 1590 3150 4455 set_max_duration()\001 4 0 0 50 -1 0 12 0.0000 2 180 1065 3150 4680 set_priority()\001 4 0 0 50 -1 0 12 0.0000 2 90 435 3105 4950 name\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 2790 675 3060 675 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 2790 1980 3060 1980 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 5310 450 2700 450 2700 5175 5310 5175 5310 450 -6 6 225 -225 5400 5400 6 405 -225 2475 135 2 4 0 1 0 31 890 -1 20 0.000 0 0 7 0 0 5 2475 135 405 135 405 -225 2475 -225 2475 135 4 0 0 880 -1 0 18 0.0000 2 195 900 540 52 Generic\001 -6 2 4 0 1 0 31 900 -1 28 0.000 0 0 7 0 0 5 5400 5400 5400 0 225 0 225 5400 5400 5400 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 1710 1845 1890 1845 2745 315 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 1 4 3 1 1.00 60.00 120.00 3 1 1.00 60.00 120.00 945 675 1890 675 2790 2295 3105 2295 -6 6 6300 -1125 8370 -765 2 4 0 1 0 31 890 -1 20 0.000 0 0 7 0 0 5 8370 -765 6300 -765 6300 -1125 8370 -1125 8370 -765 4 0 0 880 -1 0 18 0.0000 2 195 1425 6435 -848 Workstation\001 -6 6 6345 11070 8460 12375 6 6480 11385 8055 11610 6 6480 11385 8055 11610 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 6480 11385 8055 11385 8055 11610 6480 11610 6480 11385 4 0 0 140 -1 0 12 0.0000 2 165 1080 6525 11565 surf_model\001 -6 -6 6 6345 11070 7425 11295 2 2 0 1 0 7 260 -1 18 0.000 0 0 -1 0 0 5 6345 11070 7425 11070 7425 11295 6345 11295 6345 11070 4 0 0 250 -1 0 12 0.0000 2 135 960 6390 11250 workstation\001 -6 2 2 0 1 0 7 250 -1 20 0.000 0 0 -1 0 0 5 8460 11295 6345 11295 6345 12375 8460 12375 8460 11295 4 0 0 240 -1 0 12 0.0000 2 135 300 6480 12060 cpu\001 4 0 0 240 -1 0 12 0.0000 2 165 1110 6480 12285 network_card\001 4 0 0 240 -1 0 12 0.0000 2 90 435 6480 11835 name\001 -6 6 6435 7920 8010 9720 6 6435 7920 8010 8145 2 2 0 1 0 7 50 -1 18 0.000 0 0 -1 0 0 5 6435 7920 8010 7920 8010 8145 6435 8145 6435 7920 4 0 0 40 -1 0 12 0.0000 2 165 915 6480 8100 surf_action\001 -6 6 6525 8595 7875 9315 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 6525 8595 7875 8595 7875 9315 6525 9315 6525 8595 4 0 0 40 -1 0 12 0.0000 2 120 330 6570 8775 cost\001 4 0 0 40 -1 0 12 0.0000 2 165 1140 6570 8910 max_duration\001 4 0 0 40 -1 0 12 0.0000 2 135 630 6570 9045 remains\001 4 0 0 40 -1 0 12 0.0000 2 30 135 6570 9180 ...\001 -6 2 2 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 5 8010 8145 6435 8145 6435 9720 8010 9720 8010 8145 4 0 0 40 -1 0 12 0.0000 2 120 375 6525 8415 state\001 4 0 0 50 -1 0 12 0.0000 2 165 1140 6525 9585 model_type\001 -6 6 6345 7605 8460 7830 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 6345 7605 8370 7605 8370 7830 6345 7830 6345 7605 4 0 0 140 -1 0 12 0.0000 2 180 2070 6390 7785 surf_action_parallel_task\001 -6 6 8640 7605 11610 14445 6 8730 7920 11295 12870 6 8730 7920 10305 8145 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 8730 7920 10305 7920 10305 8145 8730 8145 8730 7920 4 0 0 140 -1 0 12 0.0000 2 165 1080 8775 8100 surf_model\001 -6 6 9045 8235 11205 9405 6 9045 8235 11205 9405 6 9045 8235 10980 8460 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 9045 8235 10980 8235 10980 8460 9045 8460 9045 8235 4 0 0 40 -1 0 12 0.0000 2 180 1380 9090 8415 common_private\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 11205 8460 9045 8460 9045 9405 11205 9405 11205 8460 4 0 0 50 -1 0 12 0.0000 2 165 1275 9135 8685 resource_used()\001 4 0 0 50 -1 0 12 0.0000 2 165 1395 9135 8865 share_resources()\001 4 0 0 50 -1 0 12 0.0000 2 180 1845 9135 9045 update_actions_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 2010 9135 9225 update_resources_state()\001 -6 -6 6 9045 9540 11115 12735 6 9135 9855 10395 10125 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 9135 9855 10395 9855 10395 10125 9135 10125 9135 9855 4 0 0 50 -1 0 12 0.0000 2 120 450 9225 10035 states\001 -6 6 9045 9540 10980 9765 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 9045 9540 10980 9540 10980 9765 9045 9765 9045 9540 4 0 0 40 -1 0 12 0.0000 2 180 1335 9090 9720 common_public\001 -6 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 9135 10215 11025 10215 11025 12465 9135 12465 9135 10215 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 11115 9765 9045 9765 9045 12735 11115 12735 11115 9765 4 0 0 50 -1 0 12 0.0000 2 165 1230 9180 10350 name_service()\001 4 0 0 50 -1 0 12 0.0000 2 165 1005 9180 10575 action_use()\001 4 0 0 50 -1 0 12 0.0000 2 165 1035 9180 10800 action_free()\001 4 0 0 50 -1 0 12 0.0000 2 165 1260 9180 11025 action_cancel()\001 4 0 0 50 -1 0 12 0.0000 2 180 1800 9180 11250 action_change_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 780 9180 11475 suspend()\001 4 0 0 50 -1 0 12 0.0000 2 165 690 9180 11700 resume()\001 4 0 0 50 -1 0 12 0.0000 2 180 1215 9180 11925 is_suspended()\001 4 0 0 50 -1 0 12 0.0000 2 165 1590 9180 12150 set_max_duration()\001 4 0 0 50 -1 0 12 0.0000 2 180 1065 9180 12375 set_priority()\001 4 0 0 50 -1 0 12 0.0000 2 90 435 9135 12645 name\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 8820 8370 9090 8370 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 8820 9675 9090 9675 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 11295 8145 8730 8145 8730 12870 11295 12870 11295 8145 -6 6 8730 13050 11475 14265 6 8955 13050 11475 14265 6 8955 13050 10890 13275 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 8955 13050 10890 13050 10890 13275 8955 13275 8955 13050 4 0 0 40 -1 0 12 0.0000 2 180 1425 9000 13230 extension_public\001 -6 6 10395 13320 11340 13725 4 0 0 50 -1 0 12 0.0000 2 180 855 10395 13680 get_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 945 10395 13455 get_speed()\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 11475 13275 8955 13275 8955 14265 11475 14265 11475 13275 4 0 0 50 -1 0 12 0.0000 2 165 750 9045 13455 execute()\001 4 0 0 50 -1 0 12 0.0000 2 180 540 9045 13680 sleep()\001 4 0 0 50 -1 0 12 0.0000 2 165 1215 9045 14130 communicate()\001 4 0 0 50 -1 0 12 0.0000 2 180 1905 9045 13905 execute_parallel_task()\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 8730 13185 9000 13185 -6 6 8640 7605 10935 7830 2 2 0 1 0 32 250 -1 18 0.000 0 0 -1 0 0 5 8640 7605 10935 7605 10935 7830 8640 7830 8640 7605 4 0 0 240 -1 0 12 0.0000 2 165 2145 8685 7785 surf_model_workstation\001 -6 2 2 0 1 0 32 260 -1 20 0.000 0 0 -1 0 0 5 11610 7830 8640 7830 8640 14445 11610 14445 11610 7830 -6 6 14940 540 17505 5490 6 14940 540 16515 765 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 14940 540 16515 540 16515 765 14940 765 14940 540 4 0 0 140 -1 0 12 0.0000 2 165 1080 14985 720 surf_model\001 -6 6 15255 855 17415 2025 6 15255 855 17415 2025 6 15255 855 17190 1080 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 15255 855 17190 855 17190 1080 15255 1080 15255 855 4 0 0 40 -1 0 12 0.0000 2 180 1380 15300 1035 common_private\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 17415 1080 15255 1080 15255 2025 17415 2025 17415 1080 4 0 0 50 -1 0 12 0.0000 2 165 1275 15345 1305 resource_used()\001 4 0 0 50 -1 0 12 0.0000 2 165 1395 15345 1485 share_resources()\001 4 0 0 50 -1 0 12 0.0000 2 180 1845 15345 1665 update_actions_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 2010 15345 1845 update_resources_state()\001 -6 -6 6 15255 2160 17325 5355 6 15345 2475 16605 2745 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 15345 2475 16605 2475 16605 2745 15345 2745 15345 2475 4 0 0 50 -1 0 12 0.0000 2 120 450 15435 2655 states\001 -6 6 15255 2160 17190 2385 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 15255 2160 17190 2160 17190 2385 15255 2385 15255 2160 4 0 0 40 -1 0 12 0.0000 2 180 1335 15300 2340 common_public\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 17325 2385 15255 2385 15255 5355 17325 5355 17325 2385 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 15345 2835 17235 2835 17235 5085 15345 5085 15345 2835 4 0 0 50 -1 0 12 0.0000 2 165 1230 15390 2970 name_service()\001 4 0 0 50 -1 0 12 0.0000 2 165 1005 15390 3195 action_use()\001 4 0 0 50 -1 0 12 0.0000 2 165 1035 15390 3420 action_free()\001 4 0 0 50 -1 0 12 0.0000 2 165 1260 15390 3645 action_cancel()\001 4 0 0 50 -1 0 12 0.0000 2 180 1800 15390 3870 action_change_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 780 15390 4095 suspend()\001 4 0 0 50 -1 0 12 0.0000 2 165 690 15390 4320 resume()\001 4 0 0 50 -1 0 12 0.0000 2 180 1215 15390 4545 is_suspended()\001 4 0 0 50 -1 0 12 0.0000 2 165 1590 15390 4770 set_max_duration()\001 4 0 0 50 -1 0 12 0.0000 2 180 1065 15390 4995 set_priority()\001 4 0 0 50 -1 0 12 0.0000 2 90 435 15345 5265 name\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 15030 990 15300 990 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 15030 2295 15300 2295 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 17505 765 14940 765 14940 5490 17505 5490 17505 765 -6 6 12600 225 14355 3330 6 12690 540 14265 2340 6 12690 540 14265 765 2 2 0 1 0 7 50 -1 18 0.000 0 0 -1 0 0 5 12690 540 14265 540 14265 765 12690 765 12690 540 4 0 0 40 -1 0 12 0.0000 2 165 915 12735 720 surf_action\001 -6 6 12780 1215 14130 1935 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 12780 1215 14130 1215 14130 1935 12780 1935 12780 1215 4 0 0 40 -1 0 12 0.0000 2 120 330 12825 1395 cost\001 4 0 0 40 -1 0 12 0.0000 2 165 1140 12825 1530 max_duration\001 4 0 0 40 -1 0 12 0.0000 2 135 630 12825 1665 remains\001 4 0 0 40 -1 0 12 0.0000 2 30 135 12825 1800 ...\001 -6 2 2 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 5 14265 765 12690 765 12690 2340 14265 2340 14265 765 4 0 0 40 -1 0 12 0.0000 2 120 375 12780 1035 state\001 4 0 0 50 -1 0 12 0.0000 2 165 1140 12780 2205 model_type\001 -6 6 12600 225 14355 450 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 12600 225 14310 225 14310 450 12600 450 12600 225 4 0 0 140 -1 0 12 0.0000 2 165 1680 12645 405 surf_action_network\001 -6 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 14355 450 12600 450 12600 3330 14355 3330 14355 450 4 0 13 140 -1 0 12 0.0000 2 135 660 12690 2610 variable\001 4 0 0 140 -1 0 12 0.0000 2 180 600 12690 2835 latency\001 4 0 0 140 -1 0 12 0.0000 2 120 300 12690 3060 rate\001 4 0 0 140 -1 0 12 0.0000 2 180 855 12690 3285 suspended\001 4 0 0 140 -1 0 12 0.0000 2 120 660 13545 2835 nwc_src\001 4 0 0 140 -1 0 12 0.0000 2 165 675 13545 3060 nwc_dst\001 -6 6 12555 -225 14625 135 2 4 0 1 0 31 790 -1 20 0.000 0 0 7 0 0 5 14625 135 12555 135 12555 -225 14625 -225 14625 135 4 0 0 780 -1 0 18 0.0000 2 195 1005 12690 52 Network\001 -6 6 14940 5625 17235 6165 6 15165 5625 17100 5850 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 15165 5625 17100 5625 17100 5850 15165 5850 15165 5625 4 0 0 40 -1 0 12 0.0000 2 180 1425 15210 5805 extension_public\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 14940 5760 15210 5760 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 17235 5850 15165 5850 15165 6165 17235 6165 17235 5850 4 0 0 50 -1 0 12 0.0000 2 165 1215 15255 6075 communicate()\001 -6 6 14850 225 16875 450 2 2 0 1 0 32 250 -1 18 0.000 0 0 -1 0 0 5 14850 225 16875 225 16875 450 14850 450 14850 225 4 0 0 240 -1 0 12 0.0000 2 165 1845 14895 405 surf_model_network\001 -6 6 12555 2790 14760 7200 6 12870 4770 14175 5040 2 2 0 1 0 32 160 -1 20 0.000 0 0 -1 0 0 5 14175 4770 12870 4770 12870 5040 14175 5040 14175 4770 4 0 0 140 -1 0 12 0.0000 2 180 1110 12960 4950 routing_table\001 -6 6 12555 5400 14760 7200 6 12690 5715 14265 5940 6 12690 5715 14265 5940 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 12690 5715 14265 5715 14265 5940 12690 5940 12690 5715 4 0 0 140 -1 0 12 0.0000 2 165 1080 12735 5895 surf_model\001 -6 -6 6 12555 5400 13725 5625 2 2 0 1 0 7 260 -1 18 0.000 0 0 -1 0 0 5 12555 5400 13725 5400 13725 5625 12555 5625 12555 5400 4 0 0 250 -1 0 12 0.0000 2 165 1095 12600 5580 network_link\001 -6 6 12690 6030 14760 7155 6 12690 6255 13635 6660 4 0 0 50 -1 0 12 0.0000 2 165 795 12690 6615 bw_event\001 4 0 0 50 -1 0 12 0.0000 2 165 915 12690 6390 bw_current\001 -6 6 13680 6255 14760 6660 4 0 0 50 -1 0 12 0.0000 2 150 930 13680 6615 state_event\001 4 0 0 50 -1 0 12 0.0000 2 150 1050 13680 6390 state_current\001 -6 6 12690 6750 13590 7155 4 0 0 50 -1 0 12 0.0000 2 165 765 12690 7110 lat_event\001 4 0 0 50 -1 0 12 0.0000 2 165 885 12690 6885 lat_current\001 -6 4 0 0 50 -1 0 12 0.0000 2 90 435 12690 6165 name\001 4 0 13 50 -1 0 12 0.0000 2 135 810 13680 6165 constraint\001 -6 2 2 0 1 0 7 250 -1 20 0.000 0 0 -1 0 0 5 14760 5625 12555 5625 12555 7200 14760 7200 14760 5625 -6 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 12600 3600 14310 3600 14310 3825 12600 3825 12600 3600 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 14355 3825 12600 3825 12600 4365 14355 4365 14355 3825 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 14220 2790 14490 2790 14490 3780 14265 3780 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 14220 3015 14445 3015 14445 3690 14265 3690 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 12915 4185 13050 4770 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 14040 4905 14040 5490 13725 5490 4 0 0 140 -1 0 12 0.0000 2 165 1515 12645 3780 surf_network_card\001 4 0 0 140 -1 0 12 0.0000 2 90 435 12690 4050 name\001 4 0 0 140 -1 0 12 0.0000 2 135 165 12690 4275 id\001 -6 6 6300 -225 11880 7200 6 6615 540 8190 2340 6 6615 540 8190 765 2 2 0 1 0 7 50 -1 18 0.000 0 0 -1 0 0 5 6615 540 8190 540 8190 765 6615 765 6615 540 4 0 0 40 -1 0 12 0.0000 2 165 915 6660 720 surf_action\001 -6 6 6705 1215 8055 1935 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 6705 1215 8055 1215 8055 1935 6705 1935 6705 1215 4 0 0 40 -1 0 12 0.0000 2 120 330 6750 1395 cost\001 4 0 0 40 -1 0 12 0.0000 2 165 1140 6750 1530 max_duration\001 4 0 0 40 -1 0 12 0.0000 2 135 630 6750 1665 remains\001 4 0 0 40 -1 0 12 0.0000 2 30 135 6750 1800 ...\001 -6 2 2 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 5 8190 765 6615 765 6615 2340 8190 2340 8190 765 4 0 0 40 -1 0 12 0.0000 2 120 375 6705 1035 state\001 4 0 0 50 -1 0 12 0.0000 2 165 1140 6705 2205 model_type\001 -6 6 6525 225 8100 450 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 6525 225 8100 225 8100 450 6525 450 6525 225 4 0 0 140 -1 0 12 0.0000 2 180 1320 6570 405 surf_action_cpu\001 -6 6 8865 5625 11610 6840 6 9090 5625 11610 6840 6 9090 5625 11025 5850 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 9090 5625 11025 5625 11025 5850 9090 5850 9090 5625 4 0 0 40 -1 0 12 0.0000 2 180 1425 9135 5805 extension_public\001 -6 6 9180 5895 10035 6750 4 0 0 50 -1 0 12 0.0000 2 165 750 9180 6030 execute()\001 4 0 0 50 -1 0 12 0.0000 2 180 540 9180 6255 sleep()\001 4 0 0 50 -1 0 12 0.0000 2 180 855 9180 6705 get_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 945 9180 6480 get_speed()\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 11610 5850 9090 5850 9090 6840 11610 6840 11610 5850 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 8865 5760 9135 5760 -6 6 6480 -225 8550 135 2 4 0 1 0 31 790 -1 20 0.000 0 0 7 0 0 5 8550 135 6480 135 6480 -225 8550 -225 8550 135 4 0 0 780 -1 0 18 0.0000 2 195 570 6615 52 CPU\001 -6 6 8865 540 11430 5490 6 8865 540 10440 765 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 8865 540 10440 540 10440 765 8865 765 8865 540 4 0 0 140 -1 0 12 0.0000 2 165 1080 8910 720 surf_model\001 -6 6 9180 855 11340 2025 6 9180 855 11340 2025 6 9180 855 11115 1080 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 9180 855 11115 855 11115 1080 9180 1080 9180 855 4 0 0 40 -1 0 12 0.0000 2 180 1380 9225 1035 common_private\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 11340 1080 9180 1080 9180 2025 11340 2025 11340 1080 4 0 0 50 -1 0 12 0.0000 2 165 1275 9270 1305 resource_used()\001 4 0 0 50 -1 0 12 0.0000 2 165 1395 9270 1485 share_resources()\001 4 0 0 50 -1 0 12 0.0000 2 180 1845 9270 1665 update_actions_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 2010 9270 1845 update_resources_state()\001 -6 -6 6 9180 2160 11250 5355 6 9270 2475 10530 2745 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 9270 2475 10530 2475 10530 2745 9270 2745 9270 2475 4 0 0 50 -1 0 12 0.0000 2 120 450 9360 2655 states\001 -6 6 9180 2160 11115 2385 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 9180 2160 11115 2160 11115 2385 9180 2385 9180 2160 4 0 0 40 -1 0 12 0.0000 2 180 1335 9225 2340 common_public\001 -6 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 9270 2835 11160 2835 11160 5085 9270 5085 9270 2835 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 11250 2385 9180 2385 9180 5355 11250 5355 11250 2385 4 0 0 50 -1 0 12 0.0000 2 165 1230 9315 2970 name_service()\001 4 0 0 50 -1 0 12 0.0000 2 165 1005 9315 3195 action_use()\001 4 0 0 50 -1 0 12 0.0000 2 165 1035 9315 3420 action_free()\001 4 0 0 50 -1 0 12 0.0000 2 165 1260 9315 3645 action_cancel()\001 4 0 0 50 -1 0 12 0.0000 2 180 1800 9315 3870 action_change_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 780 9315 4095 suspend()\001 4 0 0 50 -1 0 12 0.0000 2 165 690 9315 4320 resume()\001 4 0 0 50 -1 0 12 0.0000 2 180 1215 9315 4545 is_suspended()\001 4 0 0 50 -1 0 12 0.0000 2 165 1590 9315 4770 set_max_duration()\001 4 0 0 50 -1 0 12 0.0000 2 180 1065 9315 4995 set_priority()\001 4 0 0 50 -1 0 12 0.0000 2 90 435 9270 5265 name\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 8955 990 9225 990 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 8955 2295 9225 2295 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 11430 765 8865 765 8865 5490 11430 5490 11430 765 -6 6 8775 225 10350 450 2 2 0 1 0 32 250 -1 18 0.000 0 0 -1 0 0 5 8775 225 10350 225 10350 450 8775 450 8775 225 4 0 0 240 -1 0 12 0.0000 2 180 1485 8820 405 surf_model_cpu\001 -6 6 6525 3465 8685 5715 6 6525 3465 8685 5715 6 6660 3780 8235 4005 6 6660 3780 8235 4005 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 6660 3780 8235 3780 8235 4005 6660 4005 6660 3780 4 0 0 140 -1 0 12 0.0000 2 165 1080 6705 3960 surf_model\001 -6 -6 6 6525 3465 7200 3690 2 2 0 1 0 7 260 -1 18 0.000 0 0 -1 0 0 5 6525 3465 7200 3465 7200 3690 6525 3690 6525 3465 4 0 0 250 -1 0 12 0.0000 2 135 300 6570 3645 cpu\001 -6 6 6660 4140 7830 5580 4 0 0 240 -1 0 12 0.0000 2 180 1005 6660 4455 power_scale\001 4 0 0 240 -1 0 12 0.0000 2 165 1050 6660 4905 power_event\001 4 0 0 240 -1 0 12 0.0000 2 165 1170 6660 4680 power_current\001 4 0 0 240 -1 0 12 0.0000 2 150 930 6660 5355 state_event\001 4 0 13 240 -1 0 12 0.0000 2 135 810 6660 5580 constraint\001 4 0 0 240 -1 0 12 0.0000 2 90 435 6660 4230 name\001 4 0 0 240 -1 0 12 0.0000 2 150 1050 6660 5130 state_current\001 -6 2 2 0 1 0 7 250 -1 20 0.000 0 0 -1 0 0 5 8685 3690 6525 3690 6525 5715 8685 5715 8685 3690 -6 -6 2 1 0 1 22 7 30 -1 -1 0.000 0 0 -1 1 0 5 3 1 1.00 60.00 120.00 9135 5985 8640 5985 8640 3285 7065 3285 7065 2835 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 8280 450 6525 450 6525 2790 8280 2790 8280 450 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 7920 2160 8100 2160 8775 360 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 1 4 3 1 1.00 60.00 120.00 3 1 1.00 60.00 120.00 7110 990 8055 990 8955 2610 9270 2610 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 7847 3877 8027 3877 8820 450 2 2 0 1 0 32 260 -1 20 0.000 0 0 -1 0 0 5 11700 450 8775 450 8775 7020 11700 7020 11700 450 2 4 0 1 0 31 800 -1 28 0.000 0 0 7 0 0 5 11880 7200 11880 0 6300 0 6300 7200 11880 7200 4 0 13 140 -1 0 12 0.0000 2 135 660 6615 2610 variable\001 -6 6 585 6570 4680 9405 6 585 6570 4680 9405 6 765 6570 2835 6930 2 4 0 1 0 28 890 -1 20 0.000 0 0 7 0 0 5 2835 6930 765 6930 765 6570 2835 6570 2835 6930 4 0 0 880 -1 0 18 0.0000 2 255 840 900 6847 Legend\001 -6 2 4 0 1 0 28 900 -1 28 0.000 0 0 7 0 0 5 4680 9405 4680 6795 585 6795 585 9405 4680 9405 -6 6 765 7020 2340 8055 6 765 7020 2340 7245 2 2 0 1 0 7 50 -1 18 0.000 0 0 -1 0 0 5 765 7020 2340 7020 2340 7245 765 7245 765 7020 4 0 0 40 -1 0 12 0.0000 2 135 1155 810 7200 local structure\001 -6 6 855 7380 2160 7695 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 855 7380 2160 7380 2160 7695 855 7695 855 7380 4 0 0 40 -1 0 12 0.0000 2 180 1095 945 7605 logical group\001 -6 2 2 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 5 2340 7245 765 7245 765 8055 2340 8055 2340 7245 4 0 0 50 -1 0 12 0.0000 2 135 660 855 7965 variable\001 -6 6 765 8235 2340 9270 6 765 8235 2340 8460 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 765 8235 2340 8235 2340 8460 765 8460 765 8235 4 0 0 40 -1 0 12 0.0000 2 135 1155 810 8415 local structure\001 -6 6 855 8595 2160 8910 2 2 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5 855 8595 2160 8595 2160 8910 855 8910 855 8595 4 0 0 40 -1 0 12 0.0000 2 180 1095 945 8820 logical group\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 2340 8460 765 8460 765 9270 2340 9270 2340 8460 4 0 0 50 -1 0 12 0.0000 2 135 660 855 9180 variable\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 2880 7065 4050 7065 2 1 0 1 22 7 30 -1 -1 0.000 0 0 7 1 0 2 3 1 1.00 60.00 120.00 2880 7515 4050 7515 4 0 0 140 -1 0 12 0.0000 2 135 735 3015 7290 reference\001 4 0 0 140 -1 0 12 0.0000 2 135 975 3015 7740 return value\001 -6 6 18900 -450 25290 9675 6 19080 -450 22275 -45 2 4 0 1 0 31 890 -1 20 0.000 0 0 7 0 0 5 22275 -45 19080 -45 19080 -450 22275 -450 22275 -45 4 0 0 880 -1 0 18 0.0000 2 195 2880 19215 -173 Interference Workstation\001 -6 6 19125 45 21150 3465 6 19215 360 20790 2160 6 19215 360 20790 585 2 2 0 1 0 7 50 -1 18 0.000 0 0 -1 0 0 5 19215 360 20790 360 20790 585 19215 585 19215 360 4 0 0 40 -1 0 12 0.0000 2 165 915 19260 540 surf_action\001 -6 6 19305 1035 20655 1755 2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 5 19305 1035 20655 1035 20655 1755 19305 1755 19305 1035 4 0 0 40 -1 0 12 0.0000 2 120 330 19350 1215 cost\001 4 0 0 40 -1 0 12 0.0000 2 165 1140 19350 1350 max_duration\001 4 0 0 40 -1 0 12 0.0000 2 135 630 19350 1485 remains\001 4 0 0 40 -1 0 12 0.0000 2 30 135 19350 1620 ...\001 -6 2 2 0 1 0 7 60 -1 20 0.000 0 0 -1 0 0 5 20790 585 19215 585 19215 2160 20790 2160 20790 585 4 0 0 40 -1 0 12 0.0000 2 120 375 19305 855 state\001 4 0 0 50 -1 0 12 0.0000 2 165 1140 19305 2025 model_type\001 -6 6 19125 45 21150 270 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 19125 45 21105 45 21105 270 19125 270 19125 45 4 0 0 140 -1 0 12 0.0000 2 165 1980 19170 225 surf_action_workstation\001 -6 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 20880 270 19125 270 19125 3465 20880 3465 20880 270 4 0 13 140 -1 0 12 0.0000 2 135 660 19215 2430 variable\001 4 0 0 140 -1 0 12 0.0000 2 180 600 19215 2655 latency\001 4 0 0 140 -1 0 12 0.0000 2 120 300 19215 2880 rate\001 4 0 0 140 -1 0 12 0.0000 2 180 855 19215 3105 suspended\001 4 0 0 140 -1 0 12 0.0000 2 90 225 20070 2655 src\001 4 0 0 140 -1 0 12 0.0000 2 135 240 20070 2880 dst\001 4 0 0 140 -1 0 12 0.0000 2 165 360 19215 3330 type\001 -6 6 22050 45 25020 6885 6 22140 360 24705 5310 6 22140 360 23715 585 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 22140 360 23715 360 23715 585 22140 585 22140 360 4 0 0 140 -1 0 12 0.0000 2 165 1080 22185 540 surf_model\001 -6 6 22455 675 24615 1845 6 22455 675 24615 1845 6 22455 675 24390 900 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 22455 675 24390 675 24390 900 22455 900 22455 675 4 0 0 40 -1 0 12 0.0000 2 180 1380 22500 855 common_private\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 24615 900 22455 900 22455 1845 24615 1845 24615 900 4 0 0 50 -1 0 12 0.0000 2 165 1275 22545 1125 resource_used()\001 4 0 0 50 -1 0 12 0.0000 2 165 1395 22545 1305 share_resources()\001 4 0 0 50 -1 0 12 0.0000 2 180 1845 22545 1485 update_actions_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 2010 22545 1665 update_resources_state()\001 -6 -6 6 22455 1980 24525 5175 6 22545 2295 23805 2565 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 22545 2295 23805 2295 23805 2565 22545 2565 22545 2295 4 0 0 50 -1 0 12 0.0000 2 120 450 22635 2475 states\001 -6 6 22455 1980 24390 2205 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 22455 1980 24390 1980 24390 2205 22455 2205 22455 1980 4 0 0 40 -1 0 12 0.0000 2 180 1335 22500 2160 common_public\001 -6 2 2 0 1 0 32 50 -1 -1 0.000 0 0 -1 0 0 5 22545 2655 24435 2655 24435 4905 22545 4905 22545 2655 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 24525 2205 22455 2205 22455 5175 24525 5175 24525 2205 4 0 0 50 -1 0 12 0.0000 2 165 1230 22590 2790 name_service()\001 4 0 0 50 -1 0 12 0.0000 2 165 1005 22590 3015 action_use()\001 4 0 0 50 -1 0 12 0.0000 2 165 1035 22590 3240 action_free()\001 4 0 0 50 -1 0 12 0.0000 2 165 1260 22590 3465 action_cancel()\001 4 0 0 50 -1 0 12 0.0000 2 180 1800 22590 3690 action_change_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 780 22590 3915 suspend()\001 4 0 0 50 -1 0 12 0.0000 2 165 690 22590 4140 resume()\001 4 0 0 50 -1 0 12 0.0000 2 180 1215 22590 4365 is_suspended()\001 4 0 0 50 -1 0 12 0.0000 2 165 1590 22590 4590 set_max_duration()\001 4 0 0 50 -1 0 12 0.0000 2 180 1065 22590 4815 set_priority()\001 4 0 0 50 -1 0 12 0.0000 2 90 435 22545 5085 name\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 22230 810 22500 810 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 22230 2115 22500 2115 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 24705 585 22140 585 22140 5310 24705 5310 24705 585 -6 6 22140 5490 24885 6705 6 22365 5490 24885 6705 6 22365 5490 24300 5715 2 2 0 1 0 32 50 -1 18 0.000 0 0 -1 0 0 5 22365 5490 24300 5490 24300 5715 22365 5715 22365 5490 4 0 0 40 -1 0 12 0.0000 2 180 1425 22410 5670 extension_public\001 -6 6 23805 5760 24750 6165 4 0 0 50 -1 0 12 0.0000 2 180 855 23805 6120 get_state()\001 4 0 0 50 -1 0 12 0.0000 2 180 945 23805 5895 get_speed()\001 -6 2 2 0 1 0 32 60 -1 20 0.000 0 0 -1 0 0 5 24885 5715 22365 5715 22365 6705 24885 6705 24885 5715 4 0 0 50 -1 0 12 0.0000 2 165 750 22455 5895 execute()\001 4 0 0 50 -1 0 12 0.0000 2 180 540 22455 6120 sleep()\001 4 0 0 50 -1 0 12 0.0000 2 165 1215 22455 6570 communicate()\001 4 0 0 50 -1 0 12 0.0000 2 180 1905 22455 6345 execute_parallel_task()\001 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 2 3 1 1.00 60.00 120.00 22140 5625 22410 5625 -6 6 22050 45 24345 270 2 2 0 1 0 32 250 -1 18 0.000 0 0 -1 0 0 5 22050 45 24345 45 24345 270 22050 270 22050 45 4 0 0 240 -1 0 12 0.0000 2 165 2145 22095 225 surf_model_workstation\001 -6 2 2 0 1 0 32 260 -1 20 0.000 0 0 -1 0 0 5 25020 270 22050 270 22050 6885 25020 6885 25020 270 -6 6 22140 6975 24345 8775 6 22275 7290 23850 7515 6 22275 7290 23850 7515 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 22275 7290 23850 7290 23850 7515 22275 7515 22275 7290 4 0 0 140 -1 0 12 0.0000 2 165 1080 22320 7470 surf_model\001 -6 -6 6 22140 6975 23310 7200 2 2 0 1 0 7 260 -1 18 0.000 0 0 -1 0 0 5 22140 6975 23310 6975 23310 7200 22140 7200 22140 6975 4 0 0 250 -1 0 12 0.0000 2 165 1095 22185 7155 network_link\001 -6 6 22275 8325 23175 8730 4 0 0 50 -1 0 12 0.0000 2 165 765 22275 8685 lat_event\001 4 0 0 50 -1 0 12 0.0000 2 165 885 22275 8460 lat_current\001 -6 6 23265 8325 24345 8730 4 0 0 50 -1 0 12 0.0000 2 150 930 23265 8685 state_event\001 4 0 0 50 -1 0 12 0.0000 2 150 1050 23265 8460 state_current\001 -6 6 23265 7830 24210 8235 4 0 0 50 -1 0 12 0.0000 2 165 795 23265 8190 bw_event\001 4 0 0 50 -1 0 12 0.0000 2 165 915 23265 7965 bw_current\001 -6 2 2 0 1 0 7 250 -1 20 0.000 0 0 -1 0 0 5 24345 7200 22140 7200 22140 8775 24345 8775 24345 7200 4 0 13 50 -1 0 12 0.0000 2 135 810 22275 8190 constraint\001 4 0 0 50 -1 0 12 0.0000 2 90 435 22275 7965 name\001 4 0 0 50 -1 0 12 0.0000 2 180 1200 22275 7740 type (cpu|link)\001 -6 6 19845 7875 21150 8145 2 2 0 1 0 32 160 -1 20 0.000 0 0 -1 0 0 5 21150 7875 19845 7875 19845 8145 21150 8145 21150 7875 4 0 0 140 -1 0 12 0.0000 2 180 1110 19935 8055 routing_table\001 -6 6 19125 3645 21645 7470 6 19260 3960 20835 4185 6 19260 3960 20835 4185 2 2 0 1 0 7 150 -1 18 0.000 0 0 -1 0 0 5 19260 3960 20835 3960 20835 4185 19260 4185 19260 3960 4 0 0 140 -1 0 12 0.0000 2 165 1080 19305 4140 surf_model\001 -6 -6 6 19125 3645 19800 3870 2 2 0 1 0 7 260 -1 18 0.000 0 0 -1 0 0 5 19125 3645 19800 3645 19800 3870 19125 3870 19125 3645 4 0 0 250 -1 0 12 0.0000 2 135 300 19170 3825 cpu\001 -6 2 2 0 1 0 7 250 -1 20 0.000 0 0 -1 0 0 5 21555 3870 19125 3870 19125 7470 21555 7470 21555 3870 4 0 0 240 -1 0 12 0.0000 2 90 435 19260 4635 name\001 4 0 0 240 -1 0 12 0.0000 2 180 2385 19260 7110 incoming_communications\001 4 0 0 240 -1 0 12 0.0000 2 180 2205 19260 7335 outgoing_communications\001 4 0 0 240 -1 0 12 0.0000 2 135 165 19260 6885 id\001 4 0 0 240 -1 0 12 0.0000 2 180 1200 19260 4410 type (cpu|link)\001 4 0 13 240 -1 0 12 0.0000 2 135 810 19260 4860 constraint\001 4 0 0 240 -1 0 12 0.0000 2 180 1005 19260 5085 power_scale\001 4 0 0 240 -1 0 12 0.0000 2 165 1170 19260 5310 power_current\001 4 0 0 240 -1 0 12 0.0000 2 165 1050 19260 6210 power_event\001 4 0 0 240 -1 0 12 0.0000 2 150 930 19260 6660 state_event\001 4 0 0 240 -1 0 12 0.0000 2 150 1050 19260 6435 state_current\001 4 0 0 240 -1 0 12 0.0000 2 165 1440 19260 5535 interference_send\001 4 0 0 240 -1 0 12 0.0000 2 165 1410 19260 5760 interference_recv\001 4 0 0 240 -1 0 12 0.0000 2 165 1890 19260 5985 interference_send_recv\001 -6 6 19035 8505 22050 9585 6 19035 8730 22050 9585 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 22050 8730 19035 8730 19035 9585 22050 9585 22050 8730 4 0 0 140 -1 0 12 0.0000 2 180 900 19125 9495 impact_dst\001 4 0 0 140 -1 0 12 0.0000 2 180 885 19125 9225 impact_src\001 4 0 0 140 -1 0 12 0.0000 2 180 1830 20160 9495 impact_dst_with_rend\001 4 0 0 140 -1 0 12 0.0000 2 180 1800 20160 9225 impact_src_with_recv\001 4 0 0 140 -1 0 12 0.0000 2 135 405 19125 8955 links\001 -6 6 19035 8505 20205 8730 2 2 0 1 0 7 260 -1 18 0.000 0 0 -1 0 0 5 19035 8505 20205 8505 20205 8730 19035 8730 19035 8505 4 0 0 250 -1 0 12 0.0000 2 120 420 19080 8685 route\001 -6 -6 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 1 4 3 1 1.00 60.00 120.00 3 1 1.00 60.00 120.00 19710 810 20655 810 21555 2430 22455 2430 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 20295 2610 20565 2610 20565 3780 19845 3780 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 20295 2835 20520 2835 20520 3690 19845 3690 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 19170 6795 19170 7965 19980 7965 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 20520 1980 21060 1980 21555 90 22050 90 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 20610 4095 20745 4095 21645 180 22050 180 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 22275 7425 21735 7425 21735 270 22050 270 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 19620 8910 21825 8910 21825 7065 22095 7065 2 4 0 1 0 31 900 -1 28 0.000 0 0 7 0 0 5 25290 9675 25290 -225 18900 -225 18900 9675 25290 9675 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 21015 8055 21015 8595 20205 8595 -6 2 3 0 1 0 31 900 -1 32 0.000 0 0 -1 0 0 7 6075 -900 6075 14670 12375 14670 12375 8955 18315 8955 18315 -900 6075 -900 2 1 0 1 22 7 30 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 9000 13410 6165 13410 6165 3555 6930 2835 2 1 0 1 22 7 30 -1 -1 0.000 0 0 -1 1 0 6 3 1 1.00 60.00 120.00 9000 14085 8550 14085 8550 14535 12105 14535 12105 2970 12510 2250 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 7740 9540 7920 9540 8730 7740 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 1 4 3 1 1.00 60.00 120.00 3 1 1.00 60.00 120.00 6930 8370 7875 8370 8775 9990 9135 9990 2 2 0 1 0 7 160 -1 20 0.000 0 0 -1 0 0 5 8100 7830 6345 7830 6345 10575 8100 10575 8100 7830 2 1 0 1 22 7 30 -1 -1 0.000 0 0 -1 1 0 5 3 1 1.00 60.00 120.00 9000 13860 8550 13860 8550 10980 7425 10980 7425 10665 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 6435 12015 6255 12015 6255 3960 6480 3600 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 6 3 1 1.00 60.00 120.00 7650 12240 8415 12240 8415 7425 11970 7425 11970 3735 12600 3735 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 7605 11520 8280 11520 8280 8370 8640 7785 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 3 3 1 1.00 60.00 120.00 13995 2160 14175 2160 14895 315 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 1 4 3 1 1.00 60.00 120.00 3 1 1.00 60.00 120.00 13185 990 14130 990 15030 2610 15345 2610 2 1 0 1 22 7 30 -1 -1 0.000 0 0 -1 1 0 6 3 1 1.00 60.00 120.00 15210 6030 14805 6030 14805 5175 12465 5175 12465 3105 12555 2340 2 1 0 1 19 7 20 -1 -1 0.000 0 0 -1 1 0 4 3 1 1.00 60.00 120.00 13905 5805 14580 5805 14580 315 14850 315 2 4 0 1 0 31 800 -1 28 0.000 0 0 7 0 0 5 17910 7380 17910 0 12375 0 12375 7380 17910 7380 2 2 0 1 0 32 260 -1 20 0.000 0 0 -1 0 0 5 17640 450 14850 450 14850 6480 17640 6480 17640 450 4 0 13 140 -1 0 12 0.0000 2 135 660 6435 9990 variable\001 4 0 0 140 -1 0 12 0.0000 2 180 855 6435 10440 suspended\001 4 0 0 140 -1 0 12 0.0000 2 120 300 6435 10215 rate\001 SimGrid-3.10/doc/html/002750 007661 000620 00000000000 12242224150 014725 5ustar00gierschand000000 000000 SimGrid-3.10/doc/html/dir_0056e0202b084862e15799b8f0bf694d.html000640 007661 000620 00000014552 12242224150 022543 0ustar00gierschand000000 000000 SimGrid: examples/msg/io/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
io Directory Reference

Files

file  file.c
file  storage.c
SimGrid-3.10/doc/html/group__XBT__mallocator.js000640 007661 000620 00000000407 12242224150 021647 0ustar00gierschand000000 000000 var group__XBT__mallocator = [ [ "Mallocator constructor and destructor", "group__XBT__mallocator__cons.html", "group__XBT__mallocator__cons" ], [ "Mallocator object handling", "group__XBT__mallocator__objects.html", "group__XBT__mallocator__objects" ] ];SimGrid-3.10/doc/html/structxbt__boolean__couple.html000640 007661 000620 00000013727 12242224150 023232 0ustar00gierschand000000 000000 SimGrid: xbt_boolean_couple Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
xbt_boolean_couple Struct Reference

#include <config.h>

Detailed Description

Boolean possible values


The documentation for this struct was generated from the following file:
  • include/xbt/config.h
SimGrid-3.10/doc/html/group__m__task__management.html000640 007661 000620 00000141265 12242224150 023146 0ustar00gierschand000000 000000 SimGrid: Task Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Task Management Functions

This section describes the task structure of MSG (msg_task_t) and the functions for managing it. See Task Actions to see how to put the tasks in action. More...

Macros

#define MSG_TASK_UNINITIALIZED   NULL
 Default value for an uninitialized msg_task_t.

Typedefs

typedef struct msg_task * msg_task_t
 Task datatype.A task may then be defined by a computing amount, a message size and some private data.
typedef struct msg_gpu_task * msg_gpu_task_t
 GPU task datatype.A task may then be defined by a computing amount, a dispatch latency and a collect latency.

Functions

msg_task_t MSG_task_create (const char *name, double compute_duration, double message_size, void *data)
 Creates a new msg_task_t.
msg_task_t MSG_parallel_task_create (const char *name, int host_nb, const msg_host_t *host_list, double *computation_amount, double *communication_amount, void *data)
 Creates a new msg_task_t (a parallel one....).
msg_gpu_task_t MSG_gpu_task_create (const char *name, double compute_duration, double dispatch_latency, double collect_latency)
 Creates a new msg_gpu_task_t.
void * MSG_task_get_data (msg_task_t task)
 Return the user data of a msg_task_t.
void MSG_task_set_data (msg_task_t task, void *data)
 Sets the user data of a msg_task_t.
void MSG_task_set_copy_callback (void(*callback)(msg_task_t task, msg_process_t sender, msg_process_t receiver))
 Sets a function to be called when a task has just been copied.
msg_process_t MSG_task_get_sender (msg_task_t task)
 Return the sender of a msg_task_t.
msg_host_t MSG_task_get_source (msg_task_t task)
 Return the source of a msg_task_t.
const char * MSG_task_get_name (msg_task_t task)
 Return the name of a msg_task_t.
void MSG_task_set_name (msg_task_t task, const char *name)
 Sets the name of a msg_task_t.
msg_error_t MSG_task_destroy (msg_task_t task)
 Destroy a msg_task_t.
double MSG_task_get_compute_duration (msg_task_t task)
 Returns the computation amount needed to process a task msg_task_t.
void MSG_task_set_compute_duration (msg_task_t task, double computation_amount)
 set the computation amount needed to process a task msg_task_t.
void MSG_task_set_data_size (msg_task_t task, double data_size)
 set the amount data attached with a task msg_task_t.
double MSG_task_get_remaining_computation (msg_task_t task)
 Returns the remaining computation amount of a task msg_task_t.
double MSG_task_get_remaining_communication (msg_task_t task)
 Returns the total amount received by a task msg_task_t. If the communication does not exist it will return 0. So, if the communication has FINISHED or FAILED it returns zero.
double MSG_task_get_data_size (msg_task_t task)
 Returns the size of the data attached to a task msg_task_t.
void MSG_task_set_priority (msg_task_t task, double priority)
 Changes the priority of a computation task. This priority doesn't affect the transfer rate. A priority of 2 will make a task receive two times more cpu power than the other ones.

Detailed Description

This section describes the task structure of MSG (msg_task_t) and the functions for managing it. See Task Actions to see how to put the tasks in action.

Since most scheduling algorithms rely on a concept of task that can be either computed locally or transferred on another processor, it seems to be the right level of abstraction for our purposes. A task may then be defined by a computing amount, a message size and some private data.

Typedef Documentation

typedef struct msg_gpu_task* msg_gpu_task_t

GPU task datatype.A task may then be defined by a computing amount, a dispatch latency and a collect latency.

See Also
Task Management Functions

Function Documentation

msg_task_t MSG_task_create ( const char *  name,
double  compute_duration,
double  message_size,
void *  data 
)

Creates a new msg_task_t.

A constructor for msg_task_t taking four arguments and returning the corresponding object.

Parameters
namea name for the object. It is for user-level information and can be NULL.
compute_durationa value of the processing amount (in flop) needed to process this new task. If 0, then it cannot be executed with MSG_task_execute(). This value has to be >=0.
message_sizea value of the amount of data (in bytes) needed to transfer this new task. If 0, then it cannot be transfered with MSG_task_send() and MSG_task_recv(). This value has to be >=0.
dataa pointer to any data may want to attach to the new object. It is for user-level information and can be NULL. It can be retrieved with the function MSG_task_get_data.
See Also
msg_task_t
Returns
The new corresponding object.
msg_task_t MSG_parallel_task_create ( const char *  name,
int  host_nb,
const msg_host_t host_list,
double *  computation_amount,
double *  communication_amount,
void *  data 
)

Creates a new msg_task_t (a parallel one....).

A constructor for msg_task_t taking six arguments and returning the corresponding object.

Parameters
namea name for the object. It is for user-level information and can be NULL.
host_nbthe number of hosts implied in the parallel task.
host_listan array of host_nb msg_host_t.
computation_amountan array of host_nb doubles. computation_amount[i] is the total number of operations that have to be performed on host_list[i].
communication_amountan array of host_nb* host_nb doubles.
dataa pointer to any data may want to attach to the new object. It is for user-level information and can be NULL. It can be retrieved with the function MSG_task_get_data.
See Also
msg_task_t
Returns
The new corresponding object.
msg_gpu_task_t MSG_gpu_task_create ( const char *  name,
double  compute_duration,
double  dispatch_latency,
double  collect_latency 
)

Creates a new msg_gpu_task_t.

A constructor for msg_gpu_task_t taking four arguments and returning a pointer to the new created GPU task.

Parameters
namea name for the object. It is for user-level information and can be NULL.
compute_durationa value of the processing amount (in flop) needed to process this new task. If 0, then it cannot be executed with MSG_gpu_task_execute(). This value has to be >=0.
dispatch_latencytime in seconds to load this task on the GPU
collect_latencytime in seconds to transfer result from the GPU back to the CPU (host) when done
See Also
msg_gpu_task_t
Returns
The new corresponding object.
void* MSG_task_get_data ( msg_task_t  task)

Return the user data of a msg_task_t.

This function checks whether task is a valid pointer or not and return the user data associated to task if it is possible.

void MSG_task_set_data ( msg_task_t  task,
void *  data 
)

Sets the user data of a msg_task_t.

This function allows to associate a new pointer to the user data associated of task.

void MSG_task_set_copy_callback ( void(*)(msg_task_t task, msg_process_t sender, msg_process_t receiver)  callback)

Sets a function to be called when a task has just been copied.

Parameters
callbacka callback function
msg_process_t MSG_task_get_sender ( msg_task_t  task)

Return the sender of a msg_task_t.

This functions returns the msg_process_t which sent this task

msg_host_t MSG_task_get_source ( msg_task_t  task)

Return the source of a msg_task_t.

This functions returns the msg_host_t from which this task was sent

const char* MSG_task_get_name ( msg_task_t  task)

Return the name of a msg_task_t.

This functions returns the name of a msg_task_t as specified on creation

void MSG_task_set_name ( msg_task_t  task,
const char *  name 
)

Sets the name of a msg_task_t.

This functions allows to associate a name to a task

msg_error_t MSG_task_destroy ( msg_task_t  task)

Destroy a msg_task_t.

Destructor for msg_task_t. Note that you should free user data, if any, before calling this function.

Only the process that owns the task can destroy it. The owner changes after a successful send. If a task is successfully sent, the receiver becomes the owner and is supposed to destroy it. The sender should not use it anymore. If the task failed to be sent, the sender remains the owner of the task.

double MSG_task_get_compute_duration ( msg_task_t  task)

Returns the computation amount needed to process a task msg_task_t.

Once a task has been processed, this amount is set to 0. If you want, you can reset this value with MSG_task_set_compute_duration before restarting the task.

void MSG_task_set_compute_duration ( msg_task_t  task,
double  computation_amount 
)

set the computation amount needed to process a task msg_task_t.

Warning
If the computation is ongoing (already started and not finished), it is not modified by this call. And the termination of the ongoing task with set the computation_amount to zero, overriding any value set during the execution.
void MSG_task_set_data_size ( msg_task_t  task,
double  data_size 
)

set the amount data attached with a task msg_task_t.

Warning
If the transfer is ongoing (already started and not finished), it is not modified by this call.
double MSG_task_get_remaining_computation ( msg_task_t  task)

Returns the remaining computation amount of a task msg_task_t.

If the task is ongoing, this call retrieves the remaining amount of work. If it is not ongoing, it returns the total amount of work that will be executed when the task starts.

SimGrid-3.10/doc/html/group__XBT__fifo__misc.js000640 007661 000620 00000000346 12242224150 021611 0ustar00gierschand000000 000000 var group__XBT__fifo__misc = [ [ "xbt_fifo_to_array", "group__XBT__fifo__misc.html#ga0a85e5e8e1e0774885f73614f3a40770", null ], [ "xbt_fifo_copy", "group__XBT__fifo__misc.html#ga9fc2652fb4c1d80adbf4f8e7267846fd", null ] ];SimGrid-3.10/doc/html/group__m__task__management.js000640 007661 000620 00000004431 12242224150 022607 0ustar00gierschand000000 000000 var group__m__task__management = [ [ "MSG_TASK_UNINITIALIZED", "group__m__task__management.html#ga13f8ac858abd957f5cb2e9a54ad98d76", null ], [ "msg_task_t", "group__m__task__management.html#gaa7cd89c7f542d19fd817a614d1c1cc95", null ], [ "msg_gpu_task_t", "group__m__task__management.html#ga3ab366f5db21f52c90a265fe83c5c2dd", null ], [ "MSG_task_create", "group__m__task__management.html#gaafe2ccabd38b13d1734323f86e40706a", null ], [ "MSG_parallel_task_create", "group__m__task__management.html#ga54412e440ff859933bbbcb0204aa5a75", null ], [ "MSG_gpu_task_create", "group__m__task__management.html#ga4ed297ea1a968b31be47d45f5f908580", null ], [ "MSG_task_get_data", "group__m__task__management.html#gab0ef7c694fcc69282cf4da632ae64d5b", null ], [ "MSG_task_set_data", "group__m__task__management.html#ga5a2984b6a34bb725b52ee31cdece56a2", null ], [ "MSG_task_set_copy_callback", "group__m__task__management.html#gab4fd7f315f6f7d9297eaad64e67fbf90", null ], [ "MSG_task_get_sender", "group__m__task__management.html#ga90a38af4ae02895a5e656c6d2555a63b", null ], [ "MSG_task_get_source", "group__m__task__management.html#gabb8f9c3289b341b68af5c789ea659c1e", null ], [ "MSG_task_get_name", "group__m__task__management.html#ga2adce7c9dbe8ecab1d6db1fdc420ea80", null ], [ "MSG_task_set_name", "group__m__task__management.html#gaa97b99e0176424e3f0afdf239e2f3f32", null ], [ "MSG_task_destroy", "group__m__task__management.html#gaf6369e840095c428218e494bf8b6dee6", null ], [ "MSG_task_get_compute_duration", "group__m__task__management.html#gae6c900f519f6280a9e7a615a2e47cb96", null ], [ "MSG_task_set_compute_duration", "group__m__task__management.html#gab54a9cc669db50dc7229389ac3dc7f1f", null ], [ "MSG_task_set_data_size", "group__m__task__management.html#ga3c900ab457b5822c205979097765bc04", null ], [ "MSG_task_get_remaining_computation", "group__m__task__management.html#gada131788294fe436d9cc1044319b111f", null ], [ "MSG_task_get_remaining_communication", "group__m__task__management.html#ga1f3d2d85e2a7415e26fa12f05b71fc34", null ], [ "MSG_task_get_data_size", "group__m__task__management.html#ga5d7514ea11b8a51bad0cbc7ad0636856", null ], [ "MSG_task_set_priority", "group__m__task__management.html#ga22cf2562fbb9cad8c5860914c0d8d6dc", null ] ];SimGrid-3.10/doc/html/group__XBT__error.js000640 007661 000620 00000000442 12242224150 020642 0ustar00gierschand000000 000000 var group__XBT__error = [ [ "xbt_assert", "group__XBT__error.html#gadd837b8bf67480aea409a8580072f0be", null ], [ "xbt_abort", "group__XBT__error.html#gaca8531c4c752e94c638c030c80528021", null ], [ "xbt_die", "group__XBT__error.html#ga9bf4916de59dbf2c5bc790e85df7c189", null ] ];SimGrid-3.10/doc/html/group__XBT__grounding.js000640 007661 000620 00000001213 12242224150 021502 0ustar00gierschand000000 000000 var group__XBT__grounding = [ [ "Malloc and friends", "group__XBT__syscall.html", "group__XBT__syscall" ], [ "String related functions", "group__XBT__str.html", "group__XBT__str" ], [ "Exception support", "group__XBT__ex.html", "group__XBT__ex" ], [ "Logging support", "group__XBT__log.html", "group__XBT__log" ], [ "Assert macro familly", "group__XBT__error.html", "group__XBT__error" ], [ "Configuration support", "group__XBT__config.html", "group__XBT__config" ], [ "Mallocators", "group__XBT__mallocator.html", "group__XBT__mallocator" ], [ "Unit testing support", "group__XBT__cunit.html", "group__XBT__cunit" ] ];SimGrid-3.10/doc/html/dir_4fb787e2f7ab32ec6fc8665464677dfc.html000640 007661 000620 00000014027 12242224150 023150 0ustar00gierschand000000 000000 SimGrid: examples/msg/actions/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__simix__host__management.html000640 007661 000620 00000136233 12242224150 024055 0ustar00gierschand000000 000000 SimGrid: Host Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Host Management Functions

Functions

smx_host_t simcall_host_get_by_name (const char *name)
 Returns a host given its name.
const char * simcall_host_get_name (smx_host_t host)
 Returns the name of a host.
xbt_dict_t simcall_host_get_properties (smx_host_t host)
 Returns a dict of the properties assigned to a host.
xbt_dict_t simcall_asr_get_properties (const char *name)
 Returns a dict of the properties assigned to a router or AS.
double simcall_host_get_speed (smx_host_t host)
 Returns the speed of the processor.
int simcall_host_get_core (smx_host_t host)
 Returns the number of core of the processor.
xbt_swag_t simcall_host_get_process_list (smx_host_t host)
 Returns the list of processes attached to the host.
double simcall_host_get_available_speed (smx_host_t host)
 Returns the available speed of the processor.
int simcall_host_get_state (smx_host_t host)
 Returns the state of a host.
void * simcall_host_get_data (smx_host_t host)
 Returns the user data associated to a host.
void simcall_host_set_data (smx_host_t host, void *data)
 Sets the user data associated to a host.
double simcall_host_get_current_power_peak (smx_host_t host)
 Returns the power peak of a host.
double simcall_host_get_power_peak_at (smx_host_t host, int pstate_index)
 Returns one power peak (in flops/s) of a host at a given pstate.
int simcall_host_get_nb_pstates (smx_host_t host)
 Returns the number of power states for a host.
void simcall_host_set_power_peak_at (smx_host_t host, int pstate_index)
 Sets a new power peak for a host.
double simcall_host_get_consumed_energy (smx_host_t host)
 Returns the total energy consumed by the host (in Joules)
smx_action_t simcall_host_execute (const char *name, smx_host_t host, double computation_amount, double priority)
 Creates an action that executes some computation of an host.
smx_action_t simcall_host_parallel_execute (const char *name, int host_nb, smx_host_t *host_list, double *computation_amount, double *communication_amount, double amount, double rate)
 Creates an action that may involve parallel computation on several hosts and communication between them.
void simcall_host_execution_destroy (smx_action_t execution)
 Destroys an execution action.
void simcall_host_execution_cancel (smx_action_t execution)
 Cancels an execution action.
double simcall_host_execution_get_remains (smx_action_t execution)
 Returns how much of an execution action remains to be done.
e_smx_state_t simcall_host_execution_get_state (smx_action_t execution)
 Returns the state of an execution action.
void simcall_host_execution_set_priority (smx_action_t execution, double priority)
 Changes the priority of an execution action.
e_smx_state_t simcall_host_execution_wait (smx_action_t execution)
 Waits for the completion of an execution action and destroy it.
typedef xbt_dictelm_t smx_host_t
 Host datatypeA location (or host) is any possible place where a process may run. Thus it is represented as a physical resource with computing capabilities, some mailboxes to enable running process to communicate with remote ones, and some private data that can be only accessed by local process.

Detailed Description

Typedef Documentation

typedef xbt_dictelm_t smx_host_t

Host datatypeA location (or host) is any possible place where a process may run. Thus it is represented as a physical resource with computing capabilities, some mailboxes to enable running process to communicate with remote ones, and some private data that can be only accessed by local process.

See Also
Host Management Functions

Function Documentation

smx_host_t simcall_host_get_by_name ( const char *  name)

Returns a host given its name.

Parameters
nameThe name of the host to get
Returns
The corresponding host
const char* simcall_host_get_name ( smx_host_t  host)

Returns the name of a host.

Parameters
hostA SIMIX host
Returns
The name of this host
xbt_dict_t simcall_host_get_properties ( smx_host_t  host)

Returns a dict of the properties assigned to a host.

Parameters
hostA host
Returns
The properties of this host
xbt_dict_t simcall_asr_get_properties ( const char *  name)

Returns a dict of the properties assigned to a router or AS.

Parameters
nameThe name of the router or AS
Returns
The properties
double simcall_host_get_speed ( smx_host_t  host)

Returns the speed of the processor.

The speed returned does not take into account the current load on the machine.

Parameters
hostA SIMIX host
Returns
The speed of this host (in Mflop/s)
int simcall_host_get_core ( smx_host_t  host)

Returns the number of core of the processor.

Parameters
hostA SIMIX host
Returns
The number of core
xbt_swag_t simcall_host_get_process_list ( smx_host_t  host)

Returns the list of processes attached to the host.

Parameters
hostA SIMIX host
Returns
the swag of attached processes
double simcall_host_get_available_speed ( smx_host_t  host)

Returns the available speed of the processor.

Returns
Speed currently available (in Mflop/s)
int simcall_host_get_state ( smx_host_t  host)

Returns the state of a host.

Two states are possible: 1 if the host is active or 0 if it has crashed.

Parameters
hostA SIMIX host
Returns
1 if the host is available, 0 otherwise
void* simcall_host_get_data ( smx_host_t  host)

Returns the user data associated to a host.

Parameters
hostSIMIX host
Returns
the user data of this host
void simcall_host_set_data ( smx_host_t  host,
void *  data 
)

Sets the user data associated to a host.

The host must not have previous user data associated to it.

Parameters
hostA SIMIX host
dataThe user data to set
double simcall_host_get_current_power_peak ( smx_host_t  host)

Returns the power peak of a host.

Parameters
hostA SIMIX host
Returns
the current power peak value (double)
double simcall_host_get_power_peak_at ( smx_host_t  host,
int  pstate_index 
)

Returns one power peak (in flops/s) of a host at a given pstate.

Parameters
hostA SIMIX host
pstate_indexpstate to test
Returns
the current power peak value (double) for pstate_index
int simcall_host_get_nb_pstates ( smx_host_t  host)

Returns the number of power states for a host.

Parameters
hostA SIMIX host
Returns
the number of power states
void simcall_host_set_power_peak_at ( smx_host_t  host,
int  pstate_index 
)

Sets a new power peak for a host.

Parameters
hostA SIMIX host
pstate_indexThe pstate to which the CPU power will be set
Returns
void
double simcall_host_get_consumed_energy ( smx_host_t  host)

Returns the total energy consumed by the host (in Joules)

Parameters
hostA SIMIX host
Returns
the energy consumed by the host (double)
smx_action_t simcall_host_execute ( const char *  name,
smx_host_t  host,
double  computation_amount,
double  priority 
)

Creates an action that executes some computation of an host.

This function creates a SURF action and allocates the data necessary to create the SIMIX action. It can raise a host_error exception if the host crashed.

Parameters
nameName of the execution action to create
hostSIMIX host where the action will be executed
computation_amountamount Computation amount (in bytes)
prioritycomputation priority
Returns
A new SIMIX execution action
smx_action_t simcall_host_parallel_execute ( const char *  name,
int  host_nb,
smx_host_t host_list,
double *  computation_amount,
double *  communication_amount,
double  amount,
double  rate 
)

Creates an action that may involve parallel computation on several hosts and communication between them.

Parameters
nameName of the execution action to create
host_nbNumber of hosts where the action will be executed
host_listArray (of size host_nb) of hosts where the action will be executed
computation_amountArray (of size host_nb) of computation amount of hosts (in bytes)
communication_amountArray (of size host_nb * host_nb) representing the communication amount between each pair of hosts
amountthe SURF action amount
ratethe SURF action rate
Returns
A new SIMIX execution action
void simcall_host_execution_destroy ( smx_action_t  execution)

Destroys an execution action.

Destroys an action, freing its memory. This function cannot be called if there are a conditional waiting for it.

Parameters
executionThe execution action to destroy
void simcall_host_execution_cancel ( smx_action_t  execution)

Cancels an execution action.

This functions stops the execution. It calls a surf function.

Parameters
executionThe execution action to cancel
double simcall_host_execution_get_remains ( smx_action_t  execution)

Returns how much of an execution action remains to be done.

Parameters
executionThe execution action
Returns
The remaining amount
e_smx_state_t simcall_host_execution_get_state ( smx_action_t  execution)

Returns the state of an execution action.

Parameters
executionThe execution action
Returns
The state
void simcall_host_execution_set_priority ( smx_action_t  execution,
double  priority 
)

Changes the priority of an execution action.

This functions changes the priority only. It calls a surf function.

Parameters
executionThe execution action
priorityThe new priority
e_smx_state_t simcall_host_execution_wait ( smx_action_t  execution)

Waits for the completion of an execution action and destroy it.

Parameters
executionThe execution action
SimGrid-3.10/doc/html/group__API__index.html000640 007661 000620 00000433115 12242224150 021133 0ustar00gierschand000000 000000 SimGrid: Full Index
SimGrid  3.10
Versatile Simulation of Distributed Systems
Full Index

The alphabetical list of all functions, macros and types defined by SimGrid. More...

The alphabetical list of all functions, macros and types defined by SimGrid.

List of all functions, variables, defines, enums, and typedefs with links to the files they belong to.

Although completely useless, the complete list of structures defined can be found here

define

enumeration

enumvalue

function

typedef

SimGrid-3.10/doc/html/dir_6a74bcf2fcf62215754778ceca10f2c7.html000640 007661 000620 00000014667 12242224150 023130 0ustar00gierschand000000 000000 SimGrid: include/simgrid/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
simgrid Directory Reference

Files

file  modelchecker.h
file  platf.h
file  platf_generator.h
file  simix.h
SimGrid-3.10/doc/html/dir_f99f2ba1984b8529e0fa2372b699ff62.html000640 007661 000620 00000023770 12242224150 023013 0ustar00gierschand000000 000000 SimGrid: examples/msg/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
msg Directory Reference

Directories

directory  actions
directory  chord
directory  gpu
directory  gtnets
directory  icomms
directory  io
directory  masterslave
directory  migration
directory  ns3
directory  parallel_task
directory  pmm
directory  priority
directory  properties
directory  sendrecv
directory  suspend
directory  token_ring
directory  tracing
SimGrid-3.10/doc/html/nav_g.png000640 007661 000620 00000000137 12242224150 016525 0ustar00gierschand000000 000000 PNG  IHDR1&IDATx1 OHf_ ->~M iMS<IENDB`SimGrid-3.10/doc/html/group__SD__workstation__management.js000640 007661 000620 00000005076 12242224150 024311 0ustar00gierschand000000 000000 var group__SD__workstation__management = [ [ "SD_workstation_get_by_name", "group__SD__workstation__management.html#ga1c912ef7ecda05d307afefad0fc759b6", null ], [ "SD_workstation_get_list", "group__SD__workstation__management.html#ga2849ed01ae4dc580923fbd6782d9ccf4", null ], [ "SD_workstation_get_number", "group__SD__workstation__management.html#gacdc811bb1046b88da230d51c68533ba2", null ], [ "SD_workstation_set_data", "group__SD__workstation__management.html#ga63c39639777faf77a8e6c0bd41694fa1", null ], [ "SD_workstation_get_data", "group__SD__workstation__management.html#gaed29af2c807f986fccf6d3ad4bf15156", null ], [ "SD_workstation_get_name", "group__SD__workstation__management.html#ga229affb29b5472c8f62f054b0def9547", null ], [ "SD_workstation_get_properties", "group__SD__workstation__management.html#ga24a4f207e56f070fa83c56d8bb0c35c1", null ], [ "SD_workstation_get_property_value", "group__SD__workstation__management.html#ga6977e577293bd72f9e191dd2613b650f", null ], [ "SD_workstation_dump", "group__SD__workstation__management.html#ga71b72259a6d31b4445700eb1d21a087a", null ], [ "SD_route_get_list", "group__SD__workstation__management.html#gaa9522a1e095218a426cf6c70315fdc9d", null ], [ "SD_route_get_size", "group__SD__workstation__management.html#gad28c1465fa8cc17f0d73668ed8dbca4a", null ], [ "SD_workstation_get_power", "group__SD__workstation__management.html#ga324f3ae1cea2ae9e52bfb70448361f26", null ], [ "SD_workstation_get_available_power", "group__SD__workstation__management.html#gadfd3673bc4bc5011babfd0247d45ef28", null ], [ "SD_workstation_get_access_mode", "group__SD__workstation__management.html#ga68c974556d55dc2ae760fde9408a32e6", null ], [ "SD_workstation_set_access_mode", "group__SD__workstation__management.html#gac00d8cc9c460d532aedfb9ba8fc49c66", null ], [ "SD_workstation_get_computation_time", "group__SD__workstation__management.html#ga9caaba45417c65427ee74da841dd14e2", null ], [ "SD_route_get_current_latency", "group__SD__workstation__management.html#ga224866561ec8000a495faea7c5e25b48", null ], [ "SD_route_get_current_bandwidth", "group__SD__workstation__management.html#gad52c195122d5cd98331a3838c52d4d81", null ], [ "SD_route_get_communication_time", "group__SD__workstation__management.html#ga0983ee235addaee99467ef4c4f97966b", null ], [ "SD_workstation_get_current_task", "group__SD__workstation__management.html#ga0e4d5fa0f15423b8c1e55abfecd25164", null ], [ "SD_workstation_get_storage_list", "group__SD__workstation__management.html#ga5bb5798685fdcd82966f1238c620e2a0", null ] ];SimGrid-3.10/doc/html/group__XBT__cfg__use.html000640 007661 000620 00000135404 12242224150 021622 0ustar00gierschand000000 000000 SimGrid: User interface: changing values
SimGrid  3.10
Versatile Simulation of Distributed Systems
User interface: changing values

Typedefs

typedef void * xbt_cfg_t
 Configuration set's data type is opaque.

Functions

void xbt_cfg_set (xbt_cfg_t cfg, const char *name,...)
 Add a NULL-terminated list of pairs {(char*)key, value} to the set.
void xbt_cfg_set_vargs (xbt_cfg_t cfg, const char *name, va_list pa)
 va_args version of xbt_cfg_set
void xbt_cfg_set_parse (xbt_cfg_t cfg, const char *options)
 Add values parsed from a string into a config set.
void xbt_cfg_set_int (xbt_cfg_t cfg, const char *name, int val)
 Set or add an integer value to name within cfg.
void xbt_cfg_set_double (xbt_cfg_t cfg, const char *name, double val)
 Set or add a double value to name within cfg.
void xbt_cfg_set_string (xbt_cfg_t cfg, const char *name, const char *val)
 Set or add a string value to name within cfg.
void xbt_cfg_set_boolean (xbt_cfg_t cfg, const char *name, const char *val)
 Set or add a boolean value to name within cfg.
void xbt_cfg_set_peer (xbt_cfg_t cfg, const char *name, const char *peer, int port)
 Set or add an peer value to name within cfg.
void * xbt_cfg_set_as_string (xbt_cfg_t cfg, const char *name, const char *val)
 Set the value of a variable, using the string representation of that value.
void xbt_cfg_setdefault_int (xbt_cfg_t cfg, const char *name, int val)
 Set an integer value to name within cfg if it wasn't changed yet.
void xbt_cfg_setdefault_double (xbt_cfg_t cfg, const char *name, double val)
 Set an integer value to name within cfg if it wasn't changed yet.
void xbt_cfg_setdefault_string (xbt_cfg_t cfg, const char *name, const char *val)
 Set a string value to name within cfg if it wasn't changed yet.
void xbt_cfg_setdefault_boolean (xbt_cfg_t cfg, const char *name, const char *val)
 Set an boolean value to name within cfg if it wasn't changed yet.
void xbt_cfg_setdefault_peer (xbt_cfg_t cfg, const char *name, const char *host, int port)
 Set a peer value to name within cfg if it wasn't changed yet.
void xbt_cfg_rm_int (xbt_cfg_t cfg, const char *name, int val)
 Remove the provided val integer value from a variable.
void xbt_cfg_rm_double (xbt_cfg_t cfg, const char *name, double val)
 Remove the provided val double value from a variable.
void xbt_cfg_rm_string (xbt_cfg_t cfg, const char *name, const char *val)
 Remove the provided val string value from a variable.
void xbt_cfg_rm_boolean (xbt_cfg_t cfg, const char *name, int val)
 Remove the provided val boolean value from a variable.
void xbt_cfg_rm_peer (xbt_cfg_t cfg, const char *name, const char *peer, int port)
 Remove the provided val peer value from a variable.
void xbt_cfg_rm_at (xbt_cfg_t cfg, const char *name, int pos)
 Remove the pos th value from the provided variable.
void xbt_cfg_empty (xbt_cfg_t cfg, const char *name)
 Remove all the values from a variable.

Detailed Description

This is the only interface you should use unless you want to let your own code become configurable with this.

If the variable accept at most one value, those functions replace the current value with the provided one. If max>1, the provided value is appended to the list.

string values are strdup'ed before use, so you can (and should) free your copy

Function Documentation

void xbt_cfg_set ( xbt_cfg_t  cfg,
const char *  name,
  ... 
)

Add a NULL-terminated list of pairs {(char*)key, value} to the set.

Parameters
cfgconfig set to fill
namevariable name
...variable value
void xbt_cfg_set_vargs ( xbt_cfg_t  cfg,
const char *  name,
va_list  pa 
)

va_args version of xbt_cfg_set

Parameters
cfgconfig set to fill
namevariable name
pavariable value

Add some values to the config set.

void xbt_cfg_set_parse ( xbt_cfg_t  cfg,
const char *  options 
)

Add values parsed from a string into a config set.

Parameters
cfgconfig set to fill
optionsa string containing the content to add to the config set. This is a '\t',' ' or '\n' or ',' separated list of variables. Each individual variable is like "[name]:[value]" where [name] is the name of an already registred variable, and [value] conforms to the data type under which this variable was registred.
void xbt_cfg_set_int ( xbt_cfg_t  cfg,
const char *  name,
int  val 
)

Set or add an integer value to name within cfg.

Parameters
cfgthe config set
namethe name of the variable
valthe value of the variable
void xbt_cfg_set_double ( xbt_cfg_t  cfg,
const char *  name,
double  val 
)

Set or add a double value to name within cfg.

Parameters
cfgthe config set
namethe name of the variable
valthe doule to set
void xbt_cfg_set_string ( xbt_cfg_t  cfg,
const char *  name,
const char *  val 
)

Set or add a string value to name within cfg.

Parameters
cfgthe config set
namethe name of the variable
valthe value to be added
void xbt_cfg_set_boolean ( xbt_cfg_t  cfg,
const char *  name,
const char *  val 
)

Set or add a boolean value to name within cfg.

Parameters
cfgthe config set
namethe name of the variable
valthe value of the variable
void xbt_cfg_set_peer ( xbt_cfg_t  cfg,
const char *  name,
const char *  peer,
int  port 
)

Set or add an peer value to name within cfg.

Parameters
cfgthe config set
namethe name of the variable
peerthe peer
portthe port number

peer values are composed of a string (peername) and an integer (port)

void* xbt_cfg_set_as_string ( xbt_cfg_t  cfg,
const char *  key,
const char *  value 
)

Set the value of a variable, using the string representation of that value.

Parameters
cfgconfig set to modify
keyname of the variable to modify
valuestring representation of the value to set
Returns
the first char after the parsed value in val
void xbt_cfg_setdefault_int ( xbt_cfg_t  cfg,
const char *  name,
int  val 
)

Set an integer value to name within cfg if it wasn't changed yet.

This is useful to change the default value of a variable while allowing users to override it with command line arguments

void xbt_cfg_setdefault_double ( xbt_cfg_t  cfg,
const char *  name,
double  val 
)

Set an integer value to name within cfg if it wasn't changed yet.

This is useful to change the default value of a variable while allowing users to override it with command line arguments

void xbt_cfg_setdefault_string ( xbt_cfg_t  cfg,
const char *  name,
const char *  val 
)

Set a string value to name within cfg if it wasn't changed yet.

This is useful to change the default value of a variable while allowing users to override it with command line arguments

void xbt_cfg_setdefault_boolean ( xbt_cfg_t  cfg,
const char *  name,
const char *  val 
)

Set an boolean value to name within cfg if it wasn't changed yet.

This is useful to change the default value of a variable while allowing users to override it with command line arguments

void xbt_cfg_setdefault_peer ( xbt_cfg_t  cfg,
const char *  name,
const char *  host,
int  port 
)

Set a peer value to name within cfg if it wasn't changed yet.

This is useful to change the default value of a variable while allowing users to override it with command line arguments

void xbt_cfg_rm_int ( xbt_cfg_t  cfg,
const char *  name,
int  val 
)

Remove the provided val integer value from a variable.

Parameters
cfgthe config set
namethe name of the variable
valthe value to be removed
void xbt_cfg_rm_double ( xbt_cfg_t  cfg,
const char *  name,
double  val 
)

Remove the provided val double value from a variable.

Parameters
cfgthe config set
namethe name of the variable
valthe value to be removed
void xbt_cfg_rm_string ( xbt_cfg_t  cfg,
const char *  name,
const char *  val 
)

Remove the provided val string value from a variable.

Parameters
cfgthe config set
namethe name of the variable
valthe value of the string which will be removed
void xbt_cfg_rm_boolean ( xbt_cfg_t  cfg,
const char *  name,
int  val 
)

Remove the provided val boolean value from a variable.

Parameters
cfgthe config set
namethe name of the variable
valthe value to be removed
void xbt_cfg_rm_peer ( xbt_cfg_t  cfg,
const char *  name,
const char *  peer,
int  port 
)

Remove the provided val peer value from a variable.

Parameters
cfgthe config set
namethe name of the variable
peerthe peername
portthe port number
void xbt_cfg_empty ( xbt_cfg_t  cfg,
const char *  name 
)

Remove all the values from a variable.

Parameters
cfgthe config set
namethe name of the variable
SimGrid-3.10/doc/html/group__MSG__LUA.html000640 007661 000620 00000016571 12242224150 020465 0ustar00gierschand000000 000000 SimGrid: Lua bindings
SimGrid  3.10
Versatile Simulation of Distributed Systems
Lua bindings

Lua bindings to MSG (MSG) More...

Lua bindings to MSG (MSG)

This is the lua bindings of the MSG interface.

Who should use this (and who shouldn't)

If you want to use MSG to study your algorithm, but you don't want to use the C language (using MSG), then you should use some bindings such as this one. Just like the Java Binding, the advantage of the lua bindings is that they are distributed directly with the main archive (in contrary to Ruby bindings, that are distributed separately). Another advantage of lua is that there is almost no performance loss with regard to the C version (at least there shouldn't be any – it is still to be precisely assessed).

Lua offered functionnalities in MSG

Almost all important features of the MSG interface are available from the lua bindings. Unfortunately, since doxygen does not support the lua modules implemented directly in C as we are using, there is no ready to use reference documentation for this module. Even more than for the other modules, you will have to dig into the source code of the examples to learn how to use it.

Examples of lua MSG

SimGrid-3.10/doc/html/dir_7b471f56678bcaf979e1c230a94e387e.html000640 007661 000620 00000016361 12242224150 023006 0ustar00gierschand000000 000000 SimGrid: src/include/surf/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf Directory Reference

Files

file  datatypes.h
file  maxmin.h
file  random_mgr.h
file  surf.h
file  surf_resource.h
file  surf_resource_lmm.h
file  surfxml_parse_values.h
file  trace_mgr.h
SimGrid-3.10/doc/html/navtreeindex1.js000640 007661 000620 00000045547 12242224150 020056 0ustar00gierschand000000 000000 var NAVTREEINDEX1 = { "group__TRACE__user__variables.html#ga35222cf7a7c43583b550c3a5ac12bda2":[9,2,2,5], "group__TRACE__user__variables.html#ga37278937e06f41f0a0b06b6b91bbdfa6":[9,2,2,31], "group__TRACE__user__variables.html#ga3aa9e4ecfa5e9f22cd4742bab032156d":[9,2,2,0], "group__TRACE__user__variables.html#ga3adacb71a4ab331c93efdf250f73cbfc":[9,2,2,14], "group__TRACE__user__variables.html#ga421836b9a1d435300ff777cd04b68f4c":[9,2,2,17], "group__TRACE__user__variables.html#ga4b07c188420bbc143deea8dcdce06642":[9,2,2,32], "group__TRACE__user__variables.html#ga5a521dffa1a5705e9e65d77053ef0cfa":[9,2,2,20], "group__TRACE__user__variables.html#ga650d08f8e0547ffe3d3c5a6a6ceebcdf":[9,2,2,11], "group__TRACE__user__variables.html#ga65a9ce22195518352da785b36527864d":[9,2,2,33], "group__TRACE__user__variables.html#ga6de804cf8760ca23a2c787850150e42c":[9,2,2,7], "group__TRACE__user__variables.html#ga8c4126bc2a48fe3fa811b9c0fc035914":[9,2,2,6], "group__TRACE__user__variables.html#ga8f2371c0b41d2e462a2b94d81be4e148":[9,2,2,2], "group__TRACE__user__variables.html#ga995ecd02343b09fd5ecdce8b8b1cd0d7":[9,2,2,38], "group__TRACE__user__variables.html#gaa0af1adaf2ee2e0ea3b045e8ef5c4edf":[9,2,2,28], "group__TRACE__user__variables.html#gaacaaa40fa93265cc87dc804edb6a61b3":[9,2,2,10], "group__TRACE__user__variables.html#gab6e7856a8181341e524cb4c9920c24ba":[9,2,2,15], "group__TRACE__user__variables.html#gab74f50cb9ed31f4436663acd34ed044a":[9,2,2,36], "group__TRACE__user__variables.html#gab93d0d4ffb907c4d4b43cdc53cbe4f8c":[9,2,2,26], "group__TRACE__user__variables.html#gaba9508562b4cbfbdc27904df5b913324":[9,2,2,1], "group__TRACE__user__variables.html#gabbc55f2a3e25e49248be7d9b71f15cb8":[9,2,2,21], "group__TRACE__user__variables.html#gacc421a6483570671a916a1d402add564":[9,2,2,35], "group__TRACE__user__variables.html#gaccafa87e0e58f2f3e282a7d23e56d792":[9,2,2,23], "group__TRACE__user__variables.html#gae0a8625485d9cffc5c12676b65cd959c":[9,2,2,12], "group__TRACE__user__variables.html#gae19a0f01ea6240ceaba534dab0f15919":[9,2,2,27], "group__TRACE__user__variables.html#gae5c66eb6918e75c5f38e06727d43e7bc":[9,2,2,34], "group__TRACE__user__variables.html#gae6b2b2b1f2ad80588d5b4eccb7d5ab6c":[9,2,2,25], "group__TRACE__user__variables.html#gae9ab3b84945d21bd06529d6705471d65":[9,2,2,16], "group__TRACE__user__variables.html#gafc3f5b621994a050372b53996fed3557":[9,2,2,3], "group__XBT__API.html":[9,1], "group__XBT__adt.html":[9,1,1], "group__XBT__cfg__decl.html":[9,1,0,5,1], "group__XBT__cfg__decl.html#ga25f767ddf162fcf5cf45c2aac58f47b8":[9,1,0,5,1,3], "group__XBT__cfg__decl.html#ga4080887ffe36fb58611ee70094c003be":[9,1,0,5,1,1], "group__XBT__cfg__decl.html#ga67592bfbe600c89f45f40ceeb7df2c9a":[9,1,0,5,1,5], "group__XBT__cfg__decl.html#ga9ef64a88e6fa46d78938b32247a29528":[9,1,0,5,1,6], "group__XBT__cfg__decl.html#gaae016e87dc6935ed51617bbea7b8aa6c":[9,1,0,5,1,2], "group__XBT__cfg__decl.html#gac679f68b23823dc08aceaefaf9b372da":[9,1,0,5,1,4], "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca35412ca92ec3591c76f5403810aed6f3":[9,1,0,5,1,2,1], "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca79bd0045369cbc55fe7191a28d31d168":[9,1,0,5,1,2,4], "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cab46f486cddae583964bd0667fabb269b":[9,1,0,5,1,2,3], "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cac8df732d454a4bc85379de2c154a737e":[9,1,0,5,1,2,2], "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6caf101f0c7af43525d4a07e9bcb5d3b7f2":[9,1,0,5,1,2,0], "group__XBT__cfg__get.html":[9,1,0,5,3], "group__XBT__cfg__get.html#ga0555ea640404cc5214c7243e6e91b070":[9,1,0,5,3,10], "group__XBT__cfg__get.html#ga0802bc4a5f9d6e418c1ff9bdefa1e782":[9,1,0,5,3,9], "group__XBT__cfg__get.html#ga09f8bb0889e37d084a28c43a86adb0c8":[9,1,0,5,3,3], "group__XBT__cfg__get.html#ga31012ed478ffd718fafac27b66f653b2":[9,1,0,5,3,1], "group__XBT__cfg__get.html#ga436a50804f44ad8d4cb7e3b4282c3cf4":[9,1,0,5,3,8], "group__XBT__cfg__get.html#ga6e8854c299ca293a8531f3ac477babdd":[9,1,0,5,3,2], "group__XBT__cfg__get.html#gab69701ad4dbc805b23573f0e4ac02a6f":[9,1,0,5,3,5], "group__XBT__cfg__get.html#gab893722f0ee3b17a6fe0ae7534f60d73":[9,1,0,5,3,7], "group__XBT__cfg__get.html#gad5690b3e30986f2b43e0fd0a92b3b553":[9,1,0,5,3,4], "group__XBT__cfg__get.html#gae59bb89c4d59bcc7a47193444369141f":[9,1,0,5,3,6], "group__XBT__cfg__get.html#gaf058b35acfe7f058412fece263b9bede":[9,1,0,5,3,0], "group__XBT__cfg__register.html":[9,1,0,5,2], "group__XBT__cfg__register.html#ga0dd096bfc41dc388b5d82a670dfe23f7":[9,1,0,5,2,2], "group__XBT__cfg__register.html#ga20967f829423faa8b91e35978ef46252":[9,1,0,5,2,3], "group__XBT__cfg__register.html#ga6c53f538a2901ceca585e075e43e3c3e":[9,1,0,5,2,4], "group__XBT__cfg__register.html#ga754d4928f875979d3fe3dadbb5c3d32e":[9,1,0,5,2,5], "group__XBT__cfg__register.html#gad60c5763f9eba3371840f7eb5eaccf6d":[9,1,0,5,2,0], "group__XBT__cfg__register.html#gaec318f1ce663340e84726e5eb88ae81b":[9,1,0,5,2,1], "group__XBT__cfg__use.html":[9,1,0,5,0], "group__XBT__cfg__use.html#ga10751dc480c2ea9b0c9637c68ed359e6":[9,1,0,5,0,12], "group__XBT__cfg__use.html#ga14463cfbdbd7d19e758e443ac96b7e70":[9,1,0,5,0,7], "group__XBT__cfg__use.html#ga304c927c166b217d29eee9e18cb1e969":[9,1,0,5,0,14], "group__XBT__cfg__use.html#ga3ec95e8fb08cc7dffdc32fd7cb05f679":[9,1,0,5,0,8], "group__XBT__cfg__use.html#ga495c3de5609e29eb4a5a2edaff1e9119":[9,1,0,5,0,19], "group__XBT__cfg__use.html#ga56c8db370b0a3ae4c638867a0e0911c0":[9,1,0,5,0,10], "group__XBT__cfg__use.html#ga593f941aa66b21104ebdaa2786a0265e":[9,1,0,5,0,4], "group__XBT__cfg__use.html#ga660807bb21d0d7a3a0ac9219e2330dbe":[9,1,0,5,0,5], "group__XBT__cfg__use.html#ga660f47d0af70382a502cee9734e32229":[9,1,0,5,0,3], "group__XBT__cfg__use.html#ga6b96677e59c03e920f616ef8f6f03db3":[9,1,0,5,0,17], "group__XBT__cfg__use.html#ga6dd959a8fc5ea496641f329423964681":[9,1,0,5,0,15], "group__XBT__cfg__use.html#ga7abcc7c8e0c839f5430ccc5bb04cd29b":[9,1,0,5,0,1], "group__XBT__cfg__use.html#ga81ecaccf6e2ae624866d9e4bd4b71927":[9,1,0,5,0,9], "group__XBT__cfg__use.html#gabefb42525b7f81c273a9e15ebc2fc401":[9,1,0,5,0,21], "group__XBT__cfg__use.html#gac5894d3947cb042db07d729ebfe064ca":[9,1,0,5,0,0], "group__XBT__cfg__use.html#gaca2fa14bf75f51960538227132d696d5":[9,1,0,5,0,16], "group__XBT__cfg__use.html#gad36ce933af452e3f74373b7a88b097bd":[9,1,0,5,0,2], "group__XBT__cfg__use.html#gaf3b2d88039707c69865da363c6a91fb9":[9,1,0,5,0,18], "group__XBT__cfg__use.html#gaf42b4fd31ad45646a03638ef32fc5a26":[9,1,0,5,0,6], "group__XBT__cfg__use.html#gaf90fa7699759834310e5fc90d4cf2594":[9,1,0,5,0,20], "group__XBT__cfg__use.html#gafa60b1f2d2e1351522f977cce3b54d99":[9,1,0,5,0,11], "group__XBT__cfg__use.html#gafbcf5ece0a77ed07d6571b940eb1bcf7":[9,1,0,5,0,13], "group__XBT__config.html":[9,1,0,5], "group__XBT__context.html":[9,1,2,7], "group__XBT__cunit.html":[9,1,0,7], "group__XBT__cunit.html#ga00e45218050b20e0874600bf8a093fca":[9,1,0,7,1], "group__XBT__cunit.html#ga04e70ec73d2366145a38eff836653ee6":[9,1,0,7,3], "group__XBT__cunit.html#ga15e0116c033c1125582021c76f407ea6":[9,1,0,7,4], "group__XBT__cunit.html#ga33c58870448aa6698fd8ceb02b5414a4":[9,1,0,7,2], "group__XBT__cunit.html#ga7b2f459569efbe7862537a2223374f24":[9,1,0,7,5], "group__XBT__cunit.html#gaaf7f17704d7f1b2070c69bbd4a22469e":[9,1,0,7,0], "group__XBT__cunit.html#gab1fe95862df7198fb9fc71f1fd031f5d":[9,1,0,7,7], "group__XBT__cunit.html#gab6fa2a7525ea09e047ebc849a36afac4":[9,1,0,7,6], "group__XBT__dd.html":[9,1,1,6], "group__XBT__dict.html":[9,1,1,1], "group__XBT__dict__basic.html":[9,1,1,1,1], "group__XBT__dict__basic.html#ga0fe854e3c13798e32ebc642c00be6ad4":[9,1,1,1,1,7], "group__XBT__dict__basic.html#ga16e3ad7d2a93d89b95582ad82d1ce100":[9,1,1,1,1,3], "group__XBT__dict__basic.html#ga38d0003fc16ce9d437c9cb1c7b2e4a8e":[9,1,1,1,1,9], "group__XBT__dict__basic.html#ga5167ca9336b1c9d5e2a3dacd6b702055":[9,1,1,1,1,0], "group__XBT__dict__basic.html#ga68fb97981b63d246769f4b6fbbcb3eaf":[9,1,1,1,1,12], "group__XBT__dict__basic.html#ga7d8b3282a0599ed922bbac9c0686e456":[9,1,1,1,1,10], "group__XBT__dict__basic.html#gaa8c1e5beb5655c030df76fbcce9c9bbc":[9,1,1,1,1,11], "group__XBT__dict__basic.html#gab3a92ff52f725fd7eff99ff619643272":[9,1,1,1,1,5], "group__XBT__dict__basic.html#gab67a60fbdab0a809e15e0db87a146584":[9,1,1,1,1,4], "group__XBT__dict__basic.html#gac0cf96e5e13da996aac831d8d10f0985":[9,1,1,1,1,8], "group__XBT__dict__basic.html#gac1398f8a025c0f22195e74f2bd5522fa":[9,1,1,1,1,2], "group__XBT__dict__basic.html#gac8befeb2dc3ba97fb0ff1d3da83f21fb":[9,1,1,1,1,6], "group__XBT__dict__basic.html#gadc5080181f23fa2802b17b0982d76115":[9,1,1,1,1,1], "group__XBT__dict__cons.html":[9,1,1,1,0], "group__XBT__dict__cons.html#ga35d2edf4086c13f0c096621aaf421c7d":[9,1,1,1,0,3], "group__XBT__dict__cons.html#ga3f03623cb96849ab40db9b9af25ac38c":[9,1,1,1,0,1], "group__XBT__dict__cons.html#ga79130ac36df5cbdc334a3424a92eff5d":[9,1,1,1,0,4], "group__XBT__dict__cons.html#ga99fe5eb49d3fa9f1f31fb6d519fb7197":[9,1,1,1,0,2], "group__XBT__dict__cons.html#gac60ea15fce6ea593be308de876712f04":[9,1,1,1,0,0], "group__XBT__dict__curs.html":[9,1,1,1,3], "group__XBT__dict__curs.html#ga0f0f7f26eef7dca0f3d837bac985a0ff":[9,1,1,1,3,4], "group__XBT__dict__curs.html#ga2ebcfc14c62baafab95b9c994a2e6012":[9,1,1,1,3,6], "group__XBT__dict__curs.html#ga3124aa46173fbf9fc703b748cebd4b70":[9,1,1,1,3,1], "group__XBT__dict__curs.html#ga5c29813d0de67603640f948b2d712209":[9,1,1,1,3,2], "group__XBT__dict__curs.html#ga714c4490d2187b042a6993c68e860fad":[9,1,1,1,3,7], "group__XBT__dict__curs.html#ga86b45796b83225553370f1ed2298bdba":[9,1,1,1,3,5], "group__XBT__dict__curs.html#ga88eb8699e8778f9d1c5821da0bab1849":[9,1,1,1,3,3], "group__XBT__dict__curs.html#ga9871423165388f7637dd67116b68044a":[9,1,1,1,3,9], "group__XBT__dict__curs.html#gad8ef9a04e0c50a3ed9a2dfa7ca36d599":[9,1,1,1,3,10], "group__XBT__dict__curs.html#gaed25ac933321fa3837877f2210979db7":[9,1,1,1,3,8], "group__XBT__dict__nnul.html":[9,1,1,1,2], "group__XBT__dict__nnul.html#ga7e5810ce5387ee78e25bb92c206deacd":[9,1,1,1,2,1], "group__XBT__dict__nnul.html#gabfcc7b250b01f46a4397946a7a104fd1":[9,1,1,1,2,2], "group__XBT__dict__nnul.html#gac10a4d2fd3a86576c1be1b61811317d8":[9,1,1,1,2,0], "group__XBT__dict__nnul.html#gad36d0be75e939e85ee17a9756332b6c4":[9,1,1,1,2,3], "group__XBT__dynar.html":[9,1,1,0], "group__XBT__dynar__array.html":[9,1,1,0,1], "group__XBT__dynar__array.html#ga0ec08fdba0bad2c1ef0e07269564edcd":[9,1,1,0,1,6], "group__XBT__dynar__array.html#ga136826efe107769033d82e9d162ff65d":[9,1,1,0,1,10], "group__XBT__dynar__array.html#ga145c591bf6e4e58edaeeda85e639ff8e":[9,1,1,0,1,1], "group__XBT__dynar__array.html#ga21d02c5fc8289c0bfc6c7d57222bcf90":[9,1,1,0,1,0], "group__XBT__dynar__array.html#ga22ccf4f0b47dd4a187af2e0a05abd323":[9,1,1,0,1,2], "group__XBT__dynar__array.html#ga26fe1c942bfecc8261d3fd9bc4df9bab":[9,1,1,0,1,3], "group__XBT__dynar__array.html#ga2e5d288ac2ec53692fb0d56cbb213411":[9,1,1,0,1,5], "group__XBT__dynar__array.html#ga32a7eaf157e28533482cda7d84460705":[9,1,1,0,1,4], "group__XBT__dynar__array.html#ga666d4ca5510ffa9f2cc9a1463c19e935":[9,1,1,0,1,9], "group__XBT__dynar__array.html#ga8fb5745b688cae53556f69b8e728ef70":[9,1,1,0,1,11], "group__XBT__dynar__array.html#gaa1f2f12b574997619e36d46ac747f880":[9,1,1,0,1,8], "group__XBT__dynar__array.html#gafff87cf8f67e2cc57e783a7c740a476e":[9,1,1,0,1,7], "group__XBT__dynar__cons.html":[9,1,1,0,0], "group__XBT__dynar__cons.html#ga69ab371f667dfe5aa51fb612b9afaca5":[9,1,1,0,0,1], "group__XBT__dynar__cons.html#ga7bc3c4dffd7740c9c1ea129d1167c0bc":[9,1,1,0,0,4], "group__XBT__dynar__cons.html#ga8c1a192e8119147d92eaf873a2861fc0":[9,1,1,0,0,5], "group__XBT__dynar__cons.html#ga9b7808eb7a87dcf331a467f323ae16a6":[9,1,1,0,0,2], "group__XBT__dynar__cons.html#gac826571988d2b63ae225e5c62ecdbc79":[9,1,1,0,0,0], "group__XBT__dynar__cons.html#gacab2aaa46863a53beaa1637bd41995aa":[9,1,1,0,0,3], "group__XBT__dynar__ctn.html":[9,1,1,0,4], "group__XBT__dynar__ctn.html#ga06afc0831b210b5323e61a9a217d6158":[9,1,1,0,4,1], "group__XBT__dynar__ctn.html#ga35272457aa299d326977767a00e01ffe":[9,1,1,0,4,2], "group__XBT__dynar__ctn.html#ga4f1ef94eae8a2060697a9674d46f0c2f":[9,1,1,0,4,3], "group__XBT__dynar__ctn.html#ga7cee77666f148fc987bbdeca3d10bdc2":[9,1,1,0,4,0], "group__XBT__dynar__cursor.html":[9,1,1,0,6], "group__XBT__dynar__cursor.html#ga315906139864e84a34aa5610ba0be1fc":[9,1,1,0,6,0], "group__XBT__dynar__cursor.html#ga478b49fe9e8280b4c73b9ccd208a4f78":[9,1,1,0,6,1], "group__XBT__dynar__misc.html":[9,1,1,0,2], "group__XBT__dynar__misc.html#ga3beec123eb77ceda5b750f6f2ca48e18":[9,1,1,0,2,0], "group__XBT__dynar__misc.html#ga57aab83ad4ff1a1df5a1c293627c41d8":[9,1,1,0,2,1], "group__XBT__dynar__misc.html#ga92e52b3898cb02ad47244b88ab7895e4":[9,1,1,0,2,3], "group__XBT__dynar__misc.html#gadbe6a462084ca281bab5ac3a1585097e":[9,1,1,0,2,2], "group__XBT__dynar__perl.html":[9,1,1,0,3], "group__XBT__dynar__perl.html#ga02bb7b95aaa0fe03c26222f65566e744":[9,1,1,0,3,4], "group__XBT__dynar__perl.html#ga2966d02b350ef985447c4053c258a1a0":[9,1,1,0,3,3], "group__XBT__dynar__perl.html#ga3499315d48944f3bfaf6aeea1e2c75e8":[9,1,1,0,3,2], "group__XBT__dynar__perl.html#ga37d2b11c522e02ede79a12a89575ceb1":[9,1,1,0,3,1], "group__XBT__dynar__perl.html#gac89da4c2c302218759c7fe477d8eacc0":[9,1,1,0,3,0], "group__XBT__dynar__speed.html":[9,1,1,0,5], "group__XBT__dynar__speed.html#ga209a34611a295f0e3516536e753893c3":[9,1,1,0,5,3], "group__XBT__dynar__speed.html#ga50d763465a98678a3e83afa6b5ecd243":[9,1,1,0,5,5], "group__XBT__dynar__speed.html#ga5604d34153e9c96ac193245757f63085":[9,1,1,0,5,0], "group__XBT__dynar__speed.html#ga767cbdbaddd71fb98140eb78309b5739":[9,1,1,0,5,4], "group__XBT__dynar__speed.html#gab6dd8b8802c7ad0b12a81ecd806370cc":[9,1,1,0,5,6], "group__XBT__dynar__speed.html#gac056cfe5092e40327377547abd9995ee":[9,1,1,0,5,2], "group__XBT__dynar__speed.html#gafee03470eed0dc5e8eb240288ba8b11b":[9,1,1,0,5,1], "group__XBT__error.html":[9,1,0,4], "group__XBT__error.html#ga9bf4916de59dbf2c5bc790e85df7c189":[9,1,0,4,2], "group__XBT__error.html#gaca8531c4c752e94c638c030c80528021":[9,1,0,4,1], "group__XBT__error.html#gadd837b8bf67480aea409a8580072f0be":[9,1,0,4,0], "group__XBT__ex.html":[9,1,0,2], "group__XBT__ex.html#ga070f91546c08b1e31c1d7184c3c9b345":[9,1,0,2,4], "group__XBT__ex.html#ga241d764fad0bff69d31c12b3066c276c":[9,1,0,2,8], "group__XBT__ex.html#ga24540d57ce6a4e72e2c2150327972fc6":[9,1,0,2,2], "group__XBT__ex.html#ga26394bf7f63640059e73dc55b5911a9b":[9,1,0,2,5], "group__XBT__ex.html#ga36813e215c49af92c8a62dd8286d6421":[9,1,0,2,13], "group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c":[9,1,0,2,15], "group__XBT__ex.html#ga4826ac71c1c4d2ec13eeac8320898dc9":[9,1,0,2,9], "group__XBT__ex.html#ga6752f914268fb60019f9cf94a34ad28a":[9,1,0,2,17], "group__XBT__ex.html#ga9a7c9f33be5ab51ff734142b07178553":[9,1,0,2,12], "group__XBT__ex.html#gaa45fec59aa57056784554a7f998f0854":[9,1,0,2,10], "group__XBT__ex.html#gab3271e393133e395129cc74272f9fae2":[9,1,0,2,3], "group__XBT__ex.html#gad2746371528bdf15c3910b7bf217dac0":[9,1,0,2,1], "group__XBT__ex.html#gad584839e617fbfe728225fc7bcfcda9f":[9,1,0,2,11], "group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f":[9,1,0,2,14], "group__XBT__ex.html#gae18641b6be3a88a74eb003978399fe90":[9,1,0,2,6], "group__XBT__ex.html#gaea1e39d44bcaaebb91a34f6ef053c60c":[9,1,0,2,16], "group__XBT__ex.html#gaf104c05a68884bf85630ef40ca8ae774":[9,1,0,2,7], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a0cc55923f6bdf388d75ac17681055815":[9,1,0,2,10,5], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1486a4899ea0336633c33a77c636eea8":[9,1,0,2,10,10], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1d6d5b33334f960325a65e5c021aca16":[9,1,0,2,10,1], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a288db5d5a882653cc5466f62369ab676":[9,1,0,2,10,11], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a2a966e9e887d3ab79628272781200439":[9,1,0,2,10,4], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a2d90a8bed8343426b9732511aa2cb34c":[9,1,0,2,10,9], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a38ca7f2d055a68295cbd837470325f46":[9,1,0,2,10,0], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a7867239bb18a1f74d007fd1cc5f2202c":[9,1,0,2,10,12], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a78725e8318a373565146a9c29698eb30":[9,1,0,2,10,8], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854aad84e78423b0ba9b3df634f564a38586":[9,1,0,2,10,3], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854acbb4310f650e6fddbbad783293eff676":[9,1,0,2,10,7], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854ae2954a4c5a79d65f9f68675fea93376b":[9,1,0,2,10,2], "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854afa15abb01e5f46363458529588f0d871":[9,1,0,2,10,6], "group__XBT__fifo.html":[9,1,1,3], "group__XBT__fifo__cons.html":[9,1,1,3,0], "group__XBT__fifo__cons.html#ga028b8b135de99c5526269b5c124093cf":[9,1,1,3,0,4], "group__XBT__fifo__cons.html#ga24efbdc1db204e1a628958ce7509a312":[9,1,1,3,0,1], "group__XBT__fifo__cons.html#ga2797ae0ae47b096ffdd99fbd60d8402d":[9,1,1,3,0,2], "group__XBT__fifo__cons.html#ga58e96f4a3637f7ff6bb1a9f53e7865c8":[9,1,1,3,0,0], "group__XBT__fifo__cons.html#ga7e4e0a12b0bb5a0cc761e926a6ec8ea7":[9,1,1,3,0,3], "group__XBT__fifo__direct.html":[9,1,1,3,2], "group__XBT__fifo__direct.html#ga0662ae632f8f72753074f0cf234f8c46":[9,1,1,3,2,10], "group__XBT__fifo__direct.html#ga32cfb8161a224dafafbf3f667d8257aa":[9,1,1,3,2,6], "group__XBT__fifo__direct.html#ga3a95882cc4858a10fa29216c939eb1b4":[9,1,1,3,2,2], "group__XBT__fifo__direct.html#ga46dbde2e3359af8a79f2d4da7582d18c":[9,1,1,3,2,8], "group__XBT__fifo__direct.html#ga4bfc376902e2e15da4acb31c2ac77d84":[9,1,1,3,2,4], "group__XBT__fifo__direct.html#ga601af16f78f6f1753477ce8e91eece01":[9,1,1,3,2,3], "group__XBT__fifo__direct.html#ga6fde465c7d19469ee07e28d7ae5f611b":[9,1,1,3,2,14], "group__XBT__fifo__direct.html#ga7062f0aae3a97fa72fcf86673675d434":[9,1,1,3,2,0], "group__XBT__fifo__direct.html#ga8cbb245158703f78cab3d076804eaa61":[9,1,1,3,2,13], "group__XBT__fifo__direct.html#gab5d6b760390ffc095f35f50e5bfd890a":[9,1,1,3,2,7], "group__XBT__fifo__direct.html#gabd68f9b13a5e4984224760e9e5afed3b":[9,1,1,3,2,11], "group__XBT__fifo__direct.html#gac47a383a08e9c08cc4dd5bf29cd50994":[9,1,1,3,2,15], "group__XBT__fifo__direct.html#gad9f577f95ac147ed876083d60166a662":[9,1,1,3,2,1], "group__XBT__fifo__direct.html#gadde4755e50e84bf3235182227cdc1580":[9,1,1,3,2,12], "group__XBT__fifo__direct.html#gae1266d2dc81fc9d46334500682756b93":[9,1,1,3,2,5], "group__XBT__fifo__direct.html#gafae46252cee20c382f9ce4f2e2573135":[9,1,1,3,2,9], "group__XBT__fifo__misc.html":[9,1,1,3,3], "group__XBT__fifo__misc.html#ga0a85e5e8e1e0774885f73614f3a40770":[9,1,1,3,3,0], "group__XBT__fifo__misc.html#ga9fc2652fb4c1d80adbf4f8e7267846fd":[9,1,1,3,3,1], "group__XBT__fifo__perl.html":[9,1,1,3,1], "group__XBT__fifo__perl.html#ga1010933a447b08cbc125304c66587da7":[9,1,1,3,1,6], "group__XBT__fifo__perl.html#ga29753ca3f59d8e810bcee69304cd8b42":[9,1,1,3,1,5], "group__XBT__fifo__perl.html#ga62606f494627c7be494082bb2a239f7a":[9,1,1,3,1,0], "group__XBT__fifo__perl.html#ga79a99aa3de3fb2d15836fffca5e28c83":[9,1,1,3,1,3], "group__XBT__fifo__perl.html#gaa8ae3369665727b54c3c3d0f5c1e91be":[9,1,1,3,1,1], "group__XBT__fifo__perl.html#gad165b0eb7ea833480776eb02062da45f":[9,1,1,3,1,2] }; SimGrid-3.10/doc/html/group__msg__deprecated__functions.js000640 007661 000620 00000002234 12242224150 024172 0ustar00gierschand000000 000000 var group__msg__deprecated__functions = [ [ "MSG_get_errno", "group__msg__deprecated__functions.html#ga4abdb2c7da1b9d89187ce51211db3f25", null ], [ "MSG_task_put", "group__msg__deprecated__functions.html#ga3e310a2bf7efc32d3aac8dad2eacd71d", null ], [ "MSG_task_put_bounded", "group__msg__deprecated__functions.html#ga6e5db824a4317c3a1279eeaa79b6511d", null ], [ "MSG_task_put_with_timeout", "group__msg__deprecated__functions.html#gac979ed68d1b602dd04169cbed23828a9", null ], [ "MSG_task_probe_from", "group__msg__deprecated__functions.html#ga99bfe9edc985c6d2cce3947f81780660", null ], [ "MSG_task_Iprobe", "group__msg__deprecated__functions.html#gae72af17e16cda4efcfad301a4170accd", null ], [ "MSG_task_probe_from_host", "group__msg__deprecated__functions.html#gaa44c47c7ed2f78243eca7379437e1cc0", null ], [ "MSG_task_get_from_host", "group__msg__deprecated__functions.html#gad09e64171486db6b0004653125313971", null ], [ "MSG_task_get", "group__msg__deprecated__functions.html#ga1ae6d2a80ca4f35d7a19215f409ce00f", null ], [ "MSG_task_get_with_timeout", "group__msg__deprecated__functions.html#ga48bf7268e2f079ba1ad51a00209028cd", null ] ];SimGrid-3.10/doc/html/ftv2link.png000640 007661 000620 00000001352 12242224150 017172 0ustar00gierschand000000 000000 PNG  IHDR}\IDATxMOS[sa?-XZ(PD4 AWbu`b 77wHFCԁ/`voAPqP@ 980 +y^Z9SW\83g3'Nçl_bpV"ֆXd]3xM[1W *PGz/Eg{ aoV:这1$RW,@56-,m/蹖 r5T*S(Vf89u գwa=<{ҡUr+dDF$`zNܮ0Q3~_^N=vpTLT}kqm<?ZhX_ݥ[) `ga_*2`'=F2EP l=8Wv%THqɿ<"GxH{#֫aJmKsVءM^ T ݛr߽m_?Wİ#uIENDB`SimGrid-3.10/doc/html/group__msg__simulation.js000640 007661 000620 00000003576 12242224150 022041 0ustar00gierschand000000 000000 var group__msg__simulation = [ [ "MSG_init", "group__msg__simulation.html#gab394a1043a25ec62f498c097d805f0a1", null ], [ "msg_error_t", "group__msg__simulation.html#gaf79b56c0bd3b78b539b0cb4c12e56425", [ [ "MSG_OK", "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a7db209a18c6374183567534787dccc1b", null ], [ "MSG_TIMEOUT", "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a2f90300a07b9b18285e1897b1fabfd06", null ], [ "MSG_TRANSFER_FAILURE", "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a373b92dc6a498dea6ab408fb1670386f", null ], [ "MSG_HOST_FAILURE", "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a69965b44e0393c3ba81482bb975c55e5", null ], [ "MSG_TASK_CANCELED", "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a115b6882d73de65d775aa8c7f1abaf70", null ] ] ], [ "MSG_launch_application", "group__msg__simulation.html#ga012d470de7974da7262d0020e00117e9", null ], [ "MSG_function_register", "group__msg__simulation.html#ga21e94a4e7b26dea140b0c71a2a4f4352", null ], [ "MSG_function_register_default", "group__msg__simulation.html#ga698d00aec4b3d7f8cf90c4d1a4595c9c", null ], [ "MSG_get_registered_function", "group__msg__simulation.html#ga61b2e271c59ff50d38de7a0f9858b4b1", null ], [ "MSG_create_environment", "group__msg__simulation.html#gae08e089d52a2928680e0957e7152d79d", null ], [ "MSG_init_nocheck", "group__msg__simulation.html#ga0dbc6fabf0391c4f193b33befeb8a22e", null ], [ "MSG_main", "group__msg__simulation.html#ga638072e92edcf9c5aed498daefed010c", null ], [ "MSG_config", "group__msg__simulation.html#ga35037b57281f860b92ed7704d37de78f", null ], [ "MSG_process_killall", "group__msg__simulation.html#ga0dedd7962cd7d916406ef45c471f6134", null ], [ "MSG_get_clock", "group__msg__simulation.html#gacfeb7fa281abd0ff74b0591937cbb574", null ] ];SimGrid-3.10/doc/html/group__XBT__synchro.html000640 007661 000620 00000051042 12242224150 021530 0ustar00gierschand000000 000000 SimGrid: Synchro stuff
SimGrid  3.10
Versatile Simulation of Distributed Systems

XBT synchronization tools. More...

Typedefs

typedef struct s_xbt_thread_ * xbt_thread_t
 Thread data type (opaque object)
typedef struct s_xbt_mutex_ * xbt_mutex_t
 Thread mutex data type (opaque object)
typedef struct s_xbt_cond_ * xbt_cond_t
 Thread condition data type (opaque object)

Functions

xbt_thread_t xbt_thread_create (const char *name, void_f_pvoid_t start_routine, void *param, int joinable)
 Creates a new thread.
xbt_thread_t xbt_thread_self (void)
 Get a reference to the currently running thread.
const char * xbt_thread_name (xbt_thread_t t)
 Get the name of a given thread.
const char * xbt_thread_self_name (void)
 Get a reference to the name of the currently running thread.
void xbt_thread_join (xbt_thread_t thread)
 Wait for the termination of the given thread, and free it (ie the XBT wrapper around it, the OS frees the rest)
void xbt_thread_cancel (xbt_thread_t thread)
 Ends the life of the poor victim (not always working if it's computing, but working if it's blocked in the OS)
void xbt_thread_exit (void)
 commit suicide
void xbt_thread_yield (void)
 the current thread passes control to any possible thread wanting it
xbt_mutex_t xbt_mutex_init (void)
 Creates a new mutex variable.
void xbt_mutex_acquire (xbt_mutex_t mutex)
 Blocks onto the given mutex variable.
void xbt_mutex_release (xbt_mutex_t mutex)
 Releases the given mutex variable.
void xbt_mutex_destroy (xbt_mutex_t mutex)
 Destroyes the given mutex variable.
xbt_cond_t xbt_cond_init (void)
 Creates a condition variable.
void xbt_cond_wait (xbt_cond_t cond, xbt_mutex_t mutex)
 Blocks onto the given condition variable.
void xbt_cond_timedwait (xbt_cond_t cond, xbt_mutex_t mutex, double delay)
 Blocks onto the given condition variable, but only for the given amount of time. a timeout exception is raised if it was impossible to acquire it in the given time frame.
void xbt_cond_signal (xbt_cond_t cond)
 Signals the given mutex variable.
void xbt_cond_broadcast (xbt_cond_t cond)
 Broadcasts the given mutex variable.
void xbt_cond_destroy (xbt_cond_t cond)
 Destroys the given mutex variable.

Detailed Description

XBT synchronization tools.

This section describes the XBT synchronization tools. It defines types and functions very close to the pthread API, but widly usable. When used from the simulator, you will lock simulated processes as expected. When used from GRAS programs compiled for in-situ execution, you have synchronization mecanism portable to windows and UNIX. Nice, isn't it?

Function Documentation

xbt_thread_t xbt_thread_create ( const char *  name,
void_f_pvoid_t  start_routine,
void *  param,
int  joinable 
)

Creates a new thread.

Parameters
namethe name used in the logs for the newly created thread
start_routinefunction to run
paramparameter to pass to the function to run
joinablewhether the new thread should be started joinable or detached
SimGrid-3.10/doc/html/group__msg__storage__management.js000640 007661 000620 00000002255 12242224150 023645 0ustar00gierschand000000 000000 var group__msg__storage__management = [ [ "msg_storage_t", "group__msg__storage__management.html#ga13125793869304d581f31a0beb3e143d", null ], [ "MSG_storage_get_name", "group__msg__storage__management.html#ga4e3dbb8ae3bda7ba80df6c32c4816926", null ], [ "MSG_storage_get_free_size", "group__msg__storage__management.html#gab65b4a69185c6e80ed1da21012c7f100", null ], [ "MSG_storage_get_used_size", "group__msg__storage__management.html#gae0d57e843712319835f31fcf8c23894b", null ], [ "MSG_storage_get_properties", "group__msg__storage__management.html#ga28017dad8a2c6f1fe10b52b208d4a36e", null ], [ "MSG_storage_set_property_value", "group__msg__storage__management.html#gab104363d9be84030d4e301e169e8cd6b", null ], [ "MSG_storage_get_by_name", "group__msg__storage__management.html#ga546b28d8dcd4f9b9f9206fa49c97fb23", null ], [ "MSG_storages_as_dynar", "group__msg__storage__management.html#ga3d0280ddcf0026cee8837d30eebb6c90", null ], [ "MSG_storage_set_data", "group__msg__storage__management.html#ga6355cbf57e26d99c0ba021b8ba97514f", null ], [ "MSG_storage_get_content", "group__msg__storage__management.html#gab542d642be87d52dd647b77ea3f44b74", null ] ];SimGrid-3.10/doc/html/structs__smx__action.js000640 007661 000620 00000006346 12242224150 021524 0ustar00gierschand000000 000000 var structs__smx__action = [ [ "type", "structs__smx__action.html#adbe1334915698611f64437406eca35a3", null ], [ "state", "structs__smx__action.html#a5b8bdd2c72e768d642aebeaa6df4276a", null ], [ "name", "structs__smx__action.html#ada727104cd7f81c953efd15ecc057a3a", null ], [ "simcalls", "structs__smx__action.html#add730a2468a5c91e34523b523abcf836", null ], [ "host", "structs__smx__action.html#aef8d938a6c347ef1055a4902e157d915", null ], [ "surf_exec", "structs__smx__action.html#a2172274c1c66e1def35e2ea1e92767e1", null ], [ "execution", "structs__smx__action.html#a8eb39fce0e7d83dd2a49ec83fabf127a", null ], [ "type", "structs__smx__action.html#aaefa503695d212ef3976d2d4e5625682", null ], [ "rdv", "structs__smx__action.html#a04cebb4b3eab15379c00664e7515b33e", null ], [ "refcount", "structs__smx__action.html#acdc83a60994ef95e762402b9fb0bb9a6", null ], [ "detached", "structs__smx__action.html#a40cbe396b2e95ecb6d8b6bed8a9a6eff", null ], [ "clean_fun", "structs__smx__action.html#a04e7bb773850023e00ea1b2d07ed9a21", null ], [ "match_fun", "structs__smx__action.html#a6cba1b100619f5d2c70c5ed6c0937c8e", null ], [ "surf_comm", "structs__smx__action.html#a0710f44f3df89aa88416304ee5402c9f", null ], [ "src_timeout", "structs__smx__action.html#a5139e5ee5d5856f07b50feb52c9a56c1", null ], [ "dst_timeout", "structs__smx__action.html#a5749e1146d0ca6f3f1f3b0922c4de42e", null ], [ "src_proc", "structs__smx__action.html#a3f1e2d2380c325fbeb0b009dff018836", null ], [ "dst_proc", "structs__smx__action.html#a29290b47885791b92daa8afa6b5ec8e4", null ], [ "rate", "structs__smx__action.html#af8795e57e1e85bb287a3861e569a781b", null ], [ "task_size", "structs__smx__action.html#ad0f60b06c697e8c93b7b458fe031f089", null ], [ "src_buff", "structs__smx__action.html#a5e467c36f49b88a01e144a697abae21e", null ], [ "dst_buff", "structs__smx__action.html#ad224157a3eabd084d0c524b4b37ab253", null ], [ "src_buff_size", "structs__smx__action.html#a9291734e6a1d2d6c47768af8e13a660e", null ], [ "dst_buff_size", "structs__smx__action.html#a064d0ab8f80703db50bc41d02b3f7406", null ], [ "copied", "structs__smx__action.html#a1e22b6be524ad9e6de2896a92ced357f", null ], [ "src_data", "structs__smx__action.html#aaab52849c5697ccfdfa3a2e78bf76a8a", null ], [ "dst_data", "structs__smx__action.html#a9d783c63e2b2537bc0a6c1ce6d845dbe", null ], [ "comm", "structs__smx__action.html#a830b9202e17bed7d8cf622a9b34d6d1a", null ], [ "surf_sleep", "structs__smx__action.html#ae54e547f38f079df9b24303e471e136d", null ], [ "sleep", "structs__smx__action.html#a35facdc98093ba27ccfe45a03250e8e9", null ], [ "sleep", "structs__smx__action.html#a33df82bccecd73c9e702297394dea91f", null ], [ "synchro", "structs__smx__action.html#a973deae94a68b113294ad562d114f2e8", null ], [ "surf_io", "structs__smx__action.html#a184f451618f5919c93d84d98da6b5336", null ], [ "io", "structs__smx__action.html#ac864ca245143535c3038546d862089fd", null ], [ "surf_new_api", "structs__smx__action.html#acbae01c837b320edd55a3924e3a80254", null ], [ "new_api", "structs__smx__action.html#a0a454ca7e10860c00fe058cf5b21453d", null ], [ "category", "structs__smx__action.html#a1d7dfa4787234d18e27674960e4e6874", null ] ];SimGrid-3.10/doc/html/simgrid_logo_win.bmp000664 007661 000620 00000062332 12242224150 020773 0ustar00gierschand000000 000000 BMd6(9d  ĩҾкϹϸٍ\Y\PNPWTV}~514̙ SQRigiת  EBDxuwԧϸ>;=?<>tqs WSV~GDF@=?FBEtqsnkmolnolnnlmljkhfhdbchfh-),   YWX  ~ KIK  NKMroqpmopmoplonkmkhja_awsvϸ-),   =:<625   =:<     VSUecd!!JGIꃁ mlm*')EBDvtv ! <9<놄dbcϸ|y{ywx  FBE     VSUwuvifijgiljl݇^[]WTVϸGCF      VSUomo`^_usuecd񑏑   #"ϸ       VSUqnp_]_wuvfbe'#&HDFϸ      {xz  VSUpmo慂\Y[}fdePMOϸ~|}     heg  VSUomo܀~XVW~fdefdfϸ  |z{ VSU*')  VSUolnցURTfdeebdϸoln  hfg'$' EBD\Y\   ZVY  VSUomnع^[^URUҼzxzԔfdeebdϸ   geg URT302 302  VSUoln  JGIebdLIL-),ĵdacfdeebdϸ&"% ROQ DAC? SimGrid: VMs
SimGrid  3.10
Versatile Simulation of Distributed Systems

This section describes the interface created to mimic IaaS clouds. More...

Functions

msg_vm_t MSG_vm_start (msg_host_t location, const char *name, int coreAmount)
 Opaque type describing a Virtual Machine.All this is highly experimental and the interface will probably change in the future. Please don't depend on this yet (although testing is welcomed if you feel so). Usual lack of guaranty of any kind applies here, and is even increased.
xbt_dynar_t MSG_vms_as_dynar (void)
 Returns a newly constructed dynar containing all existing VMs in the system.Don't forget to free the dynar after use.
int MSG_vm_is_suspended (msg_vm_t vm)
 Returns whether the given VM is currently suspended.
int MSG_vm_is_running (msg_vm_t vm)
 Returns whether the given VM is currently running.
void MSG_vm_bind (msg_vm_t vm, msg_process_t process)
 Add the given process into the VM.Afterward, when the VM is migrated or suspended or whatever, the process will have the corresponding handling, too.
void MSG_vm_unbind (msg_vm_t vm, msg_process_t process)
 Removes the given process from the given VM, and kill itWill raise a not_found exception if the process were not bound to that VM.
void MSG_vm_migrate (msg_vm_t vm, msg_host_t destination)
 Immediately change the host on which all processes are running.No migration cost occurs. If you want to simulate this too, you want to use a MSG_task_send() before or after, depending on whether you want to do cold or hot migration.
void MSG_vm_suspend (msg_vm_t vm)
 Immediately suspend the execution of all processes within the given VM.No suspension cost occurs. If you want to simulate this too, you want to use a MSG_file_write() before or after, depending on the exact semantic of VM suspend to you.
void MSG_vm_resume (msg_vm_t vm)
 Immediately resumes the execution of all processes within the given VM.No resume cost occurs. If you want to simulate this too, you want to use a MSG_file_read() before or after, depending on the exact semantic of VM resume to you.
void MSG_vm_shutdown (msg_vm_t vm)
 Immediately kills all processes within the given VM. Any memory that they allocated will be leaked.No extra delay occurs. If you want to simulate this too, you want to use a MSG_process_sleep() or something. I'm not quite sure.
void MSG_vm_reboot (msg_vm_t vm)
 Reboot the VM, restarting all the processes in it.
void MSG_vm_destroy (msg_vm_t vm)
 Destroy a msg_vm_t.

Detailed Description

This section describes the interface created to mimic IaaS clouds.

With it, you can create virtual machines to put your processes into, and interact directly with the VMs to manage groups of processes.

This interface is highly experimental at this point. Testing is welcomed, but do not expect too much of it right now. Even the interfaces may be changed in future releases of SimGrid (although things are expected to stabilize nicely before SimGrid v3.8). There is no guaranty on the rest of SimGrid, and there is less than that on this part.

Function Documentation

msg_vm_t MSG_vm_start ( msg_host_t  location,
const char *  name,
int  coreAmount 
)

Opaque type describing a Virtual Machine.All this is highly experimental and the interface will probably change in the future. Please don't depend on this yet (although testing is welcomed if you feel so). Usual lack of guaranty of any kind applies here, and is even increased.

Create a new (empty) VMs.

void MSG_vm_bind ( msg_vm_t  vm,
msg_process_t  process 
)

Add the given process into the VM.Afterward, when the VM is migrated or suspended or whatever, the process will have the corresponding handling, too.

SimGrid-3.10/doc/html/win_install_03.png000664 007661 000620 00000046206 12242224150 020275 0ustar00gierschand000000 000000 PNG  IHDR]zsRGBbKGD pHYs  tIME '6 IDATxw;A(RĂ6 3Ѩ$DE&c7Ēbl(A("Jvw\o;mevooo92wg&~οe@IM v؅/"@DDi.vR[愞ZG[ #kVla=+IvْPO$6"/&QSUs&C8\MM8P@ٞ|-!]=# 6EAR IBB4!l6q%d Ea'ʰ]f;\z+QO}jl [¦@ ^Mti\2[8\-MԗcǮ&|@~$dH';&  F߻n&(P,poł'" WRFI@ ̽{x[gd$Y$EAPt,QcL1OwFlxt`NBT,]Ke*_tRϝ. SE թH>BZ$;pUޚ6۩]Fj>]Ih*…МMR߄V*F.A\МN81 5pi3TMY> d'lU{ZvK~-."g5.ҁ&RTYiѓ-5UpNh@cJq͹}@<;vH)FIHjHK#5Hz.Ķ]u34 z=,,ȂT@U^nM=St: Ԉ}~3f't5yKޤ}WPmot%3c v{UMwz$uM2؄&VRB1"HHEH،ZRϺ HyrN@B@mҘ# 4(f}ڸYn nz+](hBB Bjj-9( PਭEZQHCC^jssr6gQ>T}H#%!訚"nv*zjФo R=viu5?^a, t4tB:]zܥ[R3C-wlK}9L.gp׷vo |yi`l[/=n76aޢNeG+[nF_ z1%ٙvl5u.,O[|8.D< ZTP<{Hu4KBB5k4\f' 7Vzhh߄46TMo 0pC7{^4BSUì >iּ p4CQlשng8coCV_-y-࢙:rw##͆ Nힰ+MF 6.Y'ᒳz[ӯ7ǿ.'ֹjtkpwkRwkRx\6Bk4 n"Hkƻ^'C/z:@^1@ۗ?btS=xgc&_cћS OscQ>ZAb-K(t됅hgӮq"#͆wn1?wܘu^kZqJe'k=߫垷z|U|w -a;}"=II=j9K h%=j{"X@g@qd5"!o_Eެgw-A{4OCw 瀂 ؓSQ(45^Տ3O n}򛖋n`F4CU%e'8alV5ꞌXi6XI F I ͻmORSdeNul~3NCF KNVCMA (ۀnIqJ^*C8,>HID1u?:fo'lz 7E̥ЄMy- kmLMoH(pk6㱦Gi~{ć &)-zgUT] )%R3Pwgxaզ:vatdpԀt$|޷K[|oLϓ("_M!HL{Zϳ3 ?<|c=*kԀ=8j@:3A@ϗg&Qj `7M3;Yj\8?Hfa$f鑪)F u33+S_7Kw7y^~ wSiꕕRo+=zr^oŸ+AbWx,W kI=E{5t.w իzJ}  {B,N$gG@R%4gےpw.-M3xɳ赃q3+'t$}T%:!i) >\Qу>Cg<>@ֽX~ԫeǔ X.xg|Yʫ]- MʂK蕗ZP=]KC]衩HUB.Ô3s(6!arl^z \jмzPDوtKv1n_NR@JaW~59Eb0SH޸7Ώxc={r/hĹϡ8 nn>OS#ϾE4>Ǯ++换x+}N 흂N˃I׸dmm/&pI&#a4#,%qb_^yod̞-x u8LtϱæwY/wb`d\vZ^ '!iP{nH Tֹ5A"t tVIExsb\Nx޷nֻ.sCmAxg}< H =F߽_[޼i~Q{||#}j{מ/l6@-]>ų^v44ЇãZiU7oƖ- |U~{9aʭuS0vPuO 8@3}&𖞟-aev[5~ vY."..M@ћ߸#AnsO~u5JHt5ky5Թϥ8tPv_N1#pwA7R[` /Xiqᅬ{ְ^1$۠9Tӷ[^[޸/ӪJwohAKC{ %I`4/nB~zl@'"kkrWK*ޒ5Q&̀Pޅ7Q~<0+܍}yNmU̍ؽn*o>/ Fk^@hF߿{z\HMoڹlь^}h [튻ŮXuByC{-1W2Nƈ)ElU,^WkviJmFCr6Eb$ywZK5]pj3r2h\Hp j-_rw_OP #*Y@c=ffU잖xIkj*,::ƭ_7  [ "]Kzk~W1;yd*V~ 3uF8ٮd7iFk>(8b\4&jT#Muz'=q#5=SF B h-,;eVcߧ6KBJc!S5 ^U(tA*M8+PZRײ宩UP!N {&] :cbD]'f-@z+[nhjVQtȁF[^ՠIFxF-%QYIq]yr0[ZW&4+UpI ¥@~E4)]Y}jJh [DDov g̦'YEqt^*+s2տRJB"HM($h 63S /ȥ~"".@BƯ>7W 5uY-b{MS:DDDH]}#{@f x"2 t9W5Yp +=DDD]f\4'>P`Sɏ_9PVl*2'{4=z=L?S#=O&$~bDDD,>K8CN'L0"?V>іy\ @kĶ}woka[9pI<@IF|ࢱqt~bDDD %Q{5eVbCHR,\f ޿?pRn=8ot6"jvo#D`l~zDDDф{y /,)r dðZLxG2s&cJ4̘ H2-f:ƩS 3v<00[I=bLMGL;?Q""b;Nύb&sN+~w|-M. NŕczJją0}T&`֖bŮJIێ`b7`d I}f2q݂:_?r }TiRSG1YOn*z{Y L}zې 7M˲p} }DDԵX[o0rDDp7e<92g%up |W^lmJB/Q 5D'-_~j૽ G^sAke 4~՛ҸoyY!3$ {*s +8s’e` pQb˖-Xe ނk(D)/N: 2?elGbfph,߲S ltvN@$@a06yO}֋wexiM {.ׯoa/ s-[pt SAYE@DF>(?9lޚyXI%P]sؽg_.M{.%ˀ;=Wދ{.?gԍ7/ :`y<+x{[]Q+V#X/0XNUB\>b&ʑJ#Ɔ=Gx0UOn1e(0#݉c%-+[-=]xD#[`}rƻ-h޳:E2?`=ЉE}ZPㅫ/"jp&aCu^\zݎo*.p2w(NҌa&q++d.rR]\*T5VW; # 0Scâr*^t3zF_K _xn@T֪*{]ٳRy98pl0>2EyvC*nشn8L셞ف?k{]{Z;a0Ⲿz|&<&jظjU\im9s 33^-z8XDqbU@ 8 HJj}"jpgn,Fߛx8n>NьrZwęftt\;mFCzjVڏ?w޹ׯ~_={kVt=$޺QWH#c`F\zlWNř#3q:2,ׄGĚ6*gjl#o?y_ǾktƖkǏǵ4cQEٹ w=+'j`o+֔3J}ZQcJrL~L{~ :qW~+9y;n\|d|8>8J tfחmUgL)XVۄ[>_aҖ-XVt[Vfu~upb/Ŋz,T͇}޷e{ZGm{>W^h{ś_ym˖Հf,= 玍ON۪lf0&x (FXV{r"X]7 rO"s.>fLs~ݏ~}|vmlg]Z|h28~Unfu6Zmo;[>_wey.cY'pєtJ]ƺB-{ND PeGA{󑕡XYM Ι3w*G]C [wٻ/v|`ݎd}^4>ݴn@1< iv]P<}R; P |Y$"|Ӹfi >*5gX4X覽dqg[??() 3]́_?ٸᆓ86 vǽ C{|n3g>&%v;YydxcXf{o)].6|m IDATwGL<4eXe_* OO~.*</=ˠ㿰t3U{ƽDC}06ڲ-~ (P^_* N3G l>Cm""$aʤBO{}~Rj@ppکoiسe)0~}9 l9^+=`G# ݯ_;$\{8gѹhveNccqS`r+@OߟcFI}A]rBߛ̹RïQtK6noaco߾-a}ƟuQXe)`ҍ3sfDuѨZrlP5GZ7mxyN/ۄ98_hZ~&%% קOtŘ{sgN[>ixx2w<;j}Vo"^z>}BП֧^8j'-9Ԯӻ [& 7ˇTQQkB]~pzNb&Le'l^?Po;>ڼ0޸Z{HN֏[wTT>\a /O,dxԫqr'+&up/>Rx*~v,vjW"Q{Y;?Gb\x~c\[dQ܏Vڄ r∐>p1xbl/|t~i6s\Z\Gvـ 2 pCoRܰvC\>~+clԸ`_F3לoţ>cӑ64g8%Lgd)O?CpfGxcv0:+W3Vs,<FMջ=\rcNj/^Wkph(oF7FWO yϷۆWOiIxFZ}uP|85V? OƽSz-|mdqk= ƺ<P(q?Z9s!|@60sԉSѧ~Z-"[Ok{nɓj3۷¤;6V?18MF(  '; LزWϫ\bc#^/ُIYcz9J?ܽϽ[/`qb9p-`bO>=…]=6xu$,-uznaG ups8ϟ|7X<@#ȑ#0 gpJinQK >^2 =`变- oN|Vp㊣ pj}4ʀCU.lj5`~>.GE[6n H_Ql##ЍUʲDf4ex[gYMW>{w]_vSjܿe=SfS/s[^M†k2\  o:S}y6~^Orޝ]XN?.bU_n$.ImR&x`ē>Pb|Y?-00z蠣X#ʶ{ЯXWVf`uI*Sʺs T7>H>C1ܻ{&޿n婸ux]aG9n׻`>^+?Bs&|m5zx3X>拷ݹ;]]+hY(&ƍc &}(|q5>57ydc-xs^jv"?yuC.(E̟ QXX{W0_{5f w`f1cjqot ][PW-µ^k'b9[_9[ [pO9=C^_~p||R)-g>~[%3ގnkQGC#""{BY8gp,ۂr{Fpm, ?4 Ow`LjɨZ׷>ߟ4КGgy8 -8uoFH~;_xݞ\w>o߾|8>[y}߿QTT[qY]^ul?6=@۶GDD*cKkY9[¦ ^g]OorsQ5", -'aٸtPl)>(yl{|~BG֓Q@W6؉Uߎiz\tJz.w~o<{m׭ـGDDkpj@Mq 6},or""JX?]stt+lF*-CDDB½o vyl^^8Py[ٸ`։G*aݵN˯< F`0&""N$lxR~{)xjz<h??XʆvYmk]W[% pu\c(wNhxcu9l݀#@ߜ>8~p~-ܪ"TVlA2+fLBi]^\QWl >^5͟3k 1#qΘ,3fؽ݈_5nax5}j`ssBT `XR/wZ%] TV Q}R0k0/,߃n} g^X zw|DDD (6x0N ׹p@_`7zyr600~Q8a1+P<I1ؖ;bgm-kprn@g==ӎ ?YOO 5k""bVL;gfj6}IX4M.@.8*MyJMi@ HBܑIr3&u. 7Gxv>DKNBDD +q68DPj/P؇(Pq$g|sc;0<8G78t.,LJث~>?εqeK`pˋp wJReef(Xk2[c0} pi`ݹvý)I2"@0.11F:3Kn`u@8+ʶv:$#ADDԹ0܉DDDp'""";1܉NDDp'""";1܉NDDD w""";1܉NDDD sϿ}-Q׽ȰHm]ޅ_ו!+ q-+hkVԎrj[{n[ keZ[Q^|1]H֣cUZDZ곊vuR*{zuy"^ȴGt^uvu:{D {[|m> Bx豕-2ZhCz ÉJպM쳱^XCJj4p4^]׬7"e= {PﯕEFRV<"Y"M(}ϭ aiY[YrK ZY+uj=:`XyjX{$5Zw$e*~׬%:IC(l4DY]"YZZVں ֮]h^Eh'QVCV?tl<֡h6#-[rwC{G ,CDI:W?M"!t3^pµETm1:N ,E<=o;imaԞV "^7O D [[}b v_Z=8L*\YM!Vn?֟GkVI{CVRP].[?.K{mDC)2W:3[ˬ/-גTQ+c;ſWXD ΫÇ;WB떈4剈m$ F:y|3],Kp`#ofID{|ONjva#nutyGƋ1޺ޤ"y[~yDZP(7t$=n4-K_f=HDzHDͅC .۠.W.o0@$H"Mk?~$"N<7kGsc"J{o_n^r"܌$ei%Rr:Q h/떷Dhbz"݌'o 9ě"%-ߚ w,w4GfȱNH.^/#"[Ŵz~+71Bk/Fߚ` Fi9:HMіX[-iQ'q 8%""dDDD w"""bÝDDDp'""bÝDDDp'""";ÝDDDp'""";1܉DDDp'""";1܉NDDp'""";1܉NDDD w""";1܉NDDD w"""b1܉NDDD w"""bÝNDDD w"""bÝDDD w"""bÝDDDp'""bÝDDDp'""";ÝDDDp'""";1܉DDDp'""";1܉NDDp'""";1܉NDDD w""";1܉NDDD w"""b1܉NDDD w"""bÝNDDD w"""bÝDDD w"""bÝDDDp'""";ÝDDDp'"""{*5׉dE=q{:B$""JpXi,3ѦCDD!?޻4B !XBCſDDpo>Rj `gb!F@].:ĵ(.۫wp% }zvjP-׶ޖ=ceCbPY9:޸(-`V `]݉SqJJзW7nI ٣Uʀ&DD?;Ӵܭ.X u`VB?v,m}2r#(1f;"S{fA<2גTQ+y:""ΆNDDp'""";1܉NDDD w""";1܉("IT8j.x_4J.GsbarB(†ؔwYo;Qlj(xi.EY)1У[:.:ir" w""Mx(*qջ/CX)1/؂f!pm#N#E0e5 &'ƜNý)eāhфt haAu)Wr7%i[J{cl:="| zH)*5+Z{^':|jzV9灦j "bG;hkk+u?Jq?^i= (le^ Ԣ&DI4_#X+﷦%h#!iY݀`酛~Z[[{'Ϻ񖯭܈`QzpT ++5555A籮 H[p9>rZ=8y"2bS~\]]pA TyNNqV筭Kގ[VN?7᭖?AD.^uuyiJ?=Nd V%sO =:PGzk#rǬ.5vQ;=F i0ot>Qgr:!p8='4h4jNDDq$ У[:6؏2I ަ4t`ztKbN;ʼnbwWS!Lk[;Jj1{0($-GD?\wEY)1У[:.:8bc[g FDnObK]{<B(>Wl Y.MuxB  w"")5ffVnD DDDp'""";1܉NDDp'""":&")ޗW`K Qr" ܸ{^i*&".PUzC%j1 IDAT?q""׻wk݋7QDDD w"""bÝDDDp'""bÝDDDp'""";ÝDDDp'""";1܉DDDpJ "gn6@{uڰ(/~{<:HDpOx:X݇ d;gKDQ{|#}`q)05Xx*Tڻ&"b=h* z.h+-I׃h-HtQ'P!n%@" Xkk^!J>[DD]8[82pi@bQ{蔧E"oq+ӏG}6BBDĖP *T-yB5_ cz8%.q;$^jVv"'QGkIhݕBQgbډNDDD w"""bÝN!;W=2g^<&p>ޣB1V;#PoCDpo|g׭h* i9Nl]y$~LI#-sX5ODp*# X= am8XFGG'"bX=Y> n+S]DD9~~D(s4YvDDĖ[{?h UXރ>Լjy܉:ϝ܉DDDp'""";1܉NDDp'""";1܉NDDD w""";1܉NDDD w"""b1܉NDDD w"""Jp_2?qmY.1H7ԩu 1"̲EjYJ$e 4\"m|H=Fl[du^N_.ìKne07DC?制+:5l{(7AϺ䆀A`{h53t_HEٶI?`4CK|o 'sz;C܃Am ZfK\yP֜fvFҪ5 f T/V{` --@dEDDD fEF2?#i)f\6TՋ{UVt0;z 5-p2j@DD rxJz[2@ݘ]`5s*>`_, ""jYϨݿ:f-rYTeeܗj=X>t>jÄr& juy^6[V6H:/C4;{.P -/#"jvH)H̽q@T0s@׃(<v YG,")GB9{i0̉% {wWF9{#ym8vT; ÝNDDD w"""bÝDDD w"""JpvVQסj*MP5 Q&~S܏B@6$꯳ՕMqlzeuaΦf({ˋPtb-4^9RUrXW W;QI/}E%z:~+Ű/؂fhf]Y+_ϝyoynDL7RJ pEےXWW܉()%TcʸARSb9~xObKb]EPW`;+Ý BTU*&w=W;AT4b]2܉|Cg6?R:M] UW]elu1Vp'vaMOyPDz>dƾ!:HOώ`CU[c]U2܉tL9oykʉuG]W'e:9\,+t]:h}Erb5+ÝF{23suuUzޯ{=lX[Wgd<VwmAiH<\'J2܉1 9mJpx0wb ZMH߿-X-tՏ:-PND~6P[{4=<➆2zƋζ<>Ayy]G _w]a ~Zwu}D@ hMMED-,)%}YFs~ՑZ\>Ju{$Vuϖ;Xpxz?6pe UF)ggOaţE72''?l]+s,k .j3xU2܉vː/,o~NN߰>e3=~l>Gsr]pꪺv[]&TGӌEX^CV֣@uk'X;/U! xA+_ w.tB?"?$75fN6*:p'ztK1W&4A@TCTNBnPlvUu'W;Ql!xU8fH._'!;Jj1{0($UuuF"S{ Dy 6߀؆լCnxp<~t;j,U}mvWx$4UTaJ;QW"Ŗ=6{2P}{#ؒmޚ. лH*.֕źR]\ny.DJ aɺ:A)""";1܉NDDD w"""b1܉NDDD w"""b~{@)xI$`uB@szcjuCDD)Zww%kn-|IENDB`SimGrid-3.10/doc/html/group__SD__workstation__management.html000640 007661 000620 00000140556 12242224150 024644 0ustar00gierschand000000 000000 SimGrid: Workstations
SimGrid  3.10
Versatile Simulation of Distributed Systems
Workstations

Functions for managing the workstations. More...

Functions

SD_workstation_t SD_workstation_get_by_name (const char *name)
 Returns a workstation given its name.
const SD_workstation_tSD_workstation_get_list (void)
 Returns the workstation list.
int SD_workstation_get_number (void)
 Returns the number of workstations.
void SD_workstation_set_data (SD_workstation_t workstation, void *data)
 Sets the user data of a workstation.
void * SD_workstation_get_data (SD_workstation_t workstation)
 Returns the user data of a workstation.
const char * SD_workstation_get_name (SD_workstation_t workstation)
 Returns the name of a workstation.
xbt_dict_t SD_workstation_get_properties (SD_workstation_t workstation)
 Returns a xbt_dict_t consisting of the list of properties assigned to this workstation.
const char * SD_workstation_get_property_value (SD_workstation_t workstation, const char *name)
 Returns the value of a given workstation property.
void SD_workstation_dump (SD_workstation_t ws)
 Displays debugging informations about a workstation.
const SD_link_tSD_route_get_list (SD_workstation_t src, SD_workstation_t dst)
 Returns the route between two workstations.
int SD_route_get_size (SD_workstation_t src, SD_workstation_t dst)
 Returns the number of links on the route between two workstations.
double SD_workstation_get_power (SD_workstation_t workstation)
 Returns the total power of a workstation.
double SD_workstation_get_available_power (SD_workstation_t workstation)
 Returns the proportion of available power in a workstation.
e_SD_workstation_access_mode_t SD_workstation_get_access_mode (SD_workstation_t workstation)
 Returns the access mode of this workstation.
void SD_workstation_set_access_mode (SD_workstation_t workstation, e_SD_workstation_access_mode_t access_mode)
 Sets the access mode for the tasks that will be executed on a workstation.
double SD_workstation_get_computation_time (SD_workstation_t workstation, double computation_amount)
 Returns an approximative estimated time for the given computation amount on a workstation.
double SD_route_get_current_latency (SD_workstation_t src, SD_workstation_t dst)
 Returns the latency of the route between two workstations, i.e. the sum of all link latencies between the workstations.
double SD_route_get_current_bandwidth (SD_workstation_t src, SD_workstation_t dst)
 Returns the bandwidth of the route between two workstations, i.e. the minimum link bandwidth of all between the workstations.
double SD_route_get_communication_time (SD_workstation_t src, SD_workstation_t dst, double communication_amount)
 Returns an approximative estimated time for the given communication amount between two workstations.
SD_task_t SD_workstation_get_current_task (SD_workstation_t workstation)
 Returns the kind of the task currently running on a workstation Only call this with sequential access mode set.
xbt_dict_t SD_workstation_get_storage_list (SD_workstation_t workstation)
 Return the list of mounted storages on a workstation.

Detailed Description

Functions for managing the workstations.

This section describes the functions for managing the workstations.

A workstation is a place where a task can be executed. A workstation is represented as a physical resource with computing capabilities and has a name.

The workstations are created when you call the function SD_create_environment.

See Also
SD_workstation_t

Function Documentation

SD_workstation_t SD_workstation_get_by_name ( const char *  name)

Returns a workstation given its name.

If there is no such workstation, the function returns NULL.

Parameters
nameworkstation name
Returns
the workstation, or NULL if there is no such workstation
const SD_workstation_t* SD_workstation_get_list ( void  )

Returns the workstation list.

Use SD_workstation_get_number() to know the array size.

Returns
an array of SD_workstation_t containing all workstations
See Also
SD_workstation_get_number()
int SD_workstation_get_number ( void  )

Returns the number of workstations.

Returns
the number of existing workstations
See Also
SD_workstation_get_list()
void SD_workstation_set_data ( SD_workstation_t  workstation,
void *  data 
)

Sets the user data of a workstation.

The new data can be NULL. The old data should have been freed first if it was not NULL.

Parameters
workstationa workstation
datathe new data you want to associate with this workstation
See Also
SD_workstation_get_data()
void* SD_workstation_get_data ( SD_workstation_t  workstation)

Returns the user data of a workstation.

Parameters
workstationa workstation
Returns
the user data associated with this workstation (can be NULL)
See Also
SD_workstation_set_data()
const char* SD_workstation_get_name ( SD_workstation_t  workstation)

Returns the name of a workstation.

Parameters
workstationa workstation
Returns
the name of this workstation (cannot be NULL)
xbt_dict_t SD_workstation_get_properties ( SD_workstation_t  workstation)

Returns a xbt_dict_t consisting of the list of properties assigned to this workstation.

Parameters
workstationa workstation
Returns
the dictionary containing the properties associated with the workstation
const char* SD_workstation_get_property_value ( SD_workstation_t  ws,
const char *  name 
)

Returns the value of a given workstation property.

Parameters
wsa workstation
namea property name
Returns
value of a property (or NULL if property not set)
const SD_link_t* SD_route_get_list ( SD_workstation_t  src,
SD_workstation_t  dst 
)

Returns the route between two workstations.

Use SD_route_get_size() to know the array size.

Parameters
srca workstation
dstanother workstation
Returns
a new array of SD_link_t representating the route between these two workstations
See Also
SD_route_get_size(), SD_link_t
int SD_route_get_size ( SD_workstation_t  src,
SD_workstation_t  dst 
)

Returns the number of links on the route between two workstations.

Parameters
srca workstation
dstanother workstation
Returns
the number of links on the route between these two workstations
See Also
SD_route_get_list()
double SD_workstation_get_power ( SD_workstation_t  workstation)

Returns the total power of a workstation.

Parameters
workstationa workstation
Returns
the total power of this workstation
See Also
SD_workstation_get_available_power()
double SD_workstation_get_available_power ( SD_workstation_t  workstation)

Returns the proportion of available power in a workstation.

Parameters
workstationa workstation
Returns
the proportion of power currently available in this workstation (normally a number between 0 and 1)
See Also
SD_workstation_get_power()
e_SD_workstation_access_mode_t SD_workstation_get_access_mode ( SD_workstation_t  workstation)

Returns the access mode of this workstation.

Parameters
workstationa workstation
Returns
the access mode for the tasks running on this workstation: SD_WORKSTATION_SHARED_ACCESS or SD_WORKSTATION_SEQUENTIAL_ACCESS
See Also
SD_workstation_set_access_mode(), e_SD_workstation_access_mode_t
void SD_workstation_set_access_mode ( SD_workstation_t  workstation,
e_SD_workstation_access_mode_t  access_mode 
)

Sets the access mode for the tasks that will be executed on a workstation.

By default, a workstation model is shared, i.e. several tasks can be executed at the same time on a workstation. The CPU power of the workstation is shared between the running tasks on the workstation. In sequential mode, only one task can use the workstation, and the other tasks wait in a FIFO.

Parameters
workstationa workstation
access_modethe access mode you want to set to this workstation: SD_WORKSTATION_SHARED_ACCESS or SD_WORKSTATION_SEQUENTIAL_ACCESS
See Also
SD_workstation_get_access_mode(), e_SD_workstation_access_mode_t
double SD_workstation_get_computation_time ( SD_workstation_t  workstation,
double  computation_amount 
)

Returns an approximative estimated time for the given computation amount on a workstation.

Parameters
workstationa workstation
computation_amountthe computation amount you want to evaluate (in flops)
Returns
an approximative estimated computation time for the given computation amount on this workstation (in seconds)
double SD_route_get_current_latency ( SD_workstation_t  src,
SD_workstation_t  dst 
)

Returns the latency of the route between two workstations, i.e. the sum of all link latencies between the workstations.

Parameters
srcthe first workstation
dstthe second workstation
Returns
the latency of the route between the two workstations (in seconds)
See Also
SD_route_get_current_bandwidth()
double SD_route_get_current_bandwidth ( SD_workstation_t  src,
SD_workstation_t  dst 
)

Returns the bandwidth of the route between two workstations, i.e. the minimum link bandwidth of all between the workstations.

Parameters
srcthe first workstation
dstthe second workstation
Returns
the bandwidth of the route between the two workstations (in bytes/second)
See Also
SD_route_get_current_latency()
double SD_route_get_communication_time ( SD_workstation_t  src,
SD_workstation_t  dst,
double  communication_amount 
)

Returns an approximative estimated time for the given communication amount between two workstations.

Parameters
srcthe first workstation
dstthe second workstation
communication_amountthe communication amount you want to evaluate (in bytes)
Returns
an approximative estimated computation time for the given communication amount between the workstations (in seconds)
SD_task_t SD_workstation_get_current_task ( SD_workstation_t  workstation)

Returns the kind of the task currently running on a workstation Only call this with sequential access mode set.

Parameters
workstationa workstation
xbt_dict_t SD_workstation_get_storage_list ( SD_workstation_t  workstation)

Return the list of mounted storages on a workstation.

Parameters
workstationa workstation
Returns
a dynar containing all mounted storages on the workstation
SimGrid-3.10/doc/html/group__XBT__config.html000640 007661 000620 00000045553 12242224150 021322 0ustar00gierschand000000 000000 SimGrid: Configuration support
SimGrid  3.10
Versatile Simulation of Distributed Systems
Configuration support

Changing the configuration of SimGrid components (grounding feature) More...

Modules

 User interface: changing values
 Configuration type declaration and memory management
 Registering stuff
 Getting the stored values

Detailed Description

Changing the configuration of SimGrid components (grounding feature)

All modules of the SimGrid toolkit can be configured with this API. User modules and libraries can also use these facilities to handle their own configuration.

A configuration set contain several variables which have a unique name in the set and can take a given type of value. For example, it may contain a size variable, accepting int values.

It is impossible to set a value to a variable which has not been registered before. Usually, the module registers all the options it accepts in the configuration set, during its initialization and user code then set and unset values.

The easiest way to register a variable is to use the xbt_str_register_str function, which accepts a string representation of the config element descriptor. The syntax is the following:

<name>:<min nb>_to_<max nb>_<type>

For example, size:1_to_1_int describes a variable called size which must take exactly one value, and the value being an integer. Set the maximum to 0 to disable the upper bound on data count.

Another example could be outputfiles:0_to_10_string which describes a variable called outputfiles and which can take between 0 and 10 strings as value.

To some extend, configuration sets can be seen as typed hash structures.

Example of use

First, let's create a configuration set with some registered variables. This must be done by the configurable library before the user interactions.

static xbt_cfg_t make_set()
{
xbt_cfg_t set = NULL;
xbt_log_threshold_set(&_XBT_LOGV(xbt_cfg), xbt_log_priority_critical);
xbt_cfg_register_str(&set, "speed:1_to_2_int");
xbt_cfg_register_str(&set, "peername:1_to_1_string");
xbt_cfg_register_str(&set, "user:1_to_10_string");
return set;
} /* end_of_make_set */

Now, set and get a single value

int ival;
xbt_cfg_t myset = make_set();
xbt_cfg_set_parse(myset, "peername:toto:42 speed:42");
ival = xbt_cfg_get_int(myset, "speed");
if (ival != 42)
xbt_test_fail("Speed value = %d, I expected 42", ival);
xbt_cfg_free(&myset);

And now, set and get a multiple value

xbt_cfg_t myset = make_set();
"peername:veloce user:foo\nuser:bar\tuser:toto");
xbt_cfg_set_parse(myset, "speed:42");
xbt_cfg_check(myset);
dyn = xbt_cfg_get_dynar(myset, "user");
if (xbt_dynar_length(dyn) != 3)
xbt_test_fail("Dynar length = %lu, I expected 3",
if (strcmp(xbt_dynar_get_as(dyn, 0, char *), "foo"))
xbt_test_fail("Dynar[0] = %s, I expected foo",
xbt_dynar_get_as(dyn, 0, char *));
if (strcmp(xbt_dynar_get_as(dyn, 1, char *), "bar"))
xbt_test_fail("Dynar[1] = %s, I expected bar",
xbt_dynar_get_as(dyn, 1, char *));
if (strcmp(xbt_dynar_get_as(dyn, 2, char *), "toto"))
xbt_test_fail("Dynar[2] = %s, I expected toto",
xbt_dynar_get_as(dyn, 2, char *));
xbt_cfg_free(&myset);

All those functions throws mismatch_error if asked to deal with an unregistered variable.

xbt_cfg_t myset = make_set();
TRY {
xbt_cfg_set_parse(myset, "color:blue");
}
CATCH(e) {
}
xbt_cfg_free(&myset);

SimGrid-3.10/doc/html/structs__xbt__peer.html000640 007661 000620 00000014003 12242224150 021505 0ustar00gierschand000000 000000 SimGrid: s_xbt_peer Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_xbt_peer Struct Reference

Structure describing a remote host (as name:port) More...

#include <peer.h>

Detailed Description

Structure describing a remote host (as name:port)


The documentation for this struct was generated from the following file:
  • include/xbt/peer.h
SimGrid-3.10/doc/html/dir_fd40c9cefe01c13991330df21bf7b08f.html000640 007661 000620 00000013715 12242224150 023170 0ustar00gierschand000000 000000 SimGrid: build_release/include/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/structs__surf__metric__t.html000640 007661 000620 00000013547 12242224150 022715 0ustar00gierschand000000 000000 SimGrid: s_surf_metric_t Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_surf_metric_t Struct Reference

#include <surf.h>

Detailed Description

Resource which have a metric handled by a maxmin system


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/group__XBT__dynar__perl.js000640 007661 000620 00000001022 12242224150 022002 0ustar00gierschand000000 000000 var group__XBT__dynar__perl = [ [ "xbt_dynar_push", "group__XBT__dynar__perl.html#gac89da4c2c302218759c7fe477d8eacc0", null ], [ "xbt_dynar_pop", "group__XBT__dynar__perl.html#ga37d2b11c522e02ede79a12a89575ceb1", null ], [ "xbt_dynar_unshift", "group__XBT__dynar__perl.html#ga3499315d48944f3bfaf6aeea1e2c75e8", null ], [ "xbt_dynar_shift", "group__XBT__dynar__perl.html#ga2966d02b350ef985447c4053c258a1a0", null ], [ "xbt_dynar_map", "group__XBT__dynar__perl.html#ga02bb7b95aaa0fe03c26222f65566e744", null ] ];SimGrid-3.10/doc/html/group__XBT__parmap.js000640 007661 000620 00000002162 12242224150 020772 0ustar00gierschand000000 000000 var group__XBT__parmap = [ [ "xbt_parmap_t", "group__XBT__parmap.html#gaebe875868080812c5e303884551ced62", null ], [ "e_xbt_parmap_mode_t", "group__XBT__parmap.html#gacbdbf85f704718b8680f13e56c618e7a", [ [ "XBT_PARMAP_POSIX", "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaa076c8a9592fd4f8656a078483688700", null ], [ "XBT_PARMAP_FUTEX", "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaec7bc115136c58098a826d86296d2f7d", null ], [ "XBT_PARMAP_BUSY_WAIT", "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aafd6884f2f0271777d1e8ea1db1b29229", null ], [ "XBT_PARMAP_DEFAULT", "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aa0329f52f37cdb070e8d64330c7a1b395", null ] ] ], [ "xbt_parmap_new", "group__XBT__parmap.html#ga939a0ab549af87ff1df13642396d5087", null ], [ "xbt_parmap_destroy", "group__XBT__parmap.html#ga3e1c75bd9e1a502350a2d2098dc316bb", null ], [ "xbt_parmap_apply", "group__XBT__parmap.html#ga7d2b99167edbcbccb7a514451042f09f", null ], [ "xbt_parmap_next", "group__XBT__parmap.html#gac667744f002bbf8d1d8dc32e36d0d308", null ] ];SimGrid-3.10/doc/html/navtreeindex4.js000640 007661 000620 00000033226 12242224150 020050 0ustar00gierschand000000 000000 var NAVTREEINDEX4 = { "inside_doxygen.html#inside_doxygen_regen":[5,2,1,4], "inside_doxygen.html#inside_doxygen_website":[5,2,1,3], "inside_extending.html":[5,2,2], "inside_extending.html#simgrid_dev_guide_api":[5,2,2,0], "inside_extending.html#simgrid_dev_guide_model":[5,2,2,1], "inside_extending.html#simgrid_dev_guide_simcall":[5,2,2,2], "inside_extending.html#simgrid_dev_guide_tag":[5,2,2,3], "inside_release.html":[5,2,4], "inside_release.html#inside_release_bindings":[5,2,4,1], "inside_release.html#inside_release_c":[5,2,4,0], "inside_release.html#inside_release_c_postchecks":[5,2,4,0,3], "inside_release.html#inside_release_c_preconditions":[5,2,4,0,0], "inside_release.html#inside_release_c_source":[5,2,4,0,1], "inside_release.html#inside_release_c_win32":[5,2,4,0,2], "install.html":[3], "install.html#install_Win_ruby":[3,2,3], "install.html#install_binary":[3,0], "install.html#install_binary_java":[3,0,2], "install.html#install_binary_linux":[3,0,0], "install.html#install_binary_win":[3,0,1], "install.html#install_cmake_howto":[3,1,2,0], "install.html#install_cmake_list":[3,1,2,1], "install.html#install_cmake_mac":[3,1,2,5], "install.html#install_cmake_outsrc":[3,1,2,3], "install.html#install_cmake_reset":[3,1,2,2], "install.html#install_cmake_win":[3,1,2,4], "install.html#install_setting_MSG":[3,2,0], "install.html#install_setting_own":[3,2], "install.html#install_setting_win_new":[3,2,2], "install.html#install_setting_win_provided":[3,2,1], "install.html#install_src":[3,1], "install.html#install_src_compil":[3,1,3], "install.html#install_src_config":[3,1,2], "install.html#install_src_deps":[3,1,0], "install.html#install_src_fetch":[3,1,1], "install.html#install_src_test":[3,1,4], "internals.html":[5,2], "internals.html#ug_lucas_layer":[5,2,0,3], "internals.html#ug_overview":[5,2,0], "internals.html#ug_overview_envs":[5,2,0,0], "internals.html#ug_overview_fondation":[5,2,0,2], "internals.html#ug_overview_kernel":[5,2,0,1], "introduction.html":[2], "modules.html":[9], "options.html":[4,9], "options.html#options_generic":[4,9,6], "options.html#options_generic_exit":[4,9,6,1], "options.html#options_generic_path":[4,9,6,0], "options.html#options_index":[4,9,8], "options.html#options_log":[4,9,7], "options.html#options_model":[4,9,1], "options.html#options_model_network":[4,9,1,4], "options.html#options_model_network_asyncsend":[4,9,1,4,5], "options.html#options_model_network_coefs":[4,9,1,4,1], "options.html#options_model_network_coord":[4,9,1,4,3], "options.html#options_model_network_crosstraffic":[4,9,1,4,2], "options.html#options_model_network_gamma":[4,9,1,4,0], "options.html#options_model_network_sendergap":[4,9,1,4,4], "options.html#options_model_nthreads":[4,9,1,3], "options.html#options_model_optim":[4,9,1,1], "options.html#options_model_precision":[4,9,1,2], "options.html#options_model_select":[4,9,1,0], "options.html#options_model_smpi_collectives":[4,9,5,3], "options.html#options_model_smpi_detached":[4,9,5,2], "options.html#options_modelchecking":[4,9,2], "options.html#options_modelchecking_liveness":[4,9,2,0], "options.html#options_modelchecking_reduction":[4,9,2,2], "options.html#options_modelchecking_steps":[4,9,2,1], "options.html#options_pls":[4,9,1,4,6], "options.html#options_smpi":[4,9,5], "options.html#options_smpi_bench":[4,9,5,0], "options.html#options_smpi_timing":[4,9,5,1], "options.html#options_tracing":[4,9,4], "options.html#options_using":[4,9,0], "options.html#options_virt":[4,9,3], "options.html#options_virt_factory":[4,9,3,0], "options.html#options_virt_parallel":[4,9,3,2], "options.html#options_virt_stacksize":[4,9,3,1], "pages.html":[], "platform.html":[4,6], "platform.html#pb_baroex":[4,6,3,2], "platform.html#pf_As":[4,6,2,0], "platform.html#pf_Cr":[4,6,2,1], "platform.html#pf_P2P_tags":[4,6,5,2], "platform.html#pf_as_h":[4,6,5,0], "platform.html#pf_asro":[4,6,3,1,1], "platform.html#pf_basics":[4,6,1], "platform.html#pf_byro":[4,6,3,1,3], "platform.html#pf_cluster":[4,6,2,1,1], "platform.html#pf_conf":[4,6,4,0], "platform.html#pf_exit_as":[4,6,5,1], "platform.html#pf_flexml_bypassing":[4,6,6], "platform.html#pf_hints":[4,6,5], "platform.html#pf_host":[4,6,2,1,0], "platform.html#pf_incl":[4,6,4,2], "platform.html#pf_link":[4,6,2,2,1], "platform.html#pf_linkctn":[4,6,3,1,0], "platform.html#pf_ne":[4,6,2,2], "platform.html#pf_other_tags":[4,6,4], "platform.html#pf_overview":[4,6,0], "platform.html#pf_peer":[4,6,2,1,2], "platform.html#pf_pftags":[4,6,2], "platform.html#pf_platform_multipath":[4,6,5,5], "platform.html#pf_raf":[4,6,3,0,0], "platform.html#pf_rand":[4,6,4,1], "platform.html#pf_rm":[4,6,3,0], "platform.html#pf_rm_me":[4,6,3,0,2], "platform.html#pf_rm_sf":[4,6,3,0,3], "platform.html#pf_rm_sh":[4,6,3,0,1], "platform.html#pf_ro":[4,6,3,1,2], "platform.html#pf_router":[4,6,2,2,0], "platform.html#pf_routing":[4,6,3], "platform.html#pf_sto_conc":[4,6,2,3,0], "platform.html#pf_sto_mo":[4,6,2,3,3], "platform.html#pf_sto_mst":[4,6,2,3,4], "platform.html#pf_sto_st":[4,6,2,3,2], "platform.html#pf_sto_sttp":[4,6,2,3,1], "platform.html#pf_storage":[4,6,2,3], "platform.html#pf_switch":[4,6,5,4], "platform.html#pf_tra":[4,6,4,3], "platform.html#pf_wisely":[4,6,5,3], "platform.html#ps_dec":[4,6,3,1], "pls.html":[5,1], "pls.html#pls_simgrid_configuration_gtnets":[5,1,0], "pls.html#pls_simgrid_configuration_ns3":[5,1,1], "structs__model__type.html":[7,0], "structs__model__type.html#a3c16d53c35bc1d4bfd1fac73347b9112":[7,0,0], "structs__model__type.html#a511f15d145ff07393d09864a768f0bbc":[7,0,3], "structs__model__type.html#a8f34c752019a99c8e45ddd39e92b2b38":[7,0,1], "structs__model__type.html#afb355965926bc9d620da6847710f6a12":[7,0,2], "structs__smx__action.html":[7,1], "structs__smx__action.html#a04cebb4b3eab15379c00664e7515b33e":[7,1,8], "structs__smx__action.html#a04e7bb773850023e00ea1b2d07ed9a21":[7,1,11], "structs__smx__action.html#a064d0ab8f80703db50bc41d02b3f7406":[7,1,23], "structs__smx__action.html#a0710f44f3df89aa88416304ee5402c9f":[7,1,13], "structs__smx__action.html#a0a454ca7e10860c00fe058cf5b21453d":[7,1,35], "structs__smx__action.html#a184f451618f5919c93d84d98da6b5336":[7,1,32], "structs__smx__action.html#a1d7dfa4787234d18e27674960e4e6874":[7,1,36], "structs__smx__action.html#a1e22b6be524ad9e6de2896a92ced357f":[7,1,24], "structs__smx__action.html#a2172274c1c66e1def35e2ea1e92767e1":[7,1,5], "structs__smx__action.html#a29290b47885791b92daa8afa6b5ec8e4":[7,1,17], "structs__smx__action.html#a33df82bccecd73c9e702297394dea91f":[7,1,30], "structs__smx__action.html#a35facdc98093ba27ccfe45a03250e8e9":[7,1,29], "structs__smx__action.html#a3f1e2d2380c325fbeb0b009dff018836":[7,1,16], "structs__smx__action.html#a40cbe396b2e95ecb6d8b6bed8a9a6eff":[7,1,10], "structs__smx__action.html#a5139e5ee5d5856f07b50feb52c9a56c1":[7,1,14], "structs__smx__action.html#a5749e1146d0ca6f3f1f3b0922c4de42e":[7,1,15], "structs__smx__action.html#a5b8bdd2c72e768d642aebeaa6df4276a":[7,1,1], "structs__smx__action.html#a5e467c36f49b88a01e144a697abae21e":[7,1,20], "structs__smx__action.html#a6cba1b100619f5d2c70c5ed6c0937c8e":[7,1,12], "structs__smx__action.html#a830b9202e17bed7d8cf622a9b34d6d1a":[7,1,27], "structs__smx__action.html#a8eb39fce0e7d83dd2a49ec83fabf127a":[7,1,6], "structs__smx__action.html#a9291734e6a1d2d6c47768af8e13a660e":[7,1,22], "structs__smx__action.html#a973deae94a68b113294ad562d114f2e8":[7,1,31], "structs__smx__action.html#a9d783c63e2b2537bc0a6c1ce6d845dbe":[7,1,26], "structs__smx__action.html#aaab52849c5697ccfdfa3a2e78bf76a8a":[7,1,25], "structs__smx__action.html#aaefa503695d212ef3976d2d4e5625682":[7,1,7], "structs__smx__action.html#ac864ca245143535c3038546d862089fd":[7,1,33], "structs__smx__action.html#acbae01c837b320edd55a3924e3a80254":[7,1,34], "structs__smx__action.html#acdc83a60994ef95e762402b9fb0bb9a6":[7,1,9], "structs__smx__action.html#ad0f60b06c697e8c93b7b458fe031f089":[7,1,19], "structs__smx__action.html#ad224157a3eabd084d0c524b4b37ab253":[7,1,21], "structs__smx__action.html#ada727104cd7f81c953efd15ecc057a3a":[7,1,2], "structs__smx__action.html#adbe1334915698611f64437406eca35a3":[7,1,0], "structs__smx__action.html#add730a2468a5c91e34523b523abcf836":[7,1,3], "structs__smx__action.html#ae54e547f38f079df9b24303e471e136d":[7,1,28], "structs__smx__action.html#aef8d938a6c347ef1055a4902e157d915":[7,1,4], "structs__smx__action.html#af8795e57e1e85bb287a3861e569a781b":[7,1,18], "structs__smx__host__priv.html":[7,2], "structs__smx__host__priv.html#a67288fcbea0dd351511ef07fad244a37":[7,2,1], "structs__smx__host__priv.html#a7fbfb83e72a87b2ea799f04fb8bdb885":[7,2,0], "structs__smx__host__priv.html#acf592831b265f0480ccab9d3d649cf35":[7,2,2], "structs__smx__process.html":[7,3], "structs__smx__process.html#a0fa84df765b10d506b1f929b1bd6da97":[7,3,2], "structs__smx__process.html#a1dbfd9bbad99300c5e806d696b82f506":[7,3,1], "structs__smx__process.html#a278f32694a7196f9e729aaec985830a8":[7,3,11], "structs__smx__process.html#a3ad427728bd699c14483a67394326448":[7,3,3], "structs__smx__process.html#a3b5fe9f9494c51595c7a5d94ccee8ee1":[7,3,24], "structs__smx__process.html#a43a840ab1416b055771bf009df323f7a":[7,3,18], "structs__smx__process.html#a45ee5a92ed8c2dbfc0f250d2d7f4969c":[7,3,15], "structs__smx__process.html#a4adbf3d79c0887a26cbe0b2da28951a6":[7,3,10], "structs__smx__process.html#a4af4c204a548cdddfb4ae0a104ddffd6":[7,3,13], "structs__smx__process.html#a4bbdd825e72f08d247b447f3db17ddf5":[7,3,17], "structs__smx__process.html#a4d23642b2fb48a43344d99e5fde2ac50":[7,3,20], "structs__smx__process.html#a5c047926058308fa200c609bbd6e4d27":[7,3,6], "structs__smx__process.html#a5f5876a51c489533d6a74f4a144ab7ea":[7,3,8], "structs__smx__process.html#a600d794c98ffc205101a81e0562df1c2":[7,3,9], "structs__smx__process.html#a6ebd8349242e92ff1ec76f7cc3d21f8b":[7,3,23], "structs__smx__process.html#a8508e341175649ddeec7187b07e5cb3b":[7,3,4], "structs__smx__process.html#a8534d47a75b607b6e78676f39788f191":[7,3,7], "structs__smx__process.html#a86ec8165daf63567c0d19b3a23afc032":[7,3,21], "structs__smx__process.html#aadadadbade12e6301f83e5b120098c76":[7,3,22], "structs__smx__process.html#ab3e987bbf18ab6771e57937395c1afb3":[7,3,16], "structs__smx__process.html#ac4d2dc2e7f8b6d4bf31e153552ed14e0":[7,3,14], "structs__smx__process.html#ac5670dc9f4256f2f8fc7dc583dfdf926":[7,3,0], "structs__smx__process.html#ad2499688417d1138b375dacd7b112299":[7,3,12], "structs__smx__process.html#ad7bfe3a46d528919cc5026eb59962756":[7,3,5], "structs__smx__process.html#af015eb9088597a0e4952a8726aa8dae5":[7,3,19], "structs__smx__rvpoint.html":[7,4], "structs__smx__rvpoint.html#a96a10df3eb5e0cb0693629297832148d":[7,4,4], "structs__smx__rvpoint.html#aa62b404646a9748768dcc3ed3ed52424":[7,4,0], "structs__smx__rvpoint.html#abfc69646b084de488b6af1ba9b9131a8":[7,4,2], "structs__smx__rvpoint.html#ac926954d89514d291ba00b48563c0222":[7,4,1], "structs__smx__rvpoint.html#ae08262b4ac90c0e0e8026aa4586dc7ef":[7,4,3], "structs__smx__simcall.html":[7,5], "structs__smx__simcall.html#a0273369261c794611caa5d9c894d1e9f":[7,5,3], "structs__smx__simcall.html#a02a3f6593bf1accfb5dee59b8d9fa626":[7,5,6], "structs__smx__simcall.html#a0ce0a63ee6e7b4eb4c04a8f7d7959216":[7,5,5], "structs__smx__simcall.html#a4af1be7a26094becfc74f248fff0a14b":[7,5,7], "structs__smx__simcall.html#a6589d869f55ec4d25b15084ee546c62f":[7,5,2], "structs__smx__simcall.html#a7f99321629e2507703d080f551d2bce3":[7,5,4], "structs__smx__simcall.html#abfcd8103f220e732b70dbbaa8abf08d2":[7,5,8], "structs__smx__simcall.html#aea676664d5c35ed93b2e7db5fb5b7af0":[7,5,0], "structs__smx__simcall.html#aea6fc0eab72eeefd06fde74c99b18642":[7,5,1], "structs__smx__storage__priv.html":[7,6], "structs__smx__storage__priv.html#a591cd4633cc845c42cfef995a73a32bb":[7,6,0], "structs__smx__timer.html":[7,7], "structs__smx__timer.html#a36727fc1f8a9910a4d38f62bdc96d27d":[7,7,2], "structs__smx__timer.html#a7d8a1896083cb223792d428eaca62593":[7,7,0], "structs__smx__timer.html#add3f486b25914ecf6d688bde9c6abd35":[7,7,1], "structs__surf__metric__t.html":[7,8], "structs__surf__metric__t.html#aa5f86985c8f96a1d2baa87859e0f18ba":[7,8,0], "structs__surf__metric__t.html#ac80e5e2206a08ccb13c025788d1a704c":[7,8,2], "structs__surf__metric__t.html#af60a903ad384de7784fb88505a0c46e0":[7,8,1], "structs__xbt__dict__cursor.html":[7,9], "structs__xbt__dict__cursor.html#a349b536ba2a66ab40fd69a92d5b489d1":[7,9,1], "structs__xbt__dict__cursor.html#a4c64e66fcdf566bcc46385d7a78316ca":[7,9,0], "structs__xbt__dict__cursor.html#ab1ede032c9b987a3af7efb95f577d9e9":[7,9,2], "structs__xbt__parmap.html":[7,10], "structs__xbt__parmap.html#a4610f24b4081b535323b5ae767221137":[7,10,3], "structs__xbt__parmap.html#a4cb1478d076f1df7aa59518292b9300e":[7,10,2], "structs__xbt__parmap.html#a4cf0a8a6d432cf3f1d9d5706d9c101e6":[7,10,8], "structs__xbt__parmap.html#a5524248ea1a35b7094e3c898e293bf0d":[7,10,16], "structs__xbt__parmap.html#a5cf66c7f69b8cf8e5546561d5feddfb5":[7,10,15], "structs__xbt__parmap.html#a675dabf4d9e2117c079aa3dcf1c82678":[7,10,13], "structs__xbt__parmap.html#a7abf26f2438db8b96cccabfe2866aece":[7,10,10], "structs__xbt__parmap.html#a82dd2440e5bd6fbb9f5001ae9506e0a0":[7,10,11], "structs__xbt__parmap.html#a8c93b6fa9e0bdfaf8322245e731bc2af":[7,10,4], "structs__xbt__parmap.html#a9ba6b2ab3c8e1f943d9308c77c4f13ec":[7,10,14], "structs__xbt__parmap.html#ab41017148fff9bfd45f1e4562cd8881f":[7,10,5], "structs__xbt__parmap.html#ac414c60f2d3a61b47e436bfb96245969":[7,10,12], "structs__xbt__parmap.html#ac583971bdbd4b8d9693e6bb539da69fe":[7,10,7], "structs__xbt__parmap.html#acbf2e11c9c8d053907e5bc6f8e4d396d":[7,10,1], "structs__xbt__parmap.html#ae218d5ac5ff8b9a5910f445627cb248e":[7,10,6], "structs__xbt__parmap.html#ae87660dc030d4dd525227abcd178f67d":[7,10,9], "structs__xbt__parmap.html#afe6c4afdbdfecc9dc4cc141e264e1fa7":[7,10,0], "structs__xbt__parmap__thread__data.html":[7,11], "structs__xbt__parmap__thread__data.html#a1b6e07b976fb9e4f73d14287f18a2270":[7,11,1], "structs__xbt__parmap__thread__data.html#ae1ffd860183ce274286e6895f91a7d98":[7,11,0], "structs__xbt__peer.html":[7,12] }; SimGrid-3.10/doc/html/group__XBT__swag__func.html000640 007661 000620 00000051573 12242224150 022167 0ustar00gierschand000000 000000 SimGrid: SWAG functions
SimGrid  3.10
Versatile Simulation of Distributed Systems

Macros

#define xbt_swag_reset(swag)
 Makes a swag empty.
#define xbt_swag_insert(obj, swag)
#define xbt_swag_offset(var, field)
 Offset computation.

Functions

xbt_swag_t xbt_swag_new (size_t offset)
void xbt_swag_free (xbt_swag_t swag)
void xbt_swag_init (xbt_swag_t swag, size_t offset)
void xbt_swag_insert_at_head (void *obj, xbt_swag_t swag)
void xbt_swag_insert_at_tail (void *obj, xbt_swag_t swag)
void * xbt_swag_remove (void *obj, xbt_swag_t swag)
void * xbt_swag_extract (xbt_swag_t swag)
int xbt_swag_size (xbt_swag_t swag)

Detailed Description

Macro Definition Documentation

#define xbt_swag_reset (   swag)

Makes a swag empty.

Parameters
swaga swag
#define xbt_swag_insert (   obj,
  swag 
)
Parameters
objthe objet to insert in the swag
swaga swag

insert obj in swag

#define xbt_swag_offset (   var,
  field 
)

Offset computation.

  • var a variable of type struct something
  • field a field of struct something
    Returns
    the offset of field in struct something.
    It is very similar to offsetof except that is done at runtime and that you have to declare a variable. Why defining such a macro then ? Because it is portable...

Function Documentation

xbt_swag_t xbt_swag_new ( size_t  offset)

Creates a new swag.

Parameters
offsetwhere the hookup is located in the structure
See Also
xbt_swag_offset

Usage : xbt_swag_new(&obj.setA-&obj);

void xbt_swag_free ( xbt_swag_t  swag)
Parameters
swagpoor victim

kilkil a swag but not it's content. If you do not understand why xbt_swag_free should not free its content, don't use swags.

void xbt_swag_init ( xbt_swag_t  swag,
size_t  offset 
)

Creates a new swag.

Parameters
swagthe swag to initialize
offsetwhere the hookup is located in the structure
See Also
xbt_swag_offset

Usage : xbt_swag_init(swag,&obj.setA-&obj);

void xbt_swag_insert_at_head ( void *  obj,
xbt_swag_t  swag 
)
Parameters
objthe objet to insert in the swag
swaga swag

insert (at the head... you probably had a very good reason to do that, I hope you know what you're doing) obj in swag

void xbt_swag_insert_at_tail ( void *  obj,
xbt_swag_t  swag 
)
Parameters
objthe objet to insert in the swag
swaga swag

insert (at the tail... you probably had a very good reason to do that, I hope you know what you're doing) obj in swag

void* xbt_swag_remove ( void *  obj,
xbt_swag_t  swag 
)
Parameters
objthe objet to remove from the swag
swaga swag
Returns
obj if it was in the swag and NULL otherwise

removes obj from swag

void* xbt_swag_extract ( xbt_swag_t  swag)
Parameters
swaga swag
Returns
an object from the swag
int xbt_swag_size ( xbt_swag_t  swag)
Parameters
swaga swag
Returns
the number of objects in swag
SimGrid-3.10/doc/html/group__XBT__dd.html000640 007661 000620 00000012764 12242224150 020442 0ustar00gierschand000000 000000 SimGrid: Data description
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/structs__smx__timer.js000640 007661 000620 00000000431 12242224150 021354 0ustar00gierschand000000 000000 var structs__smx__timer = [ [ "date", "structs__smx__timer.html#a7d8a1896083cb223792d428eaca62593", null ], [ "func", "structs__smx__timer.html#add3f486b25914ecf6d688bde9c6abd35", null ], [ "args", "structs__smx__timer.html#a36727fc1f8a9910a4d38f62bdc96d27d", null ] ];SimGrid-3.10/doc/html/ftv2vertline.png000640 007661 000620 00000000126 12242224150 020063 0ustar00gierschand000000 000000 PNG  IHDRɪ|IDATxݱðScOx@ y}IENDB`SimGrid-3.10/doc/html/group__msg__VMs.js000640 007661 000620 00000002140 12242224150 020344 0ustar00gierschand000000 000000 var group__msg__VMs = [ [ "MSG_vm_start", "group__msg__VMs.html#ga407fdb335bb6adbe52eab4055ee4676b", null ], [ "MSG_vms_as_dynar", "group__msg__VMs.html#ga9d66095e9599545ab4cdd787a38f6b8e", null ], [ "MSG_vm_is_suspended", "group__msg__VMs.html#gac7919295b7c197a43717e367f9c115c5", null ], [ "MSG_vm_is_running", "group__msg__VMs.html#ga6ba8320c7a90ed67d3c8e2079460b8a9", null ], [ "MSG_vm_bind", "group__msg__VMs.html#ga21d8a296f64c7190dcbcfd0c249b4275", null ], [ "MSG_vm_unbind", "group__msg__VMs.html#gaf65aa7a4497fceaa50414caff2772a05", null ], [ "MSG_vm_migrate", "group__msg__VMs.html#ga0b701b7e5a4b0459f1b9326e188e19b0", null ], [ "MSG_vm_suspend", "group__msg__VMs.html#ga32243e8be24c253c0367c81d0289e057", null ], [ "MSG_vm_resume", "group__msg__VMs.html#ga9815e54a5e6cdf849d4847803d377e19", null ], [ "MSG_vm_shutdown", "group__msg__VMs.html#ga1a40d2652506f4576408e35346cd3cff", null ], [ "MSG_vm_reboot", "group__msg__VMs.html#ga6e665c9d3b9c0a6b3e9a97a419a7861f", null ], [ "MSG_vm_destroy", "group__msg__VMs.html#gae493c978235ba8efeee6d8b5a5286e5b", null ] ];SimGrid-3.10/doc/html/group__XBT__fifo__perl.js000640 007661 000620 00000001322 12242224150 021613 0ustar00gierschand000000 000000 var group__XBT__fifo__perl = [ [ "xbt_fifo_push", "group__XBT__fifo__perl.html#ga62606f494627c7be494082bb2a239f7a", null ], [ "xbt_fifo_pop", "group__XBT__fifo__perl.html#gaa8ae3369665727b54c3c3d0f5c1e91be", null ], [ "xbt_fifo_unshift", "group__XBT__fifo__perl.html#gad165b0eb7ea833480776eb02062da45f", null ], [ "xbt_fifo_shift", "group__XBT__fifo__perl.html#ga79a99aa3de3fb2d15836fffca5e28c83", null ], [ "xbt_fifo_size", "group__XBT__fifo__perl.html#gad7fdf56ec51e0c1ec442225b3e3ccc07", null ], [ "xbt_fifo_is_in", "group__XBT__fifo__perl.html#ga29753ca3f59d8e810bcee69304cd8b42", null ], [ "xbt_fifo_search_item", "group__XBT__fifo__perl.html#ga1010933a447b08cbc125304c66587da7", null ] ];SimGrid-3.10/doc/html/structsurf__model.js000640 007661 000620 00000003452 12242224150 021031 0ustar00gierschand000000 000000 var structsurf__model = [ [ "name", "structsurf__model.html#a285237be60a0c75c56d50f754f10ca1b", null ], [ "states", "structsurf__model.html#a0e84008d3c39ef70dbdb98a9de1bcf48", null ], [ "action_state_get", "structsurf__model.html#ad6398c4a857042569f6943e95d4dcec4", null ], [ "action_state_set", "structsurf__model.html#a969312b9fd1533e9fb8488059522d760", null ], [ "action_get_start_time", "structsurf__model.html#a2ab1dc2a56a9950a1fc5afd4b09013f9", null ], [ "action_get_finish_time", "structsurf__model.html#a9bcb1343173e301eb3e861d8cefe30c1", null ], [ "action_unref", "structsurf__model.html#acb6cffe534dbfcfb5c3fefc5b714e623", null ], [ "action_cancel", "structsurf__model.html#aae5c7f6115a8e8f0c2c7dbd168dd8a8e", null ], [ "action_recycle", "structsurf__model.html#afdbd4f9c98ca4af207c89ebb29c9d8bb", null ], [ "action_data_set", "structsurf__model.html#ade0d9846b3a3e6321e87a51fc257116b", null ], [ "suspend", "structsurf__model.html#a90af557a210c80ed385fc4a0f4b3a882", null ], [ "resume", "structsurf__model.html#a8f0b61e06575462b3c5cbf1a22f3e859", null ], [ "is_suspended", "structsurf__model.html#af65ddbc8ce59a3e2e7e26098b5ba6552", null ], [ "set_max_duration", "structsurf__model.html#a4702f5e90dc62742ec188695e0ff1c72", null ], [ "set_priority", "structsurf__model.html#a34f89ec266f457c37000f52cdd354a08", null ], [ "set_category", "structsurf__model.html#a2fe3155ae5dfb3782e1e7b01dc90a988", null ], [ "get_remains", "structsurf__model.html#adf9644f3b9b404f36973a25bfee0e761", null ], [ "gap_remove", "structsurf__model.html#a8dea34276bb3ba16c8c951579d4e46f1", null ], [ "model_private", "structsurf__model.html#a1b01e2fdca338d8a3180ae3ab054c337", null ], [ "extension", "structsurf__model.html#a9170f75c0ec35d6b9655a11afb171cc5", null ] ];SimGrid-3.10/doc/html/Paje_MSG_screenshot_thn.jpg000664 007661 000620 00000073166 12242224150 022144 0ustar00gierschand000000 000000 JFIFKKExifMM*C  !"$"$C^"` !1"AQa#24Sqt6RTU$3Bbs%&'5Ccder7DVuFD !1AQa"2BqRSb#$3CDrs4c ?hgF&4xN*/k|5'662 E1,o4֎ (}~BDW~R~HvJU)e#SnF%K^n3ReWKDg_tp7t 2(f[34U2daM˗(6%=F+)OV̮4ddma([SQJJR #?#oҧVTE>UI2rh [x֯lX? *}8eJlLIh57M^؝eJlN?#oҧ jo; M7W}[#*|pDžT扻$q.!ܨ%Yjã|ck£6xTzB:T,-k D<цٟ HGf*=!f]|maĐmb#vP(i)@*7?,M>k£I,:7f|*=!lυG Y))R G4ɳ*#*S7"6mM>MgaѺ%yg£I/~xęhg + +BBJalׅG"mk;#^6TzB 5F9&Is0) H)<"6M>Mf-vxTzB<3Q$`Z5̰IJi@6=5Qf|*=!Z]Ru(W~pUƎvy9ץ#$JfaF(˝ZX߸9U/*U8䫅,#C5mZHp#.ޒV CCZv&0XbJFgV]c^~sҳV u ZIבP YUYe, ;VJhse?,/THV<ԄRBK HM7^>B) +?.i{R/aGNevήW%Iq4I'Wwg(ȰZۛWSFj1+)2iT -pyUMMM5"㤄 AWS.}ۊtbb7yQ UȌ>arREYе\[]9Qϫ*aWB0aw-u #xL R&–PSm )nK^M%A?Ef5$[qp]uW]T, ׶H0X qj?nJ'N $0u)se$/{u-a\kkmEI,2U?lv{rR/( :hJ3[ _K m)MLZl o )CKq_bSO$q&2ڹ9Yp% Q;fwv/wECϜ=Rv/6@t04NdeKC~&7S>w );/2Ҋc᳞Sd_۫^"E@6/gp:\n]oTXX%7m3ήQvL[MRQIb}ՐSa Am_ll[gϿoMEtyBR @b.Ttjf36Gv4E܌| 5GED/ FxzEE+5fN-}sKgP c^):CB0`&sji(mmsvRAd Ncņ!A/SG[m^NGb1µ!!&Nnͭ)Pj|`(b*Ro,8\|P-pAiN)$T곋\b24fNJk( `d}2)6U9H|bL (llo+bCgi#W;Oծ#T](]zS"oJ\nX_b.7+P`,0k+q\jd\ @9+CT6Ge T/,]nu I0#l-ӵ`a\-Cq~1)3r Tq2v#Rk`_)Ĝ *[(ص{ @=znS>(aRL)Djb8jU5pBJa䞛4]l= _E^;K4 h方Ġ^5ö'5T7 ZyPĻV-؇_^؇_^B#~tG/߂/q7n!G+dr,d\o=Չ7wkgs%MY&)FlwkE2闪K!9p!!쿳[8&uԡy'NͼkPe5&8Td M˻Fat4mݓD&o'*5 \qaẐNu[CODy-;VE,Me;1,ꕓMFpt*p.}!eeln -iagCfP$= %HPR2qru7mt("JRB]y4n TRIK*95KN( C;K6oͦoم)Q%ȏV.POL_醃䳞1u8l{?P@yBIXļu@GBV~q슭,N{}#.ğ珫\ĺѓ'lfLt:OW%J/ڟ; O!B o²$ЍܭC_Fֽ'G"HP FQ"DCLz@ oQ8PT&=jn ȁV;sբ,ĩCG%s]>G%]PH4"w(F5JVwZ'ΏlYRſ+YhE] ب;, oP'- JbURR< "J ns}{Ja@.2 A;5R 7C7Nf(tˍ 4Ema)7sxG`q֏.؂6.t&"UZO zWI~U{%*(aH&BOtH$6V8Y;)s/Hɕʔo˾7|;+K\ݱ ar-JX_yXjqs& >&zXm[,C UnҧT*veINEYRNUWd0l] >Xl?rnsǗm /_H؛9oQBx<>HD۳*Lp눚74$RⲄ9-Lp׈v}p .ic-Ӗꏂ!a |<*nu.v5PZ_ UY1F;ZyW#s^(x[J2(>(,)CimW\v6 QTi tSg7Xoz3%ʲC^B2kBӓ)LI##m,,,+!be];VcfO:mQa*o~IA+če!'"존oO/F(.K3(Y?A&Rlv.lҗlM=ꏂz<0)nφo;<w&xw S7-)2[5hM Zo zz)L:Juśv'l,blA''(}ýwP>sLyڷ{ď 8O .-1Fp*reD ΄7Ay.*h1Dd܁"-}#keeAP%a=t6f!y)õnR_zMҌ7,FR)p^l(N&B"ݳyѶΒꏂ '|>VXumQn&sb6$o d lK5XLN . mW'9@x*&ut7, jnhsoHuaW>N ]M- WλW4f*Cw BLm=FKnQTe5,5'.|ZV6N'Y3\ؕ_%r23m'@ `69m,ZTirsufl[)H b}: 29'*L2 l99t i;RɷGmt-KRVTMr|a[=_-UI0 ߦ^juZ e#$TKj>EQvܖ[NX'-~0jx=6&h3j6<5&g i9weQ2bRj7*n5:E=dIT’P Id@U$kٯ3ήq’%[FA`&`[ƠZNƳS-QdXK3d°P.@)b<&̻B(%m.ln ;_McJ(4V[Jޘ ZUN Ei'htd:I)6Bl&3tܖuNynuqp<ٺKJ%bH`C|G]'i2ݢH9Ǟ )d+(S>zZh.995:\ ^D>kSN*MIrLBIJ^%V,bsResUS2s%Vfs@3 yƝQR4 7ײӰe(eMjL>wmtvtj-xBnqTi)eWSw;Re&ݢ<'g)KkZT,;'ThSd[m&uXh ͵vjnNJnE(PBWKg19\ãtkCBh1˴)wS -KaĘ7<0H724eQd/"Bw;7c54z\ε-a P˯uG,fv^O[ɿ#0RXSgfBmd3[/T&rBfFVbrjf yGi2X[=0o4ј ƻ-Zx-&+Ќ *q8ZaTi2!9d wv|cZ씊&edYJ\QIp4T)Ktz2!⻥lr3-uI'%p5nHȶVN٥vMy bO205Y:I,1'ѽb/ ?W~p^.kYW=7hRJծn%7UtMcwh7x5咾[*M)򐒠` H_SYq[(/wFK9LMnw^AKϡ.RPs*PPKfWlŸ&7SC eP]Q_l:~":U=NqYt!L< JXצ62ҕ8-Kpԗә\,~{[v|QC`*R ڙ|Ts7p/6cLM)% Ts1=\Le -ii]/{v S ~S+® Л"uK~TEUJs|ޙ\?O}F'R_bp2oI}SPF)/Tz)/;%g8i@%\}@*QlF|90 eۨ-ٺ@1 G(4+92&*#.)&x*\GF=a7 @{n,=oNRm1Im⮦t 6aEl<矔fTiVdXfZ@ЁJWٕV㒮R9iK/)79[Juo}Q)Vh/C[xu!p̉aO.U!+$.Y H΍ܛy>{/<Рrmzz1kK*QK5D?MͶJƐtߟ]Hn{= 䱉Ы m-vݸWTL2FU9)fhaRrӌL H\${ORS.N%5KEtN6F1H’s,VN.J*$ٸ#?'U}OTeh0hs 4[ٺbiy \})CZx'mʿ23{9y4GtwsI249 ;Dn :o{I%j5U0&r3u6FUHzmJBB"|uѫm,_л =R?t'ei#iMIYѭz 4|/9?&KZiyjmY'O۬q'j*F1PeϦCvYxL'drsk9▛SC,s w5(qZE\H²N̓lHm.!-J.#P#8yKu6`gG:l9RjD s!ԭuYB{DSbVS*ieA*Hz"=aau+7t:#ingxS.7GRr*mIm%}}qJEzb,ћ\G$\G;rw&"ӕLmbwX܃HDy+P&e(!ADα/_? 6~7sÊ8 HTnfӪuN Sknh~/j-':ҲH\R=[BuJHU}Rň4FVn r-|wOCO|Bm,yQtw֔BoGR-F[1QԬGW6D h_?bgA/*C; n w{M.b93?V/!hYԝ/|'ЋB1]e34̻JiL!=hR7AUK\0i ɥ´V(Ͻ~F~diɹ[))P$澚uCm.K |J1QzubFpdg$z|+K8k\I7-m}6մ4ƴ56W~pV.>"%Б.AZl6gQ57ҼkklOjo}C;U[2݅q6PPJC`5,SOoliv!W׷bĪ?L!Gd'7kTNK1dYra}HtO\Aߤzqv%D넩J$dߠ"ae+).7ezwJfT-J"BUf?ij2 Vja)mBVP7k\YmT nIΛ(9qjL4U[}E*T^qqĺ<ӢZU$Dn(ۋsoTQfG4X팜̦ג._[ZۡuKH˿>DmP]J\Tk{-VOǞS&IB@$MtjQrL2% @sF.khk=%9a%lݘ^\ln}j U\rri뿦oCuUN)(~]k!)HA$ b]i3YθVS'&gqն6I 3m^aB8)sBYiwfRFksnxd&aR*yEvhInUh[RJBJ_pr+PGLSnEyJWғgE+]P@\آc6u,Ӑ% 6߾MG%ZYXi۶kw(C)-Ӱx]O.LHA'jljxz=ܕdjQo.NVaʾ0L6\P@-$ %?"X駃=GclD×d6T1]jy@C۹sۜ~X=gPfR@ΒJ.WMn#yЄWJ4ڸyMӌk+~( _UW*RKsHuÔ.J  懶n97!VlOKJfݱ("pn4 $NpKhHKDɭa,irL5Ґ[)}Fn1Pn wqQ*%+p9^Mt":8l~c8fm.wTFFvғtbn:S!g /ɶE 9Nw7]^(OTTȆФv93KTū:J^H /v*sb9$)7*q x)0Ph;&KIk$: ?4t+EzieԴ6}3~BwtB>&IRI*IL pRBRNZiDh|4\p ;N,sI8wQ (6!\IT=G^q&v@:v{tCUZNu5*koMo6d*:rӿ刺TaÚXô&"Bqd[W1U?pEAKc,íӦ̹%s!"~i(ՕʉIگt o-ݢA}(jk$4&6Ρ+]|Y%dn-$'!@h0SBs$ڭuiVְVchfJ{"naMqYw 9 aܧpY9&$0U%1̸TtJ@=`s R֦oڈAC"g5РMEm v$sw+ƿVv檞F0_\;bsUO#{En{,{,+,HyH[OY#4ҝCm%_"7h/wEJu*NHs7NLҢe90SN+AC_:D#1YjuJ+HDyQ*IUD DP4Uy`>Ti7faUm5<؞iaR(ڋx*f دӦ|T/ܞyhK歈R5N َQ8Au3:4 kQ퇩9[ Qnl0s^A&qf$0}Bf ?XPӱ ʐI,HEb`Է0 IEEWuI w >7'p4_ w@sm%XA^J*jQ iZ^MԠ'yCuwIEґ8V9 FV]ob8JXi[\/f(8[n3:JRZQإHu* ;U2V 媦aN}!I-ns~ ;!  A#[W7YojꄰR{jn@EghʘM]>) Fd%GukkQUUЙ."Y*ZrQGlSVm.Lld$ ͻ1C>#n$M!i|<4vRҝ\U0PPHsh責46 aχ,<ux1v*l- `K ve-UԻ^˿pzڕ#j[j,e[L̤EXͺ6s׌p: `B,״et\W#-,JL*)i o:ukX$f- xJr8Se iZG6\,3'9s@)*ʩW ظK9"B(Cq&L+=5hut?ݖx)K֚LZRAH ֎)-p \)Bgײa;2v cHCJnʙ/(CD!"ٹqѰ&"}+rr$ҧ ۶^,4Y\,Ұ0M'=I%L^)RVB]ЅetXCgognEaKSU.Q"HlJݍNuE eEOOIjKr}ٹm(c-lK;]F|Lڙ Uf v ]͙.>=Pi[ڶMp>hL [5MqR hЎm!S3IP,%h.2:8:Fbc-`"o6nTp8~cj8zwd0.$EɖPS/9Wh6)SJ@̼;d*+BBJe̕,*8Ȩ5N85հ0ِH 犾$@KNBj,w!Iκ<@"#sRge$ՖSICH̀K-r.&ehD5:Sgr@ -j/%>MzeO fpmͯEPpc3Lh[ Eslo0Y`_ Ar%?#ArvĈy l[ VP.&a2iNeH M]Ή .eEA FM2n4ث0*ʗZi=}rYBG;)*lMFwk)|@lr`z 2K)j18eN(AP ۣtZ0i*}iRT7Nne,SBMޙKdX&96Vl^u-* G6!py $ ;!9t1]z@1,'PUĥԜuFx2zc<Q֓:yn9A[59顎S){0M)*!kuDk:MiN)vFi!\:nwxkB=,k5kNnx؟Sp7ҼkklOjo}CW-;<Զ\ۯEv!W׷wӁvgrݏ%޷\}+Z0 S:Ym*,BEhdiƓኑD]bB S$hbpNFZ9urN(cd斨݌.ThUfX;9~كlN6N2.R6ƸndϾ-'Sӄ4 v-EM?AM_8e9ueW-\R JMfwk "6TgZ+-Bo#M15P8 K>!ci늘j6ár`Rl;r\7qey?˜h)X2AdSHX9 :}^v~dwHdT՜PGLWialX|4"_Ⱥ:TN v$M:.j,0ᆵ;1K,P&TOL''K~UIp-B-@Ao}}p'&ImEwRJzjhH.5.!AFf*sJlMmsA5Zla%RZ}JlL/>z?n PS~"_ T5\ͱuSOnx)7V&rZ\)#4F>@3pQ>(V!:4n&.>t*??V'ed'mKKI'}pOUP2%b!U&Ꭷ2?pRms̢M%WIӶ>\ȵٿYV_M'ϲ[c)I/7uYSV-زy}QZհlӲ'FxҰ-ٿ$pZ{O**4GMr62i|L̞iq?ٿeRjʎdJXLp{e,f}z,/I8[c2(IIX$ 7؅GP[LpjV԰OgV7j33X ˼$ 59 0kn2Jd}Tưa_\;bsUO#{IJծ? CEKpD`v!W׷`v!W׷ U;ӟ,c/wm/(en-TK;r]"7JnGkԛ*];0-Fm-g% η<ÞCMel—.Jl5I+BۭiYP/0`t?|wWIנ"K̋(~ ʒ[!&w/CJi-Fs1OjJZ̻ xFRꕨHoʺ@JM ^p6SJnͧ9כ0h(BxR.'._,9)I>s€F,e)DFDaTD"d MiI$ nҘ5(IJB8"%JS OLJSْ[%¢WKM @ZĮ8jJUДhv. N|ѳTvhS q)mG)b䒞c@pV[ӈ*-%^L BeDʕo߳Ms8y9p #,:yJMrťpe?OsdihX5i"*Tq&6AyƝW:*2obd<(\/m-J;Moeuk)b CAq|+e}3|gmf*;B$xJ06s|u1'0{0Sm\/Tb^6mSyBOAt^/WU&=%5 0S{|OBvZԄ䢃( mk.Mmc0~)F?5$f^Q3{j:(=$J2r%aHQ. 5q)`@¶Rq)ρ9!_ǔ-VscYIX&Usapbbvg%s#7K Kt wi>ZU%'<*Ⓛ/&#6;[qGIH塬1Uc bz[A@ӓylKcN\3U ge]#t8y=_tbwP K1v"e'AO Zm!U,^٩m\vni%,ab7(t??O-CBY;> `SwvMϙ# \#aZ<JJKYԾ #v_ʄZwLNP)T-*؛ÙZֶ͞ۄ2p|f/m2f JES=/KE@^w&" N>Ϟ $5~ hur^6f ZN)KtYkJ 7)U$0#jarS&P{Q)7Wss.YYiUNeI1ī)XU h S] wn #5'Yk LN-ᡴl(L1+rxnE{h}y=/椸+~fm.7Fo*FKns rm黾sYIkprxfq)\?m*Ͻ!09+\0̼)@Mo7^xBXJ~;)R5nbhͺCju!_Ť.hzlӢ\2m!KQ ,*OKb|.v$[)0e~^C ȻSMC!Il,A>x^qGl0,Ѩsҕ:`fBU+٩պÎ;5ۂT{ y\,3QRNL77Z/1./=腬;/2zpO'ኳ1 jBVU=}'6gv^`+a(Kt(ER} 95|()ғNԜR%tO7LY*zCDEB쇤5ىk `aDoR{]Jծ? $nx؟SpD`f&VJZWJ5,r\>\؇_^B N؆q}k).-You K;r]"yI=MS:A߬}ڛq橳#*]J;:1s Tб0U>Jtʪ&i~sEySfI2_hԪjU2e)7R_w8כ)o;RKTڳs6五H*l,9&{&u;To)OmL'Md L+)bVcfde)]t4IO#P& IѱLqLS|~{D%)r_qel($mF0∅NUD[e>p! *Q : L%b]HPJҀRJM-puvNϢي2!IU( BE2@EX%+3:K)@*nzSJLʹ,,.̺r_P O1F6eKjBҤ/[F0jcPW‚؋~E Y c  `L3 !2X;p?*$LT %77~xSreC2h!7YX$=x-$?yqGLy&?asֺ?% 83q,~O{^x;OŘoďeyS|cj!\~)Np 8(n:'ҵp;`8շgsA Yx;bo Z$1ytؒצq?p uT[~gֻ. T'_. y2IeH/\f<%%p\ uxBx޳ͤ%=]^<4_ )gjatrCmt=cBA/ITy;Va^9U WaTg) ,xJ-)Ug 1L8_Uj!c:hӘ?CT"QR/PJspux:.z<ګ̴L+iU4X }6ǸSժCS}k k>UFHb:Tfav3R^3aevcn2*wo)DRFiQ{ .zpCG%oi[>wXg> S&))RJ8;swr5hLg`g3/k]$_UGCl/?hH%l3gn9pp1)J02+=ǚ<+E猗bz˖&x/E= QtgK~Q{F9]G'TjbC Uhf^սw{1TJs2s: Nܥ TF;K4^hU-qZ 7^5ö'5T7 ZyP+"0;^Y+ۂ0;^Y+ۈV[q)TS!&/6ޔ!%GfU],ORkT9,sE6`2HUԎ{~RGTq>&꘳yobY#q7bRwB({atgnc?!_ʼnZgiP4y+JAZ"] PxRn}2o;d^˦O2q^Jn3:gBM.,Qms"CqeTa|PLe&c³ 8qquiqkk6C֩ޞ9RX%yܳ{= ͗$qLaOaR^p`F˵ 9:ةbߓgqequ5 Yլq$ rz0u>7Bci:8M.r,tm3l.5tE:fRrPybJ~1mdJ/ <@˗[~SG:e10&k()豆)<,Ska%R#lYmlm\g&54LKge9WBSrJK@@mp> hkP|7SRip䣏j t=0*,)(S>uu5ڢxCP g(35V Qʖ.s綆8g X8ETȕMVRVv%#kc^o6S쌾|֌ۻC"tS!+aʏ#%K˄7P(.~TSjFej*2UQs {a 8B*8F^eu?$b Fnx)jOVqFuڬi'2 k鮖$ZLuF>Jem/>yv'[6x6^2GI%L-K'1F3;RԼn.ME$X], NlbzZjg6)m 12{VR"X\u c|ZgF Gou?fXHMŸ`ct5B )uNyUs5?Z_UN1,3hKsŖp\ôfVޭ%i e J=( 3;^,՜CٛNPItuۮ>"qxFcٜMmYn9F/mϠk1խ:bT¹f$/6WS* mFCcQ@Y9ʸ]K)dh|_2by^]ca) w.ndE'u+It5"+m\n(CkDmp:?%a-W?,h&/K,K:ə{[ˮxqH,7K4&^J,$7]y3Mi Ę6f㌦idlVTB6 $\ 7A _g<Hb$uM(a,w#k|"OK۳8TN?UAܙ##%'\ī䁘v/m ,J@U^ba,K6Prp٥ A7, ;_OV%3KeCbR`@-ph{S%;S'N<=j1PL38ㅂ m].|ѮRz%M8 C]`oE9rC~+3wQS_JTʍ7Ens\iu 73I(&BqEy=*&$lT~%В ;=bׂG"wi;~ Ye Nipݼԫ.;>T`dvTݦNKbׂG"lZHDk ޸%x]>-֍" SjIhf8$~*r@cZyLқQQ9h.]7׮-x$z"&ůDFNp/)]C=Eμh*롳y$p|yMԺU~5F5*COBB^qص舛=c wz`:C4fp`^g$'wEIaNPm(ȉK ݁>/+ ,$Є^|^ k#X9xqW&v + KX)i|3$7^Iܛq/PWH0>%IȩK o\1lZHDM^ g #3*-lbY#8JNJ.;^zgOBݘ/ =$~*Npgf&6IyJQKACůDDص與Ya8F&~jtͺq$˂a#lSq#R~s '0,ĺ >-x$z"&ůDEtJ8cpH!T i8Vb9s͵ 'ed&Kd>*Ы<8lZHDM^  {. /*jej]-lAisHSrI7)=oz8 Άqٶ>b*6-x$z"&ůDG>RoVv1nVoբP}SgRT'vA@[抸 ;&kuuܥJu(疭9V=^ >1&R^naqx-/)mdژLnx9W~q*"DVR$HE"DR$HE"DR$HE"DR$HE"DR$HE"DR$HE"DR$HE"DR$HE"DR$HE"DR$HE!K:`R#ο"aU%K8!V2JlE:Śurg).M$6Dy X!H.|HpjWc1}x)a  nOGK鮑"Cb5Y}1?9Oks2Ԯ~L^YatP%WG$6(|S\CM|^N95{Q"Dl0)&/_j'}!SZ8D_$6{k\}rkUDyMk_M|^Ha)rrkUqɯWډ =5SM|^N95{Q"CaqɯWډ&/_j$Hl0ֹN95{Qs3:N|fSD0'2Eq*|O1qjn$H5mxū_zl}Z<Ǧۉ|O1qjn$HjZ<Ǧۉū_zl}!j^*qjn'|O1Dxū_zl}Z<Ǧۉ|O1qjn$HjZ<Ǧۉū_zl}!j^*qjn'|O1Dxū_zl}T'f܊HZiQ<ǫH"̂T/SimGrid-3.10/doc/html/inside_extending.html000640 007661 000620 00000025316 12242224150 021141 0ustar00gierschand000000 000000 SimGrid: Extending SimGrid
SimGrid  3.10
Versatile Simulation of Distributed Systems
Extending SimGrid

We start to put TAGS in simgrid source code for having tutorials to see where is the important parts ans steps to create:

How to add a new MSG function?

Search for expression "TUTORIAL: New API".

user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New API"
 0 msg/msg_new_api.c             15 /* TUTORIAL: New API*/
 1 simix/smx_smurf.c            582 /* TUTORIAL: New API*/
 2 simix/smx_smurf.c            616 /* TUTORIAL: New API*/
 3 simix/smx_smurf_private.h    102 /* TUTORIAL: New API*/
 4 simix/smx_smurf_private.h    629 /* TUTORIAL: New API*/
 5 simix/smx_private.h           28 /* TUTORIAL: New API*/
 6 simix/smx_private.h          101 /* TUTORIAL: New API*/
 7 simix/smx_private.h          182 /* TUTORIAL: New API*/
 8 simix/smx_global.c           454 /* TUTORIAL: New API*/
 9 simix/smx_new_api.c            8 /* TUTORIAL: New API*/
10 simix/smx_user.c            1684 /* TUTORIAL: New API*/
11 simix/smx_new_api_private.h    8 /* TUTORIAL: New API*/
12 simix/smx_process.c          338 /* TUTORIAL: New API*/

How to add a new model in surf?

Search for expression "TUTORIAL: New model".

user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New model"
0 surf/new_model_private.h   2 /* TUTORIAL: New model
1 surf/surf.c              213 /* TUTORIAL: New model*/
2 surf/surf_config.c       380 /* TUTORIAL: New model*/
3 surf/surf_config.c       746 /* TUTORIAL: New model*/
4 surf/new_model.c           8 /* TUTORIAL: New model*/
5 include/surf/surf.h      157 /* TUTORIAL: New model*/
6 include/surf/surf.h      345 /* TUTORIAL: New model*/
7 include/surf/surf.h      661 /* TUTORIAL: New model*/

How to add a new simcall?

To add a simcall called <name> with three arguments arg1, arg2 and arg3 of type targ1, targ2, targ3 respectively and which return a value of type tret you must first define the simcall function in the the include/simgrid/simix.h and make it call the automatically generated BODY function which will do all the bad stuff.

tret simcall_<NAME>(targ1 arg1, targ2 arg2, targ3 arg3){
return simcall_BODY_<NAME>(arg1, arg2, arg3);
}

Then you must add an new line in the list SIMCALL_LIST1 of simcall actions in src/simix/smx_smurf_private.h. The arguments of the ACTION are:

  • the simcall enum name,
  • the <name> of the simcall,
  • if the result must be automatically saved in the simcall (WITH_ANSWER/WITHOUT_ANSWER)
  • the return type,
  • the arguments.

The return type and the arguments must be define by using TSPEC(name, type), or one of the predefined type (e.g., TSTRING(n), TINT(n), TVOID(n), TPTR(n), …). You must get something like this:

ACTION(SIMCALL_<NAME>, <name>, WITH_ANSWER, TSPEC(result, tret), TSPEC(arg1, targ1), TSPEC(arg2, targ2), TSPEC(arg3, targ3)) sep \

Finaly you have to define the kernel code in a SIMIX_pre_<name> in the corresponding src/simix/smx_*.c file:

tret SIMIX_pre_<name>(smx_simcall_t simcall, targ1 arg1, targ2 arg2, targ3 arg3) {
SIMIX_<NAME>(arg1, arg2, arg3);
}
tret SIMIX_<name>(targ1 arg1, targ2 arg2, targ3 arg3) {
Your code in kernel mode
}

What is How to add a new tag for xml files?

Search for expression "TUTORIAL: New TAG".

user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New TAG"
0 surf/sg_platf.c                    43 /* TUTORIAL: New TAG*/
1 surf/sg_platf.c                    89 /* TUTORIAL: New TAG*/
2 surf/sg_platf.c                   124 /* TUTORIAL: New TAG*/
3 surf/sg_platf.c                   337 /* TUTORIAL: New TAG*/
4 surf/surfxml_parse.c              769 /* TUTORIAL: New TAG*/
5 surf/surf_private.h               205 /* TUTORIAL: New TAG*/
6 surf/surfxml_parseplatf.c          64 /* TUTORIAL: New TAG*/
7 surf/surfxml_parseplatf.c          85 /* TUTORIAL: New TAG*/
8 include/simgrid/platf_interface.h  42 /* TUTORIAL: New TAG*/
SimGrid-3.10/doc/html/group__SURF__API.html000640 007661 000620 00000020634 12242224150 020601 0ustar00gierschand000000 000000 SimGrid: SURF
SimGrid  3.10
Versatile Simulation of Distributed Systems
SURF

Internal kernel of all the simulators used in SimGrid, and associated models. More...

Modules

 Simulation
 Functions for creating the environment and launching the simulation.
 SURF actions
 This section describes the different datatypes and operations related to the actions in SURF.
 SURF resources
 This section describes the different datatypes and operations related to the resources in SURF.
 Create a new API
 How to build a new API on top of SURF.

Detailed Description

Internal kernel of all the simulators used in SimGrid, and associated models.

SURF provides the core functionnalities to simulate a virtual platform. It is very low-level and is not intended to be used by end users, but rather to serve as a basis for higher-level simulators. Its interface are not frozen (and will probably never be), and the structure emphasis on performance over ease of use. This module contains the platform models. If you need a model that is not encoded yet, please come to the devel mailing list so that we can discuss on the feasibility of your idea.

Please note that as it is not really intended for public use, this module is only partially documented.

Surf documentation

SimGrid-3.10/doc/html/group__SURF__actions.js000640 007661 000620 00000002545 12242224150 021301 0ustar00gierschand000000 000000 var group__SURF__actions = [ [ "surf_action", "structsurf__action.html", null ], [ "surf_action_state", "structsurf__action__state.html", null ], [ "surf_action_t", "group__SURF__actions.html#ga260ee2edb62de03ee69190f03a9b7eba", null ], [ "s_surf_action_t", "group__SURF__actions.html#gae49733011b74942c0a896745bc825e92", null ], [ "s_surf_action_state_t", "group__SURF__actions.html#gafbcc9ab9767482d92f8709d78858d2ae", null ], [ "e_surf_action_state_t", "group__SURF__actions.html#gab9ef4042b1b038be1b792366de0121b2", [ [ "SURF_ACTION_READY", "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a6caf5e4bd35cab4890c662fdaf8d3812", null ], [ "SURF_ACTION_RUNNING", "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a101d6224ad7c2a615c452c8c36d8a7e7", null ], [ "SURF_ACTION_FAILED", "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2abf420e6385e8eeda58721c3e28bd919e", null ], [ "SURF_ACTION_DONE", "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2acef3187aad961798010f295bbbd932bf", null ], [ "SURF_ACTION_TO_FREE", "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2aa66f387221d049fbce374c4dc27629c8", null ], [ "SURF_ACTION_NOT_IN_THE_SYSTEM", "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a20a007bd143ea5c870c26a389ffe95e9", null ] ] ] ];SimGrid-3.10/doc/html/dir_075c87c5d41895d6208d6ff0ba26ddbc.html000640 007661 000620 00000014522 12242224150 023122 0ustar00gierschand000000 000000 SimGrid: examples/msg/icomms/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
icomms Directory Reference

Files

file  peer.c
file  peer2.c
file  peer3.c
SimGrid-3.10/doc/html/group__simix__comm__management.html000640 007661 000620 00000013133 12242224150 024024 0ustar00gierschand000000 000000 SimGrid: Communication Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/tab_a.png000640 007661 000620 00000000216 12242224150 016477 0ustar00gierschand000000 000000 PNG  IHDR$[UIDATxK 0C'o([Ž%x#٩ We# 3t I 3+E~\D9wM}Y_A4Y}IENDB`SimGrid-3.10/doc/html/group__msg__file__management.js000640 007661 000620 00000002236 12242224150 023117 0ustar00gierschand000000 000000 var group__msg__file__management = [ [ "msg_file_t", "group__msg__file__management.html#ga87e0d76d9428e822d9a67e676c8a2775", null ], [ "MSG_file_set_data", "group__msg__file__management.html#ga902c9e5bdda07488bdbb310303c40551", null ], [ "MSG_file_get_data", "group__msg__file__management.html#ga460af619ebd92cebe5d5b812f91eb73c", null ], [ "MSG_file_dump", "group__msg__file__management.html#ga026a21b86128403f92c3f4730c68d153", null ], [ "MSG_file_read", "group__msg__file__management.html#ga3c6c221ab91ae0213ad967204c882882", null ], [ "MSG_file_write", "group__msg__file__management.html#ga3b1606c3e01721f3eab49f236741f208", null ], [ "MSG_file_open", "group__msg__file__management.html#gae05ac2e6382893dc94ed610408b19c95", null ], [ "MSG_file_close", "group__msg__file__management.html#ga8087da2271bceabefcc6d6636decb750", null ], [ "MSG_file_unlink", "group__msg__file__management.html#ga886ea23939db224929e122d363ed91cb", null ], [ "MSG_file_get_size", "group__msg__file__management.html#gabb010052e11b12c6b6d8169cdff66c82", null ], [ "MSG_file_ls", "group__msg__file__management.html#gad55ef25a4f6e484f4874d9cdc306c869", null ] ];SimGrid-3.10/doc/html/group__XBT__syscall.js000640 007661 000620 00000000767 12242224150 021175 0ustar00gierschand000000 000000 var group__XBT__syscall = [ [ "xbt_new", "group__XBT__syscall.html#ga1d356d21c8a37c3e19de37d5f7896810", null ], [ "xbt_new0", "group__XBT__syscall.html#gaaea21518b543392c869f6564c36cdc2b", null ], [ "__attribute__", "group__XBT__syscall.html#gab6d5dfd5b7461f3942dfdd1eda223237", null ], [ "xbt_backtrace_display_current", "group__XBT__syscall.html#ga36813e215c49af92c8a62dd8286d6421", null ], [ "xbt_free_ref", "group__XBT__syscall.html#gadc6cc4c3185be3635bb1ef2d9528f67a", null ] ];SimGrid-3.10/doc/html/simgrid_logo_2011_small.png000664 007661 000620 00000006603 12242224150 021756 0ustar00gierschand000000 000000 PNG  IHDRh7sRGBbKGD pHYs  tIMEk8 IDATx{[y^C5%G]5l㒙0GI$& .IiMDۆfPHLp0e"!&riPKHc._"i-kc3I;=wtiMkZӚִ `pct} @0p!b {x XH[iliP jshjifg370&]2f2&Pysc6YU`"APN`#ՠ~D1/?F,=d2(a!4dm( 0x:b2hLj$INĹj+M@ :⇠BZ.٠8t/@6#)wc t2ZSHRfa6 l3bapXGH`tO98f!vЕb6NW HS̪NkyR̎>!`: cf+{3CkC}{nFrHhqF<{t p+ҙu;>mĽ7Ck~8-JYp K*? Y,p{U҅J43nraA"?Ug(*L3f4xCPMѡUKE0&\O8EqŮ euM'[$` irtȕƓ+yHk'RHؗ5uNw!hd|(ft dLyUD1r|W ]ꛈ;tɣ=UHsUn |(U`m:T:K$?yN]󋘽DA7*Cf`wtDjƭ\X ]' X4 ﭬT1H2xd 1h'pJn)phip-JE{8yxf=ӈ$ 0^:$+;xفp娂 ڂꭼD/~h[58qg*Gv# NIWg ݑ?ߺ$p)p1{*B+tj?sįkX.'WKCzw '{􍚌 <7z*ج3i.a"0NˮAVˁ亿D]].{H.c*E[M1ac)Nxꀮ0RAW}zaHT\^yyu8Y`mem%Z,;X0P޺'pbDpiKc1*vu܃ !TJHä=J쾍W9w "mMb<& >?>?{]pnL `6n2Ѷ+;W,muu)$) nQ4ifbvҳ7+=A`qo<J^๐\:rۜKH@G90 =+5\:8yP 'g@!<(;AlmLG;g_7{eNF$E; RqkM+UX* GuzM1>Bwۘ;=99҅sA_'}r?@ nL姀=ٱra`p1ДzRl[`#үvE %]GdbגH~h4l&4pbF9Z  B=ƽ>ϜB& LRiAуlM.1[\c*-2;H2'}ƖQGa اn8FPmH0z /ƑwKƃN@v.ƫ~]H}`0rOg%"i?R~qaF:c0& vaF*O5swIߴ5iM{C&3IENDB`SimGrid-3.10/doc/html/group__SD__task__management.js000640 007661 000620 00000007053 12242224150 022664 0ustar00gierschand000000 000000 var group__SD__task__management = [ [ "SD_SCHED_NO_COST", "group__SD__task__management.html#ga430717fbd36bb2d92b85e4c47a96ffa0", null ], [ "SD_task_create", "group__SD__task__management.html#ga4ac4414bf72fd959333848d88562502f", null ], [ "SD_task_get_data", "group__SD__task__management.html#ga766539121eadc77886003186e1b45e83", null ], [ "SD_task_set_data", "group__SD__task__management.html#ga8f5b24ab48696ea78998b42ace35900a", null ], [ "SD_task_get_state", "group__SD__task__management.html#ga2b320214a7e5a1c74cf50b236453b288", null ], [ "SD_task_get_name", "group__SD__task__management.html#gaf1f33ccbe8a0568836387a46d444473d", null ], [ "SD_task_set_name", "group__SD__task__management.html#gaea6138e1ab09935b8a575e1ccbea045c", null ], [ "SD_task_set_rate", "group__SD__task__management.html#ga5763ec9afe02f381bd1ae9b0be8cb64a", null ], [ "SD_task_watch", "group__SD__task__management.html#ga7853f1943b540ff9d3d7078ed46206cb", null ], [ "SD_task_unwatch", "group__SD__task__management.html#ga5cc2370b3d1c43b298a0d5512d8d9312", null ], [ "SD_task_get_amount", "group__SD__task__management.html#gaff407e0ad880fe3e34e0905bbbc1568a", null ], [ "SD_task_set_amount", "group__SD__task__management.html#gaebb308fda516592dcee717e657f39966", null ], [ "SD_task_get_alpha", "group__SD__task__management.html#ga43e829e6e9e93b39b765ce6e592229a4", null ], [ "SD_task_get_remaining_amount", "group__SD__task__management.html#ga4f8d27d92e9fc813c44b5a64adb24410", null ], [ "SD_task_get_execution_time", "group__SD__task__management.html#ga6c7f9b54e7f061555f07c6ade5fc1e9f", null ], [ "SD_task_schedule", "group__SD__task__management.html#ga30a5dbfc2983c1700375075f16c22364", null ], [ "SD_task_unschedule", "group__SD__task__management.html#ga5f1619e6ed05db349d89ea12944f64ba", null ], [ "SD_task_get_start_time", "group__SD__task__management.html#ga1cc17b4c7857521fc4b679bff63446b6", null ], [ "SD_task_get_finish_time", "group__SD__task__management.html#ga9ed01cda917f36b4da719f0594fbe9ee", null ], [ "SD_task_get_parents", "group__SD__task__management.html#ga8e6a82c3100081945a6afc650975dee3", null ], [ "SD_task_get_children", "group__SD__task__management.html#gabcb438f55dd8fb525a6753576c8c4069", null ], [ "SD_task_get_workstation_count", "group__SD__task__management.html#ga4092ccda7d10951ffaf47b65a2da4ae3", null ], [ "SD_task_get_workstation_list", "group__SD__task__management.html#ga773124574884bcff102efa3adc9b6120", null ], [ "SD_task_destroy", "group__SD__task__management.html#ga0cffb2af680086f53fb1599db6ae3c42", null ], [ "SD_task_dump", "group__SD__task__management.html#ga9ea8bd4d42155b26f17a875ce24a9ca0", null ], [ "SD_task_dotty", "group__SD__task__management.html#gab29f36e954266588b46c3f2e76e4afe3", null ], [ "SD_task_create_comp_seq", "group__SD__task__management.html#ga3f6480d75795a3309c0c026e540d86e0", null ], [ "SD_task_create_comp_par_amdahl", "group__SD__task__management.html#ga39c7eb7e2db73d0c022c78bf0d4a64a2", null ], [ "SD_task_create_comm_e2e", "group__SD__task__management.html#ga5690de45db3666e42b97c171f952df15", null ], [ "SD_task_create_comm_par_mxn_1d_block", "group__SD__task__management.html#gaaa2a2ba19ce7315069ec4642b6aa16a2", null ], [ "SD_task_distribute_comp_amdahl", "group__SD__task__management.html#ga6ab4cb771f03089d33aca732f7f097b8", null ], [ "SD_task_schedulev", "group__SD__task__management.html#gab0ec206f43cda6a8cbdb4aaa8d1a9d02", null ], [ "SD_task_schedulel", "group__SD__task__management.html#ga35bc9c3b6f25462bacb8f467605f87bb", null ] ];SimGrid-3.10/doc/html/group__MSG__API.js000640 007661 000620 00000002276 12242224150 020122 0ustar00gierschand000000 000000 var group__MSG__API = [ [ "Main MSG simulation Functions", "group__msg__simulation.html", "group__msg__simulation" ], [ "Process Management Functions", "group__m__process__management.html", "group__m__process__management" ], [ "Host Management Functions", "group__m__host__management.html", "group__m__host__management" ], [ "Task Management Functions", "group__m__task__management.html", "group__m__task__management" ], [ "Mailbox Management Functions", "group__msg__mailbox__management.html", "group__msg__mailbox__management" ], [ "Task Actions", "group__msg__task__usage.html", "group__msg__task__usage" ], [ "Explicit Synchronization Functions", "group__msg__synchro.html", "group__msg__synchro" ], [ "VMs", "group__msg__VMs.html", "group__msg__VMs" ], [ "File Management Functions", "group__msg__file__management.html", "group__msg__file__management" ], [ "Trace-driven simulations", "group__msg__trace__driven.html", "group__msg__trace__driven" ], [ "Lua bindings", "group__MSG__LUA.html", null ], [ "MSG examples", "group__MSG__examples.html", null ], [ "MSG Deprecated", "group__msg__deprecated__functions.html", "group__msg__deprecated__functions" ] ];SimGrid-3.10/doc/html/group__SD__API.js000640 007661 000620 00000001125 12242224150 017772 0ustar00gierschand000000 000000 var group__SD__API = [ [ "SD Data Types", "group__SD__datatypes__management.html", "group__SD__datatypes__management" ], [ "Workstations", "group__SD__workstation__management.html", "group__SD__workstation__management" ], [ "Links", "group__SD__link__management.html", "group__SD__link__management" ], [ "Tasks", "group__SD__task__management.html", "group__SD__task__management" ], [ "Tasks dependencies", "group__SD__task__dependency__management.html", "group__SD__task__dependency__management" ], [ "Simulation", "group__SD__simulation.html", "group__SD__simulation" ] ];SimGrid-3.10/doc/html/group__XBT__heap.html000640 007661 000620 00000046070 12242224150 020765 0ustar00gierschand000000 000000 SimGrid: Heap: generic heap data structure
SimGrid  3.10
Versatile Simulation of Distributed Systems
Heap: generic heap data structure

This section describes the API to generic heap with O(log(n)) access. More...

Functions

xbt_heap_t xbt_heap_new (int init_size, void_f_pvoid_t const free_func)
 Creates a new heap.
void xbt_heap_free (xbt_heap_t H)
 kilkil a heap and its content
int xbt_heap_size (xbt_heap_t H)
 returns the number of elements in the heap
void xbt_heap_push (xbt_heap_t H, void *content, double key)
 Add an element into the heap.
void * xbt_heap_pop (xbt_heap_t H)
 Extracts from the heap and returns the element with the smallest key.
double xbt_heap_maxkey (xbt_heap_t H)
 returns the smallest key in the heap (heap unchanged)
void * xbt_heap_maxcontent (xbt_heap_t H)
 returns the value associated to the smallest key in the heap (heap unchanged)
void xbt_heap_set_update_callback (xbt_heap_t H, void(*update_callback)(void *, int))
 Set the update callback function.
void * xbt_heap_remove (xbt_heap_t H, int i)
 Extracts from the heap and returns the element at position i.

Detailed Description

This section describes the API to generic heap with O(log(n)) access.

Function Documentation

xbt_heap_t xbt_heap_new ( int  init_size,
void_f_pvoid_t const  free_func 
)

Creates a new heap.

Parameters
init_sizeinitial size of the heap
free_funcfunction to call on each element when you want to free the whole heap (or NULL if nothing to do).

Creates a new heap.

void xbt_heap_free ( xbt_heap_t  H)

kilkil a heap and its content

Parameters
Hpoor victim
int xbt_heap_size ( xbt_heap_t  H)

returns the number of elements in the heap

Parameters
Hthe heap we're working on
Returns
the number of elements in the heap
void xbt_heap_push ( xbt_heap_t  H,
void *  content,
double  key 
)

Add an element into the heap.

Parameters
Hthe heap we're working on
contentthe object you want to add to the heap
keythe key associated to this object

The element with the smallest key is automatically moved at the top of the heap.

void* xbt_heap_pop ( xbt_heap_t  H)

Extracts from the heap and returns the element with the smallest key.

Parameters
Hthe heap we're working on
Returns
the element with the smallest key

Extracts from the heap and returns the element with the smallest key. The element with the next smallest key is automatically moved at the top of the heap.

double xbt_heap_maxkey ( xbt_heap_t  H)

returns the smallest key in the heap (heap unchanged)

Parameters
Hthe heap we're working on
Returns
the smallest key in the heap without modifying the heap.
void* xbt_heap_maxcontent ( xbt_heap_t  H)

returns the value associated to the smallest key in the heap (heap unchanged)

Parameters
Hthe heap we're working on
Returns
the value associated to the smallest key in the heap without modifying the heap.
void xbt_heap_set_update_callback ( xbt_heap_t  H,
void(*)(void *, int)  update_callback 
)

Set the update callback function.

Parameters
Hthe heap we're working on
update_callbackfunction to call on each element to update its index when needed.
void* xbt_heap_remove ( xbt_heap_t  H,
int  i 
)

Extracts from the heap and returns the element at position i.

Parameters
Hthe heap we're working on
ielement position
Returns
the element at position i if ok, NULL otherwise

Extracts from the heap and returns the element at position i. The heap is automatically reorded.

SimGrid-3.10/doc/html/group__SD__API.html000640 007661 000620 00000023722 12242224150 020331 0ustar00gierschand000000 000000 SimGrid: SimDag
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimDag

Programming environment for DAG applications. More...

Modules

 SD Data Types
 This section describes the different datatypes provided by SD.
 Workstations
 Functions for managing the workstations.
 Tasks
 Functions for managing the tasks.
 Tasks dependencies
 Functions for managing the task dependencies.
 Simulation
 Functions for creating the environment and launching the simulation.

Detailed Description

Programming environment for DAG applications.

SimDag provides some functionnalities to simulate parallel task scheduling with DAGs models (Direct Acyclic Graphs). The old versions of SimGrid were based on DAGs. But the DAG part (named SG) was removed in SimGrid 3 because the new kernel (SURF) was implemented. SURF was much faster and more flexible than SG and did not use DAGs. SimDag is a new implementation of DAGs handling and it is built on top of SURF.

Who should use this (and who shouldn't)

You should use this programming environment of the SimGrid suite if you want to study algorithms and heuristics with DAGs of parallel tasks. If you don't need to use DAGs for your simulation, have a look at the MSG programming environment. If you want to study an existing MPI program, have a look at the SMPI one. If none of those programming environments fits your needs, you may consider implementing your own directly on top of SURF (but you probably want to contact us before).

Offered functionnalities

SimGrid-3.10/doc/html/win_install_02.png000664 007661 000620 00000051122 12242224150 020265 0ustar00gierschand000000 000000 PNG  IHDR]zsRGBbKGD pHYs  tIME g IDATxwƟsl ..@&@  $$ġBK5PR̀ b;.|gzٕCҮvOJ{w{ןFi;3W"s[ݲ egDB_H~' !G 1AEX*߄"0W,EA&2225Q eh I+<BҚh]WjH[N6@sPʛQrDKq?ߢ"!$!#Ç BzP>Y !$%'$IHy=s2 7D9(\׌n;;<,_GvCB\?O$IF7bjP@!$m1,X4[j >j54׏w@ҨP ~Y{}$ +v⭊ !@'BH_6 (*[1:㫑:]UEd (Ȑ$͕[ȇ9@ I [Ώ%у T;T4E~LɬV7ri[jK*k@-ln~}"*w5)m]𣏕 T( 얉sXB&"͐l,,IP! j@x+趏t(y3&IWwBp^ݳ` *Am,[hMUdpqِ 7idHt@Yӆ2WQtUE"/1%QՄGW?toD׋PP% 2TY0􂫆593#O:Jc6mPOt֨οokDhqBaC ]sfdYYUa'[UdEEPV&44oo/8?R͏e22@VP KhULf#جbÖZ^M;$ _·+jS#YzB@ e2 h؀3ƾM-1l4{PQ$ _mLB|z/ܕ  ny5 9Þ$Np:CcyB|B"t]UK@5KR$§w@W4#;C _ * پ Qڦ =B"@hjCV/YB$( TBPmZAۆIkj2j4`#(@@z}@bE P%^Bf# = @dY2~tc* $ikAe}\ծ&!+^1*Bh@8bs3&Mf*6TrW ^ҕ4=l]9x*-ضa1>n͛0QEoa2xS&$449rP [*-|({AE@8~KfKTh.IBP>N67jd 8ػUjWbƓb˱I|$ngh4VoKH념0dq﷬סưϚ~|յA"9_\qrOdgJxu^u!m+'GBWE TX"ka+D82f#VZ(~mu=]/&TAV4]<7xy,= f>u`qB]/ IW~6 _{5U{BVwK_ >yѲjƿ'D.Xk7!/LJsHً&/O u9n^U&?GխsY2Wu+WTa\EޔT޳!lUJP[3>zCi}H_NdK8|2|szi=c1ߘ8bU߼-cDDi+=Ū==t^yBҞugD^.XYy)M3 -{qv!BWÆe@1YrP۩mL@!wTU@Q8K'~sxx|: {)Gk+|5dfH8kjw ^vf~eŏ u 2i9`zޤ{ /YV8XKD}:^E~!\O9`zUb|Y'tCŒPFs'kȷA۟r;lǝ1.Ij4U %,gU_RÚk-LN{X`BgO#*Tsq4Cis B Ja@2 '|>f6z?ոYzgĤGlYu l/k,ZN鉣X Aؽ+6"/LJq{VlEfr#y:lV, y-ߩ;na&ê߶Ѷ.ۄѵ0gЭEVea&BiB$}B]Pgn詤}OPa&i\նp"b~0L[w&%Ta<8mO(ڬ?E֦؇TsS绿zP+$BZ!B]RŸ܅_U5q_"hPUAh:UU+ƞ~fPKbUc"/LJC"/ዕ]ڒ8c߄433$H"_A[x`<"1nlk%˪#DÁjٲ.tA(f]2MBI+]hdծ ~BW~UzM$U_t zxԛ`Bho+Bqv5 o-Ꭰ"R,sIoyO܉97H* _!^/d /'s(> pr;G? Y>OkJpx޺OCH6jƜqF'K{G$Rcm7Nj&cRؤk3f28H{ӵ>I8륾ƶ9tB[eU(Эv3CO-mH$H Es BE26-$4]ּ1+>IcxI@_YU>J(w@w/Besg<|vTB!~% u@P{6g7TG(:pG'}U.Pm}FvH.dlpYQcNJ1nW7۲,[Z%op$aTwPm׺eU!­m_@"IWgtpUaMcB R h3$U{d6j^{ ʭ-T/k«jqνgν)!0p#7##'I{ݗ{w?|"4IΨ/WōO,Fa#ЏDdHI*ⴣ %E1f6p&! bi=b XQu21eb>u<#RQD8qr>2pFVG>(wg.3u*PL3U{_H"0bdhp1ԭukBPUA̗$Azwd@9-w?zvOݏ;~D7_ƶڟ:E}xFͽ0?HRx]! `x,nA|ŏ*zƽP*3Qr0jP.*v`񺺘?^#jpQ]пG&.8|G.~$*ΊďNJ1Gz6 tE_@m]V!$MwVs3JJ"D_NYa/C L$P> -ȀT`7a1xhkNcE-G/jsUE_{><_|[$1)< O'htÃ[Vei%SڝMXS GVތ.y>,^OqCr0GeZVI/u1`Mm:_mW?s6 fo/r,!KHI3qIn"E>n,^Z~VjJYCUl|..=‹ ZNV+|vڮ/`c{4װEl  r !뽳 B,wE,wY["VR4KVEBV.|p#"411$bS.UݭmT.4nԗݚWTBhJ@̅hV\jQ^D7wKp[=Bb90B^HkM'Y"6u2毨O!&7i*$Hτ,jmZU]rU /#`(1[>jZO1wΫM͹@CgYz7{rj5b]ET@\GGw*.]AJ$m]2 Z!fqTB!=χyo~5Mp]5mt]gC*.{]r~دPK!SUp'ҝ;Rӄ:˯`&fw+*-4T瓴r 9@>@8<~B/3/情8*46#PYe--wE֝2$U@ կ:)DE ut:I*|P$$mWq#jp&4!ꖯ(ɣPVU(]tˮK܍2քAUp @[MV6@jtE{"N!$igIFi_:X)7rhUUP\h,l]nlˀV؅gRfࣄ\U6@!*ԐpG9~ptdr7X8QUg+ 9-5< !NDm]}t/ Cţ>˹`J?uxrp#@!(RPbW*5e@y9aU0qPL\{.0@#B;0@d;py2/'Ҁ ;p.-߁ @s3L)H8@54gBI~ADO޻h 1O}wM@A`nq 0>p p@]{1BȲ>>Nyew43&B!{Em-.o +{I^`wc dbJ5 =wUkk4ϧ?:5"λ[# e׻?ǀ\BNJp氣ECOpir>8{L6~<7 e{.SFѓnX稨ǤCyf !P- &ax1k> ^ZTEmh|Ll7p^&Jxo08{$[3L!n/X(Xz=^ۤDf~}ڵ"E>ǵ]YsslBHzzWg}oUM{NQ !Pܣ5DU[l,kBQ˝C !$*S3Ëz; d,qm uZ0mH%>8ZRgp>WrZ2=sR)@W !pOr-e<Hi9YNqܔ3XC !HcaUU]6  \ ,.pW.17ݭmZ.C4*BiAl8;^1=+2",X5KJWk>EEϼ{Wmn+j L>'^kq>#5+pqݤ>]h}JdZϜ 0gs,?w<& GQ[kM XU#5+0~ ĩQo[ζ.b{@yx)-Xr[?7eqGIqq'N _vx~fلN͛q!.>\9mFxp/ى?w,ݼ+Wz?y Xw% zQznw&cxepٷ+w?\6&3F$Lm5u嘻lیe5ոatN>uNFM߾ہق?[Y: p%eMWY6oz⃳GCB,#^nzi?BH!y|aio11#ZىiO/5lTߏWF¬1G0%;:z\g" Iqiӧs%z܋EoW~g0ނݽ;v2kvRWׇ{?;Pe 'BMCYAhߏ&Jx$ڵ _v ۇ_ Ol) nYW:tսuf,4⺏KZlV]^^f[^GIuqw'<J0oM-i+ [ooբKbѪ<}va->9.yן9?k;"tvE91xv70/I/z7z\˱0^r+㜶 !T .<|N> X B-||yr3b--/Ӟ8v`-|Vk s>v{wbk_5=U[ܚd'qٶbv1^픖y{匷I&= Yp 4+fᒻBĖt0 M5ۇp's5Lj̓}wLYm[ xVwڭ?FH@yE%BH:_88D yN5 /{-ZdC]W~\֣(+Ҍ_ p5<׾e龬 om*Ñ} nm-_R+A^aMxx7ņ ţzbЩݵg"\aN;e0|xr!Bm8cgXN=HBqxI$I8q҉'bקf+~Ǔy}&zVn25e?Pzag_zN>]!Oöu !7++0ez^x3zhp +WⰢlO=7keB(1wtvO9KO=1v.E}Vf%/|7ի 8ر=Z_ _qŲu Ƭ3txo|1gؓFLEf6oYnFk=,f؞gl>s` ^/gn_!/Ž/{_z?pjW֍E~~L )xot)λ[s,STz{'3ǎMnɍ8o6cG:Fȸ>xopfqAi)تMN]mΰkփK];w^yu7qO^𾇻wRxC 3jNXmk0a3O x񶤶Y*1j!/v^\|UÏ% CG`\6 jX=Sb'MXӚ|0Jsq/*ֻs e{2~]]z=6-YXg>sOpřgbꤩOV]ؽ{7>x#Uc/U'n7AM6 w!1 9c[1jNܿmȢB2JUb)ۉm⁣~jDx|g%&ۊ󵱼 Ktu^*ۉcm3K?p`pVesnnnv[n*V9\YmAZɋW;vrsD!;vjS׍S{{xIwOYo/x֭~V`ރwOMsժptbzElĈx𢙸qpKa-.֜]3$OoۉkCU^agG XUU` O åp^rʔ8mΗfN`.=,X}*׵ո* { -phleOs動fqn sۖNb (ZVd}k\+^xm<ףߚj!)$u)<} JjA9d6 |*n]JC]nh{ir3ԧƿn1goZxp˅rKNזVu+n &\f?CgNXa8ѯ( +%lƃ"H05"7*0m-'v9;K7֚l/dv:Ӛ]L?t,d^\IuH8/7ݻIG3}J!\ `l/`̘1|Wiczi+֕1űJ;2\m7-69}8ov78kZ!g֗b|pH2~+JEcƄ5$TG#,zx/g;857o.^刷ŕH;gww[^/;ݍȵ?4o'[ނʃؾ@{[4c~`վ!2qQ:Uj=9^,➌O5*T_#R&)c{uO/`5Ǹ}.:y,*K֬WұU|/~n%扴׶M\xmG}ɸc;9(wX܌ \rdwx\xdVJZ{WcFA]jm|.,^2o۽6g%U`)obŪU^k9vjC׀kƭo_zkP[WMDn2nhxKClb6o| p+r= |.ƭ-[,5y !)DkBqOq~>n^>w2/݁gW_kf5صYz,mJ Xߟ3w_U=,} w,] e;O3x>+㛾#X;#-cidA5x:<|&J\y8w.\` ^9̚u xK/.zՏTIfP;-qGeX`MUXE޽O@~*loRϱn:|t[w^sX<8\^_.Nq,p.ֽKoDhߦnhQzB ~9g Y%;ZF`ѻ;_fO=3ȑGv(읉%xi ҄?='O66~`Oc G=",K+h $y$|hhGdYfF]ƍq8|\O9Cʷaۖ#ҾQry#p[O6!"J/@Ap:]|?[5Em_}LäA9@ ouad܈iG\?9J|x㍘VTC8r,z.>~{ny:+_}@ Cqq0P/`kmƒnĴ'=?e"،͟mW&oE>iY?B!Kz UE@2|o~[_ӍW !sW;F( xRsuljlٻW!A{ZSlUty|tP Taz^-B(a,Ĺ#G<)S7xK͙ !P5@χ 'w'c67@v}5-j OV!lO(Mxyi֭_u@.p!V/SK6w3ó?=ΞdXawB!w>,\yT6vݺڀ;7>߮]R`mA +P%C2#Ӫ+x.{ct, de3 R|U;YgnNBCġ@EmGZeC>R#, Lz(p"Y`SrlAiu=PY[Uhз/Ωbx^y,Ç߄'^9W !{G~!B5p `5#f A4dJOGBQ8cl>jxkA\Bfq0/:W !{땸7{,nXۼkFt7z#G9s+ΚO QCsyB)\5Fpc=v@^`/r`- ,H]v458e,pqP݁=z Bqow L@`,O.!;fW!!9Zg^t ۆB,yxWo`B!7A!t.(BŝB!wB!P !Bq'BŝBB!N!;!B(BB!wB!P !Bq'BHGyȓDָ[$rNx.;=*ӑ umu aw1  [Ԋ%^{n~2q/ s*rFXaզm|ۥa=:so'˩n~֍:]_^w{V&CDtR[^xbm|:ՅLk :jmpwֿpOH;=XO]V$/yƊ87?puv)sN8z_"uv{ެizV.Nq{;=!7ݻI[/ qXVBxwJ3Xy۷BHgt'lZSP !Bqd9p!BqG-&|^*:=Hf[BiUT(8BH{{:"qq|W vz# ԥU|,!t qwv~FޙH\*пO/ϖXG?',ݱ*Liu :9r99ol䓼H"ZЭ,hvfK4ܔiݭEo%.v0 Nө"VzɊT~:{os+z%q =~l!:Pƚ &XcGR6h0@pٶ;U;)Xͱnk9['͛3E},j-QJEkB:nwÏ,FuktzUc n{JIڣP[USRnuhog~z,񥅰'f !ZkXÜҋ-.Dڑ&֖߶P>3dcҼc[ku>;UU }u69,:~těUN9-nK-v.+VVߜ҉@ͱz[*u;K,Sxn,XBܖuqc{7w2K|UX鸍Frowz;k'XvƲ6XF,k:л)g|%iCIЗ'B9[+:!6 ).[7[swJ#V|Wc[.]NC2 >+ěot8!tCNݩ{I Ś| m`ϼٯӦOtSѽH%k$*7DۄNHKʒT, -oG/Ӧ­Ҋ*4Znۥi?]'V-S])t`t ,EQͽFqltZn{ XiZJ"ݛ`Ü]c]t!BqamG[" VZvD40n7k5&/6,S !$HkcjZ;J[]Es:Aq's'ѫ,cYˎ֍mFF;[S П;Iu A5ofuy]ZXViFf[eFVi[NJks'īp93O 3Q0ccαs*kUz%/7qA;Ý?w3NLkN"c/VvavercM^5t}N(.y0KvQzHǀϒtx6m[M_Nᄴu2n?w7kinH:!PIZ?w;vc[YnXB4夻;I#aimXf4finuv8}F=Csk@RL)ccܖ#VX'4^xr_tr$Cq'ii,np/bl5^o$u=(NYb9MrHጕ~s&#~tsXu =?wsx>ٓÝtD|t:lrbg5ݍ7aVKZ9z.0vNrj߮VoUVŝ\Rt$E'(vmv ŝ (89l#[N!\Nl3g.V&pƍXy}rCq'b+JvM:lq#^Qw;^$iR](tPϝ"v5Dj G/8ҖtJH' iݞZp:VП;!mA(O7Лq-#ׯ';ŝN(Fc:\,r2Ĺ5bU|ȠU}vU<~ci3SQYnpBIa74X,;cY\n_vbl}e5K˼&K<:9Cfc95D[EQ,VNeZu\Ndŝ!sooiiuH[(fD]nʭQı|@;%1إC($-=;{[lex+kGNIo-O҆D;n\,h'NNL5fZ˟{kZt<B(tVy7 !!VZ !$--xG vxrjBŝN/{?(;I[,!NH'#9NIPG!P !ʰ[tzϝBq'Bt$HUNh!NH՟{[8BB!$a<П;!NH' !IZܓ }'NH {,`?w'/oyB-O(`Zy56F-wB:'ݟ+;ve,nKFY !wBL ݫv7͢jltny9ذ[ swEwhm=! ž?w;skv$kl[;!*&Ao}w:-wB:&'ii{v+^}xO!wBMۉsݍPwS~n3DNŝK&Bq'][@pB!Bq'BŝB!wB!P !Bq'B(BB!N!;!B(BŝB!wB!P !Bq'BŝBB!N!;!B(BB!wB!P !Bq'BŝB!wB!N!;qKޣB=bN!mUmmW>Ca<B=E-iKawvm@ޝBHGݻ{+.np9ƪLVqz-,qdj@-t7!r!b;+*ܮ ڍ%i;*<lS 7B:;"6nd k鷗H:uۻҧeO!i,N,G\Z[(xBڃN*\<ykwI-BB!]Uno4$Zݶ]F\;!P/zomFVbN! W#B(mgѧR !P !Bq'BŝB!wB!N!;!B(BB!N!P !Bq'BŝB!wB!P !;!B(B@ HŝB|#߽ A{+Ϧ'{_F J>}s[~{AZ+  ۗNH\`6I 틝{ʰs6F" .Nq'V>lnp̝BB!N!;!B(BB!wB!P !Bq'BŝB!wB!N!;!B(BIiq_YIxT !rn%n{7mT̼t51/lcb.Ck#Y+^j/!h9{,`L5mT,3/<':"Ѣ刷_+MSN-M!}EX q۶8Vaâ,š.[txtv*No9Ìmro'sfaBH'J,`eEFIv,Q15Ҵ[Ū5hj:[MؕNģ-ՐL B!)*{C#-^,E4k.vbs[Y[Ègnvt߭n.݃W"! ^o o5ÄYtPvH\ٍ {t;SXC!Dy5?nh/೒MKpnϽ$sB!mh#VĜƫ^6K77w{iC<b;u;uˉv>ݤ|@ŭ= DkPVǘZ U=+>n"Y.+ۮ#8(;cA1'3Xy۷.;?B!m!\[ 6}*BHAq'B(BB!N!;!B(BŝB!)M@H +2M TUM2.!#[ g[k+sN ،jMPR]k--O#K!2wBkc$IŸm 7b*6N8aǓ2 e[UU#+3  َ-elPE98y@!77S !PT~{l,k ]Qt֖Ž/sc47\d%ڄ: /y)բ]jsĄ;!iƛ 7)BUU~O`[yl+/f;ա] Y iF0emSemsԈظ /m塭"cKY5ա]Uß;!$6B,+FVhnF1Nl+mٮ1U Fq'$ Q7(IAUmk0Jq'ucE&i E(NV&B6m.`k\jW;!}nknnav}}uOf{6&뜛[W{\U^ɻZLVR IkqoLyy]PWpsXnne7VNQmGuq:ή[s[,><׮wBWHk-ӷ78cqn[D^^2;?~.-*:Vu b]FV/UڕN=^PPSs1mM@(q FmKFdUZD׿@n/r6 fAt5gw~hBRMޣ&*PSUxoCi-cLf[Qo#](:Eઽ#ljk)ז5;!$ ғ* GWXݱF~JU*w[[#-w/VkO˝$o2c.Xeq*jvk{l+# vw=ӥKyHֹvjc] ɺO+ŝ VtqUTUUDem-of]O]hFUU۸GJzVPt[\؝/ ! [ 7[}-?xpe9UUmU>Cinyr;VJFV} \Gv"IvL UQB*5Jq'$ PHCShnB0[Ch+^߮wB^]szN EU <{l"#`5϶VOC@C(ʁϟIq'|8ax% Cqi&*)ʛj܇)@e<'I]̣KLMnRE˂ t^d9Ϗ'^a(77 ": n>ofE_M+ ߵIЂo$g9 $wsPV :<ԬUƬ:FQOAŭnJz4 thu9Mwy?~u|WZWT܁yb|9c1PƑ&ȘD٭*MbʘUGٯzr~AA(- )ONoūvoΟ˝Y#~$!adY:je( [aL(w@Pr;$JCK2y//Eaү;I M6ē$K5`F|̇pIENDB`SimGrid-3.10/doc/html/dir_9127e27df816de438f1c7aa61d43de1e.html000640 007661 000620 00000014034 12242224150 023117 0ustar00gierschand000000 000000 SimGrid: examples/msg/sendrecv/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__XBT__fifo.js000640 007661 000620 00000000632 12242224150 020435 0ustar00gierschand000000 000000 var group__XBT__fifo = [ [ "Fifo constructor and destructor", "group__XBT__fifo__cons.html", "group__XBT__fifo__cons" ], [ "Fifo perl-like functions", "group__XBT__fifo__perl.html", "group__XBT__fifo__perl" ], [ "Direct access to fifo elements", "group__XBT__fifo__direct.html", "group__XBT__fifo__direct" ], [ "Misc fifo functions", "group__XBT__fifo__misc.html", "group__XBT__fifo__misc" ] ];SimGrid-3.10/doc/html/group__XBT__log__cats.html000640 007661 000620 00000030724 12242224150 022001 0ustar00gierschand000000 000000 SimGrid: Existing log categories
SimGrid  3.10
Versatile Simulation of Distributed Systems
Existing log categories

(automatically extracted) More...

(automatically extracted)

This is the list of all existing log categories in SimGrid. This list was automatically extracted from the source code by the tools/doxygen/xbt_log_extract_hierarchy.pl utility.

You can thus be certain that it is uptodate, but it may somehow lack a final manual touch. Anyway, nothing's perfect ;)

  • bindings: All bindings categories
    • jmsg: MSG for Java(TM)
    • lua: Lua Bindings
    • lua_comm: Lua bindings (comm module)
    • lua_host: Lua bindings (host module)
    • lua_platf: Lua bindings (platform module)
    • lua_process: Lua Bindings (process module)
    • lua_state_cloner: Lua state management
    • lua_task: Lua bindings (task module)
    • lua_utils: Lua helper functions
  • graphicator: Graphicator Logging System
  • instr: Logging the behavior of the tracing system (used for Visualization/Analysis of simulations)
    • instr_paje_header: Paje tracing event system (header)
    • instr_smpi: Tracing SMPI
    • instr_surf: Tracing Surf
    • instr_trace: tracing event system
      • instr_TI_trace: tracing event system
      • instr_paje_trace: tracing event system
  • jedule: Logging specific to Jedule
    • jed_out: Logging specific to Jedule output
    • jed_sd: Logging specific to Jedule SD binding
  • mc: All MC categories
    • mc_checkpoint: Logging specific to mc_checkpoint
    • mc_compare: Logging specific to mc_compare
    • mc_dpor: Logging specific to MC DPOR exploration
    • mc_global: Logging specific to MC (global)
    • mc_liveness: Logging specific to algorithms for liveness properties verification
    • mc_memory: Logging specific to MC (memory)
    • mc_memory_map: Logging specific to algorithms for memory_map
    • mc_request: Logging specific to MC (request)
  • msg: All MSG categories
    • msg_action: MSG actions for trace driven simulation
    • msg_gos: Logging specific to MSG (gos)
    • msg_io: Logging specific to MSG (io)
    • msg_kernel: Logging specific to MSG (kernel)
    • msg_mailbox: Logging specific to MSG (mailbox)
    • msg_new_API: Logging specific to MSG (new_API)
    • msg_process: Logging specific to MSG (process)
    • msg_synchro: Logging specific to MSG (synchro)
    • msg_task: Logging specific to MSG (task)
    • msg_vm: Cloud-oriented parts of the MSG API
  • sd: Logging specific to SimDag
    • sd_daxparse: Parsing DAX files
    • sd_dotparse: Parsing DOT files
    • sd_kernel: Logging specific to SimDag (kernel)
    • sd_task: Logging specific to SimDag (task)
    • sd_workstation: Logging specific to SimDag (workstation)
  • simix: All SIMIX categories
    • simix_context: Context switching mechanism
    • simix_deployment: Logging specific to SIMIX (deployment)
    • simix_environment: Logging specific to SIMIX (environment)
    • simix_host: Logging specific to SIMIX (hosts)
    • simix_io: Logging specific to SIMIX (io)
    • simix_kernel: Logging specific to SIMIX (kernel)
    • simix_network: Logging specific to SIMIX (network)
    • simix_new_api: Logging specific to SIMIX (new_api)
    • simix_process: Logging specific to SIMIX (process)
    • simix_smurf: Logging specific to SIMIX (SMURF)
    • simix_synchro: Logging specific to SIMIX (synchronization)
  • smpi: All SMPI categories
    • smpi_base: Logging specific to SMPI (base)
    • smpi_bench: Logging specific to SMPI (benchmarking)
    • smpi_coll: Logging specific to SMPI (coll)
    • smpi_colls: Logging specific to SMPI collectives
    • smpi_comm: Logging specific to SMPI (comm)
    • smpi_dvfs: Logging specific to SMPI (experimental DVFS support)
    • smpi_group: Logging specific to SMPI (group)
    • smpi_kernel: Logging specific to SMPI (kernel)
    • smpi_mpi: Logging specific to SMPI (mpi)
    • smpi_mpi_dt: Logging specific to SMPI (datatype)
    • smpi_pmpi: Logging specific to SMPI (pmpi)
    • smpi_replay: Trace Replay with SMPI
  • surf: All SURF categories
    • platf_generator: Platform Generator
    • random: Random part of surf
    • surf_config: About the configuration of simgrid
    • surf_cpu: Logging specific to the SURF CPU IMPROVED module
    • surf_cpu_ti: Logging specific to the SURF CPU TRACE INTEGRATION module
    • surf_kernel: Logging specific to SURF (kernel)
    • surf_lagrange: Logging specific to SURF (lagrange)
      • surf_lagrange_dichotomy: Logging specific to SURF (lagrange dichotomy)
    • surf_maxmin: Logging specific to SURF (maxmin)
    • surf_network: Logging specific to the SURF network module
    • surf_network_gtnets: Logging specific to the SURF network GTNetS module
    • surf_network_ns3: Logging specific to the SURF network NS3 module
    • surf_new_model: Logging specific to the SURF new model module
    • surf_parse: Logging specific to the SURF parsing module
    • surf_route: Routing part of surf
      • surf_routing_generic: Generic implementation of the surf routing
    • surf_route_cluster: Routing part of surf
    • surf_route_dijkstra: Routing part of surf – dijkstra routing logic
    • surf_route_floyd: Routing part of surf
    • surf_route_full: Routing part of surf
    • surf_route_none: Routing part of surf
    • surf_route_vivaldi: Routing part of surf
    • surf_storage: Logging specific to the SURF storage module
    • surf_trace: Surf trace management
    • surf_workstation: Logging specific to the SURF workstation module
  • tesh: TEst SHell utility
  • xbt: All XBT categories (simgrid toolbox)
    • graphxml_parse: Logging specific to the graphxml parsing module
    • log: Loggings from the logging mechanism itself
    • mm_diff: Logging specific to mm_diff in mmalloc
    • module: module handling
    • peer: peer management
    • replay: Replay trace reader
    • strbuff: String buffers
    • xbt_cfg: configuration support
    • xbt_dict: Dictionaries provide the same functionalities than hash tables
      • xbt_dict_cursor: To traverse dictionaries
      • xbt_dict_elm: Dictionaries internals
      • xbt_dict_multi: Dictionaries of multiple keys
    • xbt_dyn: Dynamic arrays
    • xbt_ex: Exception mecanism
    • xbt_fifo: FIFO
    • xbt_graph: Graph
    • xbt_heap: Heap
    • xbt_lib: A dict with keys of type (name, level)
    • xbt_mallocator: Mallocators
    • xbt_matrix: 2D data storage
    • xbt_parmap: parmap: parallel map
    • xbt_queue: Message exchanging queue
    • xbt_set: set: data container consisting in dict+dynar
    • xbt_sync: Synchronization mechanism
    • xbt_sync_os: Synchronization mechanism (OS-level)
SimGrid-3.10/doc/html/dir_a8962eef8d7cf558029c91eeda0985ef.html000640 007661 000620 00000016374 12242224150 023242 0ustar00gierschand000000 000000 SimGrid: examples/msg/tracing/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
tracing Directory Reference

Files

file  categories.c
file  ms.c
file  procmig.c
file  simple.c
file  trace_platform.c
file  user_variables.c
SimGrid-3.10/doc/html/group__XBT__fifo.html000640 007661 000620 00000015754 12242224150 021000 0ustar00gierschand000000 000000 SimGrid: Fifo: generic workqueue
SimGrid  3.10
Versatile Simulation of Distributed Systems
Fifo: generic workqueue

This section describes the API to generic workqueue. More...

Modules

 Fifo constructor and destructor
 Fifo perl-like functions
 Direct access to fifo elements
 Misc fifo functions

Detailed Description

This section describes the API to generic workqueue.

These functions provide the same kind of functionnality as dynamic arrays but in time O(1). However these functions use malloc/free way too much often.

SimGrid-3.10/doc/html/structs__model__type.html000640 007661 000620 00000013464 12242224150 022050 0ustar00gierschand000000 000000 SimGrid: s_model_type Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_model_type Struct Reference

#include <surf_private.h>

Detailed Description

Routing logic


The documentation for this struct was generated from the following file:
  • src/surf/surf_private.h
SimGrid-3.10/doc/html/dir_f4a0ada2a696f9fa1f0722f1cc886f9d.html000640 007661 000620 00000014126 12242224150 023262 0ustar00gierschand000000 000000 SimGrid: include/msg/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
msg Directory Reference

Files

file  datatypes.h
file  msg.h
SimGrid-3.10/doc/html/group__XBT__set__curs.html000640 007661 000620 00000024273 12242224150 022037 0ustar00gierschand000000 000000 SimGrid: Sets cursors
SimGrid  3.10
Versatile Simulation of Distributed Systems

Macros

#define xbt_set_foreach(set, cursor, elm)
 Iterates over the whole set.

Typedefs

typedef struct xbt_set_cursor_ * xbt_set_cursor_t
 Cursor type.

Functions

void xbt_set_cursor_first (xbt_set_t set, xbt_set_cursor_t *cursor)
 Create the cursor if it does not exists, rewind it in any case.
void xbt_set_cursor_step (xbt_set_cursor_t cursor)
 Move to the next element.
int xbt_set_cursor_get_or_free (xbt_set_cursor_t *cursor, xbt_set_elm_t *elm)
 Get current data.

Detailed Description

Warning
Don't add or remove entries to the cache while traversing

Function Documentation

int xbt_set_cursor_get_or_free ( xbt_set_cursor_t curs,
xbt_set_elm_t elm 
)

Get current data.

Returns
true if it's ok, false if there is no more data
SimGrid-3.10/doc/html/inside_cmake.html000640 007661 000620 00000040721 12242224150 020231 0ustar00gierschand000000 000000 SimGrid: Modifying the cmake files
SimGrid  3.10
Versatile Simulation of Distributed Systems
Modifying the cmake files

Generalities on Cmake

What is Cmake?

CMake is a family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice. For more information see official web site here.

Why cmake?

CMake permits to developers to compile projects on different platforms. Then many tools are embedded like ctest for making test, a link to cdash for vizualise results but also test coverage and bug reports.

How to add source files?

If you want modified, add or delete source files from a library you have to edit <project/directory>/buildtools/Cmake/DefinePackages.cmake. Chose the section you are interested in and modify it.

set(SMPI_SRC
  src/smpi/smpi_base.c
  src/smpi/smpi_bench.c
  src/smpi/smpi_c99.c
  src/smpi/smpi_coll.c
  src/smpi/smpi_comm.c
  src/smpi/smpi_global.c
  src/smpi/smpi_group.c
  src/smpi/smpi_mpi.c
  src/smpi/smpi_mpi_dt.c
  src/smpi/smpi_pmpi.c
  src/smpi/smpi_replay.c
  )

If your source is always added to the library, you are set. But if it's optional, you must ensure that it gets added to the source distribution when not compiled in, or it may well be missing if the archive is built without the option activating your source. This is done by adding the files to the EXTRA_DIST list, as in the following example:

### If f2c is installed compiled source other-whise source is only copy in the dist 
if(SMPI_F2C)
  set(SMPI_SRC
    ${SMPI_SRC}
    src/smpi/smpi_f77.c
    )
else()
  set(EXTRA_DIST
    ${EXTRA_DIST}
    src/smpi/smpi_f77.c
  )
endif()

Don't forget to run the "make distcheck" target after any modification to the cmake files: it checks whether all necessary files are present in the distribution.

How to add examples?

First of all, are you sure that you want to create an example, or is it merely a new test case? The examples located in examples/ must be interesting to the users. It is expected that the users will take one of these examples and start editing it to make it fit their needs. If what you are about to write is merly a test, exercising a specific part of the tool suite but not really interesting to the users, then you want to add it to the teshsuite/ directory.

Actually, the examples are also used as regresion tests by adding tesh files and registering them to the testing infrastructure (for that, don't forget to add a tesh file and follow the instructions of section How to add tests?). The main difference is that examples must be interesting to the users in addition.

In both cases, you have to create a CMakeList.txt in the chosen source directory. It must specify where to create the executable, the source list, dependencies and the name of the binary.

cmake_minimum_required(VERSION 2.6)

set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")

add_executable(Hello Hello.c)

### Add definitions for compile
target_link_libraries(Hello simgrid)

### You have to put all new files in the apropriated section 
### If they are not there, they can't be on the dist package. 
set(tesh_files
  ${tesh_files}
  PARENT_SCOPE
  )
set(xml_files
  ${xml_files}
  PARENT_SCOPE
  )
set(examples_src
  ${examples_src}
  ${CMAKE_CURRENT_SOURCE_DIR}/Hello.c
  PARENT_SCOPE
  )
set(bin_files
  ${bin_files}
  PARENT_SCOPE
  )
set(txt_files
  ${txt_files}
  PARENT_SCOPE
  )

Then, you have to follow these steps:

  • Add the following line to <project/directory>/buildtools/Cmake/MakeExe.cmake:
    add_subdirectory(${CMAKE_HOME_DIRECTORY}/<path_where_is_CMakeList.txt>)
    
  • Add your CMakeLists.txt to CMAKE_SOURCE_FILES in <project/directory>/buildtools/Cmake/DefinePackages.cmake:
    set(CMAKE_SOURCE_FILES
      CMakeLists.txt
      ....
      <path_to_your_CMakeList.txt>
      )
    
  • if you add tesh files (and you should), please refer to the following section to register them to the testing infrastructure.

Once you're done, you should check with "make distcheck" that you did not forget to add any file to the distributed archives.

How to add tests?

Unit testing in SimGrid

If you want to test a specific function or set of functions, you need a unit test. Edit <project/directory>/buildtools/Cmake/UnitTesting.cmake to add your source file to the TEST_CFILES list, and add the corresponding unit file to the TEST_UNITS list. For example, if your file is toto.c, your unit file will be toto_unit.c. The full path to your file must be provided, but the unit file will always be in src/ directly.

Then, you want to actually add your tests in the source file. All the tests must be protected by "#ifdef SIMGRID_TEST" so that they don't get included in the regular build. Then, you want to add a test suite that will contain a bunch of tests (in Junit, that would be a test unit) with the macro XBT_TEST_SUITE, and populate it with a bunch of actual tests with the macro XBT_TEST_UNIT (sorry for the mischosen names if you are used to junit). Just look at the dynar example (or any other) to see how it works in practice. Do not hesitate to stress test your code this way, but make sure that it runs reasonably fast, or nobody will run "ctest" before commiting code.

If you are interested in the mechanic turning this into an actual test, check the <project/directory>/tools/sg_unit_extractor.pl script.

To actually run your tests once you're done, run "make testall", that builds the binary containing all our unit tests and run it. This binary allows you to chose which suite you want to test:

$ testall --help # revise how it goes if you forgot
$ testall --dump-only # learn about all existing test suites
$ testall --tests=-all # run no test at all
$ testall --tests=-all,+foo # run only the foo test suite.
$ testall --tests=-all,+foo:bar # run only the bar test from the foo suite.
$ testall --tests=-foo:bar # run all tests but the bar test from the foo suite.

Integration testing in SimGrid

If you want to test a full binary (such as an example), then you probably want to use the tesh binary that ensures that the output produced by a command perfectly matches the expected output. In particular, this is very precious to ensure that no change modifies the timings computed by the models without notice.

The first step is to write a tesh file for your test, containing the command to run, the provided input (if any, but almost no SimGrid test provide such an input) and the expected output. Check the tesh man page for more details.

Tesh is sometimes annoying as you have to ensure that the expected output will always be exactly the same. In particular, your should not output machine dependent informations, nor memory adresses as they would change on each run. Several steps can be used here, such as the obfucation of the memory adresses unless the verbose logs are displayed (using the XBT_LOG_ISENABLED() macro), or the modification of the log formats to hide the timings when they depend on the host machine.

Then you have to request cmake to run your test when "ctest" is launched. For that, you have to modify source <project/directory>/buildtools/Cmake/AddTests.cmake. Make sure to pick a wise name for your test. It is often useful to check a category of tests together. The only way to do so in ctest is to use the -R argument that specifies a regular expression that the test names must match. For example, you can run all MSG test with "ctest -R msg" That explains the importance of the test names.

Once the name is chosen, create a new test by adding a line similar to the following (assuming that you use tesh as expected).

#  ADD_TEST(test-name ${CMAKE_BINARY_DIR}/bin/tesh <options> <tesh-file>)
#  option --setenv bindir set the directory containing the binary
#         --setenv srcdir set the directory containing the source file
#         --cd set the working directory
ADD_TEST(my-test-name ${CMAKE_BINARY_DIR}/bin/tesh 
         --setenv bindir=${CMAKE_BINARY_DIR}/examples/my-test/
         --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/my-test/
         --cd ${CMAKE_HOME_DIRECTORY}/examples/my-test/
         ${CMAKE_HOME_DIRECTORY}/examples/msg/io/io.tesh
)

If you prefer to not use tesh for some reasons, prefer the following form:

# ADD_TEST(NAME <name>]
#          [WORKING_DIRECTORY dir]
#          COMMAND <command> [arg1 [arg2 ...]])
ADD_TEST(NAME my-test-name 
         WORKING_DIRECTORY  ${CMAKE_BINARY_DIR}/examples/my-test/
         COMMAND Hello
)

As usual, you must run "make distcheck" after modifying the cmake files, to ensure that you did not forget any files in the distributed archive.

Performance testing in SimGrid

We are currently in the process of adding an infrastructure for performance regression testing, but this is not related to cmake anyhow. They are thus documented elsewhere, in Section Infrastructure of the SimGrid Performance Regresion tests

SimGrid-3.10/doc/html/SGicon.icns000664 007661 000620 00000214503 12242224150 016777 0ustar00gierschand000000 000000 icnsCis32vI`gaS ipoYROROPjg4*J S`& )%`O E/S*0+.:x?F|e%H0#G-0 |!.t1&.(yS`Q+&Qsm<FOLXILS%KHf $UZZ\]cYZk1OXhdigD)=1s. |{~'QCt ;B<t_ mJBMFJLLTz;rN8#U*HM3.5JO=J@dsb+E=aUn|xsx:vq 9M}j@_Ms8mkAi0Ÿ\,05i bg5CMPۇ}n#F˻+":Ib| / E 桷BTPǓU@5Ù uy V'c*ȑsy( TFqxGil32E]cnmecR9Rs~ypkphdcinjZZ}u^ns[JNQO6%XecFysD|_K}B_t8y ]ni8*v,+)^E7_Vh.8787!4x^a~}JX]!8* 1.e*;Ld>*9=D{@8- )86,+67%r07 Q_ZXo"9 C41(9)9*"'7/@^,+8990nEDK]ebQVh#Rn (hacIc8|2Re\f>h3vYNo_CFr,q2xd+YndggY[Y^nvLbnC~R(Y_hoirjdaxiFys 0MZeddXSf{c(KY_^\KmZžŸuz}U:nkĖ#*ug'X3XCE/FA"qTWJ[YZY5>quu.6[CPJz3GxbC\*JRe*[HBZWG&%FXX<NYarlj7\4QUO@\$B[C7?XMMr5 EZ\\M/lkw73?sWObP{imEODxjƀ?m. Ly@vv+l8mk  Z̺^6kں;zızjvE)J#  -?j` D<|  qPWR]N8D6ٸ<4-/SՍԗF8' `}++KS6@ a,%jp'j 0&v҄ <I! , CQ gݍw~c;5g?""6u#!Vkox'm2zL !YA;! _ (j^.q])#dd4 cޫAY¦1(g!N0 2if!%( ih32QNMEOjozy~|yzsmaIPs}~ liVkdSU]opzzs`i|~}kZ`w|tlmnocW8[mvr[0 W|~uAd~z_.6fqhKu~u1h~v6Rpg|}>+|}?8c|nO~mwj0|khmn{IuB~W/33/kNgX`w;*9*;wbq,mcr !890 .99%a&bmD39/ ,3!;\SsI59)>yiN29.'98- 0897,#49980!/897 493ipic98o99mI08198/%97092dC396)&&199!QyRF59& (051.vxyxTTf3Orax!shmp#pr$+xmW}\erzt`iud~YetVqSuMK~o4iu\&yKzNJ~{Rtwlb7 &\xrb|-^~y_jqpsnlQOONMPjw~n+Y}kt~e$]mjcfkrs~~yp^DOs~q'j~~;Ocrzsgkkiew{~vQ3i~~[NVijhggO;Aa}~sB 8Z`kjkyypaI{zm}ľr~ŀ Ĩ¶XK ƸfHUvƸMƹUaDcWí}ƬKérhƉ/LSSL2ɀ^\D[\DG˵w˜"D. 6[\N34J\\<ſv.ɫkR\LGR5Go˨rU\CK{Q\J?\ZH!M[\XF/9T\\[N6L[\X.Ƀ4T\R~~~w.\Z&†\\/XN[P\Z&9Ư<\Y+M\QxQS\WB=>O\[4bbɻU#U\> ɾ˿%@NVPJ)iP|479Cő1ƌyuƮRs'#$)F0 =r*kO'%)"#8CDB9&dZ7{H Mǯt9 (eئd4-h)>q(yJ>޺P.mGJ XN|]D9>TxT?FjStׅT{^+ $S3/Z</}@S=+76D1 -Z"0   *- r5 It=Uf* 'DPPPPL4:p+:;j`\S B&7ABGM0.g38 rL g0KmkE;   $aC CVyU>39ZRp{& 꿂O'it0:ij8@cxyhF  #8BCGfA"  ;f-P 8: =M!F] aZ6E  Wm$O66'hGOI+ TKʔk 4}xG. Szu諭1kൌT9* ?! -Sӵvnlor{s9_M 6Vy#+D]w~1 &6Hm˵](*AQZ\aij_G+it32(><;:>&+qifecnu]cedj* 9{onr|{||{~qjnmv3$(nux}||}}~} vntf!  >u}}~vtx~~|~~xyK)5) 9]|~~}}~~}}{kjimWHPMMO87uvuttsvs5: [{~}nfiG8HFFA-/n|yy}V*.-3njjioW65 bo|}~}}r\`TMsgQTV5bcav~Yd-b}~|{S5Q^i~}}hPTSU\bckAw-AZQbrh'n|~I Ml}}~}}B07C846xvqa [}~L$Q~}}|J% */O~|M(a}~V H}~}~~}vV%  ,+e}R5/>z~S I}~}\%es}?5}~S v}~~}` -ny%$t}~V ^}~}a FcLo*'~}J v}~}W6Qu }~|,.v~~}9:}~~}Jv}~}a}~}~z*o}~~{E}~}Ql}}a|~}Rs}}b"~}T>x}c M}To|h/|Tp}}V-y|T$x|Y7Se~}V:S .}~s.  [jw,^~|E+6437 O 2g7 6}}y*$658:642>h;VO R|K:;::9:9:3!@U471Wp_3 R~|~J:989:1 )S'( +)')p=saR~M<8989;989;. 9o 3\Z/ R~q;89<1'())(5<9;1 / Fd ZuPzT>89:4 %898:0]"Q[;  OY:89:4 :9 0 (& 8hX   OZ);894!: 75&(  ea  %WU0>8943 (.  t3[O;9:!3 S0UlQ:9:dt"fS:9:_- ;l~H :9: $9~7:9: (!:97=897$489;:">89 8973 ,;9;62  09 ::93  .;:9:>(  .4;9898:=&-4<8898<;"&7=:98962K|$<9;7P+97M .;:9:5 h| -4:97 /{39;3* >899;09L 1:98& *;998<..;9;,K}.;9;, 200%.;9;+ |454::=/.;998;.oi7:99;,0:99:3 ^ 2:9 <899;0 {519;, +;89+ D|U  6:9;' -=899:5 OU+9;. 6;898) 6 iY:892).6889~ IW&;89;92349:9;#u#'"6'*f5%;9:9:!??DF;rc %:;9;9%Zw1'29;9;91% N 1&2:;989;0'p E ('&&8>8&%&' m> ;}zD$+My( Au= AnnLq[I^[ KM- H`3:NX P}|TJ~TK|S   O|O  /~|R  7{}}( d}|Y +o.+i5}~~J  *m{P!Ix,,g5|~( 3hpd` u+f}g6}~|$ B}qXU}|- xg5}~{#?znxC!$/M}N k}h L}~~{" (Jnqzzw1181U}~.2zp#5|~$FqyerinT43*B|}~|F )~|o*}~nWq{JKgdx|CBFH$Os|}}~~G!u}~}[P~,Zs|UU]Yejbhho-%`rgs~|}|H,|}~~{ z}~~}. WvlW5KLHrskop{|}]< cy}~}W g}~]#9zliPAM.I}{~g2, Yu}}~M f~}2%G}xoj-.V@6orpt{|}{|~r/"&K~}~}~U \}~}] %"Ux~wX%3ONO:1hfeiQ*3'-7w~}}}qV[|~}~A [mgs |{a./6B?> ?q}}~}]@734.Qg33(:qy}|}~}P 1&#$& +,/l||~|~}`,$.,)(,1G~~ xotd$k}wwu kfl> Aha `aa_^^_`Z#a^]\a; DՄٷA   YʀÄƄQ  8?ɀŀƂDŽ˹+*4 *aȁǀ ƹƃƀƼu@SA*Zƀ),q~yx}W(,.&VеT[$‚ˬpYplngFJĿňBHG!$OֈTSŁг'*zЀڂܢS/ƌGłTҤ~ e.Gg۳=ās2 zhLW+j+XRUڹ% Āx9(s: AI}z?"Āȇpĺ9ED΁SIbȃsˀʑ$ 9c,TĀǂɘ FͿ98ŀʇ Ā͙" oxB=u ˉ "U2EHY.\1t ͘1ſBm1͘0͚̀5̓c͛y̓ˣ#J̓ ȇF̓8΍V˂͆[ɂ IƴG  n 0˻F$lFWSRX'`˷̀т <#W TľB!:XU[^_WTP'K~ρϾH|w (^_]^\[\]^]^S!Mfȡ?B;iՇ+P u (^\[\[\[^O#1ˬc%/1$42.1ӇH "z/`\[]_\[\[^KEͱ =nJ ɱ '_[\aO>@AA@Va\[^O9ס% Ty- ~/cZ\^T4' |"_[\^(= d: ~ ^[\^ xϫ)&ق ^[\^ s6"\r ^[\^ 8YW!^[\]0 ?4]\Y&b[\Y:)S[\`^6-dZ\ [\XS$H_[\_WQ+N\[\[\\[]]\S#'J_^[\^d@$JT_][\[Z^c="ITa[[\Z``8 (=Yc^[\[\XR%Z˶"$9a[\_Y*aЊئ "F]\\[\\[]Z.]̌әJ_^[\\[]V~ŌԖIT^\]Y* 9ӕQ\[_R3՜ ,cZ\[_MEϼ[P]\[=  ԤD_[\[`K  ԫI_[\[_GZ͗J_[\[_F ѱRLM<J_[\[_E ҵSVS]^bKJ_[\[`J*Y_[Z^F  M^[\^R r Q^[\3 ,aZ\[`M @N\[_F E_[\FRf V^\\[_?  Hb[\\^V_gG\[_IW`Z\[B  A~k^[\PBJW[[\Ѿ Xh >`[\_\RST\^\[_8˻%*0)A/3{@  <_\[\\[\^\[\]7͹LLRUIw   <^^\[\\[[\[[_]<mϼ;?R[_[\[^\O;$^ՀӁ ջ;!>P^_\[\_N=   SA?>=Ze[=<=@!*"a ^j9 D{ο?  fɷ_& fѭ0xʳ s˔ ]2  xɓ&a⏭uyG&  q̗Q[ {ԋ }DŽ tɄ  vǃ {} J W? Ì^ʏ W*ˉ ^Fʩ. j̀CM8ɤ, R@ G˔9X 8Ν ZCϴFS '_ɈA Cβ,ƹ? )\ԁ? KDɠLJ 8aBHD̥TsA~5sED̢T?P̰ C̢U8hı G̢S7c˿h49 Jz{ ̥w6?ṱѼNNY! MGOɱ8S9 m؄QPBgn@ͮCŁ. tvihor' 8}p5Ő~ǀE#ÆѧG &  rE3H3ܩTwxq˴ϒ^ˉ ŀȓ%8Zҩ~"fyIr̂΀˄ǀ ҢOE 2ȀzˁN9pļFIe1ÛǴJ5 .FMpʀ ͻ8# Żقӂ Ȩbf $t8mk@ G^bdddddde:eĐ~; 9ƫU$ ʛ=- &rF=& /weW% UɽtV >ʹŕeYcx㕊F>»b;:/["ѳvbUI7$ 1DR^p|3 r3Cp/ XgاzZ=( $Ae: *CAXRѰA뿊X-  !@e94_4CHV?548Gdd ܨo? "G:BAWg4 !Hd#חZ+0]; Csc(d( >H軗R Gu*1U3"؅4@( 0WwH$s#   ,C0k3 Q~*06 lg(9`/I`K" R_) =tc$,S7 t*H *dS <[r|.8g) S sZVt) ,wo2  G͏4aׄ6 i濌7 %o2 $Xш9( !٥j2  7q/ #ְSD760aÎW, D|<_ӧrB Dz='_~V-Auϡl: &MrhI/1TƣxO+(@\t~jO22Rn´}jN- '4;;;;;;;;8f&%.7F[cYD5," @R-  BqD  +s{:.tB 0Iȍ4 $AFL&8OVg"=:><(=ΐh# $ =; :D:C?D>E_Eu3  0b#^Q By1 Vz0)I&#Q'J N1^ (͝A4Ml)oC %d3&m#is0''N8Bn|A k0(i NO'N|F H)1Dp#&=lсA 8Z%>=79Jzš~, bsC=K ":K†4A]C;X #|d,.Jѩa}OMf>WP \G)d4zҊtm'k%^fſmi~a}8C Y7j eסQ0w =O]]HՏRU0)ALt|e*&zGbQM -|sKzi!\/9deK { e9J)hdpZnEۊÍ G U  yD"(b)K(}p/ǴbG킮zx E"͠q  #+P6MFΊ`';l'Jx ?\EN?=?/ of8d,ZS]^FZWf;VK8@j( |_LIFG{og벙TSdrP|y2VSwCX7uº;~vX< kJ^q=832?nO4>#](aVI'8T;a)aV aj*RyL:3с^TzZsߡ W^omZ}ҋPNARRZ,;UDT4{d\uxK\ɳEڲ”ի{m8vw#} 4RM0(a|n4gжh) \-A]~G`;›=ѬOƵ870j vִo' ;9B=6QCI*C\ZϚ,q<6>:#e+k􏽾YFmH0|X\zRo7T M߀/ Zکz&^E~}xI:>4@t}V"?pi)dz|:"i}px-< %Q5:ک֒QMY&*cXvqVwQ&Wi)/ȟx}!CQghF)?@ Ի!ji&9<5Q*J؝6䕖RiLō1gUmasQY^#SU+ߝ~vt@k|deT`"dhs*.P|<9qrv+qs'{s5\YBW?eUO)Lk ^RSul2n)Ul## ̷iA@Cȡ:g=X-.>B9Iʟ.j7 kҪᰢȢAlhӆ;~8кq|F^M/ UXa`gfEGۍW\_hԺݲNml̙fe1GZX_6Ziݱu2Vb"&.+cka|DC˄bL1H#y6=D%]O6c2ms1@ v䆂)u$z"Z {mѸN0OjJ}qimBP=.`?t}VօL٩.#Duv+ (FV4J6*3/U2I&U k3 =x0d/3?H豘{X0IGow3IBf)e3+%:;ema S_"gNx'+GӢPai ', FėZ%OFfiUgPO`i}AqQnj@bWiڷx![`~X=y ȟ*v3]ucmDB~*I@ŝ&.$Bz$NcOZcQ 1W˞74 }PGt(LE0.:Z0<x$EKCʡvCM=N>$22,0n GWڟ/ a;u=sW($ 8Hjׁ f x}]0L3&]heY)G? 9o![z SHh)M!A 瘳t[yXtI4_Z㚖-lJ(Ori+fds|giGtb11rܓ?Ck]~K"f2\ {/)*FaJ;֗vbRGITxqԛŜO!ŷn^0Ŵ5x|zmHQ/:uߵ"dJ=Oֻٕtx Ê}XZJ.P(6:wQT3P{J.B7#FƗOλ!Ur1P2s65 J4r,pOQ8d5M>feQxק=]cVS,5/mApaC >iǦ@Yzӈ>it$a_o@hnE<\̚ca^910oGftsȄr"ti"Fܜ+-He,e%c IB 4Ux?SWjJ͛o*I,w%57 \ߞOà}t G/t)u0' wܠR/=HyD'LC4UrƆk' o:[s& &,J!TxoBuZ%=z!Fphl.Ia!,]T^"2P 5\mb|mWn=PN$Uޢ8jy2ɴh f1%Zlvjf`㨧 /Z=E.`IEzDіgFYd׏Pr^1{/;on^/ś5&îH .)?[gMpޥ JҼ{sa)Apwԏ5\P.Ia7 \jLkq&J8`)hе)-2"=!jxhdKδbSvKFCk13vW5*p*\@_*D$c+l[j"Q/!v_Efp5I758J*=Mt9~%\CM+a'~B׉*X)}bSx 8 60-֢d|&sū` <^ gI[0P Y9-ANV,,^R.ȱ1s&^MQy^CyNfH59pPm8)AcS_|GY2 RuW 2Y{} iMu5g-Ʋ$. dZ> `YV<[c.<ܜ߉5/G46׃_D\ᐱןrF* n5c?Yŀ3viFCY yxvYX}w$Ʊ]~zx@r?:6KGy“~਽9&đΏo6z([b梑wM D[Iv;.8Ҏ`q E\8r>%s~V=z-xFט&ۈ`d' eaVF>Ox&2^wr q~Yew'(sx<_TM|Yt]hn,caE7?!2|'$gGS]mZ,NJ˂|JK4} ^sԵk-RX0QB1qݬotqZ[qG[agՌ91b#˸&oAY=»g?pu I3ɚ[ߞOá(7MzemRho=6Uc*\|CũSӇ|Yf.I$%|9di Pu99JQ˃yVw$Ylal 䟍%6^Xuwo6 3i~u-lP[_n:um4XrYwkx'>Leؚc4j1 qEamp4.Y0?0Oiv5DHS-KCFApoV:k`5ٝRGR_n~5;^1 ^tSc<aaiƪ!wԍDBXߦ}ԑdK_%N#\];d ڪ{}Qm}Pvk0HM wQ/!L!ao`sTO&^Ќ5] l"hE.)!/zl.F-VoyIST؎ 4z7 &9.\BT8% .GP|R48a8lFdV+dz@9yANz w_ zGisOc/x3 3vTRB wn#ŻlkaNBۈ"fZ ]h1~r縞*8"ZC2f)[-X5h_b/V{fQYS_f~<Îř[Y:/I+'$>cb(Z  xI7λ dr?ĕdvQJ`GxbYM5b;rJ|%L<l%,:K C8FjڏiA>F(nnW:9> U1WP|P| ,#ܠ3W9C#Z'o%˒کP#׼ݩ=rZAC Y,왷9Dck}R&7-~+eqIueZs? 4"O/cT0YuKD[EwUBhWΣ~>,j)Ks97}a~:|xV~#) ؁`o$Ή]}mf8OTzUd0w۰[|঍@wրImTt*N;pvϚacGYX /k8] w 4YՈ8`)AT4D%ew`0@%zsNJOЊ!A_YD7%$gXjmu^V !UJ߂B–3CŰCThI Mz'vuHm/ۑbd9MkX+'bUsJO+8c/pe##?#8iv5=aTN4%kE,o6Ս:xu viBQLunnMO)XN~]2"'J @AQVA0`x>[;58lcg8 r[d`A~}u{!Q (Ess5UC:H8$FLDW)ua}0P-qXY Ҭ:sUp-2k&ٞ[sW&xy*^xzd*g?710K"8aD#nћy/w 8tJӮ&вZ`NͮVQx Y  2 Yž{n4reAƮH>plViM,i71 dMۉŧF!NlB`0yQLp ߴ+,C_? Ԍ.*ϰÆ",Q{Plm+ɏ~pZՎCч*W֑W7؍p8pAؓג]0}X[d3Bq ؤ t_Iҥ)BlO!=mvFg]U} c#q_wHO];ބ1+\P1F0 KHaTN^|d??v2ap/1KAnu&1Wd`kuIR׼5~4@]y)#mb5@ >$1ϧ՛w6u0|g` m6Mg݅`\P#mI]{kZ`¹'COFʖd"]1A3E!pnCYF.swZ\:"R1kZ=Y>.|&ZzihKrYi?B|hyFPv-5ZvE6|@#C=j2a8d\22_~#Txˌv2APhx#aKdsQ?Fl :.7ϏB kC8rwrrjfJ{v5L1v!+dӨL1Ӊ,x/'@ZȠᰀm )yͰOj~'K~K$9sͬ˂i|!gUFKy9EM›0ցAﲚieNcĦ8D%e`X/ۺR´/nE A3v6u"n{ ZW8 LU*$:@0," +'75tB6nW>C:hoi9fc}t6 q/&1cb,zR eUۙiBg7`\xW2M[EOୱiWNɢQ))9~B&Ȕ $j#nI p_Iyҫ5ՖAhq ସ~1eEpTjӀ€_?ػj,BUm!<m4kaJktD׭F,]l7Dp0.Oi!'>s G <2,g6j1QtPɥ4/UE9pʠGK?֑l= ܼ۳n&q~A:C.&欑:Wo,?[Pށ$ʹ@cr >k, D&;5iy|MkatKhT^38x$?dj!ג:a0rh=: D߱D(3K3MR3:y$͉Ru@;&G}adayuLu+(-+!2/P ANlA[<9_ΦƽN6 ]f N2ҙ'@yC36[RaAg/($|4lNiv?3D?ήD&*{ 1y8&s[:aX܇BYR?8hwӛr6)ɹ2אO'm#jΊfa1`l?8'=ض=P޾X_Ow3 s3mE }o$ UC@vFSxw{ť7 l!Q|Td~!+icٙ0bIUi>E!CM}a+*#m ̲ܗFmae~נH 8H .ĪQ duysB1>oIl+Sft1 ڤ+=-IU֓fi7w[%z@ 9 t"FI[#Mfd"p>Ș^$FΟEj-{&^Z c7H2uIBK 0/*5$QFU)"5Ԅ+&}O.fC9Vz'7qSq08?R~ΚoỳLÂO?zu6AQ;+#^E~*s*UɆ4)T Ce4V 0.m= y7Y$E>48Բ&IY*݁ #SkA&iAݝi_,W3OtBIC/q#b&;9G,Tm>&3%f ҘPO?eH("w %U0,jueq!S|et( m8 2=DD}Ʃ, 'vOeְe\| h Ǎ CXgh"WG8SkK^b|{p'!:$ soZJKWl1~Պ4!o\{ҥحmrSD*kL7v&)zXNpqq(oO2z]48eJI';3/Y@Hſ; JfDN͌y$#tфcXܑ_DW*^3 {jyEA+[ f&n$M7=Ɂ}b5N,t}:"mg3}Ltz`~[S'e`JpfkB78v\AOxS/\bBk#˕Ĵ5QB8$y6#9v?ʲoꡯOS#'siz*;7Kv`-:Pv^e 8k䤞 ?D?`nV=l^y=@O%N{է/w-I_V-QЂl^*Y8xdcZ!/};Di@BwTo7RXٙ~ogӡɪ }qWa6L-k9>Asva-*!>(vDAǦ;l(R<\ I?NGrA"Ť?o4!R!T]^Q( au)Y.hI^`:]nt|k^]VY_5 "_Hfj\g}2IG9oAJpk}C2(V)͗0an Իxܒe25Zb >+H 5p4.`g54zpÀm+&B,ޒC,,]W|eC,|Q e_tOM8Jq| wіbGp%E!?TH}Ck`V!QnbIͼ TʡeDr4 BK)>o+1sR$%ޙ2 [W4!He2^%u0ﭵ= re,[T҄f$ 4 *$]1ռ1+TEi80E?~U6oK:7Eongȑan'J6X`Y焅rrSk9nM tHg 6),xձ8IbU-:u +ɹЂ Xq\~\fdpASwG"c{kLÖ+"!;>@noA`SA Ow|5ܒ= {* ;rJ< cY1XǤ 5)u%`6XS%SWHpɲF0vv]Sد#MU/Ogp.JA &41)ьFMd0n nb@0€mV9 Ngy]=1~b>*Q0 q89kԔ+%1-38U·]t.oa%^ :Iظa t#9e<: %W@zeT3GDARb0?ݩWǰԂLq:N 煣́r2[R-!P|v3GoTDa?K&%ju8!ʨh״Z.K#c}OЫW7߁ 86-!7+ CTsK+1c OM_jWs #`dˡ0/|=>3Md~ߟ.x4wl+f\Hyaq/yiG#(5@ %Xl+Mf_K˱/n#+ Z5P3U& Β׼6&G-r>L ?#POb! 홃˝}i !QzX4Wpsg_ycDtCMђwtabqizλU:NSp(v@/KZ6Gֈ8# Eiӑc"9Y <蝕{pL)Ƒ?=`xmt-3kvb ouڻ1yeÇBQi 8˅I ]"#Q{u`~#.|XF#@i'qfm ?8ŬK(р)md1P:A\X s ;Uۙ%)Oh$pdGl8W}6ք( hg9˫+@8jmE ЮLlߚJaTJ% UJ6:>{ Bg>$ӓV~re)f.*(x^&4]ٟB) 2`5 J|#p&t"# B'6b1}gMN.E<|j9nAR_Ux#@)T)fe4aJ)ڻrK~6 ԁNhXQy'6uAyܼB}x?s@IonݦW5h=X#њe rU4n3ӈ?JW ^0kX?`ż1׾B־:QDR]1j }D4RHyL2ҍ:C[ND! :2Ƚc?.zhӧeԅLwmp  dIne$"Mt4kp!r:n #S8RԷOH<,\^Uެi';'& X"YXnj9.^w!qfv{|K릅g&4ӇpL].d5 .eFR?}2WVEMX,5) YA+ >rJ`v<)n1a .](ff`tpd"uF/ mwlyN' !TJ2cfʙ)/1KCH;QWwM92jyӽ VħRТ bWpFEЂ| d] '~痻,mat8)$)(6riy)FpУ11.mB_u YZ~R#ٜ(K 2i&i2949@`B` _sk^!9^vO;D&ʯ=lfv5p1u/Dzƈ t#zm![U:ye\-7$W]iNJڒ.K]N4_nNj6xPO:LJ)gt:?W neia}}kOjOmo8[mM&3d+ɔPיD8Dl=GAP8@3V)IVzM/$<}*h39FƠc׮p@9cr3>V̝~%o`J0( F"2(P:!`=w)f%Fl,0ŧF/RDZZ;YXUGr YӴC[^džҝ}y;.ۅu"*8/_2L!nma0D4Ȭd E{vn;/ۣ/۪qWPN"A|Hv;>0E:`X.P]eF6׻/F=#n咗(i-2| eB /)ppry#pCh* 4/rIwf}DUy(!#ٽl)QUC~b>W݃. A5\՝ޡ>k[IgԭM?> ;,X_ԅE5hC/)fXӟXY1mrCd& < \wv:q_t^7{`eͽXq O:Jƙ[ 4fotz]oy= Pi?A`;~]2;F^=_?EN MJOR<֤i/qWViL0be8k2c8;X3v= 9XT|0d~ î}B>PDk'$]XLͳf&<~e!>"KM e K8k8p|Qނi`9bCZV{ S+Wpi*d2;]W;FC*}@|N ;~9Ũ Y&)jzpLhh s(GNK4P%Um;a/W%O4 1d' mL"&kg+WqorvAp |)%Š;f\]mxTe/:*BdBlլY(Fj %p4|joPMUx?,Ky4<^@(晞 E0E=8vҁ[㌐cP5IA9,z QJ} M-.VsY0J-\}Z$>ѡq2- >98 ^=%ΔQFlzㄥ}K↾Tf $Tg40gZe:]8F1QYSIuz?Ϝ j7D GhcHT*ߓWoFgT0\kDknbcRY4IgXI-y3cs).".q-Owx]YFQ Obcg$21(gšPڤCNƭ1>~GN+xm"PBB`J揙Rlmn {dˊ./2 ,t3D /p%#8cRZKLX[Qkqph?밞<~m)Iy}QE.g53Ά+i7cP۵9ũ׉6_QHFl-kl cceTYkD.)λ9H1QzTep9;cp,%)D+#cٵT҄P 9§7IWq NcHY6^p8x.d\  Z21n0!3zIO8".**rg{y';Ծ f2Q>:Vub衯 C;^P~AGDȎ@w%)15VPJ  eעфoNCG$~(LwۍZ/R.pjcgU'WWVs6̯'J~ꊵffqPUK(4+sGeKB`+큑svӫC]ѫ1OLTЩ L^uұVQƀh>BA7]7|s{#?._EsrD5N9LJ6ҪfRrD=b\B\NȬ!¯Ν^y(]G# ߨ8IUw2@`6jIA&inN P/ 9N]b Kj=aHY&&Rlf|GJ1vy[J_*v+iTbU%sc@z>;ŤF}*.}xާv34D!<.7r|\f-Qn3n @u~%S ,(ᡪrw>{jCs!ަ[ 莶c9wsƕz=w7=!BzTСs|Gm eĬ'^F N0U/6jpv'fay bq|"Oia Z\VӋʢiH&]N[y^G-V} 2uA,+Pkty(Efh {txby-4bq#5*5ee3`QqOa=p0]P -T(ySq҂0v}^톱aK}Qkj@9 5>z<|EČ\r9~m*>Yr! /6֏웩$rrJ%gJqhfT`JO3-tbgu_!=G"&&&,井^|53>7IvR}7FfO HT~O{"P/Rz~d8ѳ,"OhttFʪ,뤃 !k>BuM?$N +HB p׸T(՚355 Zz<וt`>1f) 3j9tTQ)@YꆚcP(.Dq3јV4ŲpdS],::ܖηa#jʖ'ϓYS i$Uk_[+pNVg AQfY]qGڥ]A}%;Or> ['rzJa6*Igd3w2EI͸n`YSH}xHnmrkD]Y*jTyJ|47/W !aUqN/%Cn]}.^F*QPIL T,bnorjs Ev,ƸĨO`4{FC Vqv!DP

8(^eBkP.:Sb{'4c Z-1̛ܣKⒺ=~UlL" IM8LpdPwh\Gʱ%\ӣXc{q~\:%9keF*GnLRZyx9v/#Pּ hDUN Qp[>15d(~j/\qƗ!x~qeO8\Q5~C3 >3 ԍux!gA#=Dwr%U1ET殰K=MIϱ4Q5B5!c>ŷ>.VxFMW68pD?3$YݗDLЫP;)H / >6_ نcbl=e{p/5QgcTMָ p-Jj8qM|9n{^{j+ALz>>'B+pۻ\ Da5Q. ?W @c:A'chFd:~-v61S0JYekKF4KKl ,z {rtedV9Ud@Gx*ɛq& {j + 07Bv@ )l'r|dӿoՋTݣRw\QUt交~zqVj?lΦ"ˍzO+i).18 SL aIdrr'L9!NW}TOhMG-ȺPzKAJ]T:t&Vz;Rh[_֜mmg~O͆bncFƼ"7"%ݕScXr^SKعs?p&ms!k R’Lù^R |,Jz@\C=m ,X]w+ *9!,i$FpV*u DM(*}LlCP u [G}?z 6)n9f"-܊<38e]\-J:7YWpRv7wUvaIJcaq3$ht~].-wrQFPAJhw vs۽[ /_ۭ_A?oY v6LhNFU:XS˥Nizku?iT%`-hi+9].sLpYmw9aNucFo I aSᗌCFd^.0~Y;/Bļ;WDO5hx1+$xEn3-i+Ki(L_5[m[ ,oiۦr)EDWYzR:_LyEG5gz,|O[+Hxg.$42΢I&ʎAؿɗ;XԪry}&7X[-]A:7G?xĨ5w}}@ɚ+ioؼ! :ܮsRa@v֡P8WǦl5ڏ4 U1M,DakuL~ "Ʒi72Y>(Gͳ?p0\ "-00 \RQruD!8x w^}oP5{8waj6'&-Be>zw򳇣a ZD5uCN{WnrY2ltpհĵ7k6CCտ!z29] l T,_ BLkajx^thJASb8xn>$o` ċX'̐ 6.Tw6F:sH~ql$ xTnDڞ 4p,s[,Xz}*_'dT>/y `xN8-wFd€rȶqN̘LG4qaԌ0FjckyKivpWt |]˳%p^% aFGM< ;ky?Z4jճ٥Yr mW]YŚwoOn@/@s6 6.t%Rk{5o%1&:?"Zm% N .5-0!2%oU+iN6雐+&?#y=VƋBf1Ub&=Rwmf>o]R4-*vCubOܱZܠ{x#K(ʛ6넕: %C^9cc,󖙦<1oW^%S~KdB8.{^{bऔ#iR 6R1d-]v@嫲,ֶF,ܚ^zFgA' e,_GY ꆢpZv,++OJR-)-6~ @R^'Y .D"*ܵpm?G .%IψImNVyy\⤦h':?K"02f | Ғ& N-H*b^9*lOGP ]fa`҅4L ywr)@)Y#r3.[v78%o\R]|ϝ]VWg*MRZBD8;J w&*'_ÎPzo3gTvG 𛜌O;varԨ= JX((h5Jq+wyU4u!I93iOQ*Mݭ=`Wy7Y>S|1-on@S[Eܙpģ@eN[N yUq{s+ݦyEȞɱchg52ʳ-,=ɌF%NuP/.?iƫșV_s>+ NY+ UZ V'+r+`Vh}mGŒ^B BJ8Ya|!" AZ")/ÉB^F5~ SOUXa,LɏH4xQ9ϧS8+9'y6囦Oceh]9"CK=ȅH]n~ZgyG֪b!<գ7+Lw!7tHzI?s:B4)VvM[}sӹ1~@R(϶>?j&gkM֦c<5^~gסk =,n!߫ yx&op-LGStvw!a/+‹7[Pa쫉ႲFKߏpPsĩ+MP4*?`6rv=?؈Iydݕ#Թ'׽gmD0q%̛sՍt`,nM@ Kۋy{3 Ʋ쏊7?&vOY .تT}K ZޝM+ 4f*"wl6$+07WwV۔ .9S~Wv,tĞu9Ȓ$#F&XeǾF[{I` ULZ!IMEPַt0pΌ%qõ躄@i_TLܚ.kkd{"ؚehY"ږ/{s=_,:8AxF,?ǔ ԈON/wr">4:gw>!Kݓ{`L1s2EEBs>ԽT~lbYN``iοΣ1~,jdXz/~H5cZMs)Z+)K8( }l2 ϣ}Ԉ| +B.`hO}CꪈNx Xr~Kjbi*\'5lXH5TG(tfs@>#c38yvR{-qx?vٗvG}L9) ?hBFMIw^"DT}q-Q y_$^RLsz]3 LI?Ixeu\#:UۼM${``Af+Z_fxUIw g{  |.OLE̮oeZV۳5 Z/IT¯ۊidl@""I#,];f8IJ~̅g!sN4/vp`3pB]R/إjX3eMcTp*T4]4#lV SIwp)Z]6E 5 'N`q:ݒ.ل EzUDm '㴹ZcOC7P:vmTXE~&eE ^$ 4ai'F?æz,=' aJH;L$dc3J[g* Ζűpsѻl!P. p=( k ÍHBr0W}/bƠ@MjD͐?dxx8sNȽֱx̖!^Mdл?z/V1$R鏦Hi̦*m|bfW.-ڴ?vAR1#IY/_ۘe7T11X[ p.R9,XGzG> ЅKMLFBI%x{jh%{[b*Mwƻ=Rl+i]J [mW~? oATMY~1bHR75jFkP/y"&*N3ԙ:OKf"BlT;r"!h̖*ݏ?1bJܯ+h([Žh0u3h"jiX |^'eDI ;.-5;H6*f.~/S3b43?JʾDël 5$6;+$`H(InW 5r.pjfӗk+NK57-X!Un'5b>:)knes6x[E:4Mƞ%$VS>Qy3$KX壴VgOdwHӥKǺg{MM _9M[B rucNgyᦸJRk*G/o13+ݣWpM[! =+)^^@ 6&Fؐ%7uq} #^9 E_P`,'w:jGjH.mm ~^ ) kf[vw ꃋNE v:"HV]6p1_Ie[*0pqv;* rYЊOEb2ɣ'˷)s$/8|H2˓~s IAz ҷ1#_Dn 6&ɗ-ؘ7G}x 7}N˔[sWV]sqXkg8*7߃"Nىw ֲFyE%z6^A>5B; hIرK7YlUs7D%'2}>MzO{]?W/@oM@C ГO>m%P6Y?oLV/r{d U&AQ:'>۾R~td5OY -UƑc{KrPA lE Aɸǣ4_iŕʙY]3Wp/ Rr 2wmW2]GkVI/Sh:$nH*5!w%,'Yխ;B/_hKdPY1/ qRQ{Ӕ}a0Gj65 nmq~9ɻ2UFSC 8&E._Ķg.c7G5 Z@`C9A/цEܰz$v8TN0"38g- {}TPBIw-z[1~&IH਌ĭoSK{ε9\(ڦa30lVl8-@prRLQA[{(#]&rR4Aey0l/!\NYINp|Upڕps2݁]OvE* \cJӢǢ,P](kE v͖ş+-oj Jn(yހ} [{ 3s1X&OY7?DjNw%g=(2{};OJP ~-0ܩ!+ktC ljL,@GU/ll `Q;l'R=T\q+<׷=Q=jGlH)XӔ  WZ櫱ipJHj(%tA P_Rm:uTov{/aP9Àe^ \I3?[K5O_[o]z绽2:~cޮʂ+H/ X{E! &}q;iQ^-6X>ƽN;(@}'UФD(rUnX΃#NKλ!L?Ÿub2ih~_Ԩ'ı+i 唶tt?oqS}' D ٱ]"׍|\nm}]4pIV8.o_.iy)ƽ7'.p=ŏ}#6eL_ K3|)Y,Ϟt^h[}Մ<,'LD^7lAq>EtӪ @y qpjxRdG~VN': anN&נA1gW\3$j/s_֏C24W*k&bF8ɔT c:6>wp(=vX$Lr᭴N}axl-g]-[Y/>aYWx76\=w#p҈AJ$He̡t) ?0ڌʪg̢ԫ[ҡza)f .Gl%q;jϒҤ]:+< Iq4fn2olEkУޑ۫IsYP y4@G丄&j_18~)o xY%d|MQPPzsLC4}efE.O p]ɛ-cF&@'|%kMRQcPV[]͑_d.@}<CqƮ#6a#'c,lmͥzc:;zY? cL/+־ <Ϻ@Bks\[,8nP, >Pl*BV 6+e{&}N_ _6kX3Ԅ`Z$IAp&Jf>, h3m$A R0`#ߴ'(+~,-΋{PEG*>9=O$6GXmս4|kU޿L`n)`FOA]*HXQ>mhN3ǷZ R4nřmf4#]VkmX_qGG`$vWMԢ8/"解]j Ax÷(V:Bݏφfϵ耘)aHB.1 F `ߣ$C;tH!o:517tHi"U8*h=~hV8!+xDd4Z_ >ab.GZqdOȆ b_\&$4D g@TZ)Qdu'}@/˯E;7FZu'*_19s7.9DRSPh,d "OU<ȉ!+`d'BwS 3ubڢ)n%/?@TWF7ŋ8l}/1ՠ\<=zEt&{, ʾk+sBf!8y%Z8P5Xp n˳/QEyloJ_CK -zܳluY!n ^t>>T!wg7'ہإH^& H .*~gs}9Yw }h"c!NWrxoQ\6 -ʪXn܋3ѻ-e *F`pECTоGI}~2ʫЄ]{YsmZ" szt"Z[6n`wQe?oFH6)40mmU4ה\iqe'خ2uc戟9\nAFSZ?l""qqҶ~p湪@`>Z~`;HII{6&b%>0}Th8t&g5>>ͭRɋg13aq,K<E3.M]tP 2v|sj(/ TL {f0ry[\(K`/+h988B!a}wq᩷p[;J 4?:+E:"qj Ȱ%/_vhJ_OZAk5>TqfPBͩh@>O>XQ+\2iWM$UTxwmcNXq¶p\68 Pm29+ u~*]X̳,`_4'Ʃ)4}N_8+vZsuG&Q%JEC͌VElNZfect&Ǎ)s_ Xfe?sUW@W6`1?fl C 5fii"|4'\m%ˁj($c"mF.z$:TLwrj(VKFcHJᙆttm7ǧ񀚲[~SY]kcR# <&k*߮ lܫ> r@tE9yh\'&O ϩzsʹYQS?^Cj[Ek"25|Yl+K?Z[yK׫>Z%GMiR"w4Д:xC*TXM %U$Z~>RyIuaPn ؂IkF#O>7jW`~ο&:,9,$VYǩDiC!xj);r5 ^?7=jG܂D az˗iGY :l=T0fL0b+Ytk.SC"M}QEW(Dn@,iMQ|W}Zcieޑb]")W WF[ ŪTB p9E"b,ZOV> AFeUYs=(\8Vʏ!ZfPy&;>ݴ^L -"8Bh۲$!(,>=tĤ5l (HOۂS9@N5M:={x.(RhёIy-EZ^_ь>dũX#wKUjh覹W ɷ񁏟]>skM#TbR*ΫИVM7*EiZK! EtW0P4K_b N6s}Q&9όB]bk"M ߑdry`D tك.,&V Wv*e{.iګ.AG+:@Ds50ȅ ElLITjji\?Xxʓ<{[aiAv/y8YҢlj>2*t)b3{S(W`e4w׸"\ŸfSJQ-׭YJ{ή09z~:9N\."Z{x>wtן!йHlkvqc5 SimGrid: MSG

SimGrid  3.10
Versatile Simulation of Distributed Systems
MSG

Simple programming environment. More...

Modules

 Main MSG simulation Functions
 Describes how to setup and control your simulation.
 Process Management Functions
 This section describes the process structure of MSG (msg_process_t) and the functions for managing it.
 Host Management Functions
 This section describes the host structure of MSG.
 Task Management Functions
 This section describes the task structure of MSG (msg_task_t) and the functions for managing it. See Task Actions to see how to put the tasks in action.
 Mailbox Management Functions
 This section describes the mailbox structure of MSG (msg_mailbox_t) and the functions for managing it.
 Task Actions
 This section describes the functions that can be used by a process to execute, communicate or otherwise handle some task.
 Explicit Synchronization Functions
 This section describes several explicit synchronization mechanisms existing in MSG: semaphores (msg_sem_t) and friends.
 VMs
 This section describes the interface created to mimic IaaS clouds.
 File Management Functions
 This section describes the file structure of MSG (msg_file_t) and the functions for managing it. It is based on POSIX functions.
 Trace-driven simulations
 This section describes the functions allowing to build trace-driven simulations.
 Lua bindings
 Lua bindings to MSG (MSG)
 MSG examples
 MSG examples from examples directory examples/msg.
 MSG Deprecated
 This section describes the deprecated functions. PLEASE STOP USING THEM.

Detailed Description

Simple programming environment.

MSG was the first distributed programming environment provided within SimGrid, and is still the most commonly used nowadays. If you are unsure of the interface you should use, they you probably want to use MSG. It constitutes a convenient simplification of the reality of distributed systems. It can be used to build rather realistic simulations, but remains simple to use: most unpleasant technical elements can be abstracted away rather easily. If you want to use the C programming language, your are in the right section. If you prefer not to use this venerable but demanding language, please refer to the Java Binding, the Lua bindings, or the Ruby Binding (that are distributed separately).

If you think that MSG may not be the interface you need, please consider the other user interfaces provided by SimGrid: If you want to use DAGs, have a look at the SimDag programming environment. If you want to study an existing MPI program, have a look at the SMPI one. If none of those programming environments fits your needs, you may consider implementing your own directly on top of SIMIX, or even on top of SURF (but you want to contact us before digging into these badly documented internal modules).

Offered functionalities

Also make sure to visit the page MSG examples.

SimGrid-3.10/doc/html/dynsections.js000640 007661 000620 00000004134 12242224150 017626 0ustar00gierschand000000 000000 function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); var summary = $('#'+base+'-summary'); var content = $('#'+base+'-content'); var trigger = $('#'+base+'-trigger'); var src=$(trigger).attr('src'); if (content.is(':visible')===true) { content.hide(); summary.show(); $(linkObj).addClass('closed').removeClass('opened'); $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); } else { content.show(); summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); } return false; } function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); } function toggleLevel(level) { $('table.directory tr').each(function(){ var l = this.id.split('_').length-1; var i = $('#img'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3)); if (l SimGrid: String related functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
String related functions

String manipulation functions. More...

Functions

int asprintf (char **ptr, const char *fmt,...) _XBT_GNUC_PRINTF(2
 print to allocated string (reimplemented when not provided by the system)
int int vasprintf (char **ptr, const char *fmt, va_list ap)
 print to allocated string (reimplemented when not provided by the system)
char * bvprintf (const char *fmt, va_list ap)
 print to allocated string
char * bprintf (const char *fmt,...) _XBT_GNUC_PRINTF(1
 print to allocated string
ssize_t xbt_getline (char **lineptr, size_t *n, FILE *stream)
 Get a single line from the stream (reimplementation of the GNU getline)
void xbt_str_rtrim (char *s, const char *char_list)
 Strip whitespace (or other characters) from the end of a string.
void xbt_str_ltrim (char *s, const char *char_list)
 Strip whitespace (or other characters) from the beginning of a string.
void xbt_str_trim (char *s, const char *char_list)
 Strip whitespace (or other characters) from the end and the begining of a string.
xbt_dynar_t xbt_str_split (const char *s, const char *sep)
 Splits a string into a dynar of strings.
xbt_dynar_t xbt_str_split_quoted (const char *s)
 Splits a string into a dynar of strings, taking quotes into account.
xbt_dynar_t xbt_str_split_quoted_in_place (char *s)
 Just like xbt_str_split_quoted (Splits a string into a dynar of strings), but without memory allocation.
xbt_dynar_t xbt_str_split_str (const char *s, const char *sep)
 This functions splits a string after using another string as separator For example A!!B!!C splitted after !! will return the dynar {A,B,C}.
char * xbt_str_join (xbt_dynar_t dynar, const char *sep)
 Join a set of strings as a single string.
char * xbt_str_join_array (const char *const *strs, const char *sep)
 Join a set of strings as a single string.
void xbt_str_subst (char *str, char from, char to, int amount)
 Substitutes a char for another in a string.
char * xbt_str_varsubst (const char *str, xbt_dict_t patterns)
 Replaces a set of variables by their values.
void xbt_str_strip_spaces (char *)
 Replace double whitespaces (but no other characters) from the string.
char * xbt_str_diff (const char *a, const char *b)
 Compute the unified diff of two strings.
char * xbt_str_from_file (FILE *file)
 creates a new string containing what can be read on a fd
static unsigned int xbt_str_hash_ext (const char *str, int str_len)
 Returns the hash code of a string.
static unsigned int xbt_str_hash (const char *str)
 Returns the hash code of a string.

Detailed Description

String manipulation functions.

This module defines several string related functions. We redefine some quite classical functions on the platforms were they are not nativaly defined (such as xbt_getline() or asprintf()), while some other are a bit more exotic.

Function Documentation

int asprintf ( char **  ptr,
const char *  fmt,
  ... 
)

print to allocated string (reimplemented when not provided by the system)

The functions asprintf() and vasprintf() are analogues of sprintf() and vsprintf(), except that they allocate a string large enough to hold the output including the terminating null byte, and return a pointer to it via the first parameter. This pointer should be passed to free(3) to release the allocated storage when it is no longer needed.

int int vasprintf ( char **  ptr,
const char *  fmt,
va_list  ap 
)

print to allocated string (reimplemented when not provided by the system)

See asprintf()

char* bvprintf ( const char *  fmt,
va_list  ap 
)

print to allocated string

Works just like vasprintf(), but returns a pointer to the newly created string, or aborts on error.

char* bprintf ( const char *  fmt,
  ... 
)

print to allocated string

Works just like asprintf(), but returns a pointer to the newly created string, or aborts on error.

ssize_t xbt_getline ( char **  buf,
size_t *  n,
FILE *  stream 
)

Get a single line from the stream (reimplementation of the GNU getline)

This is a reimplementation of the GNU getline function, so that our code don't depends on the GNU libc.

xbt_getline() reads an entire line from stream, storing the address of the buffer containing the text into *buf. The buffer is null-terminated and includes the newline character, if one was found.

If *buf is NULL, then xbt_getline() will allocate a buffer for storing the line, which should be freed by the user program.

Alternatively, before calling xbt_getline(), *buf can contain a pointer to a malloc()-allocated buffer *n bytes in size. If the buffer is not large enough to hold the line, xbt_getline() resizes it with realloc(), updating *buf and *n as necessary.

In either case, on a successful call, *buf and *n will be updated to reflect the buffer address and allocated size respectively.

void xbt_str_rtrim ( char *  s,
const char *  char_list 
)

Strip whitespace (or other characters) from the end of a string.

Strips the whitespaces from the end of s. By default (when char_list=NULL), these characters get stripped:

  • " " (ASCII 32 (0x20)) space.
  • "\t" (ASCII 9 (0x09)) tab.
  • "\n" (ASCII 10 (0x0A)) line feed.
  • "\r" (ASCII 13 (0x0D)) carriage return.
  • "\0" (ASCII 0 (0x00)) NULL.
  • "\x0B" (ASCII 11 (0x0B)) vertical tab.
Parameters
sThe string to strip. Modified in place.
char_listA string which contains the characters you want to strip.
void xbt_str_ltrim ( char *  s,
const char *  char_list 
)

Strip whitespace (or other characters) from the beginning of a string.

Strips the whitespaces from the begining of s. By default (when char_list=NULL), these characters get stripped:

  • " " (ASCII 32 (0x20)) space.
  • "\t" (ASCII 9 (0x09)) tab.
  • "\n" (ASCII 10 (0x0A)) line feed.
  • "\r" (ASCII 13 (0x0D)) carriage return.
  • "\0" (ASCII 0 (0x00)) NULL.
  • "\x0B" (ASCII 11 (0x0B)) vertical tab.
Parameters
sThe string to strip. Modified in place.
char_listA string which contains the characters you want to strip.
void xbt_str_trim ( char *  s,
const char *  char_list 
)

Strip whitespace (or other characters) from the end and the begining of a string.

Strips the whitespaces from both the beginning and the end of s. By default (when char_list=NULL), these characters get stripped:

  • " " (ASCII 32 (0x20)) space.
  • "\t" (ASCII 9 (0x09)) tab.
  • "\n" (ASCII 10 (0x0A)) line feed.
  • "\r" (ASCII 13 (0x0D)) carriage return.
  • "\0" (ASCII 0 (0x00)) NULL.
  • "\x0B" (ASCII 11 (0x0B)) vertical tab.
Parameters
sThe string to strip.
char_listA string which contains the characters you want to strip.
xbt_dynar_t xbt_str_split ( const char *  s,
const char *  sep 
)

Splits a string into a dynar of strings.

Parameters
s,:the string to split
sep,:a string of all chars to consider as separator.

By default (with sep=NULL), these characters are used as separator:

  • " " (ASCII 32 (0x20)) space.
  • "\t" (ASCII 9 (0x09)) tab.
  • "\n" (ASCII 10 (0x0A)) line feed.
  • "\r" (ASCII 13 (0x0D)) carriage return.
  • "\0" (ASCII 0 (0x00)) NULL.
  • "\x0B" (ASCII 11 (0x0B)) vertical tab.
xbt_dynar_t xbt_str_split_quoted ( const char *  s)

Splits a string into a dynar of strings, taking quotes into account.

It basically does the same argument separation than the shell, where white spaces can be escaped and where arguments are never split within a quote group. Several subsequent spaces are ignored (unless within quotes, of course). You may want to trim the input string, if you want to avoid empty entries

xbt_dynar_t xbt_str_split_quoted_in_place ( char *  s)

Just like xbt_str_split_quoted (Splits a string into a dynar of strings), but without memory allocation.

The string passed as argument must be writable (not const) The elements of the dynar are just parts of the string passed as argument. So if you don't store that argument elsewhere, you should free it in addition to freeing the dynar. This can be done by simply freeing the first argument of the dynar: free(xbt_dynar_get_ptr(dynar,0));

Actually this function puts a bunch of \0 in the memory area you passed as argument to separate the elements, and pushes the address of each chunk in the resulting dynar. Yes, that's uneven. Yes, that's gory. But that's efficient.

xbt_dynar_t xbt_str_split_str ( const char *  s,
const char *  sep 
)

This functions splits a string after using another string as separator For example A!!B!!C splitted after !! will return the dynar {A,B,C}.

Returns
An array of dynars containing the string tokens
char* xbt_str_join_array ( const char *const *  strs,
const char *  sep 
)

Join a set of strings as a single string.

The parameter must be a NULL-terminated array of chars, just like xbt_dynar_to_array() produces

void xbt_str_subst ( char *  str,
char  from,
char  to,
int  occurence 
)

Substitutes a char for another in a string.

Parameters
strthe string to modify
fromchar to search
tochar to put instead
occurencenumber of changes to do (=0 means all)
char* xbt_str_varsubst ( const char *  str,
xbt_dict_t  patterns 
)

Replaces a set of variables by their values.

Parameters
strThe input of the replacement process
patternsThe changes to apply
Returns
The string modified

Both '$toto' and '${toto}' are valid (and the two writing are equivalent).

If the variable name contains spaces, use the brace version (ie, ${toto tutu})

You can provide a default value to use if the variable is not set in the dict by using '${var:=default}' or '${var:-default}'. These two forms are equivalent, even if they shouldn't to respect the shell standard (:= form should set the value in the dict, but does not) (BUG).

void xbt_str_strip_spaces ( char *  s)

Replace double whitespaces (but no other characters) from the string.

The function modifies the string so that each time that several spaces appear, they are replaced by a single space. It will only do so for spaces (ASCII 32, 0x20).

Parameters
sThe string to strip. Modified in place.
char* xbt_str_from_file ( FILE *  file)

creates a new string containing what can be read on a fd

SimGrid-3.10/doc/html/group__XBT__dynar__perl.html000640 007661 000620 00000027662 12242224150 022354 0ustar00gierschand000000 000000 SimGrid: Perl-like use of dynars
SimGrid  3.10
Versatile Simulation of Distributed Systems
Perl-like use of dynars

Functions

void xbt_dynar_push (xbt_dynar_t const dynar, const void *src)
 Add an element at the end of the dynar.
void xbt_dynar_pop (xbt_dynar_t const dynar, void *const dst)
 Get and remove the last element of the dynar.
void xbt_dynar_unshift (xbt_dynar_t const dynar, const void *src)
 Add an element at the begining of the dynar.
void xbt_dynar_shift (xbt_dynar_t const dynar, void *const dst)
 Get and remove the first element of the dynar.
void xbt_dynar_map (const xbt_dynar_t dynar, void_f_pvoid_t const op)
 Apply a function to each member of a dynar.

Detailed Description

Function Documentation

void xbt_dynar_unshift ( xbt_dynar_t const  dynar,
const void *const  src 
)

Add an element at the begining of the dynar.

This is less efficient than xbt_dynar_push()

void xbt_dynar_shift ( xbt_dynar_t const  dynar,
void *const  dst 
)

Get and remove the first element of the dynar.

This is less efficient than xbt_dynar_pop()

void xbt_dynar_map ( const xbt_dynar_t  dynar,
void_f_pvoid_t const  op 
)

Apply a function to each member of a dynar.

The mapped function may change the value of the element itself, but should not mess with the structure of the dynar.

SimGrid-3.10/doc/html/ftv2doc.png000640 007661 000620 00000001352 12242224150 017002 0ustar00gierschand000000 000000 PNG  IHDR}\IDATxMOS[sa?-XZ(PD4 AWbu`b 77wHFCԁ/`voAPqP@ 980 +y^Z9SW\83g3'Nçl_bpV"ֆXd]3xM[1W *PGz/Eg{ aoV:这1$RW,@56-,m/蹖 r5T*S(Vf89u գwa=<{ҡUr+dDF$`zNܮ0Q3~_^N=vpTLT}kqm<?ZhX_ݥ[) `ga_*2`'=F2EP l=8Wv%THqɿ<"GxH{#֫aJmKsVءM^ T ݛr߽m_?Wİ#uIENDB`SimGrid-3.10/doc/html/group__SD__task__dependency__management.js000640 007661 000620 00000001250 12242224150 025212 0ustar00gierschand000000 000000 var group__SD__task__dependency__management = [ [ "SD_task_dependency_add", "group__SD__task__dependency__management.html#gaeaa883b0561beefb647c5c4280299138", null ], [ "SD_task_dependency_remove", "group__SD__task__dependency__management.html#ga3a22709b38b7a4eb86317e334a8110e0", null ], [ "SD_task_dependency_get_name", "group__SD__task__dependency__management.html#ga5e94f0a64b796de2fb3e7164bd4c7173", null ], [ "SD_task_dependency_get_data", "group__SD__task__dependency__management.html#gaa1bdcdfefbf9b19e03cf90376d6fbbb0", null ], [ "SD_task_dependency_exists", "group__SD__task__dependency__management.html#gad492251b41fcd05684d88359c26656e1", null ] ];SimGrid-3.10/doc/html/structs__smx__storage__priv.js000640 007661 000620 00000000201 12242224150 023072 0ustar00gierschand000000 000000 var structs__smx__storage__priv = [ [ "data", "structs__smx__storage__priv.html#a591cd4633cc845c42cfef995a73a32bb", null ] ];SimGrid-3.10/doc/html/group__XBT__cfg__use.js000640 007661 000620 00000004257 12242224150 021273 0ustar00gierschand000000 000000 var group__XBT__cfg__use = [ [ "xbt_cfg_t", "group__XBT__cfg__use.html#gac5894d3947cb042db07d729ebfe064ca", null ], [ "xbt_cfg_set", "group__XBT__cfg__use.html#ga7abcc7c8e0c839f5430ccc5bb04cd29b", null ], [ "xbt_cfg_set_vargs", "group__XBT__cfg__use.html#gad36ce933af452e3f74373b7a88b097bd", null ], [ "xbt_cfg_set_parse", "group__XBT__cfg__use.html#ga660f47d0af70382a502cee9734e32229", null ], [ "xbt_cfg_set_int", "group__XBT__cfg__use.html#ga593f941aa66b21104ebdaa2786a0265e", null ], [ "xbt_cfg_set_double", "group__XBT__cfg__use.html#ga660807bb21d0d7a3a0ac9219e2330dbe", null ], [ "xbt_cfg_set_string", "group__XBT__cfg__use.html#gaf42b4fd31ad45646a03638ef32fc5a26", null ], [ "xbt_cfg_set_boolean", "group__XBT__cfg__use.html#ga14463cfbdbd7d19e758e443ac96b7e70", null ], [ "xbt_cfg_set_peer", "group__XBT__cfg__use.html#ga3ec95e8fb08cc7dffdc32fd7cb05f679", null ], [ "xbt_cfg_set_as_string", "group__XBT__cfg__use.html#ga81ecaccf6e2ae624866d9e4bd4b71927", null ], [ "xbt_cfg_setdefault_int", "group__XBT__cfg__use.html#ga56c8db370b0a3ae4c638867a0e0911c0", null ], [ "xbt_cfg_setdefault_double", "group__XBT__cfg__use.html#gafa60b1f2d2e1351522f977cce3b54d99", null ], [ "xbt_cfg_setdefault_string", "group__XBT__cfg__use.html#ga10751dc480c2ea9b0c9637c68ed359e6", null ], [ "xbt_cfg_setdefault_boolean", "group__XBT__cfg__use.html#gafbcf5ece0a77ed07d6571b940eb1bcf7", null ], [ "xbt_cfg_setdefault_peer", "group__XBT__cfg__use.html#ga304c927c166b217d29eee9e18cb1e969", null ], [ "xbt_cfg_rm_int", "group__XBT__cfg__use.html#ga6dd959a8fc5ea496641f329423964681", null ], [ "xbt_cfg_rm_double", "group__XBT__cfg__use.html#gaca2fa14bf75f51960538227132d696d5", null ], [ "xbt_cfg_rm_string", "group__XBT__cfg__use.html#ga6b96677e59c03e920f616ef8f6f03db3", null ], [ "xbt_cfg_rm_boolean", "group__XBT__cfg__use.html#gaf3b2d88039707c69865da363c6a91fb9", null ], [ "xbt_cfg_rm_peer", "group__XBT__cfg__use.html#ga495c3de5609e29eb4a5a2edaff1e9119", null ], [ "xbt_cfg_rm_at", "group__XBT__cfg__use.html#gaf90fa7699759834310e5fc90d4cf2594", null ], [ "xbt_cfg_empty", "group__XBT__cfg__use.html#gabefb42525b7f81c273a9e15ebc2fc401", null ] ];SimGrid-3.10/doc/html/structs__smx__process.js000640 007661 000620 00000004363 12242224150 021722 0ustar00gierschand000000 000000 var structs__smx__process = [ [ "process_hookup", "structs__smx__process.html#ac5670dc9f4256f2f8fc7dc583dfdf926", null ], [ "synchro_hookup", "structs__smx__process.html#a1dbfd9bbad99300c5e806d696b82f506", null ], [ "host_proc_hookup", "structs__smx__process.html#a0fa84df765b10d506b1f929b1bd6da97", null ], [ "destroy_hookup", "structs__smx__process.html#a3ad427728bd699c14483a67394326448", null ], [ "pid", "structs__smx__process.html#a8508e341175649ddeec7187b07e5cb3b", null ], [ "ppid", "structs__smx__process.html#ad7bfe3a46d528919cc5026eb59962756", null ], [ "name", "structs__smx__process.html#a5c047926058308fa200c609bbd6e4d27", null ], [ "smx_host", "structs__smx__process.html#a8534d47a75b607b6e78676f39788f191", null ], [ "context", "structs__smx__process.html#a5f5876a51c489533d6a74f4a144ab7ea", null ], [ "running_ctx", "structs__smx__process.html#a600d794c98ffc205101a81e0562df1c2", null ], [ "doexception", "structs__smx__process.html#a4adbf3d79c0887a26cbe0b2da28951a6", null ], [ "blocked", "structs__smx__process.html#a278f32694a7196f9e729aaec985830a8", null ], [ "suspended", "structs__smx__process.html#ad2499688417d1138b375dacd7b112299", null ], [ "auto_restart", "structs__smx__process.html#a4af4c204a548cdddfb4ae0a104ddffd6", null ], [ "new_host", "structs__smx__process.html#ac4d2dc2e7f8b6d4bf31e153552ed14e0", null ], [ "waiting_action", "structs__smx__process.html#a45ee5a92ed8c2dbfc0f250d2d7f4969c", null ], [ "comms", "structs__smx__process.html#ab3e987bbf18ab6771e57937395c1afb3", null ], [ "properties", "structs__smx__process.html#a4bbdd825e72f08d247b447f3db17ddf5", null ], [ "simcall", "structs__smx__process.html#a43a840ab1416b055771bf009df323f7a", null ], [ "data", "structs__smx__process.html#af015eb9088597a0e4952a8726aa8dae5", null ], [ "on_exit", "structs__smx__process.html#a4d23642b2fb48a43344d99e5fde2ac50", null ], [ "code", "structs__smx__process.html#a86ec8165daf63567c0d19b3a23afc032", null ], [ "argc", "structs__smx__process.html#aadadadbade12e6301f83e5b120098c76", null ], [ "argv", "structs__smx__process.html#a6ebd8349242e92ff1ec76f7cc3d21f8b", null ], [ "kill_time", "structs__smx__process.html#a3b5fe9f9494c51595c7a5d94ccee8ee1", null ] ];SimGrid-3.10/doc/html/structsurf__action__state.html000640 007661 000620 00000023453 12242224150 023100 0ustar00gierschand000000 000000 SimGrid: surf_action_state Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_action_state Struct Reference

Action state sets. More...

#include <surf.h>

Data Fields

xbt_swag_t ready_action_set
xbt_swag_t running_action_set
xbt_swag_t failed_action_set
xbt_swag_t done_action_set

Detailed Description

Action state sets.

This structure contains some sets of actions. It provides a fast access to the actions in each state.

See Also
surf_action_t, e_surf_action_state_t

Field Documentation

xbt_swag_t surf_action_state::ready_action_set

Actions in state SURF_ACTION_READY

xbt_swag_t surf_action_state::running_action_set

Actions in state SURF_ACTION_RUNNING

xbt_swag_t surf_action_state::failed_action_set

Actions in state SURF_ACTION_FAILED

xbt_swag_t surf_action_state::done_action_set

Actions in state SURF_ACTION_DONE


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/group__XBT__config.js000640 007661 000620 00000000651 12242224150 020760 0ustar00gierschand000000 000000 var group__XBT__config = [ [ "User interface: changing values", "group__XBT__cfg__use.html", "group__XBT__cfg__use" ], [ "Configuration type declaration and memory management", "group__XBT__cfg__decl.html", "group__XBT__cfg__decl" ], [ "Registering stuff", "group__XBT__cfg__register.html", "group__XBT__cfg__register" ], [ "Getting the stored values", "group__XBT__cfg__get.html", "group__XBT__cfg__get" ] ];SimGrid-3.10/doc/html/dir_38667c035b8d82bd7d8644cec34efbb7.html000640 007661 000620 00000014041 12242224150 023127 0ustar00gierschand000000 000000 SimGrid: examples/msg/migration/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/structxbt__boolean__couple.js000640 007661 000620 00000000343 12242224150 022670 0ustar00gierschand000000 000000 var structxbt__boolean__couple = [ [ "true_val", "structxbt__boolean__couple.html#a48c1494b9e7d77ca03e866e37db3bf4e", null ], [ "false_val", "structxbt__boolean__couple.html#ae1dc08ae1e8037e7a42de0a2c304a510", null ] ];SimGrid-3.10/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html000640 007661 000620 00000013647 12242224150 023041 0ustar00gierschand000000 000000 SimGrid: examples/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__XBT__peer.js000640 007661 000620 00000001326 12242224150 020446 0ustar00gierschand000000 000000 var group__XBT__peer = [ [ "s_xbt_peer", "structs__xbt__peer.html", null ], [ "xbt_peer_t", "group__XBT__peer.html#gad2304165af1ed80fe6d82eb14343eca7", null ], [ "s_xbt_peer_t", "group__XBT__peer.html#ga6d62b8bce4ac8f6206f66f8dd34d2532", null ], [ "xbt_peer_new", "group__XBT__peer.html#ga2d87fccb2ac0c6f71db29ed857b01eb2", null ], [ "xbt_peer_from_string", "group__XBT__peer.html#ga0d8d75aed70cb99a925b8974ce8ce4e4", null ], [ "xbt_peer_copy", "group__XBT__peer.html#ga9bc5b54374abccaff888cd3852c85702", null ], [ "xbt_peer_free", "group__XBT__peer.html#ga251d6140c311d7c04e503e3d463adba4", null ], [ "xbt_peer_free_voidp", "group__XBT__peer.html#ga793bb9b0c2ee6221c8e9b7d3c886dbb9", null ] ];SimGrid-3.10/doc/html/group__SIMIX__API.js000640 007661 000620 00000002151 12242224150 020355 0ustar00gierschand000000 000000 var group__SIMIX__API = [ [ "SIMIX datatypes management details", "group__m__datatypes__management__details.html", null ], [ "Process Management Functions", "group__simix__process__management.html", "group__simix__process__management" ], [ "Host Management Functions", "group__simix__host__management.html", "group__simix__host__management" ], [ "RDV Management Functions", "group__simix__rdv__management.html", "group__simix__rdv__management" ], [ "Communication Management Functions", "group__simix__comm__management.html", null ], [ "Synchronisation Management Functions", "group__simix__synchro__management.html", null ], [ "File Management Functions", "group__simix__file__management.html", "group__simix__file__management" ], [ "SIMIX_global_init", "group__SIMIX__API.html#ga61a5c57ccf08e71bac21571b94ec1a38", null ], [ "SIMIX_clean", "group__SIMIX__API.html#gaf764507fe3726a890a8657d5db2eaffc", null ], [ "SIMIX_get_clock", "group__SIMIX__API.html#ga8298a6bf3cdb667f2aca7b1cfd9b2eb8", null ], [ "SIMIX_run", "group__SIMIX__API.html#gaebdd718ef8f26134756d5fa6de1ff854", null ] ];SimGrid-3.10/doc/html/group__XBT__adt.html000640 007661 000620 00000021005 12242224150 020607 0ustar00gierschand000000 000000 SimGrid: Usual data structures
SimGrid  3.10
Versatile Simulation of Distributed Systems
Usual data structures

Modules

 Dynar: generic dynamic array
 DynArr are dynamically sized vector which may contain any type of variables.
 Dict: generic dictionnary
 The dictionary data structure (comparable to hash tables)
 Set: generic set datatype
 A data container consisting in Dict: generic dictionnary and Dynar: generic dynamic array.
 Fifo: generic workqueue
 This section describes the API to generic workqueue.
 Swag: O(1) set datatype
 a O(1) set based on linked lists
 Heap: generic heap data structure
 This section describes the API to generic heap with O(log(n)) access.
 Data description

Detailed Description

Here are the basic data containers that every C programmer rewrites one day. You won't need to do so yourself, you lucky one, because we did it for you.

SimGrid-3.10/doc/html/classes.html000640 007661 000620 00000022045 12242224150 017252 0ustar00gierschand000000 000000 SimGrid: Data Structure Index
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__XBT__mallocator.html000640 007661 000620 00000016453 12242224150 022207 0ustar00gierschand000000 000000 SimGrid: Mallocators
SimGrid  3.10
Versatile Simulation of Distributed Systems

The mallocator system. More...

Modules

 Mallocator constructor and destructor
 Mallocator object handling

Detailed Description

The mallocator system.

This section describes the API to a mallocator. A mallocator allows you to recycle the objects you don't need anymore instead of freeing them. A mallocator is a stack which stores the unused objects or a given type. If you often need to malloc() / free() objects of a certain type, you should use a mallocator and call xbt_mallocator_get() and xbt_mallocator_release() instead of malloc() and free().

When you release an object, it is not freed but it is stored into the mallocator (unless the mallocator is full). And when you want to get a new object, the object is just extracted from the mallocator. No malloc() is done, unless there is no more object in the mallocator.

SimGrid-3.10/doc/html/group__XBT__fifo__perl.html000640 007661 000620 00000043241 12242224150 022151 0ustar00gierschand000000 000000 SimGrid: Fifo perl-like functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Fifo perl-like functions

Functions

xbt_fifo_item_t xbt_fifo_push (xbt_fifo_t, void *)
void * xbt_fifo_pop (xbt_fifo_t)
xbt_fifo_item_t xbt_fifo_unshift (xbt_fifo_t, void *)
void * xbt_fifo_shift (xbt_fifo_t)
int xbt_fifo_size (xbt_fifo_t)
int xbt_fifo_is_in (xbt_fifo_t, void *)
xbt_fifo_item_t xbt_fifo_search_item (xbt_fifo_t f, int_f_pvoid_pvoid_t cmp_fun, void *closure)
 Search the given element in the fifo using a comparison function.

Detailed Description

Function Documentation

xbt_fifo_item_t xbt_fifo_push ( xbt_fifo_t  l,
void *  t 
)

Push

Parameters
llist
telement
Returns
the bucket that was just added

Add an object at the tail of the list

void* xbt_fifo_pop ( xbt_fifo_t  l)

Pop

Parameters
llist
Returns
the object stored at the tail of the list.

Removes and returns the object stored at the tail of the list. Returns NULL if the list is empty.

xbt_fifo_item_t xbt_fifo_unshift ( xbt_fifo_t  l,
void *  t 
)
Parameters
llist
telement
Returns
the bucket that was just added

Add an object at the head of the list

void* xbt_fifo_shift ( xbt_fifo_t  l)

Shift

Parameters
llist
Returns
the object stored at the head of the list.

Removes and returns the object stored at the head of the list. Returns NULL if the list is empty.

int xbt_fifo_size ( xbt_fifo_t  f)
Parameters
fa list
Returns
the number of buckets in f.
int xbt_fifo_is_in ( xbt_fifo_t  f,
void *  content 
)
Parameters
fa list
contentan object
Returns
1 if content is in f.
xbt_fifo_item_t xbt_fifo_search_item ( xbt_fifo_t  f,
int_f_pvoid_pvoid_t  cmp_fun,
void *  closure 
)

Search the given element in the fifo using a comparison function.

This function allows to search an item with a user provided function instead of the pointer comparison used elsewhere in this module. Assume for example that you have a fifo of strings. You cannot use xbt_fifo_remove() to remove, say, "TOTO" from it because internally, xbt_fifo_remove() will do something like "if (item->content == "toto"), then remove it". And the pointer to the item content and the pointer to "toto" will never match. As a solution, the current function provides a way to search elements that are semanticaly equivalent instead of only syntaxically. So, removing "Toto" from a fifo can be achieved this way:

int my_comparison_function(void *searched, void *seen) {
  return !strcmp(searched, seen);
}

  xbt_fifo_remove_item(fifo,
                       xbt_fifo_search_item(fifo, my_comparison_function, "Toto"));
Parameters
fa fifo list
cmp_funthe comparison function. Prototype: void *a,void *b -> int. Semantic: returns true iff a=b
closurethe element to search. It will be provided as first argument to each call of cmp_fun
Returns
the first item matching the comparison function, or NULL if no such item exists
SimGrid-3.10/doc/html/group__SD__simulation.html000640 007661 000620 00000051177 12242224150 022111 0ustar00gierschand000000 000000 SimGrid: Simulation
SimGrid  3.10
Versatile Simulation of Distributed Systems
Simulation

Functions for creating the environment and launching the simulation. More...

Functions

void SD_init (int *argc, char **argv)
 Initializes SD internal data.
void SD_config (const char *key, const char *value)
 set a configuration variable
void SD_application_reinit (void)
 Reinits the application part of the simulation (experimental feature)
void SD_create_environment (const char *platform_file)
 Creates the environment.
xbt_dynar_t SD_simulate (double how_long)
 Launches the simulation.
double SD_get_clock (void)
 Returns the current clock.
void SD_exit (void)
 Destroys all SD internal data.
xbt_dynar_t SD_daxload (const char *filename)
 loads a DAX file describing a DAG
xbt_dynar_t SD_dotload (const char *filename)
 loads a DOT file describing a DAG

Detailed Description

Functions for creating the environment and launching the simulation.

This section describes the functions for initialising SimDag, launching the simulation and exiting SimDag.

Function Documentation

void SD_init ( int *  argc,
char **  argv 
)

Initializes SD internal data.

This function must be called before any other SD function. Then you should call SD_create_environment().

Parameters
argcargument number
argvargument list
See Also
SD_create_environment(), SD_exit()
void SD_config ( const char *  key,
const char *  value 
)

set a configuration variable

Do –help on any simgrid binary to see the list of currently existing configuration variables, and see Section Simgrid options and configurations.

Example: SD_config("workstation/model","default");

void SD_application_reinit ( void  )

Reinits the application part of the simulation (experimental feature)

This function allows you to run several simulations on the same platform by resetting the part describing the application.

Warning
: this function is still experimental and not perfect. For example, the simulation clock (and traces usage) is not reset. So, do not use it if you use traces in your simulation, and do not use absolute timing after using it. That being said, this function is still precious if you want to compare a bunch of heuristics on the same platforms.
void SD_create_environment ( const char *  platform_file)

Creates the environment.

The environment (i.e. the workstations and the links) is created with the data stored in the given XML platform file.

Parameters
platform_filename of an XML file describing the environment to create
See Also
Workstations, Links

The XML file follows this DTD:

\include simgrid.dtd

Here is a small example of such a platform:

\include small_platform.xml
xbt_dynar_t SD_simulate ( double  how_long)

Launches the simulation.

The function will execute the SD_RUNNABLE runnable tasks. If how_long is positive, then the simulation will be stopped either when time reaches how_long or when a watch point is reached. A non-positive value for how_long means no time limit, in which case the simulation will be stopped either when a watch point is reached or when no more task can be executed. Then you can call SD_simulate() again.

Parameters
how_longmaximum duration of the simulation (a negative value means no time limit)
Returns
a dynar of SD_task_t whose state has changed.
See Also
SD_task_schedule(), SD_task_watch()
double SD_get_clock ( void  )

Returns the current clock.

Returns
the current clock, in second
void SD_exit ( void  )

Destroys all SD internal data.

This function should be called when the simulation is over. Don't forget to destroy too.

See Also
SD_init(), SD_task_destroy()
xbt_dynar_t SD_daxload ( const char *  filename)

loads a DAX file describing a DAG

See https://confluence.pegasus.isi.edu/display/pegasus/WorkflowGenerator for more details.

xbt_dynar_t SD_dotload ( const char *  filename)

loads a DOT file describing a DAG

See http://www.graphviz.org/doc/info/lang.html for more details. To obtain information about transfers and tasks, two attributes are required : size on task (execution time in Flop) and size on edge (the amount of data transfer in bit). if they aren't here, there choose to be equal to zero.

SimGrid-3.10/doc/html/structs__model__type.js000640 007661 000620 00000000563 12242224150 021514 0ustar00gierschand000000 000000 var structs__model__type = [ [ "name", "structs__model__type.html#a3c16d53c35bc1d4bfd1fac73347b9112", null ], [ "desc", "structs__model__type.html#a8f34c752019a99c8e45ddd39e92b2b38", null ], [ "create", "structs__model__type.html#afb355965926bc9d620da6847710f6a12", null ], [ "end", "structs__model__type.html#a511f15d145ff07393d09864a768f0bbc", null ] ];SimGrid-3.10/doc/html/structs__smx__storage__priv.html000640 007661 000620 00000015127 12242224150 023437 0ustar00gierschand000000 000000 SimGrid: s_smx_storage_priv Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_smx_storage_priv Struct Reference

Storage datatype. More...

#include <smx_io_private.h>

Data Fields

void * data
 user data

Detailed Description

Storage datatype.


The documentation for this struct was generated from the following file:
  • src/simix/smx_io_private.h
SimGrid-3.10/doc/html/group__XBT__fifo__direct.html000640 007661 000620 00000072210 12242224150 022457 0ustar00gierschand000000 000000 SimGrid: Direct access to fifo elements
SimGrid  3.10
Versatile Simulation of Distributed Systems
Direct access to fifo elements

Macros

#define xbt_fifo_foreach(f, i, n, type)
 List iterator asserts and stuff.

Functions

xbt_fifo_item_t xbt_fifo_new_item (void)
void xbt_fifo_set_item_content (xbt_fifo_item_t, void *)
void * xbt_fifo_get_item_content (xbt_fifo_item_t)
void xbt_fifo_free_item (xbt_fifo_item_t)
void xbt_fifo_push_item (xbt_fifo_t, xbt_fifo_item_t)
xbt_fifo_item_t xbt_fifo_pop_item (xbt_fifo_t)
void xbt_fifo_unshift_item (xbt_fifo_t, xbt_fifo_item_t)
xbt_fifo_item_t xbt_fifo_shift_item (xbt_fifo_t)
int xbt_fifo_remove (xbt_fifo_t, void *)
int xbt_fifo_remove_all (xbt_fifo_t, void *)
void xbt_fifo_remove_item (xbt_fifo_t, xbt_fifo_item_t)
xbt_fifo_item_t xbt_fifo_get_first_item (xbt_fifo_t l)
xbt_fifo_item_t xbt_fifo_get_last_item (xbt_fifo_t l)
xbt_fifo_item_t xbt_fifo_get_next_item (xbt_fifo_item_t i)
xbt_fifo_item_t xbt_fifo_get_prev_item (xbt_fifo_item_t i)

Detailed Description

Macro Definition Documentation

#define xbt_fifo_foreach (   f,
  i,
  n,
  type 
)

List iterator asserts and stuff.

Parameters
fa list (xbt_fifo_t)
ia bucket (xbt_fifo_item_t)
typea type
nan object of type type.

Iterates over the whole list.

Function Documentation

xbt_fifo_item_t xbt_fifo_new_item ( void  )

Constructor

Returns
a new bucket
void xbt_fifo_set_item_content ( xbt_fifo_item_t  i,
void *  v 
)
Parameters
ia bucket
van object

stores v in i.

void* xbt_fifo_get_item_content ( xbt_fifo_item_t  i)
Parameters
ia bucket
Returns
the object stored i.
void xbt_fifo_free_item ( xbt_fifo_item_t  b)

Destructor

Parameters
bpoor victim

Free the bucket but does not modifies the object (if any) that was stored in it.

void xbt_fifo_push_item ( xbt_fifo_t  l,
xbt_fifo_item_t  new 
)

Push a bucket

Parameters
llist
newbucket

Hook up this bucket at the tail of the list

xbt_fifo_item_t xbt_fifo_pop_item ( xbt_fifo_t  l)

Pop bucket

Parameters
l
Returns
the bucket that was at the tail of the list.

Returns NULL if the list was empty.

void xbt_fifo_unshift_item ( xbt_fifo_t  l,
xbt_fifo_item_t  new 
)

Push a bucket

Parameters
llist
newbucket

Hook up this bucket at the head of the list

xbt_fifo_item_t xbt_fifo_shift_item ( xbt_fifo_t  l)

Shift bucket

Parameters
l
Returns
the bucket that was at the head of the list.

Returns NULL if the list was empty.

int xbt_fifo_remove ( xbt_fifo_t  l,
void *  t 
)
Parameters
l
tan objet

removes the first occurence of t from l.

Warning
it will not remove duplicates
Returns
1 if an item was removed and 0 otherwise.
int xbt_fifo_remove_all ( xbt_fifo_t  l,
void *  t 
)
Parameters
l
tan objet

removes all occurences of t from l.

Returns
1 if an item was removed and 0 otherwise.
void xbt_fifo_remove_item ( xbt_fifo_t  l,
xbt_fifo_item_t  current 
)
Parameters
la list
currenta bucket

removes a bucket current from the list l. This function implicitely assumes (and doesn't check!) that this item belongs to this list...

xbt_fifo_item_t xbt_fifo_get_first_item ( xbt_fifo_t  l)
Parameters
la list
Returns
the head of l.

Returns NULL if the list is empty.

xbt_fifo_item_t xbt_fifo_get_last_item ( xbt_fifo_t  l)
Parameters
la list
Returns
the tail of l.

Returns NULL if the list is empty.

xbt_fifo_item_t xbt_fifo_get_next_item ( xbt_fifo_item_t  i)
Parameters
ia bucket
Returns
the bucket that comes next

Returns NULL if i is the tail of the list.

xbt_fifo_item_t xbt_fifo_get_prev_item ( xbt_fifo_item_t  i)
Parameters
ia bucket
Returns
the bucket that is just before i.

Returns NULL if i is the head of the list.

SimGrid-3.10/doc/html/group__XBT__set__cons.js000640 007661 000620 00000000726 12242224150 021472 0ustar00gierschand000000 000000 var group__XBT__set__cons = [ [ "xbt_set_elm_", "structxbt__set__elm__.html", null ], [ "xbt_set_t", "group__XBT__set__cons.html#ga5a56bcacbc9efbb918abb6be2f7c8b7d", null ], [ "s_xbt_set_elm_t", "group__XBT__set__cons.html#gaf8bb4c0082689473e7aa16791283a38e", null ], [ "xbt_set_new", "group__XBT__set__cons.html#ga2cb4e125f22594bb8f7a2726464fed3d", null ], [ "xbt_set_free", "group__XBT__set__cons.html#ga268b2b486920b5f0a580b3d1bed6875a", null ] ];SimGrid-3.10/doc/html/resize.js000640 007661 000620 00000005165 12242224150 016572 0ustar00gierschand000000 000000 var cookie_namespace = 'doxygen'; var sidenav,navtree,content,header; function readCookie(cookie) { var myCookie = cookie_namespace+"_"+cookie+"="; if (document.cookie) { var index = document.cookie.indexOf(myCookie); if (index != -1) { var valStart = index + myCookie.length; var valEnd = document.cookie.indexOf(";", valStart); if (valEnd == -1) { valEnd = document.cookie.length; } var val = document.cookie.substring(valStart, valEnd); return val; } } return 0; } function writeCookie(cookie, val, expiration) { if (val==undefined) return; if (expiration == null) { var date = new Date(); date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week expiration = date.toGMTString(); } document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; } function resizeWidth() { var windowWidth = $(window).width() + "px"; var sidenavWidth = $(sidenav).width(); content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar writeCookie('width',sidenavWidth, null); } function restoreWidth(navWidth) { var windowWidth = $(window).width() + "px"; content.css({marginLeft:parseInt(navWidth)+6+"px"}); sidenav.css({width:navWidth + "px"}); } function resizeHeight() { var headerHeight = header.height(); var footerHeight = footer.height(); var windowHeight = $(window).height() - headerHeight - footerHeight; content.css({height:windowHeight + "px"}); navtree.css({height:windowHeight + "px"}); sidenav.css({height:windowHeight + "px",top: headerHeight+"px"}); } function initResizable() { header = $("#top"); sidenav = $("#side-nav"); content = $("#doc-content"); navtree = $("#nav-tree"); footer = $("#nav-path"); $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); $(window).resize(function() { resizeHeight(); }); var width = readCookie('width'); if (width) { restoreWidth(width); } else { resizeWidth(); } resizeHeight(); var url = location.href; var i=url.indexOf("#"); if (i>=0) window.location.hash=url.substr(i); var _preventDefault = function(evt) { evt.preventDefault(); }; $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); $(document).bind('touchmove',function(e){ try { var target = e.target; while (target) { if ($(target).css('-webkit-overflow-scrolling')=='touch') return; target = target.parentNode; } e.preventDefault(); } catch(err) { e.preventDefault(); } }); } SimGrid-3.10/doc/html/structsurf__action__state.js000640 007661 000620 00000000675 12242224150 022551 0ustar00gierschand000000 000000 var structsurf__action__state = [ [ "ready_action_set", "structsurf__action__state.html#a037da16821384bfb2364d03d7bc7c6b2", null ], [ "running_action_set", "structsurf__action__state.html#a25766c647f7fadf3b54cdd5f7ab81957", null ], [ "failed_action_set", "structsurf__action__state.html#afd75fc8c3f9c0427127d33cf6c0514d8", null ], [ "done_action_set", "structsurf__action__state.html#ae22e8832c0918dc4942f1d918103e186", null ] ];SimGrid-3.10/doc/html/structs__xbt__dict__cursor.js000640 007661 000620 00000000470 12242224150 022704 0ustar00gierschand000000 000000 var structs__xbt__dict__cursor = [ [ "current", "structs__xbt__dict__cursor.html#a4c64e66fcdf566bcc46385d7a78316ca", null ], [ "line", "structs__xbt__dict__cursor.html#a349b536ba2a66ab40fd69a92d5b489d1", null ], [ "dict", "structs__xbt__dict__cursor.html#ab1ede032c9b987a3af7efb95f577d9e9", null ] ];SimGrid-3.10/doc/html/structsurf__cpu__model__extension__public.html000640 007661 000620 00000014105 12242224150 026314 0ustar00gierschand000000 000000 SimGrid: surf_cpu_model_extension_public Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_cpu_model_extension_public Struct Reference

CPU model extension public. More...

#include <surf.h>

Detailed Description

CPU model extension public.

Public functions specific to the CPU model.


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/structsurf__network__model__extension__public.js000640 007661 000620 00000001376 12242224150 026674 0ustar00gierschand000000 000000 var structsurf__network__model__extension__public = [ [ "communicate", "structsurf__network__model__extension__public.html#aa966bc991d790f93aad9388ec7667138", null ], [ "get_route", "structsurf__network__model__extension__public.html#a6714ba944b2ad344f1ca39243ebede17", null ], [ "get_link_bandwidth", "structsurf__network__model__extension__public.html#a605fe2fe5f6d1311179a36dbf67931be", null ], [ "get_link_latency", "structsurf__network__model__extension__public.html#a76c9975d0433f0df43694f075b8fe177", null ], [ "link_shared", "structsurf__network__model__extension__public.html#a5ff6d0954f860e74ddc1d0b244f10f4e", null ], [ "add_traces", "structsurf__network__model__extension__public.html#ab6f43aef34d2a59f87990905d8079ce2", null ] ];SimGrid-3.10/doc/html/annotated.html000640 007661 000620 00000031525 12242224150 017575 0ustar00gierschand000000 000000 SimGrid: Data Structures
SimGrid  3.10
Versatile Simulation of Distributed Systems
Data Structures
Here are the data structures with brief descriptions:
oCs_model_type
oCs_smx_actionAction datatype
oCs_smx_host_privHost datatype
oCs_smx_processProcess datatype
oCs_smx_rvpointRendez-vous point datatype
oCs_smx_simcallRepresents a simcall to the kernel
oCs_smx_storage_privStorage datatype
oCs_smx_timerTimer datatype
oCs_surf_metric_t
oCs_xbt_dict_cursorCursor on dictionaries (opaque type)
oCs_xbt_parmapParallel map structure
oCs_xbt_parmap_thread_dataThread data transmission structure
oCs_xbt_peerStructure describing a remote host (as name:port)
oCs_xbt_strbuff_t
oCsurf_actionAction structure
oCsurf_action_stateAction state sets
oCsurf_cpu_model_extension_publicCPU model extension public
oCsurf_modelModel datatype
oCsurf_model_descriptionResource model description
oCsurf_network_model_extension_publicNetwork model extension public
oCsurf_storage_model_extension_publicStorage model extension public
oCsurf_workstation_model_extension_publicWorkstation model extension public
oCxbt_boolean_couple
oCxbt_ex_tStructure describing an exception
\Cxbt_set_elm_It must be possible to cast set elements to this type
SimGrid-3.10/doc/html/group__simix__file__management.html000640 007661 000620 00000021022 12242224150 024004 0ustar00gierschand000000 000000 SimGrid: File Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
File Management Functions

Functions

void * simcall_file_get_data (smx_file_t fd)
 Returns the user data associated to a file.
void simcall_file_set_data (smx_file_t fd, void *data)
 Sets the user data associated to a file.

Detailed Description

Function Documentation

void* simcall_file_get_data ( smx_file_t  fd)

Returns the user data associated to a file.

Parameters
fdA simix file
Returns
the user data of this file
void simcall_file_set_data ( smx_file_t  fd,
void *  data 
)

Sets the user data associated to a file.

Parameters
fdA SIMIX file
dataThe user data to set
SimGrid-3.10/doc/html/functions_vars.html000640 007661 000620 00000036034 12242224150 020663 0ustar00gierschand000000 000000 SimGrid: Data Fields - Variables
SimGrid  3.10
Versatile Simulation of Distributed Systems
 

- a -

- c -

- d -

- e -

- f -

- g -

- i -

- l -

- m -

- n -

- p -

- r -

- s -

- t -

- v -

- w -

SimGrid-3.10/doc/html/group__simix__rdv__management.html000640 007661 000620 00000030737 12242224150 023675 0ustar00gierschand000000 000000 SimGrid: RDV Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
RDV Management Functions

Functions

smx_rdv_t simcall_rdv_create (const char *name)
 Creates a new rendez-vous point.
void simcall_rdv_destroy (smx_rdv_t rdv)
 Destroy a rendez-vous point.
smx_rdv_t simcall_rdv_get_by_name (const char *name)
 Returns a rendez-vous point knowing its name.
int simcall_rdv_comm_count_by_host (smx_rdv_t rdv, smx_host_t host)
 Counts the number of communication actions of a given host pending on a rendez-vous point.
smx_action_t simcall_rdv_get_head (smx_rdv_t rdv)
 returns the communication at the head of the rendez-vous

Detailed Description

Function Documentation

smx_rdv_t simcall_rdv_create ( const char *  name)

Creates a new rendez-vous point.

Parameters
nameThe name of the rendez-vous point
Returns
The created rendez-vous point
void simcall_rdv_destroy ( smx_rdv_t  rdv)

Destroy a rendez-vous point.

Parameters
rdvThe rendez-vous point to destroy
int simcall_rdv_comm_count_by_host ( smx_rdv_t  rdv,
smx_host_t  host 
)

Counts the number of communication actions of a given host pending on a rendez-vous point.

Parameters
rdvThe rendez-vous point
hostThe host to be counted
Returns
The number of comm actions pending in the rdv
smx_action_t simcall_rdv_get_head ( smx_rdv_t  rdv)

returns the communication at the head of the rendez-vous

Parameters
rdvThe rendez-vous point
Returns
The communication or NULL if empty
SimGrid-3.10/doc/html/group__msg__storage__management.html000640 007661 000620 00000050332 12242224150 024174 0ustar00gierschand000000 000000 SimGrid: Msg_storage_management
SimGrid  3.10
Versatile Simulation of Distributed Systems
Msg_storage_management

Typedefs

typedef xbt_dictelm_t msg_storage_t
 Storage datatype.You should consider this as an opaque object.

Functions

const char * MSG_storage_get_name (msg_storage_t storage)
 Returns the name of the msg_storage_t.
sg_storage_size_t MSG_storage_get_free_size (const char *name)
 Returns the free space size of a storage element.
sg_storage_size_t MSG_storage_get_used_size (const char *name)
 Returns the used space size of a storage element.
xbt_dict_t MSG_storage_get_properties (msg_storage_t storage)
 Returns a xbt_dict_t consisting of the list of properties assigned to this storage.
void MSG_storage_set_property_value (msg_storage_t storage, const char *name, char *value, void_f_pvoid_t free_ctn)
 Change the value of a given storage property.
msg_storage_t MSG_storage_get_by_name (const char *name)
 Finds a msg_storage_t using its name.
xbt_dynar_t MSG_storages_as_dynar (void)
 Returns a dynar containing all the storage elements declared at a given point of time.
msg_error_t MSG_storage_set_data (msg_storage_t storage, void *data)
 Set the user data of a msg_storage_t. This functions checks whether some data has already been associated to storage or not and attach data to storage if it is possible.
xbt_dict_t MSG_storage_get_content (msg_storage_t storage)
 Returns the content (file list) of a msg_storage_t.

Detailed Description

(msg_storage_t) and the functions for managing it.

Function Documentation

const char* MSG_storage_get_name ( msg_storage_t  storage)

Returns the name of the msg_storage_t.

This functions checks whether a storage is a valid pointer or not and return its name.

sg_storage_size_t MSG_storage_get_free_size ( const char *  name)

Returns the free space size of a storage element.

Parameters
namethe name of a storage
Returns
the free space size of the storage element (as a sg_storage_size_t)
sg_storage_size_t MSG_storage_get_used_size ( const char *  name)

Returns the used space size of a storage element.

Parameters
namethe name of a storage
Returns
the used space size of the storage element (as a sg_storage_size_t)
xbt_dict_t MSG_storage_get_properties ( msg_storage_t  storage)

Returns a xbt_dict_t consisting of the list of properties assigned to this storage.

Parameters
storagea storage
Returns
a dict containing the properties
void MSG_storage_set_property_value ( msg_storage_t  storage,
const char *  name,
char *  value,
void_f_pvoid_t  free_ctn 
)

Change the value of a given storage property.

Parameters
storagea storage
namea property name
valuewhat to change the property to
free_ctnthe freeing function to use to kill the value on need
msg_storage_t MSG_storage_get_by_name ( const char *  name)

Finds a msg_storage_t using its name.

Parameters
namethe name of a storage
Returns
the corresponding storage
xbt_dict_t MSG_storage_get_content ( msg_storage_t  storage)

Returns the content (file list) of a msg_storage_t.

Parameters
storagea storage
Returns
The content of this storage element as a dict (full path file => size)
SimGrid-3.10/doc/html/group__XBT__swag__type.html000640 007661 000620 00000022172 12242224150 022206 0ustar00gierschand000000 000000 SimGrid: Swag types
SimGrid  3.10
Versatile Simulation of Distributed Systems

Typedefs

typedef struct xbt_swag_hookup s_xbt_swag_hookup_t
typedef struct xbt_swag * xbt_swag_t

Detailed Description

Specific set.

These typedefs are public so that the compiler can do his job but believe me, you don't want to try to play with those structs directly. Use them as an abstract datatype.

Typedef Documentation

typedef struct xbt_swag_hookup s_xbt_swag_hookup_t

This type should be added to a type that is to be used in a swag.

Whenever a new object with this struct is created, all fields have to be set to NULL

Here is an example like that :

typedef struct foo {
s_xbt_swag_hookup_t set1_hookup;
s_xbt_swag_hookup_t set2_hookup;
double value;
} s_foo_t, *foo_t;
...
{
s_foo_t elem;
xbt_swag_t set1=NULL;
xbt_swag_t set2=NULL;
set1 = xbt_swag_new(xbt_swag_offset(elem, set1_hookup));
set2 = xbt_swag_new(xbt_swag_offset(elem, set2_hookup));
}
typedef struct xbt_swag * xbt_swag_t

A typical swag

SimGrid-3.10/doc/html/tab_b.png000640 007661 000620 00000000247 12242224150 016504 0ustar00gierschand000000 000000 PNG  IHDR$[nIDATxQ 0RXcI7IӨg|ٜgY3u{WS1 CjiCGJ+| s7+ٛ`t3܂aKGqQZT=@*C݇LIENDB`SimGrid-3.10/doc/html/structsurf__storage__model__extension__public.js000640 007661 000620 00000002232 12242224150 026637 0ustar00gierschand000000 000000 var structsurf__storage__model__extension__public = [ [ "open", "structsurf__storage__model__extension__public.html#a6edd559401a7bb577f9bcc6e5dd14507", null ], [ "close", "structsurf__storage__model__extension__public.html#ae83133f18c15e5337b6e2db10a36c8fb", null ], [ "read", "structsurf__storage__model__extension__public.html#ac419c1b7d87fbe63da7e3ded0e934758", null ], [ "write", "structsurf__storage__model__extension__public.html#a7c8a55abd88a25e9d145e2359f055eb4", null ], [ "stat", "structsurf__storage__model__extension__public.html#adb41211decbb6c95a961df19f35e89e9", null ], [ "ls", "structsurf__storage__model__extension__public.html#a42319a48e89b0993946e5f682b0985f3", null ], [ "get_properties", "structsurf__storage__model__extension__public.html#a24ae807255ef54c187a3081cf92d897d", null ], [ "rename", "structsurf__storage__model__extension__public.html#a7d6f3d2b274ee34a45f98ce665b29b30", null ], [ "get_content", "structsurf__storage__model__extension__public.html#abe562eab79f101743c22738c64f3063d", null ], [ "get_size", "structsurf__storage__model__extension__public.html#a32699c8fc477edbfac34ec0fcb7a7ef3", null ] ];SimGrid-3.10/doc/html/group__XBT__graph.html000640 007661 000620 00000061262 12242224150 021151 0ustar00gierschand000000 000000 SimGrid: General purpose graph library
SimGrid  3.10
Versatile Simulation of Distributed Systems

A graph data type with several interesting algorithms. More...

Functions

xbt_graph_t xbt_graph_new_graph (unsigned short int directed, void *data)
 Constructor.
xbt_node_t xbt_graph_new_node (xbt_graph_t g, void *data)
 add a node to the given graph
xbt_edge_t xbt_graph_new_edge (xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data)
 add an edge to the given graph
void * xbt_graph_node_get_data (xbt_node_t node)
 Get the user data associated to a node.
void xbt_graph_node_set_data (xbt_node_t node, void *data)
 Set the user data associated to a node.
void * xbt_graph_edge_get_data (xbt_edge_t edge)
 Get the user data associated to a edge.
void xbt_graph_edge_set_data (xbt_edge_t edge, void *data)
 Set the user data associated to a edge.
xbt_edge_t xbt_graph_get_edge (xbt_graph_t g, xbt_node_t src, xbt_node_t dst)
 Get the edge connecting src and dst.
void xbt_graph_edge_set_length (xbt_edge_t e, double length)
 Set the weight of the given edge.
double xbt_graph_edge_get_length (xbt_edge_t e)
 Get the length of a edge.
double * xbt_graph_get_length_matrix (xbt_graph_t g)
 construct the adjacency matrix corresponding to the given graph
void xbt_graph_free_node (xbt_graph_t g, xbt_node_t n, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function)
 remove the given node from the given graph
void xbt_graph_free_edge (xbt_graph_t g, xbt_edge_t e, void_f_pvoid_t free_function)
 remove the given edge from the given graph
void xbt_graph_free_graph (xbt_graph_t g, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function)
 Destructor.
xbt_dynar_t xbt_graph_get_nodes (xbt_graph_t g)
 Retrieve the graph's nodes as a dynar.
xbt_dynar_t xbt_graph_get_edges (xbt_graph_t g)
 Retrieve the graph's edges as a dynar.
xbt_dynar_t xbt_graph_node_get_outedges (xbt_node_t n)
 Retrieve the outgoing edges of the given node.
xbt_node_t xbt_graph_edge_get_source (xbt_edge_t e)
 Retrieve the node at the source of the given edge.
xbt_node_t xbt_graph_edge_get_target (xbt_edge_t e)
 Retrieve the node being the target of the given edge.
void xbt_graph_export_graphviz (xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t))
 Export the given graph in the GraphViz formatting for visualization.
void xbt_graph_export_graphxml (xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t), const char *(node_data_print)(void *), const char *(edge_data_print)(void *))
 Export the given graph in the GraphXML format.
xbt_graph_t xbt_graph_load (const char *filename)
 Load a graph from a file (in the SimGrid Graph format)
void xbt_graph_save (xbt_graph_t span, const char *filename, const char *(nname)(xbt_node_t), const char *(ename)(xbt_edge_t))
 Save a graph from a file (in the SimGrid Graph format)
xbt_node_t * xbt_graph_shortest_paths (xbt_graph_t g)
 computes all-pairs shortest paths
xbt_node_t * xbt_graph_topo_sort (xbt_graph_t g)
 transforms the network structure of a directed acyclic graph given into a linear structure
xbt_edge_t * xbt_graph_spanning_tree_prim (xbt_graph_t g)
 Extract a spanning tree of the given graph.

Detailed Description

A graph data type with several interesting algorithms.

Function Documentation

xbt_graph_t xbt_graph_new_graph ( unsigned short int  directed,
void *  data 
)

Constructor.

Returns
a new graph
double* xbt_graph_get_length_matrix ( xbt_graph_t  g)

construct the adjacency matrix corresponding to the given graph

The weights are the distances between nodes

void xbt_graph_free_graph ( xbt_graph_t  g,
void_f_pvoid_t  node_free_function,
void_f_pvoid_t  edge_free_function,
void_f_pvoid_t  graph_free_function 
)

Destructor.

Parameters
g,:poor victim
node_free_function,:function to use to free data associated to each node
edge_free_function,:function to use to free data associated to each edge
graph_free_function,:function to use to free data associated to g

Free the graph structure.

xbt_node_t* xbt_graph_topo_sort ( xbt_graph_t  g)

transforms the network structure of a directed acyclic graph given into a linear structure

Returns
: an array containing the nodes of the graph sorted in order reverse to the path of exploration if a cycle is detected an exception is raised

transforms the network structure of a directed acyclic graph given into a linear structure

From wikipedia:

In graph theory, a topological sort of a directed acyclic graph (DAG) is a linear ordering of its nodes which is compatible with the partial order R induced on the nodes where x comes before y (xRy) if there's a directed path from x to y in the DAG. An equivalent definition is that each node comes before all nodes to which it has edges. Every DAG has at least one topological sort, and may have many.

SimGrid-3.10/doc/html/group__msg__task__usage.html000640 007661 000620 00000313460 12242224150 022466 0ustar00gierschand000000 000000 SimGrid: Task Actions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Task Actions

This section describes the functions that can be used by a process to execute, communicate or otherwise handle some task. More...

Typedefs

typedef struct s_smx_rvpointmsg_mailbox_t
 Mailbox datatypeObject representing a communication rendez-vous point, on which the sender finds the receiver it wants to communicate with. As a MSG user, you will only rarely manipulate any of these objects directly, since most of the public interface (such as MSG_task_send and friends) hide this object behind a string alias. That mean that you don't provide the mailbox on which you want to send your task, but only the name of this mailbox.
typedef struct msg_comm * msg_comm_t
 Communication action.Object representing an ongoing communication between processes. Such beast is usually obtained by using MSG_task_isend, MSG_task_irecv or friends.

Functions

msg_error_t MSG_task_execute (msg_task_t task)
 Executes a task and waits for its termination.
msg_error_t MSG_parallel_task_execute (msg_task_t task)
 Executes a parallel task and waits for its termination.
msg_error_t MSG_process_sleep (double nb_sec)
 Sleep for the specified number of seconds.
msg_error_t MSG_task_receive_from_host (msg_task_t *task, const char *alias, msg_host_t host)
 Deprecated function that used to receive a task from a mailbox from a specific host.
msg_error_t MSG_task_receive (msg_task_t *task, const char *alias)
 Receives a task from a mailbox.
msg_error_t MSG_task_receive_bounded (msg_task_t *task, const char *alias, double rate)
 Receives a task from a mailbox at a given rate.
msg_error_t MSG_task_receive_with_timeout (msg_task_t *task, const char *alias, double timeout)
 Receives a task from a mailbox with a given timeout.
msg_error_t MSG_task_receive_with_timeout_bounded (msg_task_t *task, const char *alias, double timeout, double rate)
 Receives a task from a mailbox with a given timeout and at a given rate.
msg_error_t MSG_task_receive_ext (msg_task_t *task, const char *alias, double timeout, msg_host_t host)
 Receives a task from a mailbox from a specific host with a given timeout.
msg_error_t MSG_task_receive_ext_bounded (msg_task_t *task, const char *alias, double timeout, msg_host_t host, double rate)
 Receives a task from a mailbox from a specific host with a given timeout and at a given rate.
msg_comm_t MSG_task_isend (msg_task_t task, const char *alias)
 Sends a task on a mailbox.
msg_comm_t MSG_task_isend_bounded (msg_task_t task, const char *alias, double maxrate)
 Sends a task on a mailbox with a maximum rate.
msg_comm_t MSG_task_isend_with_matching (msg_task_t task, const char *alias, int(*match_fun)(void *, void *, smx_action_t), void *match_data)
 Sends a task on a mailbox, with support for matching requests.
void MSG_task_dsend (msg_task_t task, const char *alias, void_f_pvoid_t cleanup)
 Sends a task on a mailbox.
void MSG_task_dsend_bounded (msg_task_t task, const char *alias, void_f_pvoid_t cleanup, double maxrate)
 Sends a task on a mailbox with a maximal rate.
msg_comm_t MSG_task_irecv (msg_task_t *task, const char *name)
 Starts listening for receiving a task from an asynchronous communication.
msg_comm_t MSG_task_irecv_bounded (msg_task_t *task, const char *name, double rate)
 Starts listening for receiving a task from an asynchronous communication at a given rate.
int MSG_comm_test (msg_comm_t comm)
 Checks whether a communication is done, and if yes, finalizes it.
int MSG_comm_testany (xbt_dynar_t comms)
 This function checks if a communication is finished.
void MSG_comm_destroy (msg_comm_t comm)
 Destroys a communication.
msg_error_t MSG_comm_wait (msg_comm_t comm, double timeout)
 Wait for the completion of a communication.
void MSG_comm_waitall (msg_comm_t *comm, int nb_elem, double timeout)
 This function is called by a sender and permit to wait for each communication.
int MSG_comm_waitany (xbt_dynar_t comms)
 This function waits for the first communication finished in a list.
msg_error_t MSG_comm_get_status (msg_comm_t comm)
 Returns the error (if any) that occured during a finished communication.
msg_task_t MSG_comm_get_task (msg_comm_t comm)
 Get a task (msg_task_t) from a communication.
msg_error_t MSG_task_send (msg_task_t task, const char *alias)
 Sends a task to a mailbox.
msg_error_t MSG_task_send_bounded (msg_task_t task, const char *alias, double maxrate)
 Sends a task to a mailbox with a maximum rate.
msg_error_t MSG_task_send_with_timeout (msg_task_t task, const char *alias, double timeout)
 Sends a task to a mailbox with a timeout.
msg_error_t MSG_task_send_with_timeout_bounded (msg_task_t task, const char *alias, double timeout, double maxrate)
 Sends a task to a mailbox with a timeout and with a maximum rate.
int MSG_task_listen (const char *alias)
 Check if there is a communication going on in a mailbox.
int MSG_task_listen_from_host (const char *alias, msg_host_t host)
 Check the number of communication actions of a given host pending in a mailbox.
int MSG_task_listen_from (const char *alias)
 Look if there is a communication on a mailbox and return the PID of the sender process.
void MSG_task_set_category (msg_task_t task, const char *category)
 Sets the tracing category of a task.
const char * MSG_task_get_category (msg_task_t task)
 Gets the current tracing category of a task.

Detailed Description

This section describes the functions that can be used by a process to execute, communicate or otherwise handle some task.

Function Documentation

msg_error_t MSG_task_execute ( msg_task_t  task)

Executes a task and waits for its termination.

This function is used for describing the behavior of a process. It takes only one parameter.

Parameters
taska msg_task_t to execute on the location on which the process is running.
Returns
MSG_OK if the task was successfully completed, MSG_TASK_CANCELED or MSG_HOST_FAILURE otherwise
msg_error_t MSG_parallel_task_execute ( msg_task_t  task)

Executes a parallel task and waits for its termination.

Parameters
taska msg_task_t to execute on the location on which the process is running.
Returns
MSG_OK if the task was successfully completed, MSG_TASK_CANCELED or MSG_HOST_FAILURE otherwise
msg_error_t MSG_process_sleep ( double  nb_sec)

Sleep for the specified number of seconds.

Makes the current process sleep until time seconds have elapsed.

Parameters
nb_seca number of second
msg_error_t MSG_task_receive_from_host ( msg_task_t task,
const char *  alias,
msg_host_t  host 
)

Deprecated function that used to receive a task from a mailbox from a specific host.

Sorry, this function is not supported anymore. That wouldn't be impossible to reimplement it, but we are lacking the time to do so ourselves. If you need this functionality, you can either:

  • implement the buffering mechanism on the user-level by queuing all messages received in the mailbox that do not match your expectation
  • change your application logic to leverage the mailboxes features. For example, if you have A receiving messages from B and C, you could have A waiting on mailbox "A" most of the time, but on "A#B" when it's waiting for specific messages from B and "A#C" when waiting for messages from C. You could even get A sometime waiting on all these mailboxes using MSG_comm_waitany. You can find an example of use of this function in the MSG examples section.
  • Provide a proper patch to implement this functionality back in MSG. That wouldn't be very difficult actually. Check the function MSG_mailbox_get_task_ext. During its call to simcall_comm_recv(), the 5th argument, match_fun, is NULL. Create a function that filters messages according to the host (that you will pass as sixth argument to simcall_comm_recv() and that your filtering function will receive as first parameter, and then, the filter could simply compare the host names, for example. After sufficient testing, provide an example that we could add to the distribution, and your first contribution to SimGrid is ready. Thanks in advance.
Parameters
taska memory location for storing a msg_task_t.
aliasname of the mailbox to receive the task from
hosta msg_host_t host from where the task was sent
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE otherwise.
msg_error_t MSG_task_receive ( msg_task_t task,
const char *  alias 
)

Receives a task from a mailbox.

This is a blocking function, the execution flow will be blocked until the task is received. See MSG_task_irecv for receiving tasks asynchronously.

Parameters
taska memory location for storing a msg_task_t.
aliasname of the mailbox to receive the task from
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE otherwise.
msg_error_t MSG_task_receive_bounded ( msg_task_t task,
const char *  alias,
double  rate 
)

Receives a task from a mailbox at a given rate.

Parameters
taska memory location for storing a msg_task_t.
aliasname of the mailbox to receive the task from
ratelimit the reception to rate bandwidth
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE otherwise.
msg_error_t MSG_task_receive_with_timeout ( msg_task_t task,
const char *  alias,
double  timeout 
)

Receives a task from a mailbox with a given timeout.

This is a blocking function with a timeout, the execution flow will be blocked until the task is received or the timeout is achieved. See MSG_task_irecv for receiving tasks asynchronously. You can provide a -1 timeout to obtain an infinite timeout.

Parameters
taska memory location for storing a msg_task_t.
aliasname of the mailbox to receive the task from
timeoutis the maximum wait time for completion (if -1, this call is the same as MSG_task_receive)
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE, or MSG_TIMEOUT otherwise.
msg_error_t MSG_task_receive_with_timeout_bounded ( msg_task_t task,
const char *  alias,
double  timeout,
double  rate 
)

Receives a task from a mailbox with a given timeout and at a given rate.

Parameters
taska memory location for storing a msg_task_t.
aliasname of the mailbox to receive the task from
timeoutis the maximum wait time for completion (if -1, this call is the same as MSG_task_receive)
ratelimit the reception to rate bandwidth
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE, or MSG_TIMEOUT otherwise.
msg_error_t MSG_task_receive_ext ( msg_task_t task,
const char *  alias,
double  timeout,
msg_host_t  host 
)

Receives a task from a mailbox from a specific host with a given timeout.

This is a blocking function with a timeout, the execution flow will be blocked until the task is received or the timeout is achieved. See MSG_task_irecv for receiving tasks asynchronously. You can provide a -1 timeout to obtain an infinite timeout.

Parameters
taska memory location for storing a msg_task_t.
aliasname of the mailbox to receive the task from
timeoutis the maximum wait time for completion (provide -1 for no timeout)
hosta msg_host_t host from where the task was sent
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE, or MSG_TIMEOUT otherwise.
msg_error_t MSG_task_receive_ext_bounded ( msg_task_t task,
const char *  alias,
double  timeout,
msg_host_t  host,
double  rate 
)

Receives a task from a mailbox from a specific host with a given timeout and at a given rate.

Parameters
taska memory location for storing a msg_task_t.
aliasname of the mailbox to receive the task from
timeoutis the maximum wait time for completion (provide -1 for no timeout)
hosta msg_host_t host from where the task was sent
ratelimit the reception to rate bandwidth
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE, or MSG_TIMEOUT otherwise.
msg_comm_t MSG_task_isend ( msg_task_t  task,
const char *  alias 
)

Sends a task on a mailbox.

This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication.

Parameters
taska msg_task_t to send on another location.
aliasname of the mailbox to sent the task to
Returns
the msg_comm_t communication created
msg_comm_t MSG_task_isend_bounded ( msg_task_t  task,
const char *  alias,
double  maxrate 
)

Sends a task on a mailbox with a maximum rate.

This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication. The maxrate parameter allows the application to limit the bandwidth utilization of network links when sending the task.

Parameters
taska msg_task_t to send on another location.
aliasname of the mailbox to sent the task to
maxratethe maximum communication rate for sending this task .
Returns
the msg_comm_t communication created
msg_comm_t MSG_task_isend_with_matching ( msg_task_t  task,
const char *  alias,
int(*)(void *, void *, smx_action_t match_fun,
void *  match_data 
)

Sends a task on a mailbox, with support for matching requests.

This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication.

Parameters
taska msg_task_t to send on another location.
aliasname of the mailbox to sent the task to
match_funboolean function which parameters are:
  • match_data_provided_here
  • match_data_provided_by_other_side_if_any
  • the_smx_action_describing_the_other_side
match_datauser provided data passed to match_fun
Returns
the msg_comm_t communication created
void MSG_task_dsend ( msg_task_t  task,
const char *  alias,
void_f_pvoid_t  cleanup 
)

Sends a task on a mailbox.

This is a non blocking detached send function. Think of it as a best effort send. Keep in mind that the third parameter is only called if the communication fails. If the communication does work, it is responsibility of the receiver code to free anything related to the task, as usual. More details on this can be obtained on this thread in the SimGrid-user mailing list archive.

Parameters
taska msg_task_t to send on another location.
aliasname of the mailbox to sent the task to
cleanupa function to destroy the task if the communication fails, e.g. MSG_task_destroy (if NULL, no function will be called)
void MSG_task_dsend_bounded ( msg_task_t  task,
const char *  alias,
void_f_pvoid_t  cleanup,
double  maxrate 
)

Sends a task on a mailbox with a maximal rate.

This is a non blocking detached send function. Think of it as a best effort send. Keep in mind that the third parameter is only called if the communication fails. If the communication does work, it is responsibility of the receiver code to free anything related to the task, as usual. More details on this can be obtained on this thread in the SimGrid-user mailing list archive.

Parameters
taska msg_task_t to send on another location.
aliasname of the mailbox to sent the task to
cleanupa function to destroy the task if the communication fails, e.g. MSG_task_destroy (if NULL, no function will be called)
maxratethe maximum communication rate for sending this task
msg_comm_t MSG_task_irecv ( msg_task_t task,
const char *  name 
)

Starts listening for receiving a task from an asynchronous communication.

This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication.

Parameters
taska memory location for storing a msg_task_t. has to be valid until the end of the communication.
nameof the mailbox to receive the task on
Returns
the msg_comm_t communication created
msg_comm_t MSG_task_irecv_bounded ( msg_task_t task,
const char *  name,
double  rate 
)

Starts listening for receiving a task from an asynchronous communication at a given rate.

Parameters
taska memory location for storing a msg_task_t. has to be valid until the end of the communication.
nameof the mailbox to receive the task on
ratelimit the bandwidth to the given rate
Returns
the msg_comm_t communication created
int MSG_comm_test ( msg_comm_t  comm)

Checks whether a communication is done, and if yes, finalizes it.

Parameters
commthe communication to test
Returns
TRUE if the communication is finished (but it may have failed, use MSG_comm_get_status() to know its status) or FALSE if the communication is not finished yet If the status is FALSE, don't forget to use MSG_process_sleep() after the test.
int MSG_comm_testany ( xbt_dynar_t  comms)

This function checks if a communication is finished.

Parameters
commsa vector of communications
Returns
the position of the finished communication if any (but it may have failed, use MSG_comm_get_status() to know its status), or -1 if none is finished
void MSG_comm_destroy ( msg_comm_t  comm)

Destroys a communication.

Parameters
commthe communication to destroy.
msg_error_t MSG_comm_wait ( msg_comm_t  comm,
double  timeout 
)

Wait for the completion of a communication.

It takes two parameters.

Parameters
commthe communication to wait.
timeoutWait until the communication terminates or the timeout occurs. You can provide a -1 timeout to obtain an infinite timeout.
Returns
msg_error_t
void MSG_comm_waitall ( msg_comm_t comm,
int  nb_elem,
double  timeout 
)

This function is called by a sender and permit to wait for each communication.

Parameters
comma vector of communication
nb_elemis the size of the comm vector
timeoutfor each call of MSG_comm_wait
int MSG_comm_waitany ( xbt_dynar_t  comms)

This function waits for the first communication finished in a list.

Parameters
commsa vector of communications
Returns
the position of the first finished communication (but it may have failed, use MSG_comm_get_status() to know its status)
msg_error_t MSG_comm_get_status ( msg_comm_t  comm)

Returns the error (if any) that occured during a finished communication.

Parameters
comma finished communication
Returns
the status of the communication, or MSG_OK if no error occured during the communication
msg_task_t MSG_comm_get_task ( msg_comm_t  comm)

Get a task (msg_task_t) from a communication.

Parameters
commthe communication where to get the task
Returns
the task from the communication
msg_error_t MSG_task_send ( msg_task_t  task,
const char *  alias 
)

Sends a task to a mailbox.

This is a blocking function, the execution flow will be blocked until the task is sent (and received in the other side if MSG_task_receive is used). See MSG_task_isend for sending tasks asynchronously.

Parameters
taskthe task to be sent
aliasthe mailbox name to where the task is sent
Returns
Returns MSG_OK if the task was successfully sent, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE otherwise.
msg_error_t MSG_task_send_bounded ( msg_task_t  task,
const char *  alias,
double  maxrate 
)

Sends a task to a mailbox with a maximum rate.

This is a blocking function, the execution flow will be blocked until the task is sent. The maxrate parameter allows the application to limit the bandwidth utilization of network links when sending the task.

Parameters
taskthe task to be sent
aliasthe mailbox name to where the task is sent
maxratethe maximum communication rate for sending this task
Returns
Returns MSG_OK if the task was successfully sent, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE otherwise.
msg_error_t MSG_task_send_with_timeout ( msg_task_t  task,
const char *  alias,
double  timeout 
)

Sends a task to a mailbox with a timeout.

This is a blocking function, the execution flow will be blocked until the task is sent or the timeout is achieved.

Parameters
taskthe task to be sent
aliasthe mailbox name to where the task is sent
timeoutis the maximum wait time for completion (if -1, this call is the same as MSG_task_send)
Returns
Returns MSG_OK if the task was successfully sent, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE, or MSG_TIMEOUT otherwise.
msg_error_t MSG_task_send_with_timeout_bounded ( msg_task_t  task,
const char *  alias,
double  timeout,
double  maxrate 
)

Sends a task to a mailbox with a timeout and with a maximum rate.

This is a blocking function, the execution flow will be blocked until the task is sent or the timeout is achieved.

Parameters
taskthe task to be sent
aliasthe mailbox name to where the task is sent
timeoutis the maximum wait time for completion (if -1, this call is the same as MSG_task_send)
maxratethe maximum communication rate for sending this task
Returns
Returns MSG_OK if the task was successfully sent, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE, or MSG_TIMEOUT otherwise.
int MSG_task_listen ( const char *  alias)

Check if there is a communication going on in a mailbox.

Parameters
aliasthe name of the mailbox to be considered
Returns
Returns 1 if there is a communication, 0 otherwise
int MSG_task_listen_from_host ( const char *  alias,
msg_host_t  host 
)

Check the number of communication actions of a given host pending in a mailbox.

Parameters
aliasthe name of the mailbox to be considered
hostthe host to check for communication
Returns
Returns the number of pending communication actions of the host in the given mailbox, 0 if there is no pending communication actions.
int MSG_task_listen_from ( const char *  alias)

Look if there is a communication on a mailbox and return the PID of the sender process.

Parameters
aliasthe name of the mailbox to be considered
Returns
Returns the PID of sender process, -1 if there is no communication in the mailbox.
void MSG_task_set_category ( msg_task_t  task,
const char *  category 
)

Sets the tracing category of a task.

This function should be called after the creation of a MSG task, to define the category of that task. The first parameter task must contain a task that was created with the function MSG_task_create. The second parameter category must contain a category that was previously declared with the function TRACE_category (or with TRACE_category_with_color).

See Tracing Simulations for details on how to trace the (categorized) resource utilization.

Parameters
taskthe task that is going to be categorized
categorythe name of the category to be associated to the task
See Also
MSG_task_get_category, TRACE_category, TRACE_category_with_color
const char* MSG_task_get_category ( msg_task_t  task)

Gets the current tracing category of a task.

Parameters
taskthe task to be considered
See Also
MSG_task_set_category
Returns
Returns the name of the tracing category of the given task, NULL otherwise
SimGrid-3.10/doc/html/structs__xbt__parmap__thread__data.html000640 007661 000620 00000013703 12242224150 024656 0ustar00gierschand000000 000000 SimGrid: s_xbt_parmap_thread_data Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_xbt_parmap_thread_data Struct Reference

Thread data transmission structure. More...

Detailed Description

Thread data transmission structure.


The documentation for this struct was generated from the following file:
  • src/xbt/parmap.c
SimGrid-3.10/doc/html/structs__surf__metric__t.js000640 007661 000620 00000000457 12242224150 022361 0ustar00gierschand000000 000000 var structs__surf__metric__t = [ [ "scale", "structs__surf__metric__t.html#aa5f86985c8f96a1d2baa87859e0f18ba", null ], [ "peak", "structs__surf__metric__t.html#af60a903ad384de7784fb88505a0c46e0", null ], [ "event", "structs__surf__metric__t.html#ac80e5e2206a08ccb13c025788d1a704c", null ] ];SimGrid-3.10/doc/html/group__XBT__dict.html000640 007661 000620 00000016604 12242224150 020773 0ustar00gierschand000000 000000 SimGrid: Dict: generic dictionnary
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dict: generic dictionnary

The dictionary data structure (comparable to hash tables) More...

Modules

 Dict constructor and destructor
 Dictionaries basic usage
 Dictionaries with non-nul terminated keys
 Cursors on dictionaries

Detailed Description

The dictionary data structure (comparable to hash tables)

This section describes the API to a dictionary structure that
associates as string to a void* key. It provides the same
functionality than an hash table.

Here is a little example of use:
 xbt_dict_t mydict = xbt_dict_new();
 char buff[512];

 sprintf(buff,"some very precious data");
 xbt_dict_set(mydict,"my data", strdup(buff), free);

 sprintf(buff,"another good stuff");
 xbt_dict_set(mydict,"my data", strdup(buff), free); // previous data gets erased (and freed) by second add
SimGrid-3.10/doc/html/tab_h.png000640 007661 000620 00000000300 12242224150 016500 0ustar00gierschand000000 000000 PNG  IHDR$[IDATx @E 7X AADjG Ze؈ 8WxUK.%0mɤ&+4i$džt׿zWf5AZ'w"2Wg%d)R15Fd БOC"@g=IENDB`SimGrid-3.10/doc/html/group__TRACE__API.html000640 007661 000620 00000036146 12242224150 020665 0ustar00gierschand000000 000000 SimGrid: TRACE
SimGrid  3.10
Versatile Simulation of Distributed Systems
TRACE

Tracing mechanism and its functions. More...

Modules

 Tracing categories
 Functions to declare tracing categories.
 Tracing marks
 Functions to declare and create tracing marks.
 Tracing user variables
 Functions to declare and define user variables associated to resources.

Functions

int TRACE_platform_graph_export_graphviz (const char *filename)
 Creates a file with the topology of the platform file used for the simulator.
xbt_dynar_t TRACE_get_node_types (void)
 Get Paje container types that can be mapped to the nodes of a graph.
xbt_dynar_t TRACE_get_edge_types (void)
 Get Paje container types that can be mapped to the edges of a graph.
void TRACE_pause (void)
 Pauses all tracing activities.
void TRACE_resume (void)
 Resumes all tracing activities.

Detailed Description

Tracing mechanism and its functions.

SimGrid can trace the resource (of hosts and links) utilization using any of its programming interfaces (MSG, SimDAG and SMPI). This means that the tracing will register how much power is used for each host and how much bandwidth is used for each link of the platform.

The idea of the tracing facilities is to give SimGrid users to possibility to classify MSG and SimDAG tasks by category, tracing the platform utilization (hosts and links) for each of the categories. The API enables the declaration of categories and a function to associate them to the tasks (MSG and SD). The tasks that are not classified according to a category are not traced. If no categories are specified, simulations can still be traced using a special parameter in the command line (see Tracing Simulations for details).

TRACE documentation

Function Documentation

int TRACE_platform_graph_export_graphviz ( const char *  filename)

Creates a file with the topology of the platform file used for the simulator.

The graph topology will have the following properties: all hosts, links and routers of the platform file are mapped to graph nodes; routes are mapped to edges. The platform's AS are not represented in the output.

Parameters
filenameThe name of the file that will hold the graph.
Returns
1 of successful, 0 otherwise.
xbt_dynar_t TRACE_get_node_types ( void  )

Get Paje container types that can be mapped to the nodes of a graph.

This function can be used to create a user made graph configuration file for Triva. Normally, it is used with the functions defined in Tracing user variables.

Returns
A dynar with the types, must be freed with xbt_dynar_free.
xbt_dynar_t TRACE_get_edge_types ( void  )

Get Paje container types that can be mapped to the edges of a graph.

This function can be used to create a user made graph configuration file for Triva. Normally, it is used with the functions defined in Tracing user variables.

Returns
A dynar with the types, must be freed with xbt_dynar_free.
void TRACE_pause ( void  )

Pauses all tracing activities.

See Also
TRACE_resume
void TRACE_resume ( void  )

Resumes all tracing activities.

See Also
TRACE_pause
SimGrid-3.10/doc/html/structs__smx__action.html000640 007661 000620 00000013612 12242224150 022046 0ustar00gierschand000000 000000 SimGrid: s_smx_action Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_smx_action Struct Reference

Action datatype. More...

#include <smx_private.h>

Detailed Description

Action datatype.


The documentation for this struct was generated from the following file:
  • src/simix/smx_private.h
SimGrid-3.10/doc/html/group__XBT__adt.js000640 007661 000620 00000001105 12242224150 020256 0ustar00gierschand000000 000000 var group__XBT__adt = [ [ "Dynar: generic dynamic array", "group__XBT__dynar.html", "group__XBT__dynar" ], [ "Dict: generic dictionnary", "group__XBT__dict.html", "group__XBT__dict" ], [ "Set: generic set datatype", "group__XBT__set.html", "group__XBT__set" ], [ "Fifo: generic workqueue", "group__XBT__fifo.html", "group__XBT__fifo" ], [ "Swag: O(1) set datatype", "group__XBT__swag.html", "group__XBT__swag" ], [ "Heap: generic heap data structure", "group__XBT__heap.html", "group__XBT__heap" ], [ "Data description", "group__XBT__dd.html", null ] ];SimGrid-3.10/doc/html/structs__smx__process.html000640 007661 000620 00000015104 12242224150 022245 0ustar00gierschand000000 000000 SimGrid: s_smx_process Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_smx_process Struct Reference

Process datatype. More...

#include <smx_process_private.h>

Data Fields

char * name
 process name if any

Detailed Description

Process datatype.


The documentation for this struct was generated from the following file:
  • src/simix/smx_process_private.h
SimGrid-3.10/doc/html/structs__smx__host__priv.js000640 007661 000620 00000000507 12242224150 022414 0ustar00gierschand000000 000000 var structs__smx__host__priv = [ [ "process_list", "structs__smx__host__priv.html#a7fbfb83e72a87b2ea799f04fb8bdb885", null ], [ "auto_restart_processes", "structs__smx__host__priv.html#a67288fcbea0dd351511ef07fad244a37", null ], [ "data", "structs__smx__host__priv.html#acf592831b265f0480ccab9d3d649cf35", null ] ];SimGrid-3.10/doc/html/group__XBT__set__curs.js000640 007661 000620 00000001036 12242224150 021477 0ustar00gierschand000000 000000 var group__XBT__set__curs = [ [ "xbt_set_foreach", "group__XBT__set__curs.html#ga58f50aee97a03985e1af193fbdea92ba", null ], [ "xbt_set_cursor_t", "group__XBT__set__curs.html#ga07bc36055121d6d2b49a483608033827", null ], [ "xbt_set_cursor_first", "group__XBT__set__curs.html#ga0ae677ad09fbf19fc8f9343dcc647dc2", null ], [ "xbt_set_cursor_step", "group__XBT__set__curs.html#ga1e42bd77295716cac5d3a38f4b7419b1", null ], [ "xbt_set_cursor_get_or_free", "group__XBT__set__curs.html#gac4c1fa14c3207e4ad1c9973db97147d5", null ] ];SimGrid-3.10/doc/html/structsurf__model__description.html000640 007661 000620 00000013725 12242224150 024127 0ustar00gierschand000000 000000 SimGrid: surf_model_description Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_model_description Struct Reference

Resource model description. More...

#include <surf.h>

Detailed Description

Resource model description.


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/structsurf__workstation__model__extension__public.html000640 007661 000620 00000040667 12242224150 030125 0ustar00gierschand000000 000000 SimGrid: surf_workstation_model_extension_public Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_workstation_model_extension_public Struct Reference

Workstation model extension public. More...

#include <surf.h>

Data Fields

surf_action_t(* execute )(void *workstation, double size)
surf_action_t(* sleep )(void *workstation, double duration)
e_surf_resource_state_t(* get_state )(void *workstation)
double(* get_speed )(void *workstation, double load)
double(* get_available_speed )(void *workstation)
double(* get_current_power_peak )(void *workstation)
double(* get_power_peak_at )(void *workstation, int pstate_index)
int(* get_nb_pstates )(void *workstation)
void(* set_power_peak_at )(void *workstation, int pstate_index)
double(* get_consumed_energy )(void *workstation)
xbt_dynar_t(* get_route )(void *workstation_src, void *workstation_dst)
double(* get_link_bandwidth )(const void *link)
double(* get_link_latency )(const void *link)

Detailed Description

Workstation model extension public.

Public functions specific to the workstation model.

Field Documentation

surf_action_t(* surf_workstation_model_extension_public::execute)(void *workstation, double size)

Execute a computation amount on a workstation and create the corresponding action

surf_action_t(* surf_workstation_model_extension_public::sleep)(void *workstation, double duration)

Make a workstation sleep during a given duration

e_surf_resource_state_t(* surf_workstation_model_extension_public::get_state)(void *workstation)

Return the CPU state of a workstation

double(* surf_workstation_model_extension_public::get_speed)(void *workstation, double load)

Return the speed of a workstation

double(* surf_workstation_model_extension_public::get_available_speed)(void *workstation)

Return tha available speed of a workstation

double(* surf_workstation_model_extension_public::get_current_power_peak)(void *workstation)

Return the current CPU speed of a workstation

double(* surf_workstation_model_extension_public::get_power_peak_at)(void *workstation, int pstate_index)

Return the speed of a workstation for a specific pstate, (where higher pstate values represent lower processor speeds)

int(* surf_workstation_model_extension_public::get_nb_pstates)(void *workstation)

Return the number of pstates defined for a workstation (default is 1)

void(* surf_workstation_model_extension_public::set_power_peak_at)(void *workstation, int pstate_index)

Set the processor speed of a workstation to the speed associated with the pstate_index pstate

double(* surf_workstation_model_extension_public::get_consumed_energy)(void *workstation)

Return the total energy consumed by a workstation

xbt_dynar_t(* surf_workstation_model_extension_public::get_route)(void *workstation_src, void *workstation_dst)

Get the list of links between two ws

double(* surf_workstation_model_extension_public::get_link_bandwidth)(const void *link)

Return the current bandwidth of a network link

double(* surf_workstation_model_extension_public::get_link_latency)(const void *link)

Return the current latency of a network link


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/group__XBT__ex.js000640 007661 000620 00000006207 12242224150 020132 0ustar00gierschand000000 000000 var group__XBT__ex = [ [ "xbt_ex_t", "structxbt__ex__t.html", null ], [ "TRY", "group__XBT__ex.html#gad2746371528bdf15c3910b7bf217dac0", null ], [ "TRY_CLEANUP", "group__XBT__ex.html#ga24540d57ce6a4e72e2c2150327972fc6", null ], [ "CATCH", "group__XBT__ex.html#gab3271e393133e395129cc74272f9fae2", null ], [ "CATCH_ANONYMOUS", "group__XBT__ex.html#ga070f91546c08b1e31c1d7184c3c9b345", null ], [ "THROW_PREPARE", "group__XBT__ex.html#ga26394bf7f63640059e73dc55b5911a9b", null ], [ "THROW", "group__XBT__ex.html#gae18641b6be3a88a74eb003978399fe90", null ], [ "THROWF", "group__XBT__ex.html#gaf104c05a68884bf85630ef40ca8ae774", null ], [ "RETHROW", "group__XBT__ex.html#ga241d764fad0bff69d31c12b3066c276c", null ], [ "RETHROWF", "group__XBT__ex.html#ga4826ac71c1c4d2ec13eeac8320898dc9", null ], [ "xbt_errcat_t", "group__XBT__ex.html#gaa45fec59aa57056784554a7f998f0854", [ [ "unknown_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a38ca7f2d055a68295cbd837470325f46", null ], [ "arg_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1d6d5b33334f960325a65e5c021aca16", null ], [ "bound_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854ae2954a4c5a79d65f9f68675fea93376b", null ], [ "mismatch_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854aad84e78423b0ba9b3df634f564a38586", null ], [ "not_found_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a2a966e9e887d3ab79628272781200439", null ], [ "system_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a0cc55923f6bdf388d75ac17681055815", null ], [ "network_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854afa15abb01e5f46363458529588f0d871", null ], [ "timeout_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854acbb4310f650e6fddbbad783293eff676", null ], [ "cancel_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a78725e8318a373565146a9c29698eb30", null ], [ "thread_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a2d90a8bed8343426b9732511aa2cb34c", null ], [ "host_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1486a4899ea0336633c33a77c636eea8", null ], [ "tracing_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a288db5d5a882653cc5466f62369ab676", null ], [ "io_error", "group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a7867239bb18a1f74d007fd1cc5f2202c", null ] ] ], [ "xbt_ex_catname", "group__XBT__ex.html#gad584839e617fbfe728225fc7bcfcda9f", null ], [ "xbt_ex_free", "group__XBT__ex.html#ga9a7c9f33be5ab51ff734142b07178553", null ], [ "xbt_backtrace_display_current", "group__XBT__ex.html#ga36813e215c49af92c8a62dd8286d6421", null ], [ "xbt_backtrace_no_malloc", "group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f", null ], [ "xbt_backtrace_current", "group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c", null ], [ "xbt_backtrace_display", "group__XBT__ex.html#gaea1e39d44bcaaebb91a34f6ef053c60c", null ], [ "xbt_libunwind_backtrace", "group__XBT__ex.html#ga6752f914268fb60019f9cf94a34ad28a", null ] ];SimGrid-3.10/doc/html/tab_s.png000640 007661 000620 00000000270 12242224150 016521 0ustar00gierschand000000 000000 PNG  IHDR$[IDATx݁ @@ѣ?Q"%If6[HQ<]dr s?O=w'F -~rÍ[芭m֬ݯнF)Y% `n,9B!ь\<#IENDB`SimGrid-3.10/doc/html/group__XBT__dict__basic.js000640 007661 000620 00000002516 12242224150 021740 0ustar00gierschand000000 000000 var group__XBT__dict__basic = [ [ "xbt_dict_set", "group__XBT__dict__basic.html#ga5167ca9336b1c9d5e2a3dacd6b702055", null ], [ "xbt_dict_get", "group__XBT__dict__basic.html#gadc5080181f23fa2802b17b0982d76115", null ], [ "xbt_dict_get_or_null", "group__XBT__dict__basic.html#gac1398f8a025c0f22195e74f2bd5522fa", null ], [ "xbt_dict_get_key", "group__XBT__dict__basic.html#ga16e3ad7d2a93d89b95582ad82d1ce100", null ], [ "xbt_dict_get_elm", "group__XBT__dict__basic.html#gab67a60fbdab0a809e15e0db87a146584", null ], [ "xbt_dict_get_elm_or_null", "group__XBT__dict__basic.html#gab3a92ff52f725fd7eff99ff619643272", null ], [ "xbt_dict_remove", "group__XBT__dict__basic.html#gac8befeb2dc3ba97fb0ff1d3da83f21fb", null ], [ "xbt_dict_reset", "group__XBT__dict__basic.html#ga0fe854e3c13798e32ebc642c00be6ad4", null ], [ "xbt_dict_length", "group__XBT__dict__basic.html#gac0cf96e5e13da996aac831d8d10f0985", null ], [ "xbt_dict_dump_output_string", "group__XBT__dict__basic.html#ga38d0003fc16ce9d437c9cb1c7b2e4a8e", null ], [ "xbt_dict_dump", "group__XBT__dict__basic.html#ga7d8b3282a0599ed922bbac9c0686e456", null ], [ "xbt_dict_dump_sizes", "group__XBT__dict__basic.html#gaa8c1e5beb5655c030df76fbcce9c9bbc", null ], [ "xbt_dict_is_empty", "group__XBT__dict__basic.html#ga68fb97981b63d246769f4b6fbbcb3eaf", null ] ];SimGrid-3.10/doc/html/dir_fd1f39ae185d502bd9610a3406931710.html000640 007661 000620 00000014265 12242224150 022604 0ustar00gierschand000000 000000 SimGrid: build_release/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
build_release Directory Reference

Directories

directory  include
directory  src
SimGrid-3.10/doc/html/structsurf__action.html000640 007661 000620 00000027400 12242224150 021535 0ustar00gierschand000000 000000 SimGrid: surf_action Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_action Struct Reference

Action structure. More...

#include <surf.h>

Data Fields

double cost
double priority
double max_duration
double remains
double start
double finish
void * data
char * category
surf_file_t file

Detailed Description

Action structure.

Never create s_surf_action_t by yourself ! The actions are created on the fly when you call execute or communicate on a model.

See Also
e_surf_action_state_t

Field Documentation

double surf_action::cost

cost

double surf_action::priority

priority (1.0 by default)

double surf_action::max_duration

max_duration (may fluctuate until the task is completed)

double surf_action::remains

How much of that cost remains to be done in the currently running task

double surf_action::start

start time

double surf_action::finish

finish time : this is modified during the run and fluctuates until the task is completed

void* surf_action::data

for your convenience

char* surf_action::category

tracing category for categorized resource utilization monitoring

surf_file_t surf_action::file

surf_file_t for storage model


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/group__simix__synchro__management.html000640 007661 000620 00000013142 12242224150 024556 0ustar00gierschand000000 000000 SimGrid: Synchronisation Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/sync_off.png000640 007661 000620 00000001525 12242224150 017243 0ustar00gierschand000000 000000 PNG  IHDRw=IDATxKhTW1I&38MII3b$c I1V1-(T.* t!K[čf`l(l"Y6gT}sgܹ d{8?̝;u`:!FB?Űm'y>ѝlU_?]Y(N8f1qn-etm 0}b%׌=0?1s08;_ W|%\Zð >舽lnp.a{ )t; b n652?>Oдunm`׭ZWjC~>־0+ {{fMŕټ` ݛ%uA6,]kWu]7ihu1 l Ҷ̺:\cxhRQt$ fd<4B[fd7=.M9//O a},j?.5ښm?X2#d p(?c!a1ޗةܾ7dK:)3],H+ku<|`LhC7e םt H$^2%l.aeÉ|s }D^hz~Rá]|#@חև[k<|(*ݹdtM:,]' X_n| /cfOIENDB`SimGrid-3.10/doc/html/group__XBT__dynar__cons.js000640 007661 000620 00000001201 12242224150 022001 0ustar00gierschand000000 000000 var group__XBT__dynar__cons = [ [ "xbt_dynar_t", "group__XBT__dynar__cons.html#gac826571988d2b63ae225e5c62ecdbc79", null ], [ "xbt_dynar_new", "group__XBT__dynar__cons.html#ga69ab371f667dfe5aa51fb612b9afaca5", null ], [ "xbt_dynar_free", "group__XBT__dynar__cons.html#ga9b7808eb7a87dcf331a467f323ae16a6", null ], [ "xbt_dynar_free_voidp", "group__XBT__dynar__cons.html#gacab2aaa46863a53beaa1637bd41995aa", null ], [ "xbt_dynar_free_container", "group__XBT__dynar__cons.html#ga7bc3c4dffd7740c9c1ea129d1167c0bc", null ], [ "xbt_dynar_shrink", "group__XBT__dynar__cons.html#ga8c1a192e8119147d92eaf873a2861fc0", null ] ];SimGrid-3.10/doc/html/ftv2folderopen.png000640 007661 000620 00000001125 12242224150 020370 0ustar00gierschand000000 000000 PNG  IHDR}\IDATx]?oP9i4i;iiZ7`b٬,HU'$*T]TDP6w};C; aӝߟjAInS}9Hӎ|? =_Ɗue*;YEsYBėsٌ ɫYq !Gǿv̇خ F}qb]70)d-}PfY{4@}2ԗNIǃc%UImcƝ>xt9$ OVE*Û#׈r@l$PrHaa dZrqIoT\,tj2FAxv-Lp׌p TI/ \sf; jViTo^cpb]€<a՜y9:+,E f6NEKU}^;nZuUS4 ѬbN.kjT% iV )GJ@TxIENDB`SimGrid-3.10/doc/html/group__msg__mailbox__management.html000640 007661 000620 00000040556 12242224150 024172 0ustar00gierschand000000 000000 SimGrid: Mailbox Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Mailbox Management Functions

This section describes the mailbox structure of MSG (msg_mailbox_t) and the functions for managing it. More...

Functions

void MSG_mailbox_set_async (const char *alias)
 Set the mailbox to receive in asynchronous mode.
msg_error_t MSG_mailbox_get_task_ext (msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout)
 Get a task from a mailbox on a given host.
msg_error_t MSG_mailbox_get_task_ext_bounded (msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout, double rate)
 Get a task from a mailbox on a given host at a given rate.

Detailed Description

This section describes the mailbox structure of MSG (msg_mailbox_t) and the functions for managing it.

Function Documentation

void MSG_mailbox_set_async ( const char *  alias)

Set the mailbox to receive in asynchronous mode.

All messages sent to this mailbox will be transferred to the receiver without waiting for the receive call. The receive call will still be necessary to use the received data. If there is a need to receive some messages asynchronously, and some not, two different mailboxes should be used.

Parameters
aliasThe name of the mailbox
msg_error_t MSG_mailbox_get_task_ext ( msg_mailbox_t  mailbox,
msg_task_t task,
msg_host_t  host,
double  timeout 
)

Get a task from a mailbox on a given host.

Parameters
mailboxThe mailbox where the task was sent
taska memory location for storing a msg_task_t.
hosta msg_host_t host from where the task was sent
timeouta timeout
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE otherwise.
msg_error_t MSG_mailbox_get_task_ext_bounded ( msg_mailbox_t  mailbox,
msg_task_t task,
msg_host_t  host,
double  timeout,
double  rate 
)

Get a task from a mailbox on a given host at a given rate.

Parameters
mailboxThe mailbox where the task was sent
taska memory location for storing a msg_task_t.
hosta msg_host_t host from where the task was sent
timeouta timeout
ratea rate
Returns
Returns MSG_OK if the task was successfully received, MSG_HOST_FAILURE, or MSG_TRANSFER_FAILURE otherwise.
SimGrid-3.10/doc/html/internals.html000640 007661 000620 00000025617 12242224150 017624 0ustar00gierschand000000 000000 SimGrid: SimGrid internals
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid internals

This page does not exist yet, sorry. We are currently refurbishing the user documentation – the internal documentation will follow (FIXME).

There is two main things you want to know about the internals of SimGrid. First, you need to understand the component organization, as SimGrid is heavily layered, with each level being rather highly specialized and optimized toward a task. For that, please keep reading this page. If you work actively on the SimGrid project, the second point you need to understand is about the infrastructure of the SimGrid project, ie how to extend the framework in any way, how the automatic tests are run, and so on. These informations are split on several pages, as follows:

TRACE Contrib MSG SMPI SimDag SMPI XBT
SimGrid Components (click to jump to API)

Overview of the toolkit components

Programmation environments layer

SimGrid provides several programmation environments built on top of a unique simulation kernel. Each environment targets a specific audiance and constitutes a different paradigm. To choose which of them you want to use, you have to think about what you want to do and what would be the result of your work.

  • If you want to study a theoritical problem and compare several heuristics, you probably want to try MSG (yet another historical name). It was designed exactly to that extend and should allow you to build easily rather realistic multi-agents simulation. Yet, realism is not the main goal of this environment and the most annoying technical issues of real platforms are masked here. Check the MSG section for more information.
  • If you want to study the behaviour of a MPI application using emulation technics, you should have a look at the SMPI (Simulated MPI) programming environment. Unfortunately, this work is still underway. Check the SMPI section for more information.

If your favorite programming environment/model is not there (BSP, components, OpenMP, etc.) is not represented in the SimGrid toolkit yet, you may consider adding it. You should contact us first on the SimGrid developers mailing list, though.

Simulation kernel layer

The core functionnalities to simulate a virtual platform are provided by a module called SURF. It is very low-level and is not intended to be used as such by end-users. Instead, it serve as a basis for the higher level layer.

SURF main features are a fast max-min linear solver and the ability to change transparently the model used to describe the platform. This greatly eases the comparison of the several models existing in the litterature.

See the SURF section for more details.

Base layer

The base of the whole toolkit is constituted by the XBT (eXtended Bundle of Tools).

It is a portable library providing some grounding features such as Logging support, Exception support and Configuration support. XBT also encompass the following convenient datastructures: Dynar: generic dynamic array, Fifo: generic workqueue, Dict: generic dictionnary, Heap: generic heap data structure, Set: generic set datatype and Swag: O(1) set datatype.

See the XBT section for more details.

Tracing simulation

Finally, a transversal module allows you to trace your simulation. More documentation in the section TRACE documentation

SimGrid-3.10/doc/html/Paje_MSG_screenshot.jpg000664 007661 000620 00001231427 12242224150 021270 0ustar00gierschand000000 000000 JFIFKKExifMM*C  !"$"$Cx" x   !1Q"Aa27UVq#56RWbtu$%&3BSTersvw'4cdf8CDEF(GgN !1AQa"2q3BRb#T$ႲCSrDs%c& ?´ueq𛬔mMKv奒7 $6}avOM_.nWEU3y,FeǝVm%J: xޮZF< {`'j: b q2Tu5V_PavOMGXo#ݓ?UCWA>_^~*ve _dOu=?5Rd[n1̈vSq%O,!K(@#V {5S?(RG'&7ɪ+ߠc/GX~\};C2/ {`'j: b q2U"qfd@˲,C*ya YBh8`ii)Xo#ݓ?QdOPk⣬WA>__B=?5avOMU^~*:{ei)Xo#ݓ?QdOEĕm g,U{MU+AD xӴ?(HavOMGXo#ݓ?S{C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveHavOMGXo#ݓ?S4ʐ: G'&)i u=?5avOMOS?*@ {`'j: hTdOu=?5?N/L7ɨ {`'j_RXo#ݓ?QdOE;C2G'&7ɩveSn;w~딍K+Xz)jx-*k^"YTWXB uZܯ;oT3k.RT@T'zxW1u9+zyuP)'AGj,g6G$ށ515$~mU2IAZVtP_qXo2Cxk]:8d<_+LGit*Aue ꒍9E k_[ZzXCŤ0H|w^HeǐLd&I׻5yς%Mx4 ׉skÞ\enC?7Q^X^+n㳬^fY/̎A$ڻ]Ծ \<5ԟAUe#Z\Zk#m^ny*KOt;l}JFa3v0V_w.lf~E\aQۼBh꒑:i6Gϐ67@X[cVƌ.rJ@+:uQI501/u1 tl#a<[1Z͞9ƗwWHג6L՝Tu:  XIɞ?-Be+xo^eת6jgYo-^W"SKd7@MNt 3A.y 67e-h#ƩGnSp,yB5깯./ԗ_KY_(4KSˏ5%EWl&IźrokQhx!*lHW7H֑KO=L2E`s;KZyt'ڴWclk*F姛 {jy [Ҟ[-*Č~j~)IM8q%؄K ;$Dz&هewKoCz+O]+Ewi ?ڛ[q 9TjwwfAn^#[ߺsnY%aRxcѸRIo{dk8ǠKtru{"-Ha'ÊT8WJQ\Xf}M&,m[py8!ɐѱ7or`<7 r\ִKR ]5W:K|p/&x]ZfSGٳky$ֲ0?{ۻ(DQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQED_ vxQ_ vxVڋZ]ֿe  k#RۖM}}GBVuh\GǏcY?EQEEfLyN!p  R7q4Jv+_.LvG5'@"ShҥFjK%i]AЧM2KNt' ;t5Ԋ"Sv"{o;+'>eo(+:u-8*m:i"/78٦$2od.%$e$G "S+w[l%̛~I+(ЩA#I>;"7<{U8qkimKVȔBA'w"O:"QSsFV:U ʟK}G℩)']98k"Sv"{c4cܦ\(;zhEL@>^ɹ8Sί(u N?EQE/A { )RvI~/28cҡC}pDUɊu@:ßחuy/mV~:jTޙ\e$rʭԓ'>sg)+Lxd&E<h"51QK]"d_.zr"yr(#^G$PvΊ]"4vEwO򚪦*)w+Lx&E<h]"4vEwO"b{"DȿMkgz٢|V5r\J ӻE&E<h"5ULTRdWH?)+Lx&E<k]?=\ ղ+ țtzG"F@uFj(Ȯ2/~SGdWH?)b{"DȿM]"d_Ȯ2/~SZ=^9eyXyWw/wyA#dxQDE.EwO;"DȿMUS&E<h"4DE.EwO;"DȿM1QIzfr)P$orNFOHqIGr=]"d_]"4vEwO򚪦*)w+Lx&E<hMM.[-<t "+C,aC̺ZBܯJ()JR4 EDW#HC-BC :jtMzDEQDK{H<`xc5ʚ%.cG.! -;ڤjPtRy}ZwdŚӒCVIy/}+YPWl z"_oW9ySS(HJF %E}<4X@c24CIJӛy@jtME`Xa.8P7@GNsqWUU <-W4ڷJw1J#^QEQ^Qi:ju<|^QEQ-S-BC#})QIRAh__[*(?7[ݘcIa!29t,$y؝h8PԻBv=mՈdnZB"EJXZ^WjÿrcrlY˕5ħ MTQݢۻvHe7Emy%rRi}% t$o))*)I<h;Ǧ(("L$(PBt:Z("(/&c[,ڞ_(B@.+@itJFEzEv-mÍ@PטOzDEQDEOqe+{vˊҳt]BS=\(Fx't۟Q*Nܘγ[NIz*[NhI#Cj(zڹ>HSd]lr[t ͢^k Mmd'CiS !ӂIW>far% ARt+Ҋ*ZR-!IPЂ5WE 4m! @_tQDEy *l>)y|׭DQEE*;<}mą%C׭QEQJiWzm쥔,>^:68t =U.ʻhLg*_ r.?L鮕XlwK6kuˑ亮*]tAqmm,h[Bd,)ЀqPH QEb$ lJv[Om>BVTBǘVDHۡe yD%(@B@~UQE;GaP%(J$Otk֊"("r;>0g^IjH*FCj:+֊((,v"Fj,V[aPi$ @hD`!6R:<cԫN:Sc\@F1n0L`(!G1@EE+}ѩ-s*;T4s;ElpٲgP 7"DrHm+;`N<+9uԼ`X}SI5x2(QEUQEQSϧfξ =ٯ&EUUQE:Iy_xKUE!=.>t-qR (lM @O@5LFq))B9/o;u2˪: qH̦b̓jCɺ/)!ӼIFιr=qbL5Ĺɫ㓭{ȕyNE !œi[jI !a=ϩ46)38HXvCLP]xzd6ʛ]XjCs3ԡ{W![څĕh{=4c*qoRtZH})}DK3p,oݒԥC 1t.\9_U5ҝ"[\,Nn7%ņeԶ#-TwX)5⣳܇3UWaE5x2S ϧi_^ *-QUTQEDT=ٯ&:|vkɨEUEQDEN^rQjerv?zm+uqPmMBR:I E=]-e*SHmo4ҭJ֐SN:ўؔ"QjHmhwq!!mItu%ͮӍ.Q˛%S nuڡ!KufR8uԧ,`=X[8~c6B5FǶ{ShDkao,6 2KPP$+<y~I6rwzuK ^q0$9α(\r76zrdFcDpJRJ7wOlISlWH&Z]B mA; \TT H$nkRD3[a%u،[HG$-rIV /6@ Ϯq,.R4yhHXIS9$nvBmv)T^-[QnIxoYk0bkyS2Ŵs~#N#hewyv?#!#.@HvZQ!k ,IS {]mS$ɗ=P eIх;Z}aMscl+XvkiѣJzܺ{Ld)$wiӈkR\oȃ'_-cqeO {W4:= QC;S6'- \qN:(THpMc^mgV%-b;ߊBJOnہTҁp#=骴o)kUCfnTH$NSƼ1zzԶl>UBAJ'5;7Z#ʼn:CfV\(mK vP:4:m[9 Sv;AC2Vqէ>  4%2\ru562k'#Y I:I. ]iq\;+* "۲ƭ 8{`HsN*j1% &rI VB漤TI sRsm_eg'CJUZ @@/EQL*m@,V]FBЭ_ 1=q㧚}>+9vϯmxO䅔i Q$iӢ(/-={pG]rT5#@{Q'^x\!is߈k>t{ 'ܕZΞr4DEUUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEK3_wÓEwY;ɢ_vlxgCUy/mU7W(k<ru$$rʭdEVK$T%-M-U^I/9ko jEUUQEQE:vʪ-N/>5x2(QEUQEQSϧfξ =ٯ&EUUi&^m(C \#IӽYvuHYuSTGtZ]ٙ+3VqJ =O5էHz::@+BܺUƓ/q崕C(#U$'Ee!S1LWVH]VR[N@usϳ]"P--~hrNRJx < 6LKr]#nbO%j7al+Ml[;܇yjsT@D(H8% k$o"S,`ΙSkcMawTUDr:֑2 JU5Ӹi(((w܍l߈k>tׯ&+Z WhHw3%D%)LIkD[ +^ӊm˽ IRU%͡_~[lo_~[~5nR~.M̉77])-fo$=ZzVދ^]֎ ~:j[7,/骵z}~ZG ;I2<ru "(HגKZZ-N^rE(("("*uy+TZ`^};JjeTQQh\NjA*N#T URԜ & FHj^)6w^P8'3Km1)C[(Q}*uTZg};5ud(T[MniIu+-uBխ={.Db֡mr{n 5Ӈµyr-׻K"eyis{R@ $;·v$;|(HJ[V @MMEmN^rQju&𖨋ovvghl{hrL8%K T'@xw|HǶ_cpX椺[eq#%k PJHIT@$ZDV.ʃu im@J{cO VXYd;m2kbDtQNXt!CU*D,[+&@l,%FA)Jv'Jr{7}Vum;nB7ŏC=Cvk[ C q1P\HtׇI3ٹSB&TkR$(I#md@)Lvb?f.*p6D,ԕzkϡMݮnUDY[$mFZ8{;& Iim5]r2mܾ}{5HS"ަNRda2e,Ây9 ]e9g;ѐBRbG8p~AfYɐ ɦ;tFThNJe7o8U/}o ޒ?LjQ+I>_O َb׿}?cA-G>[}X}):; 7mR}sOk~z; m*3?aTxbw; @ٴOBJ7w@FS?dFGə׶]*˚u|>[}}*; 7mR4Ã[1fl۰YPswA:}iC+3l:.Twz0Di_*)c&;7ol[m 7(]O>tۗݵ^Q/ϟu+}ouKoQ⣱bGdFG,>}w?ܼJնobO9j4=NwxTV;pU,Io+kuarf{'stgW+2xuBޣS??tǗ 7+59drb{ u !<ux춵 f\ٳEm+cA-G>[}X}):; 7mR}#;z+o-9X[}}*; 7mRY~%بRV-uhoRG71ѻo]ެ۬jd_ [PtHy:~`+~ϳuWdyZ髱bGcA-G,>}X}):r^v?aTxnmv7+$fΪ"4B5',>}c]n8&pZDҚyJFJp5Z/);Lo{sz#}1˫r:JJ:x*KoQ_n]ײ9k$yגJpj HdFG9<{-1R"͗9_z; m*X?}a|`/M[G>ti,'F\nPX\[[c)QI}X}):r^,V6+f%IJT&#|6;e٭RԢ$x_lnbW"nRH$M\o6Kے[ARP!}X}):Oy޿<9-GIl[)a/2S qaDkEZ,<>G6ljK-}SPNGC|xh+M{Fٛܿj\8cͳT]fv,m9g*IYpz m*๰*֛6kv'6,VYCciԨ+b_ _l-2m; תAdFG%9s[ڎ>[}}*; 7mRJ{2YdC,Z' Ā8stқ; m*[}D73DzдrK)*hMtnǽϥ[; 7mR[}X}):; 7mRã_VݫfMiiq*} GJА:V~ְWvϚK۲?aTx~%بQѻo㣲 ve#[/^v?aTxkV7*̄!%RpF]X}):.mʺDd! Huxj5}X}):Oyގ>[},@Y<0͚GY`27Ryi`Ӝ ve#K.O-;yX-]RZY}X}):r^v?aTxa^+amDsPڍtOݷHP;u&L Y----*uu|m{/GM86\ ߹W#Yq1͞Զ@Z͐F^}*zcFj;7RiJd@zvAanx;;key\bH$LjӴ5ʟ:GNt}M9 [}}*; 7mR~z#G;L40E\$ǗCOpEEŻG۩{}SK~͟fŅ^?5R{ltZzϽ>ς腯$rʭԓ'>sg*]pB(dy$ɼ%%-M-TQQh("("XNҿUEӴUEp{p5ƽ+%֖ƩZJT;ƪ{7H"C$" )kPKd@mTJZ#ERZKJ oT•L:|vkɪ-N>:2hEUU*P|e@s݊Ҥ~u<4;J|}ێN@'')dF`7n4֎VpiNuw4Ҙ1 ǡ[eM P4i¢oS$CTWaWƝmE+BP# U^I/9ko j ~ȾޣG̋1̒2$JaN\u 4~bSHWF &]!ƷFTg n(i -p&~m2/)63"zUo 2!i,IN)ČciL&+EXt,$nd_0R5@mmfE??fd_\SR,re͈\<2tS<oQenhVJw/%ΘM9MaRTiU=pH㮠ke)o93U. Ze)iI'q %4gWh~ &RPۉrriՠ;B IЃJ!~<%:WV*AЍq[&;=S&-ռyK+:4|tDY?fd_\SQmfE?h.fԈpyR.F[y%7@h%=-<½`w)x[yŹ ,JR-NX <7DM=?fd_\SQmfE?-'&mg#n_6ۼ90lIb$JJI տʋf}2M1?؟aJFٿ8_L}G)eya r=wYժŔ,%q>RFvl55{eAF6DEJp~*-SEHs}`n#0Lx/GS)lf1(:~~v#Se#yQlҜ/_ʋf}2yS=V;ذ%LVʕAqWlϗj6[Qʋf}2T[7 "Fٿ8_L}KW/ ߍ5N6 Q@gw>WO!e}(lfÛ;}G)eyoN/QEJp~h$o*-SyQlҜ/_(ʋf}2T[7 "F!ٰĠٿ8_L}O4Q7)e.ÉR \滩QFȶnNONf`6z.DHT[7 ٿ8_L}O4Q7)e;$\RiKE#yQlҜ/_ʋf}2^/ 2-uꥩ~&|oN/Vdu88^g$o*-SyQlҜ/_(rnjg ً-K3JD} +m:2j(QEUVzly 2VӼ ԆҢ| \3bR[AiR꒠ Ob56PH*[\a+x(4ӛM1@}*䓼).E<7tEO.6R m.*m. )5JJH ݪN^rTX쟸(ǿdŵ~IMktuSfRJ#Bҕ]jhRm65ʚa;B}A%Rj-i S?qm_W}coV|lA*)< 5CFj55p &S/r%n)SP:- V3I\%bR/UDeoK (s#ݕLߞk3~캊%5 _f/./xܯ.{m0j+a?dז[;'ۏ*[.ƾuF$%-_+Lc^)iis߈k>m ^/IX;?}Uϼ?9#DZݡ(|皈VOBdyHjp6q>[1\BۑVhGM63&+QZ/$SޞPOp .wHg "QHޓ3{#ZHb^dT:tr""3O)-[W^HTߡBmmQ.\ŘecHZB}b+UCS NnnV ~RY%xs2>=lbEd+!޸(a8p:5qM"\. DYJR~1w !ޫ-]CϬ"=Bxͥɲ9\HNBSwM?$n,B[H\TocLJ꽪vTgX*iCL:u.=~Fs-)^ \r5*׾u9ř]aouܹd,-wLRY%xĽ+T+ٮhjaЕeZ4Kp[Nɱ陞[k~qڌ@+n+SfњEƱ+ ]pʏ5A+zyv$-qR#V^+81^`.t w.ęM>RY%xĽ+T+ڮ㳻Wcy߹h9kK'ՠQZP#N'u*!z%RW`{ o#ܟ??[mTwt=EK=-Y"C+BZ .5.;We 낹dnw!z%RW) K,꒼UNˉL|1/D?JQ!z%RWQCK#RY%xEL|1/D?JRҶS[s|jntuTRtN2_ϷtE!z%RW) K,꒼UNQN?z\ˇNWpR4Vh3ǭskkW;⛷jmVJqOz5WۯO 6kkk{KIv*\uףuO:yx@78 &{:;|O@ wtb͚gFAfv\'a8 嫅?Hb^dT⨞ ^_N [mۦu!iz9]u[LSl\r)%GI^*^lch卻B!υ9\UTcsCVm?~"w.BS4N#xNH~Sko~VH^/Pɱ0'ιƨ( ֥:8iM1yHb^dTG /9NnJnRzur);?-m`kZr`N)%GI^*<1/D?JU:QL|1/D?JQ!z%RWQCK#RY%xEsQX6A]N"3M ~qZqNy&ı5efj$.J+I ׻Th?,~DS) K,꒼TyHb^dTuEl͞Ow/'M"z)LyKHO}c#Sid"rC j4⢗WǤ^W=Clb뭥rC%_A+xm,ٮMoƗlHs rNжyuVcr Yze<fQe& -.Ľ+G%GI^*ٮnWX.rfDWZB}b+.jAo\GAun*#y($w:E/c0̹ߺ_.÷)Z\ y*8/V2G Eb+XǖxnȒ.:uOZEts_#+o- n V;J090tbcm@}HỶ[JCEGN ">1cL&LtyTZJӇjIyۭh:5fQ! O:Oy^G񉌞و(u䎾]`{vlcfu;%GI^*<1/D?JU:segqv~/ݲ7򈞭 (2i}^Hb^dT.]e-3˺?m2K:=P+jևReuA&IkPirt c!z%RW) K,꒼UNˉL|1/D?JQ!z%RWQCK#RY%xEL|1/D?JRr~6kzu,dC*D╨.0Y:vyu1وlU) K,꒼TyHb^dTuE F1A=a\:T>kjSlplun]oK9-CהL48BQު򦰬O*R ԝ{/cZJZf ;>J_PW /نB{&ǮnpClqw9R54!z%RW>D,o$DŴd)jt\=@*_@l_mWT}CK#NԌ_'&~\{\s0@8חԮaFr1#\x[B"}:Zj1TӶL-7YmoЪ%GI^*<1/D?JUqxBAs6:$2BYu\jc!z%RW) K,꒼UN>RY%xĽ+T(c!z%RW) K,꒼UN1n=nx-FGVJ?%GI^*)?n~jDS) K,꒼U>1r; @p-RdUqQhiJNN#P*J{f̾p{i1Vf.WDz4Wԗ'DW8CӿW-5٤.չ gQ4Oc֭;j> (lrȵ')E(hrqկʶQ\1iʶ̵[q ڡZwhꃍ1'6fk&}W%GI^*<1/D?JU:ޮ51Ľ+G%GI^*QDS) K,꒼TyHb^dTuE1Ľ+HnV;dD{qRr81VV 8++j][YmCD+CK#RY%xEDv\vdz܊&\ \,TRԤ45$ڃXdDӊM[Լ9QTyf?8{/-A|wŃ5lşu&iA?}fs)66N؃ _l핺"rB NhjӦyHb^dT.[Z&Ω,\O2P^+'Pw+}U+Q%k9 ZˎB 1Ľ+G%GI^*Q[ƹ0m؎s[my6dT˫3R=8zVlyٿV[z/\nxgCUy/mYYG腯$rʭԓ'>sg*]pB(dy$ɼ%%-M-TQQh("("XNҿUEӴUE(("*uTZg};5udQQh("HO8rRp!%4JN =U^I/9ko jXE2QYaёtRRR: C_gBGoh!jj-<&&B 4cƵu3"DM@\%ARCoQ"3f(.:.BDē^>~uN{q'?["ZeC t&cBքep HDSrMexC_DQ c7;mkm5+';NMV$s'W`9߲iggvFg'Ke_ơPw//seMb9{)KC_vI%V>w܍l߈k>t,|D?{+I䂌ܭ\[p&4S\ϰ]J*9z;{(Py+En:߹iTfSZ]d5ӹx|&>s>GeCuceү l<]Jys_rswJoUUkq|u+R$fu6}t %PIiu;?6.t?cܛk!h1`2kl=zئ>GeCuceү.w-fp͎;aG}kNԞ^)< *##aBN! k+Q+H}`Eo+`oܵ ⎇Cݽi{1~=~YEpiW ox}鏎!;Ezdst;@;ǎJ{Z_[+Qk~û]: ,!]G@L鏎Z+J]ϰ5h~L|t٣8ymCq,Y^Ï>RICSb5/} c\S玜1/h:Q]*?m~|E]n9DIuBxAdK2ۯ'TkW*I'^rG=;VrX;\W=sBAtt;1s[Zj[N|,45 O'TJ煨t[⤸Kmg:ɇV ~zplG7~FI[>Z^M M.4NwP %EzQ\.Ī\,]`-\amsIu2wKhx龭:5I/\)y4]F~ԵX'K%8.#Sw|ϲ{1~=~YEp}iW kx\61;9ÎyҤK|QjJԦ q5wiԭeCuc㣲{1ֲүo.w`&faw<:#'ucO?Э9vЃ( ήҎ#;G&l܊v#R ksӠZ78qGܺ@N m~=~h~L|u> l<]JTͷ5.PISan4 B@]Hִб̒ZTr<8wkhw iqv0kӐU|%l?حϑqN66[[Xqe%`ev_?Ow_>:Q]_*?z_5/(ϥEz,/!MNIH^o6aHQ%`$뮺ѡSmiG=,XC.v]^e M鏎Z+J[5h~L|usvRCmTx( yncrÉU9K *W:晻/鏎W֕໿ap퇋kg~=~h~L|uZU}?.~ͲLojn!{Tjӏt~1_?Ow_>:NČW=N#Rɞֿ@ONWpf Q-8.sI%kg~=~;5rGvM%%ҧѼM@=!"կ.H2+K_^v'GH=i?]{gZCa##N* X2yث!4IYHG9qRΗLEkܗLqF(>s_P2O a< wr_?Ow_>:;/k(֕෿ap퇋i^grTjgM)6AJԞmN'Zwgmsm!H'D4n?ڕ.Vγ8KܮRt>Yiǚ=zh~L|tv_?Ow_>:QX}iW xffDb# Km@o: zhL> dozkSuW/ ?˜#EreU?>yggoo{/鏎W֕໿ap퇋kg~=~{sFLl̩e:\쫭qɉU5[* uw1[>H[@bt\䫃Q˕>+Zu'#^)ļQBf5[ *p8wh@6-Wmbmn1a@C,-s5++{1ֲү.wl/鏎SJO5lv-ԬNC xy/{1;Dϛ3[:k.X{$uwl/鏎W֕໿ap퇋kUzs'aWpvlv_i*'}8G hh~L|tv~ઙk>#Rְ/˩Z|+Ik6K ]m}鏎ssJnoĖ}BРR<XW_J[4Z"*2JdxέqqNy5mٖKZgVǓ<ʿNj/VE| n\$F].y˔ovЀgw]~_?Ow_>:Q]/*?zϰ5uH}I?4*ۻ'M֗yJOФ͝&gdSHv3A%):Q\ZU?.eCucf}Nnۀ%JXAXE7Hr3!.u*8'lN5u=z/鏎W֕ap퇋kg~=~o>ɳIPm2ۄ&KIJpkcK5?ZopJz %,n9_?Ow_>:;/k(*?m~|U!.VS/HZP<{H:M:J$Jq%V%qIԒy鶵2N=*:vtGrp^[ O^n#83Hʟq':N|OrOԱkW$IN yz%l/鏎W֕඿ap퇋k7^7ݦ}s}Rۄ鮦ӴFF룭;Oko9߮2m;&ǭ܂%>h #w}JqtQmDV "l[/g0,zYO')q O*n@'FMbk&L3&u[ KMLVW\(nuZpYh;Oko:ӴFFwK7Y7ŲiP-Vw(t!=1w܍l߈k>t,|D?{+OԸ҂\/C'gJm3&+QZ6aq?0-(EŊ;=ɀvVA[~^?kB{K2xPamqN`Ď>+5j^~}5ڿWo<kV5Ȯl[BJybl2dØl?.s[5i] 1e{0>wrWx꯳.0/j=?fX_4ԧDZ*kB{G?f_ЫJQXy 7 W#g[ʭqdQY(iCqeV{^m}zƶO|mهr1*i]-+Qh>\v5`gdlܵ]9,YyAoRG ;O(}=-E5j^~}5ڿWo<7ڬk\l3-މ5˸!-+=0_#e+Q[ !?W0ճi{ONA?+/#\ޥ8vRֵs_?f_ЫOٯW*ҔV>CMUt+5j^X;f,!喭$'ztE8`'A5/Q_MvUh']{J*y 7 ?XO"_MvUiG8Qjqrr+{jʉ=t©ؼva]d:v/7,/"7]N5j^~}5ڿWo</ڬk\OٯW*l(j h&T֏Qɼ>ƩFٶtcA?jH?tكqKĸϩy#HQ;[R3ЮIZ! [}cLkB{Ujt=?=wx⡢;x*'Լ_W칯_MvUh']{J*y 7 V5ȮL;s_?f_ЫOٯW*ҔTo<_jEq38VQ8mjGE4EhVU (E\5o)vnv߅ѿyG|r z\\Hd/@7Įs']{?5j^RCMUt+ˣKzkb$V@'^׻h- ɜKEZ{"rޔqnmWPd\vV eZ(*R@4 !PyW?f_ЫOٯW*ҔV>CM}ƿkB{Z1[&OZI[nƺ” +sTQS<}Tyu']{?5j^RCMUt+5j^es)m.evu.'Q**pn<|bFW5k kB{])EO!gW5k kB{])E<Ut+65ܣ'ٵom#IqTזI?F5j^^D8 kWU*t9r㇉qxclqԼ5kB{Zlau59r%-(e4O@𮭥=ӐZ̟PQSp{K]R+;$""UXHCg1X ;`Z(NE\8~暲/o'wV'u O@ҩ۰x,"MmiBT҉/-$k Z6EspeCENu, 6qF0ƆW5k hsel[b1/&D-(h\XH>gsYR~U[GNpRn%%KNBk kB{])Ec4ߐx._XO"_MvUh']{J)4ߐx'ڬk\Ko+hp\:׷?f_ЫJQTSrg5/~_MvUh']{J*y 7 ?XO"%Mj仫2%ij7x)_MvUih_O5Y4\1q&-qeKq\kB{G?f_ЫJQX 7 V5Ȯ16E]Y#x=1m  ެ>Ʋ/b-[nv%1GHJ%*y=jZOx9>*v7}dXml_yw\o֦_kB{G?f_ЫJQXy 7 W5k /&.Mmo.|SJ;1wxv85֔|9>8VBrwb{duK˛{KkB{G?f_ЫJQX 7 V5Ȯk']{G2L$վhl\*#?,kh( qF0 ~y+5j^~}5ڿW~AUt+5j^6kI[%X n(*=0éCg[}ֲm;M⛉qyY%K<k kB{])Ec4ߐx._XO"_MvUijlKir 4@ ?뚞dJ+Ϝb&0x.7>0fy}Ŷ?  X:8SDMG;x4OٯW*N#ey_նUz:wn\K,ʗ\OٯW*k t<W"ܰ\hۥ<vQ)tS Cb *y],q'rO4fŅ^?5R{lt]Ͻ>ς?D-~O#|Un?ĎAw9UEVK$T%-M-U^I/9ko jEUUQEQEbNClⱘJ}kH0yH92lI.j4WxV:`^};JjeTQvrczQm &7Qh)]/ܘޔuiɍTZ(um &7*r6ȹD垭TtYՠ=r:nB;d}N>:2hҎm?_1*ENA~OLoJDSm?_1)Wksr{=If_%2#) <{oגKZZ#OLoJ:A~< a䲭qcPSħtnHᮒϕߣ.v뜘nSԉ/$qʆJR-|IE"cMx? 9Xm õmAMduiɍX=.Xf;ieYܘIR mL%Qa:뢷km{yqeN1ę [RRZҐڑQEsDX=vrczQm &76bywM} Eⲡ n_q(tɂ8r;l-ۇUd'$ܺzCm%;MIW5҈[$>)L29^"8]YVܓ̢G禮m?_1)wfs#e[Za&:Z.˓PG+=═ FS[Kk6m丰6CLeJK%'-o]/ܘޔuiɍ[IyR;!6ݖnr2S7RCJ;]So W;Lx `mٳˋao?) Ru((%<<kA~OLoJnlG̵"'/2\[O@!F n%CuGBz~o}QX +a\Z!)V4ڒhADZ5=tKܗu[JCjH!!<:4S}Nw;m϶DA>J/]9Nq}*E"(("(")2O,]m}E9&ZNx(W=o}s:mie ܸ7J[o?s~ƖH*a60U u6w܍dm3&+QZ} {=mzzm3&+QZy]?Lߚ,m#1m7?;&\c韮iOxaֺjP/>ɶghq~(el'LL,4՜1\.|y8jqhJ7+/k.ois]tTQ0]{ {kKglsyS^Phq~ɶgҊV3hj [y c/hV#HЫVf g ^_S{tӹV&U uf̯iz~*(;&\c韣m~>Vc6sdcDltZS{{n~jchq~0}LtYyMظ?Gd@}3E,^}m.16?bLzQK%d@}3vMظ?^Re6?bL :.ˏa3xZEҾEc׎kT*Aځ.~}+WK%d@}3vMظ?^Re6?bLN`iܻ [B:~c^<ڤ1V-!㥒y >;˷bR5{sp?w]R)m~>[hM|>ۿSE,/>ɶghq~+ӺВid[نC3|m6tSɧM8kE1Mظ?Z-wgz-SL4YyMظ?Gd@}3E,^}m.16?bLzQK%d@}3vMظ?^Rde/c{{b-Æ9{G6})K1cc:^jN@yd?X1zOޥm~>;&\c韯J)dXd98.9Űw^m>*cܻu*EE)DԫNS}ӎ=_׊?(bg{[(~0**wd@}3vMظ?^U^}m.1q5f79gӻTK82޳Cޕ⥒6?bLm.1ץYyMظ?Gd@}3E,^}m.16?bLzQK%d@}3vMظ?^Re::s{GaTDuG&dyN2'] *6?bL ^ vTd@}39-h *G&^ԭ/I^kަz[xdz's_K%=.^׹F,ʷGnfwz@r}cm~>^γ:^}m.16?bLzQK%"c+r>:oI{t <4>ɶgA{cLtYyMظ?Gd@}3E,^}m.16?bLzQK%d@}3vMظ?^Re6?bL wŭmXL!"6ӏ7>ڡR糴_߭ K%d@}3vMظ?^Re\X]2#can-MZ t>˱gw^:iߦ]wȕj~Ī^4$J~*P٦E3Q>:wR]SVN&\c韭~ lǦ0WI:>ɶgs8sĈ)us=-fcI鼷2TY0vMظ?Gd@}3E,^}m.16?bLzQK%d@}3vMظ?^Re6?bLm.1ץYM3[`ܶ%,Bk-\`&AcEoǛJMظ?Sg\}© 6?bLm.1ץR}2׻.\lz/rE Dה{:J`_s6<8">?1JKJ{NOX@|5ޥ vIp:i3e?Ulhq~ɶgҊVϲm~>\ṹ*؏;yZSo,=.a^Uy{CcQm~>;&\c韯J)dhq~ɶgҊY,&\c韣m~>K/>ɶg;e&cM=(FAm ]S?v?۟A(Pɶghq~(ϲm~>Er 3]` ^;`L#wes AWE9'B/k:=>QBP^w6?bLOvuX7;&\c韯J)ds ;zHN̝JD2έIqR}+5'|94Vڋ^]{ltJo> (?ĎAw9Ud9y V(EQY,S$7TZy$ɼ%*-QUTQEDQEDTWW*:vʨEUEQDEN>:2jSϧfξ *-QUTQEDTn:S6 QZs'T%-M-TQa\iW7r%Q"4N[N:n^2/A_٭1i\}\^؍N릦1onl!n#%ZN`I8sͭAذFz#B䖹$UyQ ADKrP"Kp7搴-Z-F:V5ч1oewa*,][hwRm I$4 jXa)JBÌR Fa*Нҽcfq,QːAi7,q 'Ф!nHXZ3e[lNT)Z w9Q$$ֺyMJZ6ej>[uť I);ž3؆߷9m 薢NAJG Ӊ 1Q/elQ{iP_1Sozy\w mŰQ*=ЖպSuJ֗ewyv?#!#.@HvZQ!k ,IS {]mS$ɗ=P eIх;Z}aMsc"]FQ1n(4y;aէJnwbF޻qمqɩ)nZ5)Bir.8VPWCNst&Y3|coin!%N* hIm҅FqIA[!z'wA5f2덮"a0H$cĹOBSn-OMĝ! CSET6\;D(o 6حة;m!Ǚp@8ӋM uNY|8r#37ff.!BބC2CD领Ӽ˵=d!M=mJRR5J>k0rcgQ~rO`3|J0sWP"+h_أ(g%68þq r:& sG^ߖn6E2x.fZxqkW>mRG) NGL'EuN~tپV 5ͻƱ]TE4/ʻdOsu\W'_ǶY8FNݕ?`=wcx3l'Lch֭ROvƛD=wTQ4QEUE.`S|WMO@TKׅtf{N(袊("("t P*}_/TQPhY>DZ; 9մ~nb/QDlۊߕZTj+\:7@QEUT5'|94Q]œ+mEk.v ~:j[7,/骵z}~ZG ;I2<ru "(HגKZZ-N^rE(("("*uy+TZ`^};JjeTQQh("YN|5E{ӳ__ME(("*erv?zm+uqPmMBR:I P*u&(}aWHmIƲ+sJZo$MTAj)zNAPnzz⣩%Tn@ƥF;gyξ}ic: G(uO [h(EMĝtthPN(ra6樁/mİr%) 3IR9$W˯]:sz dʗ;F)eP{S5VpN}[KŴ6NԆX3a([l8ʞ) $))[ ^n5i-7YKJq)+N B\@ 6$IG4E٦WbӋߣF'uo'%&RIQ/iߑ}O㞾Zkl8,huz@vȯy,nJ3'i<57U :Zk{֔NLT6L"IXh*B5X  jDs\zj=owj`ٛ( .p^D^-[oPR:}(; Tb{Е;qwֶ@%`8F┐ FQ¼-Wi=k[o]tv ?/f({TvbKy'[)Owk^!i{1G?u7%^ OUǀ; j@ӟxRar s뽹}b!N$j8@v=2m7rqu4+6HC6{d5{ڒGPKNˏ)|[\/0vOy=:XOcK\,y8B Y6<Y櫗_T3)-(6z}]hQRDžUe?dҏ[_bv^m&白Sg4\ҷ |vӛts}5s .m~U mI<:iPO72Em??Zn|.>GψuEi|^tbxSUgMWHN#šrϼg]M\[l}u]Q_ 課\+X{52b׎[6`Ȕ}yZو;?^Tz}S5?bM^HYNq?Ԏ=\[2}⨢c*\}]7ԅLt6yq?EQUTQEDQEDTnLrz/}Ҩ5>ۿ՟tT*EUU8x6߈}sg*]pB(dy$ɼ%%-M-TQQh("("XNҿUEӴUE(("*uTZg};5udQQh("HX.+m4JMIN^rE-Qn^,g!#RRt<4]E Mpy V-sSwC@n#(%Zih4;1KDa&b6 Cai:jMFEBܐHA!jPӵ )P$u-LVvعKQ"HˎSAuuEC{N@Ge,6W""&e('] 5iNS:pRW82_m qm sJTF{օvZAwi8|Do);;QqŕkSe..RA-|IK-Gj% δZ2Y M'̏4Nnݟ Z&"1JtAӶ햑ú;c4&DhX#%}aGZ= jV݋dLs"dC$v))Ss eI ];XgKz6LndNJ,֊Վ#uq3Zq_n})Nj>ܘ[h9ԑN01rn7g,H1n|: PNTxt"}8[˟8 7mҴ/U\Q|c^bQؼ;\^ee<%݆7vۊհ4@nx;orFrnZuQt#^X6X׬csV#.,`TTFuץٝ:ZqF-Ȱ㺔JIH E:eNɮ 5%RUZD8*q)VPNС# tFe,mV؎[mNHjI>'.8lmXrɑmNql/qJ[k5 O0㡮h"lwֻ>.l`j5#:,%0>+]ն8sm2if0ͮdbqlG8u\ftȩn-$wCdW5U!~KSJ1˥&ܛZ#_iBT|^m߬N-(nnZtJS)4Ʋ\ZM͈vˬ)G $l4: ti-ax̴[cUix6J6!9ֹ!&m|ֶ.5bQv~KoFmޯ8-)לCm)j:'XbhT&{"nъnc͡KqN$i6k+6;-/'QEqCe]!⁂A .oc{Z=S,+sn$jV@j{qc6IeIr{{M{q=0QԛF5k d)L┫]ҵYTmu[ݔe HōTP̮~q\&W]9.k^]-ݠ"tvBG?9NM[ODC+gE!@tP6mm1+M !+7Գ) L-2n@ Ё˻M?jLnpLyan>ke?dҏ[_bvP/2wtidWA]eW|gkMυѿyG8utoQhp'Ά_ j{LTV Cy/5DQwϟ+k1oϛWU Wt j+wmUҏk% <Ufٟ-zQ$#NJ[2WƱ 袊dG? 2uٿĨ?:jyn_A9X>:`ٯ>9(592QEUKW?1o-_cEEUUQEQE?ڟ^HT~%*EUU$fCWM#ڌ*Q6S }8T)^E?$:j\cez=z}㦪"+O.t5V{AV$TEv =^=^DQEUEQDEQDH}xG" ~);o~t9D}TO"*(\ol}*{e[9#+MWY>x|jgq,U(E.Xx15Lt̲dQDEUUQEQEQEOMXIjS#R%ڠP"29 ۇU1U&GE~6k?nUQ{kX>;%ZYh"(\!G>*ck_+f_)K+V'¼T۴Ƀ}w)31V`PS7pz-[Im Q&A]c%->*P EQUU,~.Mfyd&Q}K]y/mV ~:j}gޟge'>sg*RLG ;u+%*u&𖪋S$7QEE*((`^};JjeUXNҿUTZ(({ӳ__MQjuQEE*(y$ɼ%v?z}q[QJС)_mKUtLcdH LT9^؎h]|. [ۛtx)ݬ~- ۖ-Ǹ PԀUЃL{I^fo^$HAHy:~`++hӭx!cP_NlՏUt:b2 j )oe{ ^x)꽣\"rMJ9dCpJϦ^Ymiڭ3N;!,Ho]Bsq]Ը6qT4YJ h6 8dĎUݴja]&9Z3[ˆ S=\mY;\":`)$,txT+B/Ke/-$']GT>4W٬MTnw;`ZW78kR2B7P^ԫUTg$e`-c amw+65fo{{[i^iW+_bg?eԟ[_b/dŏ֛ ~)E>qc3g߼ "3&+QZ?$Acиo6p+vD~2=,gmBK6?WV 5z;yȎ?qWDWO dP$i? HL~*=6Uݻ%/xx;\db]@袊GeƦ- wViwhv|/NJeiJ֣S%QUT{cLtx,xtBm鎢*((W=u@վ)/ܗQE@*$,}U/e-_->*Bq>9eC,5MTqoǡI"ݜdK?aU0bLwGƦ}g?9VDǣ]~*Pم#[ZXXQY,K+=f:\Ÿi踲?(("("("y|l.G_9'xKAYWGJ[8zJ{mx>['{W'7Pht זȤ> (?ĎAw9Ud9y V(EQY,S$7TZy$ɼ%*-QUTQEDQEDTWW*:vʨEUEQDEN>:2jSϧfξ *-QUTQEDT%-M-UHc Զi6H@CAQlvb[_, mwt%4]BqCx赕2hK3{6C0TvΨjB@ǿdŵ~I^rUŌSaP\u, RLM&nXv{;Me6#2R M7v󰩝O B.$/6TmN4 O(ŵBެ*,{O[WyQc߲~ڿ$,L{g7 kv&ɂAtH kFR'l[4+}L5! +q̄(5=VSÎ;*%qS=hKhY;JTGRj)Pz zyQc߲~ڿ$-6l_89=yjĸգJPt#CG8ta Ej+NrTɭuo*@1^gRΫo2;Tfخ={ل $[)˹֋S,7mn?qm_QE~jS\]nuI3H]!.:Vmδ+B7& {<ǬCNISn)aj{mttԯyQc߲~ڿ$ʋ%1_ J_=='|]L}tӛY;35f99l ړ ü[B gh;a\(bkJq wKAKӝ$kq2ұKܳc8O$n19в@-t ܎,eɯvyLB!Jۭ}iϣ#.y1dnNXz705\q15s7oJFnOZ "M>pKl:Y^naq{v )gT}iڕ<8\d -y6H JOv_iKt.YRb66;֋h$} :i8+.?A:Mߏha '`'IծRe#?z$~*c̯q\_ @DKO?)Tgj.Q ~*DN0z?0:{RT*_:+7ΤbZ(o:+7ΤbZ(U^7[>FxR|gkMυѿyGEgMW^H9KUgMW>HѼ%"bu}^Iu]r!|~u]@Ek2û]C[:fwܼƟ LWlݝcIEaMH-9n_{V<;>\a$ +%vAtJ/Fz$EOlMtDR:]$S.m;:c "c*(((CΟtM7>C)Go^t9DuPYTQEUReZeYr8Ay6DoGƱ|>;ʷoy8a gփe f8#_YUj(KEv1|tKÜ]7PQDEUUQEQEQEOsOjS# GjQDRA8GU`~:d LW[Xm{|P׵qME76V*#qlFLt n+f/LuEQUTQEDQEDT? T`|[GݳE(\7#>)2>6 z?;CI =7o5unB-2ǭoQu X` 1G^i HDE.]x:-x-ܸ*:-7}tDEUUQEQEQENs>͛zOMQuԺx:jQDQEURoagdN6;CD)C(LvPr0Tedg<$NQDEUUO}wVi6g k=-zQc*((RTnϟ}TQP(8~W}5G̾8T*^1Rz,6SqhrQl(Y]œ(~.M֗tfŅ^?5R{ltZϽ>ς?D-~O#|Un?ĎAw9UEVK$T%-M-U^I/9ko jEUUQEQE:vʪ-N/>5x2(QEUQEQSϧfξ =ٯ&EUUQE:Iy_xKUE!30܄!qT\*p MB~uon4Ecyl[&*ܸ xҝhHN*Qbٜ< TғɖD w}!FK  on4vm-ƈ;)ͻyqV{N{X$)R 릚b7[cCtuUɻLîuIks`h9desd+ӓkuդ=#\É4C_"~ۘrcTe2ޘmC;uhQh[]q;Յzen& (y1W&C)oq,LoFƋyD׷`9߲h![|ۖ.M-e6KK-"ImK;()Տg.7vbSO*JR7SVAYO x}6G`9߲ho"VgO$S]MC[vr+t}P$%O1#,)\P#kO$D~.οWts }+}g$si5# b?F]IQp/#~mB*EvS~18TQg}j}N;(otk!Q\A׀Q{׻½~9ݜ1% bS3^i{Aw]iR}5آȨ\X\ MJ@ӘGttWNJܲHkk5o|XX%!뉵\fwUN**?yTeԪC;Z}9[%k5Seo[yԠoq>!;zq9lis# Y=_cUj,Wu~+r'mN*;͡'Pxg'BCmRNt?-[*J!Dnb{MR:1'G->"nGy_}X0m/&/QKHo jT_ qۏ@WU*CѸG֜]U@Ei3ӻ_l~ĪևhwgJ?bUQvy<vF7p"z-NS~3VQ;=l袊dϞo!2l=6i&siZ11O*i٨4DQS`*%el=x+fϊ((((>)p/5Y5*@*c{dR>~ږX=q0{aT)sOtqc鮔xw鹳@)\g=t ֑LtɃ}w((("("("GϝE: 4fO vR|/i7x_3"59(&g#nIurwnd{mcmf@x:٠!n={T(3(WMQs +#WMi⨢c*(((G:?%ڠCgWT"/vS?1ӎp?׊?N1^9~^ҾqUZ+qȠٕi*TEUU.[*z-atK;EO:"(("("*}ymv5A Ŵ[<QPh͠q[SyIl*3(–#>DtSqd!bV%Zd\iNމ:[iJޏ⨢d*(((Y^ͽK&:|vkɪ-EEUUKrC|V?7x)LDGnFG`h)S;2CSEQUTR~ ,*OƘofwX鷲}tQDEUUQEQE?۸ ۾}QT @۷ĕvOQEUQSx>[2kڸ7=N9ّQEzmOڈ?8W,tFքώEUUK3_wÓEwY;ɢ_vlxgCUy/m_YYG腯$rʭԓ'>sg*]pB(dy$ɼ%%-M-TQQh("("XNҿUEӴUE(("*uTZg};5udQQh\hk_J$I})|K+B7:/jy$ɼ%XNJێZMj!$bAӠTQlv60JF.8ukI,Nix|]ہ1q ev; A1w]SiNSN?ѯѿ|LW%;e**!,$n $:nS1n]ݗ""9qn -r:%I'Mв8"i_uu֝5Z7],bǎ܅=[v9}tEm7 Pv݊ckڮ Uc g]6DQ{e|HYl$b/h/ˈՅjM\ >h=jjN߹f)L6?%*aPጴ=7tWa^[6xY^!O9կ̷)XK{Cp`ں9N֝5Z7]i_uunct%\RmVDv1wPr8[Kn%zPc䛬#]qq%A lХ<* ^ F#CKi_uu֝5Z7]1_ JK䂈zqŸ*l͹r䋨T<WRF))(e@sֵmiG|TE崯r7?;!|ڰ3a"紧j=x yֆuO1n|i`:xb>U}iiSrP,/0-KKBnCe%,ߕ*L((ROuۭ'ukXCC@{fݢqj8ޓ9|eUk˭C91E[ 4IHN+]xiIvܖr  FKNiֻiw^:kT8!3xs=n^oGg֟;_b6oGg֟;_bj/dŏ֛ ~)E>qc3g߼ "m+&/KI9{ jvp$?D*5q!H51F?u4 RӎͲsg+*\ڇJ:mRGڅR+FrZ?f⫖<=Z /5_d}^- ݵCOCeQELv3ơ]^*rZ&vt\WF]s|T'w }5u*i|~S.;M?+fLuEQUTQEDQEDTk_X溠k_8溅B4QEUQQ죎!5aEev.'iʨT)fM]7${PMN,^sh"">2R%@E1EUEQDEQDEQDIw;y?|.Go:+Gﲼ%ڠQp =2R;Mo_Np9-|tUEp9>:>9RZ"([qDz"BOLbdi:"(("("*}ymV5A Ŵ[<QPh,OkAߚ>E8>>VN37ˉ V%bU(Hx:7ٞoLx9?+f>QDEUUQEQEQEN>:2jSϧfξ TQQEUT%?ߖ9.JS5-ʏDY$:*yŸi2?()sev>I4ejI>hhݜ)DaMEQUTQEDQEDTnLFnO/v P( qb|fpwTzDGOT(7~QD:`|qY >'6EQUU,~.Mfyd&Q}K]y/mV ~:j}gޟge'>sg*RLG ;u+%*u&𖪋S$7QEE*((`^};JjeUXNҿUTZ(({ӳ__MQjuQEE*[f3˽r򡰧zJw55n.ҴDk|ƛwtsV.TDrўN ZJtBY):]Mr=F)]8kp訢%-M-UH¶?zLiնZҞkRH sF#;HfcԒ{y[gh掻* :Җ^"b.3+Lpw\:5W$rHRViɍG]/ܘޔErWkd;w\ՔͶIfJ)Wd(j5Q$k}eXxħo]$@]䣒{Ωo %h]ӼXvrczQm &7j26&\4vbv;YTߓK>*yxc-9? X?B]ԭ>iq%\ܮJ1iMuиYͻcjdg ˱2`Q4j9=5]pE|yeUbc;颃+n~ۭ/ROYOOCn"plcj/[Hn"-*NQ[{ukj/z6v]bڹ|Kt P:rzNnWN󼃲NWzlo^e8s\ոaLI.kqc3g߼ QOX k>ݛvKupKB4PJ5k^EtM/y$|%m&l*zbm2.mO'Nt6^o]1DO<. S;P5:ѭ,\G:ag NG1<^H0O0[Z>]S\Ǽsc򍩲)Ni殡v}1x:{ 9g= ,,\@:`:=t[gޓ׊v6Ny26cT\V<55)0%yo;_D{Jt$e= {UY|f~i( Z+_k\$[3)1Oxn!P#X'ɢݟzLk^*:ݟzLk^*Wt .OTin E\ P!1S-ʛU3n:ż, ^iI:~x; poihZW]ZJQ= s_V?[I}VkG[I}Vk\?jOAeJ5i;fS*ƁO@2gT\+]4:{L]nϽ&5Yd)l4JȢݟzLk^*:ݟzLk^*^ ?'c'+"v}1xv}1xEc>fTu>fTWt Jȩ(0/ ~yv}1xk0'Vc Z"W95@xk$|MJ쌩a?-~ =c_UQc_UWڼWQc㝸,y[I}VkR+<ZlM[Nr X eGwMF*=4,\Iu >CfTu>fUWt .OVE-fTu>fUڼNOVEc_UQc_US^ ?'c'+"v}1xv}1xEc>fTu>fTWt JF;Z}.G9&.ی72)vV{Ǫ׵#Q} u>fU/a%KB7 ",[iоV#yo:ݟzLk^*]rlv;ofpߘ/#M9ƚV-ލS4AS Qb׉pզ8 LyF*#XCqO(^#NYݟzLk^*䛈we= 4 "v}1xv}1x^ ?,?)ZLiEOصtJ YvSbm-ȎQ6t5ӎiƾ5⬝83 T OVEc_UQc_UV?jOA;?)YV?[I}VkG[I}VkOx'L +ƾ5⣭ƾ5ڼNOVEOO>=ƞzݟzLk^*вmh[vZ Yi hG&԰8h.ϴ*R(~gޓ׊gޓ׊3&kf4~.S f03as&j]FyE7G^~YL]ڗ: &Ts~7v# .koЅx+}c_UQc_UW_^ ?,?)Y;Mwl_nϽ&5Y.6;Kd&S]so h4Aw&N ک~?)MTV?[I}VkG[I}VkX?gddQXnϽ&5YnϽ&5Y>3v2~R(~gޓ׊gޓ׊jOA;?)YV?[I}VkG[I}VkOx'L ,鶍OMQjiӶMF2Rn}L\P{H:fTu>fUdIm|XyO/=v1|u;"e#g5!ɗɻ;uL {} fʼeeM/<:XN<7N;!P59lѭNSbMe`gMZp]uh7Ojma>Ciƺ_]Ny4tӇe˛ʙoA;?)[+ƾ5⣭ƾ5~3v2~R(~gޓ׊gޓ׊jOA;?)YV?[I}VkG[I}VkOx'L >Ϙ^)ƾ57B X/ t׹\63q԰05c_UQc_UWڼWSqt|~U$)Tc_UT /U[RȤr*7(SMo~D԰C%z^[Tjl ^s/3m8Ѻ~ʡ>fT^cpF!Ec>fTu>fUdM3_wÓE| s^H;2xKڣSO}F+UTӶX\ӱӘfŅ^?5R{lt]ZϽ>ς!k<ru$$rʭ\.P(Y"^I/9ko j:Iy_xKUTZ(((ӴUQjuy+QEEPڔ N5_URTNGUJ oc7B~Q#DhO*T8crHL[ܕ)* JM8#xj{Byzk1`Hmvg-ۉȮ2mB Dr4HHWE&7r*9Q:gG6.UY6vD:pڟkʹuxLBGn%=1/tV[ޗƶG/djpyT䜔9FS=.5י.?c\{44 []cp+m`|6]yKBwi^@GѦeݠx?zθ4nuZ+%T뭿;Z(뭿;Z(^c~pl~|tZ!RHCJ-d'@0ŏְy6M>-kQޝm[1R~ O̎rNJ͸vøI,kɸT=zy/1J+ D,,pC[ y @j;MdZ$SOp7% xwJtM~}x[fA6gX bv龋SRh*ze~YIob>p‰#*!WtMlU;BR˒$ [..Lbpx wVWF,>GWZP/|s)OJE8DΧa:;9;l8SI[C.d' FKydžZJ|:=ZT ULlun<(h]u:w;Qz뫫r.՚f{吥*R4eyƮ/$c\3K.>iRmZ{]c!Tb$oZ|.Σ\hM{.9/4ِ7-$ Wlن=Jj9@*]y\B7>-vtl}oVi[ʹzN?Xm@ڮ|HV_Ÿ!ZnB Ü5UFUndF-ñ*F+؎`xSߚm(_~F>cqWz*/i۫KvxDźң5 AnStjcSxض /En<j)odN ~{[uvV>*6a,gܜ,ms1ɑs.,!-GDqvF%yL͋%C RT-*׍l~ `NCl{H%u9=xͽ[.G <@VQcxy}$B4_^te\8[w%Z!ſ5q7Q\v5<={T}[>_S6rKYIBCl8SR'7܊yAk}q ژTm3q |s!/B(hS$Ra/1nM7R| VV4\ TΦ"soGbt-/h/T*7xwv: J_V*$Q5v+e0yJq߁NC!oo^Sߚ7{K oˏd3 ÎJní opT7x ^h+>He*x6}yI\T Pyp`8Wx1B{7y&8ݰljVK{ݨa(-\r*%Ls\lZAFbT~f:o_O_rQQ ;~u-݀]]2jBT[#WBNx?h_,ynuTnXVĮ%9 PhQRh? َZ,Yn/rґ";)Y#שcG!Nsy ^AoWQPHN[RIJQbԧQJ=ɽEy'-,FRVh'MU^[^J|[](KߟEj竧 {WRx}0JFqy91ԤA@'<4u.7pˋL>|w9p_Dn!r[Gu8o4݀p-݊QyG0'|-W'Gl HSo8^JwpׇmpA*ԅ*1W*'}!-JI:zxk Ơ۟5'Fٙ`5X \xJϔ~o1Pݕ+JT@@JYQ~[խ>nKP4])N Ϛ$n}hVO]wx7dҭ^ }]\cͧ*Lb7)Hqc6/4\<;JjגAwCx ENhh|:z *[$4䌠n7=Wx`Ҵ=JEGنJ#v|MGBq@w [ Wk0}J}O~kq*QuT/m+?h?1=n%լ!-n(SGZ2z#ykuj7SP+YA$vh"F/Bۃ+w9ꊎ߶2%pY~9 @ZQH57 LHn6 {]U۴â_`&>-Ǘ_.q_RQP|)g;!J\-550]%2T\e)#w+i"-!Po֊8.i󒔄4$ R{^ !+YNA18%DrcAiR(ZOjyh8|[YR^ 7k~Vl{_՗iA)Xu8 -2`[(u$Rʶ>^6۱WdwjhmpGusPV; ,5nߠ%FLZcx>zKHo.;2 ^VnjS*<ƶL=-X ftɔeIJڷRNWZ߰_ڶBop39&W[R<)3>ڭŬ 4b1Ԉr h8ik$Ԯ'.X&3\R̴\b=Qɧ +`#:8+|B,to>**Qf̉ PvhKRp+L<uיG,8 N#ϐvԯ4o+@LT?D4Z@}rRKuiw!;ՠU'>\@ۭ4uDeWnxcr5oPzZ+_m=dҔTpgYbݓN[ Aqk*)]AK$`#J HsR0_kPpO~k؝#{bA.3p+ c\ɭҭ7yY׽Y.c[r88BR#ס.!Ɣ漏ڬT!$Ifj;$"KQxju;pXj\d:3ΐ >>o/BemMj_^W'ecr}d1ۚS\\aTKKA%$ی{}X4#䦡jZ92: :VvH)XbKXAh{Im8jT{Aa=QP>Hx4pkJhqg]ԥm0+6ajCg̓µ`x+[Uص]&nf\zUUy+{Q#\YN`Xe^|UGuŷpnå~']8%g]o.9iᢔFW^jjwG9.%i|\`+Cz[@ow5T)>H`⡌rJ.}ĕiޯlkꐀ) P:w4k^\pO~kV(]bU3^w0[z-ؓP Xv vi_,^n@-)\ftp \FCqž+t! jJx'OVa8RW_5n=b%JޛרU6&vX<BP#yA: y5ըoۊHo+yN+}!M'$LpO~kw u>UD v}yZ <;pʷ]ӵIk6Ϸgnf8뭅FjMN:媞!)oQlA=>P۟Ʉ s[-JIJ: N{_HTQH[RҴ J Ot>qſ48v$Y:zVʖy' K$!Sp; TirB7yH:҆v#!Î˷1oBT)%IRۻk*Ol ǩZb =&nXqcuTT%$GS:a4|7r~gnvNy B[RHR )RGЭi"+[F.n Fn?c{7JW. +ܶ\3 XJXS;:kɡJti§,`v0ۜhto<X 8~ v8SAשڤ#ut{뵭{SJ-Q#UmXϓJt> Ia`vRAӿNN$Xe%٢uJRR=JSvYb%n6H*F2 77jEC.o!ِPAHjmrvg~~;A+KJOzAh?7 Gx汓ãhshA?=qjÀ h4"]]dAHa%ːy6Z $%'R@*Ŷ;[T2eT8B4CRtaNXSCq:)\&4Vq{hҞ.m$I:áj49?" sXYmmgōHDijT!4 Bya+SN+!9:X׬dվeKXķⴷSۀvns\zj=owj`ٛ( .p^D^-[oPR:}(; DN疧bNمաr@)* Rîj7lVClTt̸UuiŁϦ:¦0uL#ܝu rM̶!EHhAq:,Nk6˴|B u!9WVCmyN򖹥J:%#ROrq/φ%-GMc>pVfw'" &BJe1#6wˋ@:Mv7 chzm3&:q |Tcjgg_dHN.}:O>G7(=BXl|}!֯8og[M,HլGz;}zD:wSa?HտjdZSh=7l KYjY_g` Ri݁[o</cBiSk`r}NH=w-g?WNiV袊d0/:o&ֿ> #lp/:o&ֿ> #E|gkZ 䄶0Zncl> OX k77R۲wTK@Іt$X;v}-X{yMĂԶ;]嶮8{r6ձ`VuS{ﲭ{kd"d;}Ld_[m!WkÂM-m?^WxƁxi~Bׇך2z\.Xcq._ L1<Ffoܥ"n␲& hi:6IJ64C'Mu֧=qDYLJؐ*Kj P#MGwHYa A6S#ҹE :()/F^/wHi\eb2Ioi%a;6 ۙi=}kEpy&4|~\a楰u~GxǍbgoLjDeD)I&q=kƞwܞBhO+;ꉄ)N9!kO_oICd$%t4*<Kֵ-$9:ƚWeUaݕt!y4wOj5JѥCͱZnkf;ITN20J4[«$o+ 9H$4܎c򤹐cۘ-%DtS̄'=$cY!lKPG>Ç{ao[ؾۚGDo C Tn'8ҵѮ=duznt"YOACJ.)K$,DBvf.6޵ܴyoZm4%*/RHJMo@SSv~O[S Qg0ґ2,h4e?}la {m$ԞQ $w0-~ں'}qd6Ƚf_|;i}V>|ÝQ >;'{EhawNsƛ~$ta.M^T_ ìEor!%U*qvk@A;G%N44džVH3 oԼm&P'=PZ_ŝG) viIP&ޝHqS)FkGs ?@M޻Œ7Xl"ouChu|+4oG)o0נ%B1Ntu^pF.]lekcl$KjK|Vem~ݒk$Փ!$ktsk.] :,ޒ9w&6`f6gtZMRUsjJqOv= \5Jy6tʑpDuؔ|2lU52y:ך ե FӺIӞc<⶙d`Tut18k~>FC3-Fe!$衩k$\|vrBpa+IPᲁHsԮc#{rsi~\9}-mA9lzww,Iν?S znXit^lJSZU2򔠄_6^'ԞnT9o:w+193^l]D!d[mNٮkuqA듒C-Mr(wOjRxjͲ7طݺ:s!9@rrT; {f`g ݕg*2" f yD^َV8zCyZZ D=z`!ŝ8r[FsH${gצX?לz3Sdp:IOrfۮlGG[2CLu-94 IgNxw{o.5Ӗ02W$L=Lt MݪFMo1Ss8rݺQ VVGy bXr?\PUA쏦ӷ!;]QNJ͘j N]Jt`ϯZgPI\[wBÎ pRds1-FRM*wքuռuOFCJeMޜD8ivRˎjDy}\mxZsr?KI#'hyYgbeӎq1˛`($h>OOqƖ,TlNQY Pt)I]FX6=.2;!Z+A:{{vrS&Geh*k ӂ&Oxtr4Cl3~WXUO6)AY9x@KY-%:vW TM.Oy1n}8,Pt~}Kawv. h抔n8-#p+FɛoD^_S)) M,8ɅEaf~|Y{ ffW3=>כb. ɑwn4sRwM)67<4& }*jY:~qZJ+Jgg+u]4+"zb6Q jׁ=" fޜx1XEfvPJ]\;]v]+r8sߒGA?kw ه}0S94Kt5JZZ7Z$3=˷HEJ: \;(ڣH~o#e-5ŬBO.pk:3[mQAHӔP ɲ7hͮ|^Z)+^KEc+y%1a6Ao^}_o^1k]0bP *=͒]jૡ$'F06${?z/hv$ge[K):6{aRoS"r+8ˑF%Eju񭵲 \'^_E~:5%gfuU !Ӥrz{{׷#NG'$NG_5QIW%%Z\S9f*Qw+J9C7A.MSVʧ[ܗtJwyKm%"PέQjġJfǙ<ᐇFMti=c5[@x @_ؽ:֓'XeB~v[e\ HKf2~[U#~F=l'lpؘ ӗYhee H $r 6$Ɖ&J!YJJV% iդe.(^KBҖ5TO +3NSÜqfpnr<]lǹ9Q@ΜO~npV+[bˋ,p4W9Mwxt+9 g6ĮeΎ6"K4udGZ4"D=o`.瑩7)QmpKIkJ@y 8}k%傜bJdjAbRLU)x{؛{u"bLJ7\Q1tp΅kãpU88o`=O$,!--!ڽ٤)g&$"ZGyO֝rzvJ׎BBAڀ8o+*}i6{V=n:zIO,os'3esHv8uʐXR7ӻ]+D%܏ g8mC  9e2v:ǥ8%+yЁw5u iϭK,zG0?Jc}X5%s^Z ,q:Ht4N;@(J-(jc#Up*#צ7;T bjL]RRHAߤ5Η g *İN]SKOۮ^yeĩ%|6 3/r3ιv WYPaKĎ>NLrDI!Ġ|ß^aCݣ\ܦw^I}Fk:Ki:sh[|y浱\b3fn5F*>Krk[iJ?LI eK,x_f=E-q_3[ٜ;9EtӶ~rRYJ{qE'tC¸^U&lk5D^Alb+^b(i>M :-űm2^# ҮDp'P O:ؚV3_ax}C*`s@ kZ0 X=Gtt7Mw@4w8걑_>DiFD.Hftibl1J(  ;|(hzx׻ۺ2^C ݥu"mA>$huT3:le췿eţ$t&$w io ]Ҁ1-<4H<Ď$;#d7$Ty-;_l?Utv}߆ D f0KiYBۙ rqø9a E"o**CH.I 8܂Mكk2 5Kh4]ٙM6+TpQlnYVkE{yvF wxEYZ7FD e/GTGL|ph9;Jݳ^57; e-,$cFA$Ar`_.AuKF-՘(e+MffHYT;Ajˎ۫S%|@#AݬX nG[.jI\ٲu||5E\s%ʒꞶ4>Эfӹi=ɝvK! *RNޱs{Azum`7ֿi3mv{}v;SˑvbNhejSl*׻YlHn2qZ.iF޽OG[Kw _8e{Ivfzm¤8o-qOk5ٖ~(Oc6`㬼\9W;xQ/RU!ӪJARbyg4:ִ551o/f#p܌JRU\5eݱoĭ5I4M"s rX-;/Cy{(*! \N!8qR8U*}$)\Y+Ms̨,\Vqi:K3]u,`FU! zڵ6w&Ŕǚ"1`I}Gwqէ5JlmwGѧ퍒vun'>K}u] *T ݦ=g.6}K)⠘*#ujޅ PDɜ\oj|OWTG ;7a]=!kr?=-XVݙg{RƏ-]Lk:=jEq4IMƂ|ټaMTfŅ^?5VOෑ!k<ru$$rʭ\.P(Y"^I/9ko j:Iy_xKUTZ(((ӴUQjuy+QEE*(g};5udYN|5TZ(o)ȷjmYSqYRil"%qjCh6J'ہǞN)!Ė:+M[q.:G A9@:Xרv/f4x-$A:%\:+- 28gu⺶G'RuFӜV}ʆih/sDGctPSvhxiNbb_˒h}Isuy.KQ opaZhgv8%׋Sܴ:%BG)]O9&~d+) ;&&4uKuTG#i !ĥZo!C];^+ Xt7/ߎ{S?nݞn~\;㨆ԏ曡=է^T*=Yjկχ5?waڞ5nONƽagKu?7!^4E ~@ 7onн{bɮ}ڔNF|q[ /[}^&@\oTõO%]秫d{fMFߜ?Su[+%T뭿;Z(뭿;Z(^fg~u7{4ŏֳs-{,)kU'<DȿSUw$n{]v3~o6zqHh% sXI-a͋mv,*/&V즔yp~E.ew+0iB$ݙmBokByuՎnWkvoү J{YH뭱>-aʡG,ZXNԶ;fW(_-m/6BU"yvoүӛ[js*iB"wvoү廳M~hmog)l8raP wkwf!}*c$[¿{ES)~9 p6BUZنp%,̚#/ +BA.(w芽E$'k[:RTC)O! z|lez|nd/_ hUgǶ.М)XPphE#ynd/_wf!}*<ԟa~z!a"պH B5ڛD"6Z Te U%hFNNEemG>58 m_GӲE % u@Ɛj6s͖AU*ho-ݛlynd/_)9Gd}V`'G;&b ~:j[7,/骺z}~ZG ;I2<ru "(HגKZZ-N^rE(("("*uy+TZ`^};JjeTQQh("YN|5E{ӳ__ME(("*u&𖪋S$7QEc02>W*$f ־^Z̙1^a0[-Zƚ qna{įCr1kT&jBKZ_@OG+k~6em/DyB2BPkAp8ue=G"gZ0M6K+M{ư̄ԉXR&ɉF(#{{s{Aq[*U h#LȐTwL4hPFe v0K{M9U]He9!y6%5^)T'XͦJKպjh):(!cu$w e M~3kYd- ㎗ʖ)wO6u ׻jwr~見e+N#ak^%8``a[cy:5Rwf.BzM3σCa ;ݪz;+aӶdo5$="4-j8ԡiN{C]]oeL5Rq҅íhP 3g7ˋEsYN9u Rtajۃ{S^L;;Zi9^- H6;m1$ĹHtn4O+#D{Oő2(Ec4ZX@)Z)]8XO3DLX6X׬csV#.,`TTFuץٝ:ZqF-Ȱ㺔JIH EtkhsQzD\T?rT4 JR\FxR|gkMυѿyGD' fF֨,:[qЕ d_~H9j|D^Xu\]7! QKDV O~_5l/%koQ5DQzmVi'yp~%بW>9:*֫ZtSQt}DstdFGvLa+^jMQɛv3B?cx!I-IoG$Ѯ}>a#s Woi GSʲ#OwwX 8ԨGy54T] B5jڴa 5v:s{YKM*$'u{;<ndݷH׽s{ _(VHsnzV ,l91Q|fY-ɩ.^9E[,uWZZh7հ xlx#hDDحIwFŕhRIxiy6l%z;׳(|s&k=MWm39,ս8'0WN>[}D/}cZn|04[J^Olu ( |ΝjAanxeaAoςѩ5ɛ$}*竞cG2VLJfDSmnpOݷH-]1NFao7 ,!uNHVwéAs6qoe[/s_&}w絽Z3s,zF t~%بRvsBʳ7r BR[ 6nqݷHw}OKۚjj=U5r 3l62lG9V“)RԐ5DH wpo~wX-:W$⇚'NSF;zu1naqҗҥ|SC&xeW+ X]^juwwC<etH<|Lz:}M9ufumtcA-Gyl Zӌ\3،-E@~X}):g7f JZ'AhA;>߯ɓ!#H*MC^׽we 2cܒIr>bJDƿ u=k]2FA*%IӞ["1X/x):b8:<| spdkǚvoBk%RP Hi:5篜C mmGg{egMo#;kb\{8u%{xwGstƎiӂPᮼO|dFGnV+LY7GAeBm՞' 8kv+vYM/k{WPn}eEri dkæݏ}*dnâݐX}):Å;?)?6~ʾɚײ"$cvf֚Û)?mNלgv\$.HԬz(=Z$]$اGzL7ym%,0W1;ѻ W'ky'9MD׷[ģ s^xtH7/0KD6q)mI'Py%'ACc`~Svd܋NPR:ۺiҠvp'K#nR*2Y p5x`~+wKdv܃MHJ:ۺiҵtB?w-m8/e{ӗN&>[}BޟLAG1m<ܐF ղ:iѻo+PI10%NO"m+[:w[zAym\e~߻ߵ}®t#nvImXG JjK >4i]KoQm8Cs# L8 0uݷHם_Mx>C{d~i8\fmqXf#b$h4Ii"S] fܶޛZ]c TXkRN:Nzm\+)7+\92PuPARtG| lɊbpMDKꔧ]&PΠu:sp ]L+e~wJ$* ͙nVW.csvkr֫{JTdO&'m m*F dh'Q@^1\iEl*I=vu#d,]:ᐔ"BG0`6'&jC:Z5pKe7^CƦfV^,mE$ )ݵHH#]970OcA-G\?[ɶEaW̌&BtCi|4$wy6ӻ8T,>}ix̽oQg{dn׷5;{IyYo^N76M:+d6{Cl=jn!IZ9x8GT']qtshע6?x3q ÅIA\ yҳ'jͶ|y3ByR% ZNx\fA-M[89+UjsǚvjįHeF"CMixrnYI; vҚ6L9f8QJ|П!n,+\ǎW?j:ۗ,Leo rv?aTxU䉑-vn 2W)'%}jFtq"ѻof>;d3"̲Z}JA}RIJ+|˂)lֿ~6_uXfUxfE=/3ch ABᦩ&ݏ}*`,nXɶ0̇u1۷8:iMTjѻo+ kw˜6>|;-F1iA6M"S R4T@^|^⣨\Rue2 #U%>'UCk7 j<#dmB( 8PwFp<{۲N.g7{tPu+K 惜~z} 6 y/ߺ}I>{7n^ohsmp_t( QCq#=}*y+&DI dFG'g2|8˚yUD[z11(`!qNUFȸkAT[l(U|)8<*qk*.li=s[E+Bw:tQml-ӭCLFꐋpJRK |{Y}IL٬_kk}>lw˓ڠ:MH+s )߱bI{YRJUrW!_^"; 7mR#m$ܘ\ ǭQ/ 뗇yC>h6@kqL_Mo꾱h-Au]׿k.~%بWF3%ZLa8닌%#RIӘ^X}):wfCzﶦmr[)ZT4 y5sK/3 uc?a{+$m!ri:nӥCZfgVg^[qL.2 =={-]Cs^ӊ.6:t6ɯvf6ufi뽽 J+_8Qk2Y{%E0-OcA-G}ű ]wTXolouڥ$pSpH.,>}s^sh _G`rVl}'alom}G/g{gUZ||n`I)lRrT'Až m*̵BG,KqxG>,>}N쾧߫}ֿj>| FL6Ŏ3y 5JH;m6/ l@<8ާ{ʭXym'o(IFGwi-qσR'umfɘ 螽'eElMDmŏ% w@ڵu 67yT1`[e1ؕ*WSY*ۤ<=E"mKo`D+.!n=CULvGO7^6S+5mb[},Zm|-2ln,U0)m"8R74ѻo㥋5f L[%ZRPb9$Wdv|nʲK5)^s,@qÒG:r몓HS;㢪{*Y^ 8KO9ȨnIwLA[9ըqVM37-^zomao@#<ϸ`B1/|}' F N"6NM}**fK)q1Okt aIwI4]X}):=1y;@̧6ar *D~Mo#T(mÀ;[>[}hţ*mnv >#QRmǘn o{ 7mR}.mB\u~k[R2PuZPTA$wMu{\iy߬IJVDfR5׀ӊn{w/,4~ދ3b\܃v@EnK";m4By 9~?G 7mRN5c~#S$*zVΤnHh5UgP1-&,#:RT}EO3F̶%n0w ֓=/9D:+CF'gSL+ͺ-+i27Fgt ;ըnG= >͸ŚI&~>[}}*; 7mR:2j(QEUQEQS$CTWaWƝmE+BP# U^I/9ko jG̋; ~Ⱦެ-c2DDXdr›o] eM8yPP:-6y~u>]M<ڒiĶҘŶ BxaٙՅf7XnJ'&J%9yҏ;ssV_\$9jk6 gWm}JC2GT !\USCQ: 7,`ȥM.IK KI`)n9%{%$$4xQaٙvh}qO^}#cud:Cй.THKi VG6X|>[n७FRm!ԒwSN{5v2e% -/&mZ-Ф:8{;#?mmOzb^Zl5q./uh풭.eBmZӰcܕ2kr[ʐ W픽⳪ĢNEmfE??fd_\SV2kH Ǖ-Be[ictSq+rg%jw[ĥ)-U#(tDmfE??fd_\SRpkΩ6ަq˲_RD%ާJօhFVgrcۣ*u-B#R[l-\m/vMoLnHZaYH[RZM/6oW@C.%/߀Dg8?  8T#jD{7Wϔ/ۉPMPZO wgל\땟5!{QW˸b;8_LɨےxHOiPIn̲W#`AWC-C >W78l*`ȯu^*F 箞-hQ}?K{cw;E1y]OىsNjEVK$y[~w5/Q+cy[~w5/Q*(??Zn|.>ŏ֛ ~(cW?5Z`ei#䶸%J$oHi'>n<~swfy"zO jlmt ~|ߍC|ԋlq>7>iˋY } mO±|v=ыl8&)Z#x핡u׽,`~Y=kNX!ް{.l6Ғ8:s{& G84_/yW."t 2m؝eLf"*ִCzKS,_+6e45=kbjIUFCle'Upmq)i/ש|Fe$NS꓏ [PӀ=M4dvSp"|Y0kTOf4HmՇB< K:h Op`(ОZ`#}:!_i{N5]{JH"7G|ūSFm5Ge0],#5#T.\ ڞкGm߯ئ:eF6U6LhVhݹ=ǛpJ7a!Fau2WtqY1or1PPl;-$tJoHH~hC9(I,NgL^i#7>zܯ ڮN1ga NY**ڃ:JzZ`#}:)ecz3峈쌊Whwbؽ{);͹kT 2(aqdM n>XSԐ}\qlayZ{c &*Rͣsi? 4ʞmlHK<ޖ0iZز%1 NBvؔO?8ׂGoo,ǧ2Y5l]CNV|U2wnN#;se e,"5[2ܑm5VI^\n,™r KKtj8Vn6xymש~oUjHE5־y/f8oo|b[s+tR8എ&uﺺ]1ȣ^~~6ߎb8 t8vR]pGAdZ: TW[ºc˚ĸHBTn&#F)wQ,FL֋;dӼv[˭8LdʰņxB9YE8N<lؒ۲Z\7h-nq!:ۇúuNuZlԤwy:qtU.NYJPԟy dONW иHe+Qғjh;2&Wnyhz}z h1Ƞw}Sg 鶥^W"M6o.{dqNK'ϒl2 ̳gL*HN UPIӤȳ⸔&3\ çN=՝Rڎgl or{s90^|nmTk.ѢڢrL*u%F̂T~xlO}!,o9u{޽6S/1*y* %\%)Bf XMkqn))HRI*+UN;3E:vng㭧7#^qlZSPkY2d F A7n@) jUlj lKcW7,p# U5JfZtʸ9{Ll}aל&{|gYX&/ 7ގax[7TM ]M6=13 1RdUI|h{ i[N-fo2f#g!?+e*vA g>PaI^q^.+xZX#Z=*x>!R̲vko-|^/)&b!VdQnu;. MTgp*Ҕy$cMkn*KӡJsP:Ku9Uc 0ݼ*/ 7N3 ܽ@{>S==f';bF'N ݶk mĉ*%*ZHK)o3|FLv3&@DZ:T8qGΦ2!ʊmI^ڹt2ݾu%. s:tj8V6\Y'۴WXGB| }Lj8xMeESjNĞӎ_Ѵ^'5,L"ޕfsOy.',d1F>'lmG0۰kyZ i\Ս?讌z0wN!.!HX*ޯS4Vw7<' |`N3;s٪)Ȍ0ڤ YZN;1Ox-?ki&A%J:9@2ΧT XM;s\R _0>(B/$pΟT;;smNmo/qLEDGN{|6 2U{#,9J$-)`EܙDS/T7\;j}tӿM:cښU%dJ R)V-=Q#^F) Nh1jc- >q5ۆ/z _"n):%ZZSѠÍ7lTFOY㻢6dI<OSpKUw9e=&K{/I0i#:\O`z׉Db\07/}%UOODBnDc`qؠ_, p1ba(q`͘8+TןDDKWӼͩt$hxɘͬ r:2}S.̘ҁ#C7 6`]}uw+v&Vd=o?nTTI<$6Ұl&π_nL"D}.n5W>iߧ-v}T_rMhiw5azFm+Bl'4#^D) N\Z#ὠ;ftc؆EYQ&"ACSxuZRSb ;s#W>ǹ=j=ʭI.tuҥj\ ;VSklm5&5Kfb5p}>Okzù{/@Hu))ߍ]vKqJRQ] ;k[vuì-m$~jE~=jR"frl){ H4xt5:g\?Q}5cѹZ9*iO3#ps*]sv!öI9B H{Ӡ=4űmo)\QUlAE i6(6kq5pc}+KrkWCL拝{;pf_le$ "F]ࠒI8ֿ)qg2ܤ[m{vS*"R ǥj?FS˓}P.纗?9NEncXnE&lgtu$'S^-?nfc|}~ $k$3;V<F9/mx!Z-@ &KY/ ) gQ8*Q/%f5 f]HI % uiZRⵓt;I1 l'kLӆ|Hƈ.l{|Q <J6yʅp\~3n5pJ_XHJfaK.])kpV؂;GE_vSUE/6.WPDS=}hxC(E G\/y( <7t-Vmy٪SEՌPB9AlFQORky7R]]F&+ڟo@?@V*NICvD5tDVC/qDP4g h[k$l|oXv'CJ]-ximM4+%n2T5nj~ٞE˱Gxe\70J?F<:dAJSӉR$Kio4~(4Ү"?ۀ~b) /{~_ʊf |D:/0(rCa 2'RJT~vǣ-5)"@+իSJoPSǎ- Z慖V#A kJo=-b]R]ͥ-s-{h{#jYrCN~SW=TUGm2c5R4d#ZR4Z%|:WNmqwAeI6R(ޥ`?=|!ORc6[VmvxŊ"5Nu Y8z1g0_W)ey\M=N'__=UlEԏlo 1AnI.H$Y)串ğڮ.1gPV!m-Kwx[_@ -`/p+[>5M-.17'bwX/p)i /M>U wsPÖC#VӀ+b .L֞?.^*ى͆뗄08t= 7/NFkN^ 1WC%  ;3>kj6) A/i:{<Xɱ{[(^syZt:Gw`ٞ9ȣ%iƺ}8l]q6+]nIgNUhyGwB5V<)niLDyoE4JnqV?qm_V=f:;m:XcEX(ktᨭ͐FHj,1u\d<=LtԊ\vc 0^i͸,S(X- G"Qc߲~ڿ$ʋ%4a؜J>R^RzBwR95'>d(>ͱ\z~Ip[ynSsXoGx1]y5۶aܢ"]deXZBE6uǡ[o;6P[c|Jhy^K]m}]W&%2%DZ*,{O[WyQc߲~ڿ$w\7&1%JS-qڐ3wV5WXWVV"l3p2d<BlhהH/{yQc߲~ڿ$ʋ%|ۖ.M-e6KK-"ImK;()Տg.7vbSO*JR7SVAYO x6gnjr+4rb!&# 3y,tw+Op#^o"Ry5lu۹Pזqڡ4g ~}1ڏ\_YǹT*[ٙ٫i &~&OopWlgۺOM+C=x;m=9GڹIlG$.d?P$6V#7͉~|^6m TӚ~(ISk]k_<Vk]k_<TQ{',l]}J)7[>FxQ/0kjٳfKYweㄥeI;IiУLH9j<^sbxS5âcᘸ^+ogW ԝF^ΏLvN2^*hEn/]g_Hr+n_okzǭge0p!Jd`8|r_9;9Is sWK Ɗ;@>]p}/IU2bl]fF̲r u:q4T't_ tzwhÉ:ƷhjʲwT+%]o8&-}GOI2KXF%`sInSĪ⮒6HCC9Myaud/bm$əAsӗqiɷ9oYpUdՕ.41?tL3Qeܜ, TTzӎG%=x dr)a2IR jNOUvXr<̹OJUrnYzN|WbϬaFɰy8nIVX#W(Y! _Ag6cG\.ͥ "?hpX3KإgVJ%% M47ݭ1ؽ;w8:{ULf^SxwOV;wL&+DMb>diZ<1ޟMo CY@'9ݚ;1~մ݋qy5qY't-xs5B2j&ܚ[0/xI<7464(wz?uRm uFkr@7TSSZUG$f٧ξ("i(h;Jo;flXjz47LBܑZ<4#S$*>K+e7ç+%RNnj[` OE'h衻c=CM.Vl{[wEGQHe\x)ǽŮvs60[O 2'Lrt<-}mZYɸsߑʍ8wA#M:j1jt-Xh}uDꗣ~bGC@鶴: 6&3X/e$$1gu6k{=vfk\ ݏBà3 |F ggY<[bHu0;N:u%={fO"UَH | 3u! KzON[A 0 {C]V^/l'wS_2᩟.+> #D{Ҹ-  {1d &MI`RU$ zcg98R7EܮUzL (9@8V6PA2>2Q&97hv✪9;͹%HBz^4.+5i^S%Krrkhl2/7HnrJf 4izkS'(=: RiUga}֯Z[*4XK!|edl%hrȸo%:髮:NkƶxjqvD&d4gw%$28tGD {%'R읜J7]%^*iO|ַ8ds<5ڎZ} *q4;FCoitŌ{/ܮZ Un uC/is9Dlb̓˚UsDrGbBxpQض/y7. > ?M>MI$oe`-UE+ytdHw9̛sZLwz2B_`/vX0[+6+um3r9]Y+rZFǦ`v}z䖶,!FSm+ ix\Cr")y >xE%ҽ5 h?tkY%'D79L&R^kIO{YMTΠǣ<{;}?6Խ*tyHX`ڰ.5.="ⵥ\Mxs='~5Z&H*H.+sn_SLO;~=IK[C*:Lz:nj{W R] rުE{dO-hizn-'W<ѶYkf;0^C Y s!:DФX8=r]e$R ּ6J{¶NYQݝ=HRS$N6ROtѡ:d%t_wgU .Z3{0l[g^}$t6UpK38l*EU hԳ7>=Lg٠~wSbn)@ꖞ`5X֫]B}R^%]jzwzFlSr[rp2rV?Τ[2=,&9>q_]6Ӧ29|dŐv3,!\ԋ֩:rCi%'N:tP;lP]zj[A$ UVȜZoawI~7f"Q J8:i͢QSFiv4 4=jmH\@+&]93 IOBbVgd_,_he,!G/|6|k2 ;蘏 |js7nީ7IXI4PO)p9EGtS[zoU&<EUx;k]mEd qcHm_;E,d\Pse T{O蘬q)7s(d\Ӥ.g]4i[ toT 12t[{븧y'FA>M˯ӓ$Ӓ`ܔ#`ZˊGe %1]ێ}- J׾OHٵ MQ!֊o,B5@t+Ua6onEITI(#U@3kQm:mzQd[QVJw~Wc~:qȳ^f坿'Fr--@}t_@!:rY[?_SW]H.\^g,;%wE2bT]tF+V{JS lp%?w+qb䛴tƕ/vJ +GBYx1{^gj{%O|w)墧kCg|I>lEەqm֠\ALTxOsU}AOc2'^WTBRd(⟁JK]6}"7Tv:ň+wtşrKq7ĝJyz^eȒpǏ}(Ǿfү 9AWka44rgip4q\;âN,ra_wCyr, ew ӣГ^T?jl¯9Ǧ26엏&ҴK5ۅ g5m\7nV!SWQFɥ$:Cpu6)e؍ŅR\YjAF *h8[HףQ^Vkl\i Z#Ç(SA[^ w]xͿ!?hvZzwB;O >=n'V3Sm_soy¬ʝ &ǎMJU,&J-:i͠Nker7)7 ]cn(2L É핡)kܲcwKSe3#p#G wy qdejws̀^<;e= $Whj^pN_]ݞs~Z#ĚyGX -cP[QȶW:髈X<4iVm+hiSmDj!J>A+cncQ`7M|NH$Ⱥ́] yh|w;S58cW39]ٿx3[Ғk6=݂s3.7vaŘMnnMJwi-sФHpTe#@5FwAÛUr a_:h1) Hm̨GH=H?B[<%j'&|,qJ.RIpa9"+L8xxF[)Q7i^>u2ݚ_K_,=ʒͱ綇l&]WV#꥙Z[$t4'A=4Iξ{8 FkTlSIqZz{@; Vڜ)%9sysg/]E>yKl(eu6lwVڏng` +`ݮ>O$-ԔfŅ^?5R{ltZJϽ>ς!k<ru$$rʭ\.P(] |J^0KGMu!e!$pu5ֲY-N^rQju&(QEUQEQEQS ϧi_^ WW*EUUQE:|vkɪ-N>:2j(QEUQEQS$CgcaBLT%'thy*S$7QDvm-ƎrMexioqY$j 2黠)[oXHVh[^ ~uon4ч'Jʒ|aPiIu-萣ԓ #(1g˵W&IvzG ion4{_#E;rAmE@H%CQڃsӣv+-j*:']V@3w@kyFkM8 2yf?uSL~vRb}kM è9wQV+QM+v~tfjgW}qT*\d83xO!:(i^?Ax)uQykKÝDv;ty૜Bԙ&v9{Wi]7tNG>oVZ?֏k[O\?cߑ~AZ?ӚsV(Y%L κIuA[ κIuAQE8utoQ(,l]}DHH;!Zn%{>fquGy !zl x S7/n%4KK\)Lar[חAq)Juh!_ցLO!_= "Ű@y?A Sc[ryDX$) MZBOfթki`.MF]rh<664RCC(ԭfl9 g̻r ؜DrːY;{&% #OtR n ~zzl9}i~:M[`IZۋ9}!> xh{AvPqu۝&F7vL9 9e@FhCsX + =_Nbw){+)#Eqq s7SLScמ!Sdzu=ҥk[wuy-h.>Yu)zG8{cߥl;l*E@6;BaI;Ï>(jɭ_=oאM+IEُ p0}C˼%q?IOx:=SalewPJFD:6S);HFʭMx<*l *+hw qI'~@3smĕ? 7.*ҢH"Ђä$z0^g˸ΛKr:oB72wG)׃ZOQMog0G`H_G!S^o4Ngs<^lvh.RYLҒ7b[v+V'sM*K65pwyǙkgi-p soDP7ZZ[H)׽YwtYC\?+oiX{R #4 Wu̎чes<1[B'4I,ZF-ā >6yPәeO H@LH zN٘QOn-R-wgBrX,{N5Ww0,kl4ܵ|-]6)Ɨ]/j챪ۉG:oA~}~ g"k1m:JBF@sN?G+;%Zh8_5d)aԵDcNVDZ Y2$@ySc7EƵ%W!Д?:X#ƣ ~ر{ZU H( i#AE4b#Fm#{ݦRk C->={LC]@_Sܰ*[$GoZ1+][YUƧ[8 $owT׆u^2UR* τIWbz:خĿ s ?HW p(A1k|E|I1Ys6؁ɱ\|R]"}Jۋi*Zl$=U&-x&S՗{)RZJJwzJ޼J1_kٍ6#hxL>왁͸5ܸ;_K_ qkF[U*&=xV]-ˈqHJҩKV٬icMr˺92KןO)kH]gڣ (il, ϬXmLM|ClluylmtjBgݙmo#Be`L)+jS*m#X x?H)/>,n+L&!og>~}Eqvi- KmتKUHֶf͵׿(&%S. ,MeW9;>drg bU%9}ɝnWh:Ic;i!#UQf06Ke㬝STfz9Q&] rHbtK^csuN[a5JH;]W)Bx$;خR.9΢l6yD:=ZU< z`fM]ݡY/8 {#[}Q5L :OrN1v ez>Z n4xu\Pwwuk!sw?6$G^ǘSp`sM [EGMUN A7$M.;.yo_7bJcb u;!^*ȌN˶THPS=M'cL9_>e)w`7QǏ9OsclnY;`e!nPHG7).o#Jf`2]q ZZ[8W8gktnG_cͭvxIQC9׹5ې%&Ioe.GH ġi;k&Ǎ:jur3%)JGh\ZQԧkye[{/>7YV>d=|@}XlfM{mx'SCb 5GcWÆ<C(.'ZFwI[v $: f7q(9Okʆ\͒+i[<;Fu ?Zl'̸$ER咶ƜsZ^& E0c\98z:uZ1wJ$-$XFu񛻷T6Һ7%  ?ti9M24ne-E2WSM ^"eWӽ%udnk\b+pnZ4 =ObI.?+HWKR}G h.81pRXyZv{k(~r5ګKȥ)g~˞ݩE nV`qʇ6I\I%'Nƻ75RW5庅/s;°2|n؃3Hi7Vs/f$$ϯ Z:SђG>:= y3\[{~OئX|-fź[mS2 JZ[wxzh. \TϺ07F=Zxζ{}k7NCIֹM$2c6 Q~k)qx7pZh'2ZS\iv"#zimyQcbpT#Zq~7']uo^%5n%? i}w*qɑCN:5ؖ-U$7I4R̠HƲ]T_95 Dahѫ#hQpmӺyi( quFaԵ [k˿Զ8E[F; +19.#R U"Nq#7V^.G"Ȋ;^:5 /h0fbVvqԃ9Hskqm۳}5r r9rM.$%zuܯ]\OT%l5-}h.RS3D4<ާn%rnM,L 7;BQ(Q:~0r8\.>V&vl5cOLU6@0w=H5ooBzji/FƆNgrLwmx FmjCHhea~SFkuufYKRFTҐqAOR Mc.FIq ]+#uš_hZζ܇wr;VHּǎFn-c/JJ,Վ}l`6 wglnILWcmcLbY4Ge1K贼2jDC58(P΁V aȟZ|;?mGuUH^.k޼̸\}"+Gr87$H*xm3Y H̵+xLckVPΗ8qUg ߓ^*MĆH^~k<2 a^_@uy'V?h1 0LAMNؖEr[]TѡJXT~er+stjgtqµB F?\y czM=x o(?ֵégm}m Xo ia($^BG#ݼT-o>FC{D<ۨ (mRprrBV7P;}Z< MWST=x3|G[ b ~:j[7,/骴z}#B9y VIH9x3[\x.$:|7u.*Z%$vwNN}竓뜪IQZP:xw4eR/p̧$NR}m d L5 k"^I/9ko j:Iy_xKTEE*($m !, 犖liǍ{QEDTWW*:vʨEUEQDEN>:2jSϧfξ *-QUTQEDTXNJێZMj!$bAӠU^I/9ko jN?ѯѿp.YD y-[9;@Cut:Rm;H_aXKgͶK8V5FjEgui}֍GZvhuhLE ӌREڝ'̎jc* l$.:tKjYeIA[QwEq::4'qE֝5Z7]i_uu hKNҠǚ)q\N-nG*P;Pt xR阘a:0B4*' k"l[/g0,zYO')q O*n@'FMbk&L3&u[ KMLVW\(nuZpYh;Oko:ӴFFwK7Y7ŲiP-Vw(t!=1$}k4ˉ|?|7)khӨg~snjgF2?&+>u}{T$ڞӛ~EBU iE}Fֵaw9ϮX8#_-l6?DwaՐ rNJ+ixWC]gh=ݽuk\SW >GCmbMy*'F?Vj'[*! n9mPn5d+%T뭿;Z(뭿;Z(^7[>FxR|gkMυѿyGDj?j6".ro5d:1JdӸ+a'?#{YW`w]*>FI4aaI n:l<?cZ[:Vxَw}^#tJҥ(AxtWflDqn9c[05ӝ$jzi_ \.1&8||mW1ucm.nenm̀=AZ*zv㪛l-|*9tɘ7:T'xtSv\52OgajZ" ,߬IV-huH؁Oۭ'$W,tј7i A.((2&{[ N_ha_[>g?2|j癭.md{.:kvJ䥢1 p/tiT?p=3~Ǻ3J{Egg f?T4Ԓv05ֵ#ۨ,(7"fue@"9&%'QɁIvjuiG:)]]:B@ij (SU={TO{^w2镽Fu52׌h m`NYr'NI.:)'hx3Uk~cK㔥"ލiO5g%u-ژ3y׶ksQyyߒBm9iF1̬HqhBTuDu #խdm إxHjԢEtS4B׵K![Ҳ+Ku52WA.eAE`L`HevG`ϼF! BʒN):tJh3HwY :mKR);[z%>rƅ uW^29nd:>I8cdaqؤYm/8#]I9ԥ+\ߪ*A?]fk 8:R pWt3!_ׁ U{z-sϭyv_W}طucF^Eni·x4ڌR@q*QuG2:tR1NMckd$9 8z)\44>6ەqM_*Xh'"lΥ ̦m~ncUd6R8AP?eU'C?n6GJ$15h ,;où"n&,w]!c˜qch˾Z[qwm)QI Z%'2 >?u>X܍> r<:XPq˂dp5&>ۛGg&}7FsF$ͺTl̈:lm.rq3B}PM;daxўy-=gb'm/F Jq$OvS$z3XǛn\p>#+a07k${JجyN1{%% S\e;Y1{`A]ʁu(KqAHӣCLgƤ'V7GEDpz[?ԧelVvͽ,ӌo-cC*>;Ckhȉ+"1Ic਌B{hw2|koUi=6+{knguLaқ6P:(д[6 *əqqWqopg,p-^MXWMaZUX): $hwxpe'W{vH*X]jX@]Fb1p9\z .˵Yn[ܮd=aKS> aSsSd2G$mO7AN:FuS\TwWXCGO{^װYIh6S?}֧ZSE]8p΍khnеBm*ƨ>e}Q+rԯEMsI:yLb_Rr-/ UɊXʬD%a1}ao(||;㢕,|"-I bUԻѽt@kǿ]oqѐG25£fO]zfP2I6}gi*3F`aR,6..m(nC:q EH#tRZf߭| <Υ $*q?jd]J1z00ZXks.?!_b*pRSy jJDݷ{2͑fn#hFOD|V? =5~O"umyV!!U01\np;C)Ȱͥ r+>SeT KqDp+:V+5gv5.kWQJam#OTT]q蹸}v?Ylv8UTh;BH: 4A!fCxXp&FE.KE~dz\UXF5wuyL!AR )ᐽW^SؖLZi>S-p9%{LNIhrku1H@ jNK4RlX۹5c9"m^7N6->&Eybu#gMO)Te[m\'JIıDF-Q u:PTLhW3g9= ܱ&IxF^C{;6m b|ʵc &1ߎ f*qamC֓6We<ڄJKpumR_G>Ru>ӭ V3)n"!ճR * (zUokwwO^3 _ϷXu(i MiaP `N۸^W?>+ 3O7K[Aoٝg ]"[ZFPw5 IjܬKljeur!*=Bwy5-+<7yHJ>#N*JPb5LeKO "{ic/-mS F!m[)aGN$ HkhghF]ZyN :]~QFϜy⇢qɜ0rS=]v)6PI6jMWVKXÈ_DbJ~=ƃ)QIgy<{Ɯ I?S+ځϊ׿py L\;NiP3Gc5ٚFG)lyٿV[ WrL CZ6`xgCUy/m]Y]?ĎAw9Ud9y V(^RGr%> 5[,%)$l%ܺڸ:㡻q95 G $re v}Eb#H,qjlZ,8jJP:njf׎D.7r]m*2 #<#p HiZ}|9DCL&q/φ%-mX>"g}7$8mS;Hg2aͻR?Ҹ BUf _QU@>Y }Wl(~+[m,V_%TE sŏ֛ ~(t$molNIONmcu)%Cq?U)ӷ;bG|LJ^U bkvq|״(kжgt!fyg_$b 4>E6{P^qJR ˵mNݒ\쐔mZ:΢HvxnM[f)Uk[CowZN1wqnM6G5? :2RB;sǓҲ=ALf۲lj-c(-yp I]ѡ5'O˭$_Z`:@KHr7NGslB}'輑)V湻Qk!,64֜HYiDq?/;\mq ^ 6\acX]<#n[ dY X6ry)p脻 8X6}Y])9Ө!hiR5/>UaHjϴ͕:׶뮥W D$-.d-ۛ+~ x͵\#.)湎K#d7ؠo!!q D=is<_zo0tpUu{[OjϘY{S\[nb-pwbcj>EjڤkK7xN] 'qީ6-~ާ.+Bpa֚յkA6HJqH+:o5*[s򇨑J|p@>6:6fGJEo,Ǻ)] $.EXz-<(u *5vςVEjVkn/ 6l3~~>ahy6 tHsEL}$,Ԍ(L2 ze.|RtzM5S䔰ZZ|$oW;ٲC zU45|1 $Mb^n !èY^ԅv?x7h܏~޸mo= ermNX287[lp\T3|VzSqy͌^؆$y$5rh=(~z6*fvjA/.qr[)0Cy[mOX-R\$-y/k9^PAD뇟%V.?/|߸*nC8U{U+mGuw Ё!kc oNPodђۯ,R&!!A׏wV(᭘x@(Lv3滠kS<V>uãGMqI;Akw8+GeomN-MKjL<9[r)!#kodFHE)W+*aORB+".RC^tԧ %i./B&{fﰤe6XjZuy2tUC ƶ}BlDW=cүTHK`x>0]gu:&#ۆӇ|r$p>4I6J2gV?ĺd4h?s\)]GueaNHLGV)k|# OBL8?oMU8Yow ҕm?{+Uz|WX,-w6#Qcc5uKKrM2tԯ?1@ M{ZvӒYEh8klۇ]BH~A> ~]~G̑AX B[i컃a6r,?Q&;~YECn4qŕzl{T`d. qYi(`Tt~SS~௜csC(U 'M>EpCt/68c4t+y^m8Edj%ZR+!zKovŒ4;J܋pg$qRT@}ַմ?-%tNٞXsˣB؍^Tڭ1 juVqPϺT~6߳DGm,W9NKDD~GޮNhZkmBiY)uE]~]ɪշ|VKv3[Jۢ[ehq^k&ղ-Lj ic=Y2-U5׹Kw?ٛWYf!\ioy 87zi.$'QZ-P._^z 5."G?vk[UCp*pfZӾxJq+qI~dkFWHC5+CM֏5_Nٕm.uk2e']`B 3a.\:ˆ+MK:m=Z,RgE0+;K+~oAo6x`$(,0Owd_ L5!2r?pzIaE?{-Ol3whm Ъm#n7q\=i"#-֪ۘv.wgdIqŬ&S.& 7_8KzYMp3i_WM+uH:~ٚ%d@R&Z?vёž[?ǭM-xjq~{|V;+)+n{[EG4 \"M6,2쐂-G_(uu(rJLinhW?"&ʔwPyYB?}bU،hV 䩎2]g4RnE|Lr愾T4*m v)Ѭ29.;!fڇ>:K AV+Ӯ~s%Oq? Zuޥ<2\9..^:tͫ_s27,aqjJФ@9׬]-YMC6dd:Ǘʡ\\zO/)_ 7vM|vZhJSDKr.pORvÑ\lRԋO(uvsYݒلSxՑVAgt+M}5qhbq]C'*]J 4\]07 qoڽn!)RVtnt'Hy{WLi.MUp&HRΕzG /MS߼Nl5҇4i|+B&]=ߨMk4v]_@çEr}S,}AJ^ڴD(n`Vu(L%Gޭaq/rG}:\n_KKEUE{`I",NHP395k Lj< sR+ +8P+[M`u/a ۍG7Fil=N"[T& :mEqe^`؜1yqrBᩢ5ͺwZ^ζF?k9L5kUe%cn-YcA|8٘7yw-=_Z,d ;Gi-{ 5W͟jTQfLeYHU NKR}utiȏ]X8VNq2N؝=6HN-eeBUضےf1&<v›g=zٸϴ_^ӎ(gПj5򇵺koSK).omG&zuqVmWr⳺,׽[¡_ v|:mNS!tG @2$sHR}D0mDzByQ%呼Ql1<~1[ޭ%[;z{_VO֟:QmuaJ.meީ8vr[K鷏?v]L 5p\KwCzGڕBuH[u'U;"w}JmW m$%ȱ8FLR[N?H?|(~򶯾ut6\amΣ~̻P2ͶL1 q\:)R[s$/Dڅom}f2ku,aZ6~ZmZ#ZmqΫh"iuQ1:7܆ xͳdCr 56LƯL&ƵP꤇4yEpQI^)vߴ~PܽP9i.կ;֑˩T{K|HhIh8w{X8wS)gS51[[ی0ZI~莃܏OҎLu=-~rSV,k.74T4u\.x6J۝~ޝKWje< ^.qqxKkR$p#sG5;ݏS"]6u+N?5<efFzTv{$':sM8FܶOqZU)$V`'We~?Uި/6QÒ)AuiSMm>`& mm<J]w@[ jwkh N m?2An~+Ѧ-t%@p.C-Lk.T1}e0%cN[T yPZtc}sM|Yȩ)kQ j򻄏Tvu]Uk+DǪUu%ŧcI^ q}Itgܞ[.YSKv^M$Km`'=){gݣ^ J׻rȸ:Jzh8} ټaMTfŅ^?5W^O൱!k<ru$$rʭ\.P@ ONV;a::p T<*<@IP`GIV;w%7I,< mT;5Om:멪O5:Iy_xKUEגKZZ*-QUTRf\.'-Wו BunZs8EML|vZJtqNOvPѮ]5_SrynL(rNj;ꪊ`^};JjeUXNҿUTZ(({ӳ__MQjuQEE*("C2B*y*;AtT y$ɼ%,yyZ`W$uv-GYIR8ۼ)NXo^k[vikrgyKH=!mzDޛ{)NmRYm K*PY't+ͧb%ID'BVqSi;JA+q wK_9i/{f,"5BwuJqDs[>ϲJ_bwS%,tf 9DHJAmVxJoM5EwCv1*l) qR![HS|$-})}^mSY񫔶NTgr(pBKMV(y?/elQ{iP_1Sozy\w mŰQ*=ЖպSuJ֗ewyv?#!#.@HvZQ!k ,IS {]mS$ɗ=P eIх;Z}aMsc"]FQ1n(4y;aէJnwbF޻qمqɩ)nZ5)Bir.8VPWCNst&Y3|coin!%N* hIm҅FqIA[!z'wA5f2덮"a0H$cĹOBSn-OMĝ! CSET6\;D(o 6حة;m!Ǚp@8ӋM uig-ۉȮ2mB Dr4HHWE&Ja=o"REtcάС[Nٵ8}5@lJ\ov1҉uW5m8keHq8"bP"9r# |h{"Z}TO6dS¦ef.1\r^ɓg'<<xȷ"4[Fl^FOfqۏ@{AG<gW="\x}\BȾik*0KvVȴun4QEdJuwZ_b8uwZ_b>qc3g߼ QOX i7(ˆ|v1Ӣ?5P7zolRNL IV;=z"!nLݶN@94ɱB•ꨴQמ9e"$SJؔ]P],eN+P[ׇCZ]Q|mƠq(= ֪HuUm@S>N5 &|g,.!QcztSUdIZ4oU\R4=9s¢]aBrKkiF6uaM@aO\w{ W|IwM4y$eovnv3l:BG{Tm ,g?bs9w~4[2;mlIׇzk҃UJP8vHM1  tRJYM:T?XpqY KHRIӉ5p*>8kV\R.!(!7&OG-Rʒ!m`;4\r^eB\N#EtERD-.7e - vH^ФHV73xZ@oRR+a0XueTHdAs{rEGE5'[jLdQ!A eBӛqԫnn[nQ׊n(#Nc5>;@%a t5%BgޢfRV;S|9;Wi_H{\n'6GFNmX2ۄg5 Z$Ы,,iB³4!Q wǯQ\.An%*T)p{w*&\܅ً ݪ:,+tKSmmrg{x&pnpڂEd7tYVYJAkKd3 &<ڧ >7@kөqt/~BThG@OCGH׍Eo;Ŋ+KKN< JJ_w{M9(_C:RZ]<,$\(kmW]*}*[Hi&O^B1cá p 4L(_|} ͔ѱjW^H뵻h=Kzכy4+ yGi*m:7zooh~滈4~R̂,(3m=H8i} mk(%(--D,nn >i.븯p_6[] 0VT┢ jӥ1,Nxܻtuﴗ;RվÉ^ZV蒧@4m@zIO۽.UC_'i7&ݤr(v\cSG k!q|.ٕn޵\0o 8t)$}~C.͚@0qz@: Pmxs%GCUX~E.FuSN%+^ }DYv wh2#E%)R=HV~EO嬺i;Np×P2ȗvYiR;A ZV [\|!lr&JRai65%!Z8f֭ OҨ}0?#-?u+CFӟHZQV&3!.hZ񟭇wyS9PoveDeˑYIDGk:jȜʙ,ztHAŰ9Ѿ5}i/hmH=o$ ĝ-dXITBn-5쵴Xrm&Ek@NKyIk} M& XQn ZRA [RTz5lF!BQ$pI{yG?u]ZV s];M t^- eoe)nm,vKdlqîiRӇ2*-zvtt%r#P$6sݘ{PvgBJe z|^{zFrӣYVh=]X 6"ۮX{]h:ߢ@LK&\W|후 Giyfo2Ed/)ukh5 fRT+mp1NJ?H{&^=EmGiPTn(*8nG+.8~ 'RTc0rl|vZ&݊mkBE<9Ӽ5Eb3!ٖ셴 sx""vSz4\VڛqrZP]R}j@pDXU8*L,lFi;W^l6#y[#nt;j,ܔ.K`T,okdrnX%7d_Caae<8U\Vm.과AF7^=zؔ.ÀP/@O>CE MW0h7:S1 H[o!d8S4s fŦܩb:^!M/{h9Yswkv.!+rL'$Ύg)[$nǰ汭mbcpj3JT°nNXmUٛqyx CO.(uw)p =ʶRt7]k{z#f |Η߫IF%v6#o`8Mյ:v1ڶHMq4u+?".[i{ڜK -lE.G_|kە\Am̕^+^A:*%SV{B8wAox b P$pA!c_'VnٕR_iaMeB}QЩ0PŘu(xMȰzuG$ƺ^eɉ<$zR#N۫*ev%;KAnnSDzXmgǑ5 ޛqN} =l*AB~_"(qĻGɜ]AӪ1kZd0mEy5 iPM\9Mjc7pP}}@R:GyrR[ODF;,6Qu 3?v,EB@ST:%}ܪ(Mq wy^Y7F T9F_ۯe9NL~* (Ù:j_?Z&޾qބ}MFvm+BBEONSjy7?ux-{s>sB6$ d%jHKJRĬD%ZmrT5PdjQ▁+@Wi K_JMS6'>r8mv@wɷ0;;顣-ŜOxxvuPf,b*i!Rte%j@R|sDSYmzg~PڟawҝM9A?BrۓnnhKNЅ$’ix^2Bv4ГdYc骺ғ*^}qF%g~Or`QlǞ~-\r{k(BTxK>nwoz!ӮQ^S[Tc3$ǒ}M}-Mx6KmaHR Q)bn{WtwNCr˧tZ㋳ tֽĻJ͓4v`rlKӁ (\9UЭ/}>Vx7@WrjP9Eqd${a\f#ugb{dhm=}ųY$\RT5$,w >|gY2tKոۦES>J[| p^5D]b=XKĖROR Smfh)3^qRRӯ|V's[L^:qNPsz#|~m}˚6ǭ/11iWijgfYK)[hO ~9sR2%+_72Vߦ2ұم8~l(} h7jKo)85BJZSǦH6q71c|E:"6#ɸNFXPsGVjRqjNG Ә!@1}H qfܮi(}0׈).<ڛZNh( 98Q+./swp^A~n%X.pnuj+sh~4Xy5 D!%mh( ɺ6rgeuB VC<^Q'1vo:%hNg_4AZw8tA[Y73!x1wN*Tf϶%b6V3G~r")N&!:<|SZxX eJ 9ƪW[$6GF{ii!y@#E lѡE Ux~m˼7d@v‰ *qłO7yj?F-_T1}HA=.(nrMj~lm7{zZBO&̗PVOO&Ү/wr "!Rʇw?uhq krq7lke[.&ur:`8=YsszՕdxvj1mNQPRg]a4 ^eV^Jy+5}[ަ0l 7*-:(Aҽm~O4q^&ZXCǚn4Ӫ]1/.YӻfɛTw:rN>wuYatfCp"wPKxs)zz{0:dA2۾ iGV% n8VRut>xtX/%o[YçGuK}p"1 KPu /x@INx׽H)j%¥YH[-",kOt#%\q׈NqK-[K`tRj4Uu+/#Mw\ |E~B|O"͕wCm>Vxs(,iLE3ID-P:kAatp!`J P_xiY_폹l!HYq H)lpD$!$NBZJ:so t]b&iR*_):_>sg*RLG ;u 1YmxZ]δIkF6/yB 'ӜkYy'Ru`WM4tY׀:huZeEM\%QؐlВX+;)D6T7 ԑiUN:Iy_xKUEגKZZ*-QUTR*5{w{E4H[Zݫ 4:]iY$s~t;.eR4 QNQE$\.+S[oV+cz1r㲴{y :N$ή=Hf]ó[N/~SОc߭d I'Ct#MFG;\C~D!<_zk-xLڸq"v9t](nUBAJ'5R{'BTZZZR@$IG ""Q\6m^-{@ yx\r=P$ڜa$Tg($$&lG,b 'Rsun6לqz)kTR5$w)YmHqq<հ9>WUӪ4P@FHxT4KA{";:#CǏDI^WgS˳W;r:}Jn$Vռcă9Ѓݭ2K3jRc6c5^N)I?vUK mM39BIYSczd[r)GU~gpsXy %[N ЙI md89ɣׄrָw.-E T]dvͶDA5!{N!:s_Gi+LxVL?~Fv_#%=>Mxs~[>[0'FF[C*pSz8w+]sIqʄo#Q+/ ]ڮÌ?DAGG^1@W-כs}D- cB#N4߭v2B.>NZ^dgG[}]~LB >TTن=5bh]epKs2 ۧV++aD cIaĥՈHNО![ Jul]}HX=Ԙ*BqŰuv>&m ~+Ѕ7(__\a1k$˹?*9kwt49\Q=<~t7~ |QP-$kby%} 5D֌:OJVұw2᷻50_Po8;P-GVk ZEzNV;)F%GTΚjbѭ$EJW{)IJ'̟T<QcV;Z.JS|b I+:ꎃ y$tɶ{ku6o7[i +6{wO['x,jTXoqn68q_jP>ye:L7TH[ @UK;VۛmZoKnQK`֙jcJ%:iCj[qӥItu׵䞓u2|k\#"yhMJRs&/|R}Ts<WۅԾFdIc!Ćy=P}Mü(V=yLU0]ڜ_JP:4yU/2:P3u'l?ESxcLSW}NTܴ QuDN䍸$))#]xV[E#rڱi2h?U?m!8pi_5^9Fnb:JPgA) #ԮwyeawvX,*mZ̔ÜW@rG㮸@C|uٞ!cdDjUTrlR:6O* ؾFe!q 9mrtֺs7b upr+KYN=)߭ Wh čgN{5d,m[5CmQ#N =N AOѧ-/ Ph'Gy:tzb)c/{B)5k% Kl ;xw4[qЪw5b=Rjy􎃺4=Up0ܿbgNٝz\Ş󁶡:?HJ}RA>ۍ䎿 Sq8uI# g;S?J:qٷ\_،(ɚɅ-,9nn[@)̊˓3wyY]Z*8su>XwWN"Sogw5tWK)Ķ6:7]lնcd7 c7&.l4w-Ck";aOWdR}h"_qf" /D!3x\mŝ J'HZagCJ%Z7w~ ?!^3wVgikU>էU\c1rCP؁?"@@.|F[ Z.,L ٖ|K}SVyZU=&Ulu-ߑ*{1˽b=n,Ō\(y$W7i5}gYc.i1uEj'Susӆ>&}(kt%{el%)f [:-N>eD2G9@X*/ju |5 ^کVF,}gQE'c[`Mɏ-U6}ۨƙ2c+{ژKJH$sCX2?_ٵMv '׊1܉</%H'ﶍyGlY)RDq(C۫ӼW9V}lVdnYύ]&e?̣º12uxsH!\VW?YԨ% D}+[^>~[VU4:@㨉N&/Y }hShz-&1.,{fZ$!?NtjiV[hf/;4N' Q-S1P I*O0 \Vl { t%p?JJC׼dƔEWRiAf>DM\&,G#ʓbumiݯ͕ 1An5kBįKi5:aE6KnJƮEw2#9˹Y[EkJR*N'@]GEZ ;72{ *Ö7j9NE#:t8,Pjwop[eIkl^9@RǵG]\[[sF1nˡBs$mE|TRT=zkrOh{d,RǔB*>9V4W6׊vؐh#6݋䘛ijta1:5!/r/%GNu<;&V5fZ$뢡Vr5=Ez3%lz!Q, ۧ8,gޮ 8v_lqږۊo,8Y~%Y*' v5vu)b1)031 oqL;ڃ߭5vb|%y2bFRUMѮM0NE}M3BTD )MGKq pVN˳㙒eF| ,KauSi nBZ,j+[sӒ pibI&@>ͭT\vgz|YnRD:V[XoNIַ)eFMU3E|ZZfKkXq;{n$:rkj$reMwU8 WB>ַhT9F3y'S?9Q:UGbo#){X U㪊9|NEju!dj2R ^]Mei dj\K&r׏lG^Ş`G Ǻ L8 bR2o 4k3TPy70P{6YDxe&Lq>Es,,w"/\HR-)uNss_CCN+ؐl/G~UUAdˆ{mԙ㭴 ɢ%ZrQ2"dCtn=JEHZ[Є G JЪW޵;4m>)"=XZF ,qDsgX]< =M L$okӍ[_V.g~VjG  ETPY.4 8tIn]Ycˤ)mfsއL)i@I= oW!ͬtZ,~:czsEsy0KwVx:V֫y T2WwǴJ ΫNkSU\u.JK\cŧKNGAY9BcEPo $]Nsq1HzCTEǮ M,zɩE M<5QBJxӆsW8"mƓo-+!I+SǶpǎO۾ekj[AP*[.#E e0K܊RSR4{SVUfa|q%\wPGt^WʟL[ V{j(̑QR~dtSOH";^|Z` :O(=B8GN],;ojRuQr[K2TT`Su=3V#Xފ릯#|8tiWt,!&؉!+;㨉nߏn lKI#Uݏ/D)"vԉ'dM܊/x䟑!o "Vl79]T"Asr)ou757{x:S Zˏ)iIKmxׅWr4/^lz)ERwGEZqDHc Jmtbld27j=Zɗiκs*5uJ<&i >ht׾*z^dNߊtem+xd#x*Mu6 kff;q 77w!< -Z}hx믠~5\ӵKS#a3jf^\^T^*wRx7jQʓ(Fb8<\!w]*Rʀ̞9of2=)iRwSs_wÓEmpK]y/mV ~:jgޟge'>sg*RLG ;u Ҭ#GC!DHE G [\Qluk eֵ!%ICIQ<hy9\F[@.:2jSϧfξ *-QUTQEDT?z}mIR֣)I<@גKZZ˟Ųs\oN6V!OF(qЍM/4vJrV%<ⷜ[%)eTHM@4tcj 7K-%Iq7 =U_G٠y {-I0){ivsǚ-\%NA+KMn}9Do4BA=۪F<2%_9Ƙ<'K)ZTt-'M(kYXTk)v1q%:jQ^lgfvvDZ{+p6$ÎT @tx)^ .K%n{ʎN!I(wk}ٕE?`HǶ_cpX椺[eq#%k PJHIT@$_pN"4,{en0M5Ih+enŃK&9[2hs!\mCcx2wSGq,3e=& I2Y ǧh\kEj 8ȭ8}Yl>xŃynLS-4HJާvݘ 7 O$7> V w'pv<:bRCω-urW`ȶZ]ZtstQ1{(^ˮ/EZi2W[IPH( T2;@uRJjboٛm沝c&rҤXղ3 S1R w@w {B8sEmmRF]l2Kn;mjV 6il=x6ZUX<̟*M6) *`fO&w 8he{pgVESHH7j?}A'1>'tBݨ~'$QZpͣ+z>rT6,U*sfZ}v@ad[j-z$򢞟өw.ڇQEW2A󛇶^:{d:|Ɨ,`3=XoajN!5aV#]ni^+?IqؽnT^;[_Kv}Z+5tOY;ZVe}8~:wINf@U;^UUr=*+\z/X>*!_/R|UQ,9ڹ0t[{\W$L^ÞLBt~:zB'#"I38]ΜU&\.'x3-`޲?ɇ95By ZU8fAj2 rLF!m>M; N. ^9|Q'& âc8њuQ"fQÚc}g륿%:z/;'n;bk+tHWs+JO㦍,4zsu\I8qb6s w\eoYԞjg\bǣh~:V#Dޑ4A25~V{J~OC%kdx芇k? lƿ]}ZRUYc I1} &Ζi+OwӾ %=-GؔaNԃOґ\ҋdJ@Q1sI%>:_kcmahl;D!ru*_oWS-SGLyD_'fGY^s8eY~5ќ'eڕݕ!x5B;W5ifqc]ts4nٯ9N g]d)>W6ׯ<ȊU;J!>ȯbK+x(w+J~!%ma37!ww8YTm@N G>_W.^WC=Ze_`O".|:f:]j?nq:dE}|T{F3nj⪋snPGnиS"2S|\VU:ޮ:1U=h?5Q2H㥪->*b6G׮[OM?X#lSeDLvC2į ӽO;! Xhx^'iTx?ҏ~׊Ȭ٠~:~Οt%P 3H6TVZ¢:uEo6#?:gv +`af>;:%N'ֈФ]pM U~**uH)bTnRrzoV~K~a%Mi0uar|u3\;$Q֓j*&fү8_aݓDYI;EV )/?j>՛DEʿڙfWhZcmG74f⪉bhL HuF( cMN׺i?P,KS(* _1_m*e Yi?0Q`|~HfJl\W?D㳃HbX3XsyiVgZv1Hj8QSg⥛?jͥ_/na+Lry=ߴDŋac]_ԛ’MUqe WD['K\p(YtD hl3FWޟI6cdz΁D Uz6j!uO =}hLY;\XZs_}|2,#1zO[µ/d^0ݡVUVUx_C޻X홫LCh?GUU7Htώ WL:DOrOҲv,&?{Oޠ@~H?~2 ܯs?nݭOH~=uaV͕w?ts9q^*:PwY;ɢ;,[z/]ywKo[n७FRm!ԒwSN{5v2e% -/&mZ-Ф:8{D-xao)$gd;i-vRI'N$`k-% GRbxp=jCYI[ۛL<[տwz횋6ܬselLTk"\nt-S)*8ssp1qr|u⯽K8@huнxݮ6;1n¢;#>4l]}KW9x9[g߼ "JA?Cu:lk >} o!Ecۢ/抄l:q?j=CcؑPx]NIkbPwaYDN3:GէviV(mN;0sW{ ] \ﶿ='6_""m lVEdRӶ<~i0+Ql,W;4۫nox1<~ѓl^|⤛ssS=VO1{+I6t[:ZpSHȻi-qwDw& 'ڈ?|uRZWm J;>⨢=BO,去ONN>Rfv79nQK^e URPS@t)ë7ӎ]1Ja;ki>5;w5[le_xzu}t0).SM^dMD1 ӎbGWBov\G_lc4V>1eYF_V>*y-?n,-lzU'a#]h^H%7}''w<W~:"l(I{׹tU?+W.}|If2Eڑ⪪].շ1?urf@KCkO]g@IQ;>zT:2_q֨~IѮ %6׌}MwZ~m~J݉ݰYLkq{JU7lw] tƜ iP#LcY:`g7ol3LtøƬYz捝uܽ5=0= 41ltGCrHZ ?3_U,Gs!+|TE0̫{wmv`\eHi/ ܷ[z'L_G>: eʸn5㯫 ?#]6|`gFvu{nUXo*[pH5V&~mNv`5įj#ugEQ*ZbNK+#C-blylW;(=zӶTx{G|Tr6>ōD)ڮ6s=V~wrM<϶|u+?j :d[>Yom ꢙ}G?nhų7츆d?/ZCTˆ+6o?1*":ڦ' =e4+C*WVحbJO`~:m8FbuQk)rdԹ{6TuE 3F'm5{$:r=)1'ݳiWOW/^/Tܵ;QxcxOԇȑwdy>*XV;Q*)^Wg+=i?w*SЕ1i>*jV~횒* J蟲UU+DIN肳F㿎ZTJ4%knהA\1P([YUwrIn+km?lo,3RGL0խA횓Ft+5n׻JOKVޯͻ;5#LUTy8~#W@TΝ۪2ێxT*6\a&)l?JG?alWfi<삔.֜݅#ڻXXm1LqӲ@}|UGurDDi7b3q=jG NHۙ¨Tn!Dm$ZsYkG%mVJ}t(QiLM:*V(vDYYv8cK]xJFjh"ܕ<,|^{Qzfx-q׭31_OxI/_"=hΏNuyDVl4"i3*I?o PtiPL'4GQmyҫ׶xO)JJWO㧝ɾUW^e?RHjgf9tDófk?Yi|Hq솅m1~wpܯ_?|$#yxk#NѾ'X=ka1Y,3A|QrZ?#:]=`g:GקMZ^샢oXW Ai\U'na1ecٴݏ*AOd>UQ[;I-cKjZbL|Ui$k?vqltgR(1ukY;]K^:b (}^?تGneF %艋==Nŏ[ i$Hգ=BR;ATZ-/GӴ?y,Qo~*`-μ=yK:fjN$d)4ݕ}dLOh4ʾίkNl*EO_hâʾwU7@ Ńi7YiZs_o#׍`ABcB"!S'LϯT$W+=r*g _VNa(wCc[˿q(zι⮄zηq0}t-PR;,FkwNrhݮ7,/骕lxgC}|Q!k<ru$$rʭ\.P(Y"^I/9ko j:Iy_xKUTZ(((ӴUQjuy+QEE*o#dh{cAIC7y@@SkYC.z9vQNG-xj:5t&;in<m RBI$ {T Sϧfξ =ٯ&QEUVMkvJ RHBtH@:ᬋ7Xe mG?=jd p{qU ;k^+oc>tl(H#pT%-M-UHc Զi6H@CA6HH-\ܖRå{; Rx,RL"vuBõRo _o/P-% r_KtNjIǿdŵ~IG='-J"ٱ&}$yȢFiTYS +}J+(gNwu>W\Mk<6\අ<šyMոojr-DGj`Qc߲~ڿ$5lLET!N!g)) PI Ea\bpkDXRـ+j֨֨H /]4:_K12r:S¤,$-@{e:]Fv0:+-l!NS+Sܙu,E(tڑDZ͐ܿyqknr{[gqq{GlnF]8pt-hV䩓[TblVߚ>e:wͱ\z~Ip[ynSsXoGx1]y5۶aܢ"]deXZBE" uR!qKP2n8X!k ܧGnZ(n)JK`<;`87 <|{yQc߲~ڿ$ʋ%|&mgȆYuON6EצYEf[,B6aBFp%ЂuY㻮\ӎ}TEޅHݶMsuj%g٪d5d:[%Q* =yb9{i6]i|I:ͣ1rz'hcf|itm#X ڡ<6'x%~cZm\?\U"`<UzC?%b7X(i_g~vG5[x0~ax>;1n¢;#>4l]}KW9x9\6Mŭn4@ ֈH?:n|rQnKZ4E*Թ}ڇ0)uS^Pç&?׷C yZ%J<|ֵ83MI s^1zuY7>r['8 j n:RO=|ug^46'iGBNgPt}ޫYyMj=FtqסXڋ-CT5 5z.dN=t6XQ:JɹVVu%UhAt'e2f?kOiN^PZ{tzJG7:BG'=BTqS<Xv]u\w! gG5JÉӜnDϜd\r4ǖ7&vxswMwLĆ+qSVFfh{{Cǭ>J'[*eQh3Sg栐`w̍uSXceLʒ_QAO8=NvR4BVczj'=8o2m| ZyY /wB[Wa4FӏG*kHvoזAכ\}kM Cysu_oLgkJp|S }֓kRsX#N:M{5(e7)D) |CÈ%j']fNnM|OyUϖHWCW[[,vҗ.G\n)ީB5w5ǟ)r*-*K1.Vjt: jz5+9)+IAW)0n;NAh>+;ݸtⲓ/`fktEu%t!}KĎwk[:r CH<Ԏhwe*1z{/ ZapG76ݕ{٭~{pY-)an4 6̂LI^rI}r, x `=tu Y{'{(ΚGۗp|{¶؅.s#?kÇOEr6Gmq%>>Ufm3R5.߀i_gآw zʔ7[xHpkMO~9"X.+"^WNhx=Anm"q:\l7wN_IєAӁ:zi/"&˰yʽ^ \jBꆂԠiEvA+]|֖^-VBCu'ܧ6\pMk[θs >֓=K2d4lu mi=g8 ;5")ĵ.Kt'V)<8s=2'?e" >`;׺թCܵG>HZw/xO[zTzpsSKWKVݑ!oÏ4AVH5!1;"+C⭎?n뗶:Ięve)!w^t$B@)%&\L5Kh|SÁ;}A\ujxk.@1T~_s[&d =|&-+by(7R@ J=1s%wOٴNnq)= i\2Mwld8̎'wTKOO qDY֏hsEW5b S5K7Ӥ ]a('LX4h:*8'P8wԯksЃ^ɠ^]FRn# :ĸ@;B,LI'8PFRH ^69{D{d heTøIZjI*f,q 2Ta_G2fg!V(0ƺ3zd=挊Ԗ6()B{Nۇf-^n(s6]nIb#&A<Ѣ k+(3<2N/YqKKRԐ5cI#dhJ҅JVstEw^,F)iCAuۺ)'%tQí׹\5Ba6P/E}{u+oMzSkZ1kJhNutksuh&4'w>VmE֢,9c'Mv`6?^[Hn`716;c0$uNZJT n}4N<{=:Wr쨦4uw֎cPzA+Q=n_]A' ]_Ve}#_)o{iǶɒ=~V.]OWM_yRULJ7tmڅ&l98Eەdxq|atڔ Z[swE&iJJz Qi\ι)RCH8p'^=5#{o5jzP :_L'{6z8k.({fuW #ϛ[P.IwC4'ZdH}mB Z91wGEa$Naiuئ"a{/`Hqox'lw5j׻O/xwlV?1܃py𔽠dp=:tL0lR(G6ctW;i$p-tGG \ڷG?i y\##]f'CK/货Hxhx|q5o.Ndq-0t!8害q[(ڡ6lG?rmKCێ=JNv,AӇ}G^~`DE" ο%8+N8ap^dCj5nƸJ<]1Yfi2O{_^۴C3wW~phQ|2'9jVqW'M:QowVar;ûq|Z+MOɴ2isU:kCާ;>VIi_ģkK 'ð͖->Ks@#G|ckH~:y7>uX6mMS!_E/{ Hr.sh9:yfۥV.!w[3h1Iwqk+wx:GV%elIH#To! =Bzk9]jc?2>!=]<g֌^M?zoS(8wc r]ÕVdj8y^:kY81es܁Kvܓ]]WasωwoTmmxKO$}hO,̗r7.Ooq&ؖS%Eq-Vttҳ1m\T=\p>\1lV:Zd'םǃ}IVקp^*Eŋ뽷7 SZsM ­;q)=5ְv7+)O#wtt~joX-PΟZ1 eO ?av" %56bu8wQCJ*\F=LjPAj5Cެcڧ!3wKTzM ls(nh$~*[n̕JOQkjBv8:ms2Xg+;Rƫk\G%uKZx9 mn{R$w2 Fou ޥ]N8N$tcNfäH.rbf (-"=3$6|\W£lg^٥zHD~ȩtEi'~3b"zeӽMLcZo-!?7Ǜ-+uѡ ;x9G>O|UjܛTŰeA8ɫN5br}#Mo%@ 9LJ-u8twaC'A>~.ME4cfolwXڑ:9[*fUC|ixgCUy/mWY]?ĎAw9Ud9y V(EQY,S$7TZy$ɼ%*-QUTQEDQEDTWW*:vʨˉmHRwG_URPBAZkҪMY]hӜHQR A@*i22%rerRҗe K)A|:w5Ҟ*(g};5udYN|4EE*~i'ma/)\.j8+~u-u˴>U'̸8b̸œRKR~RiP$絋#go1|n)76iZm$)'yJA(on4vm-ƈ.&pcv|ˌR5:0#]I*Wkx>[]T'bmՈe-ӮگQrMexC_"6uǡ[o;6P[c|Jhy^K]m}]W&%2%Sc7;mkm5+';NMV$s'W`9߲hnbnW ɌIRz`\E8#! աEn wVՕg,k$ %\ ,1/5^݀>~uon4EnXy7@;u.,%/:HsDV=Dò<ىM<*R:ZuHN[κune<5T@^![>~u&KČrκ@POD<f4Ewݙ/s׷?\$Q?"AN%⸧׷\{@UOj]A;LcD_rM2R|1SܓLB%ͤ|J^ ~Z|wbkEvG}^k;|s܍|\|d::uhQ^\J@O&53-R[=%oE,mg =^dO=3 ,2d٘Pm[[VOu?6 R+TWG.[lu]hdQ&j$Xdg[IIHNF`$馚sS&y{xܢ}eɦ< k˜ܿy")mM8kj6ٖXȦ hy*mPZT=Z+c5^Øf z7][\ٷ?p鵿UʎP?mxӶ[}}-tKy -#qq5ţ0ִ}VUNYZAks ar5!h_Z#u vBkGu~/ʷ*lRdoj'BF׏TL)͙ ۨK@BH׈AZ4LR_-W\ǮNeQ6X6x|h,kH_J(Y9mtA\GYUM|6v\ :ʮ!]hw7IXmEqYyK8}Ś;NWqcˑ>Rvm|0 ׀}kiiX^ӹ!g5ϔ̔Hprvv*=aZNG2*HyM\eG% lJ$oxH%z%?M!BuIvJy*y(so^^[MV ZU: xF^꒒xi/p6[Xp*ٮOqOhR$~n8ꛏl䭞fS.6yXJM8wB}AR& _ܛ'tvŸiRwOxWzZ<4tyzg99ebGθrM 0=5G1`,|WQԨq=yAپA)7!6KSN2]䔃 Qqy|7̐-$ 5i$4^zYcZ s@pLX¿<-yW9S˾M[s%qD7H5$pOʃ3ɂg~JF&kHy;ިpW݉2䜂HxF V7j[໪{NҴA-R)HBVBu 2oم6O/#h)YDQӖW6(-vFiҝG-:zqݢ6sy JF]p)Ϫ½Tvj TfB^.>M ܑ ˔P'y2~Ď Wʃ<՗TkݽǷ㧭O؞W$B͞BJ܇QK7-z_"0ܶ &9Z5BQO]F~egjS.A/ramֽ{G'|TK2+Lw5v+>$Z_Yyݿ]NhR_z3%_"Re'BC'FFMQlm6K+%%SVcPy N^"O,HLfEMb&ܣ2HJ[@_ekNuiNm,=Gaa 8!~ hj%QRtRLUc LImqr!#uJShx $kI>I֒. INZξf3e1mf«F ̤#[K`5WV{ج'ҺÉH$5<|ES$lϰOgwu.E`nWS:=J6.p:yxNS2]ߩs4m[ z&IR{^)grS++1hNSR*IJ[%Z8+7&CiiK<}ZE(gzBJ,@?V&k0rF-=Vr &RN;mA`h<\qoC5hnWHZQ ce{ixNň|U3~zi)H*~twksw4#(vcJґgKgǻ˧44Ulc@58zz^ ͤtS;&(C.@KlLui@9$2NpXi}~u}  J@E$wkRZdSD)HZzb{>^*c_0ƺ~f}XT6otce3#: ]ۃqE7%HMIxq Ue&'QCE>Wń\#U'k m!`tX9 r.Z-H K!%Si xy9lieèf>.s#- ݈%'Ran7~dsJ1)r5uE&8o.H* 1^#ty|dQֱ'kƤIޖ; h6Soy H[hxjҕ}/6殝7Uve#NS.i'[V%HQ0hUfv/v] yOnS|j>rEM;e~]ve;@6m0KR?5y(_Z$pKHm٦}aSmm I&: .Q@ӏOl;݂QĭVfK[uݔ=Z}S 7gKKO %κizdWd&-nñ-Lʡ@)%xâ7\JZI9!hRFo*5<{UY6}oǟ2.st!1qS%G^:$mT}d gFt6h}˚f ,Y)A@'tuSӌ?^n^w0Zn)bJGhHu:='KǦ&}&&삢ۖ'=\qԵ˷YQ35X,]MdB_Seu8 u)d}JyMnyr:B]5ԴBGǚ7</FE5DƤB-2BUƵX\NrdC!#?D?-E5-82Of-w }kk'k1ӗ֊f~VJR4P0YPl0y /ncx Uv<"176yd%O.Xzd05#tFhIWyLxvk CTǴ*E :\)L֔)Dj;᮶Ij1I:$|9ApG+X9-uQ _]>SfXʭm^:ğӳ2I@=9:G]jaR Upd!!X/A]iL'TO spW$ [Q]<'tFTkӾ[<{xo(S1KK8 ۯ&|\.$=ZKF;&kml!A!uHQ]b廴kܤ y+tn"ܧnB:fe\.a;?*+U9 oh"đNNZN[PVVd>QpC˸!$!=!a[֗󔼤P1%Mc2TU]m %։yӠ -lK SMS+ĖVjݽ.Vˊ,nm(:@JGLsCRu8 5YpٽyfB[PNw_YeS8-4:t$kǸMQv|ZMp5 i*@G+?I]TBwyG\S2_Adkߘ-$8,GD+<Ũ'ֶ:m)VôToazOjoj0 k<{nB|Knj2RBҴ$~lۏJ U Xo}kϻ %)>@VqZy nScM朣.1\mzFUuf[Rˊj, M tkE+ݵHLHo!1R CJyt.#*eN˻۝Le:p]QZDZtT5-#Sjcl_>tT4nLZBwevΨd_:{ioi?n|š6hk4i:6&͐%.|6a=6~*"-6G!O󵅕 -PD@=cr5Bɿ|7XAQE+Ʊ9wu;[O#|-ּTQ}|d:·=vG}^kkq"=hq2KčJVH9jpYO,tzewL졹Q#з67ut?Bѱ\2dLR\d[o|hGЩe"w0~ҮeFv>)Vד bf0yS5nצpD\̨ 6M5'П^PNuVz=?l>&]WJm %Ŗ4i XOܤzAtLqm[>ZXEw?R8"?$"m8^.=9>nPsv6*mH}:s=TL3{n1p~}'KӐ}>RmdEBKQi:[Gvf{הKp̗cS$ 9}QwljܳqP%:U~Htٳ[Nݵ\mL7I"\MJsZӐޭduJ+pw:iϮr[srX;FM&햍O9M^6վ)NJe;&#eagK }2$82;;A;.}g]͏\wEׯU/=ݝdDl_T,Ӈi=PMDe&l LBK\H-.o#RYRunFXսHioW٩jDIq )U qޭ0 \a$[d8O&^%C'EmkZJ8XJ}~4-U|HZ(Vs 8)6e#ZHAni9â*,^L|f$~Vkwo7{p70hdnW }AǽXʲ hIacqkS@'wT4Ҕꚨv^;,ُͮ,}*NX* hϚGY~D~}.~adv~>$dq!?T?p>ET -[>鮢FE<"GSJq͑$w+sw+mq̱ O>t+_}x/y$L^EY7Dx g6HѲmڍt/K+w# ѨBDܐuN#vO#2f=9Q`/6ɏ2beq#Qu|{B'g9f]mC\"o>m)i;P:(l?J~Ym0krE(_y+SYy7u*;IiÁGzkUHq]mN QEMӽ:u޴۠K%"O-WD87r/4wI:;W4[=]|XMuХ^Bp ׺4p |n1n{M3$Zscm>ʤ sq wZ"2[hioiIK=l㩜|!̳9s%>JdA!4pSPC<Y pg}? Dpҗ{6ړkwv'ך-\ M)g[,wk*2U)K!nG$Pf\-·9TUUWh͙_U c(j64KTX,#MXGV_7Cz1yznBRuĤù5wI 湞2]Pec8myF:mD9@C];ڭl./%dVi𣭶7JXFszVIO!q_ TiK"}4+jy"-+uAN_^5gW"buk(SAӟ]*(x#G]ڃrlgǢE2뻼އa[]xqD+-Q}&87#M T"l=͊90@]G@֛*~E޷Nuӳw)kH*]t=1}ʕ t؉L ,lV7H)o~@,jA6JkҴA"N&XJPM5Xt"7vJF[:h^XmG!`3+keI䤡Jx+cd{3Fa!5HD; hM_z#me~3tzۧM'ڡEK-^-AՍsㆴ=.&C9KK#tß~ ǚ}{cuuǝq9!NSMq*bPt6-Q&MeSۉKʎ9$Mtqkx[rO5m`{\>]ݠ):⇔)ipe$thPsYZT>#YzO@V[O1b&K3Z/E$o}夎׭n=uWyJaz) VOVQv8>ڂ;\F0$zf<+&rn3yVzbYNb*F2x$6#Qɥr x=*yJuَRxսJ<|O;,zIjTYq )tI\+V9Uɡ25=Q: 8r4D…N_Z"lMUpeg]T*p;vke.`FJa7|EE!̵DxV<"'qT6C-qJM:q(RBE\%\;nI^:Mp{OEUe.D$OJGxtS>mc*ED;k0"! %JV$aXFևq/;Y7x[z|tr λ\v o45qE(stVdlo;8EhpG$G:*=A:~3'~yU.o{hx:EÑ]seW]nS:Эt [Dܒ (j%:9*UoXZ9Qy"Re_)LLƎ] ?>(^-ƚ!ӫe;u.>}B:TTݷKK'o9 h c[uO&r\[eʐR}n.1!X=|9gu4*"`Cu3g׾ 7"9={}M,;\wK{`Fr;AؒQBxUGtjܘ\o^wI;iLUUE͟x bvm#.{9{'=o|Hq YBRxw4Vymrh$?xswG*?Qvœ4K^󻹞D ҥͶlZqԣF0n?SZ]Zv uvdECAN6-+E :pUZuCg^ǽɗkvrU$6ږ g>yquTY{$s#cH"t-vmZt 5M;́'j=y ^CYNgSϷx0B.p 5λSEꊧy#\V9s/ˋMi(AB߬hzFW~tfzmGH6J&u:\єvCHobG 46K)أQAӜkE7W<^l']%8+q66tvt{'G-,qqq8j4h#IVݪd6B-l0/I;0KO?mٌXOE%mHT{% cc53[JӟT|V01ZJG.D꒳ENO|f W5ڰۍ?/@ȳ||n}}0UJK)-9ɯҏZQy2"$V4wzacA)AhxoTo$h~ќY3u?-S3B\gim@ xVKE&J[X;TkpY(T L^ *ivdVmӜiM;;HK)sR8WdAmPXWez`SÛ*RW *䂶mB>_k,}Q&2k9]:7ѨQ\r-+};B6vOUƺr^]gqRvL5.Le*,҆vfs-ǙZRGtj(%Mf[EhsDLגKZZ-Ol~N8qCm=T֤$@zG=1ݮ4e֋<CCbȕ!o4u#u(Hy\NB Mi}pKL: w[yu> ԢMHm?_1(҈=ܭ cȲ]#xZq"W(SR5 YeScm'NmK,(2[j.:GTF:{A~OLoJ"{0TVRe.+išި\BjNZ5]3{9'RT(FDuA: t]vrczQm &7,rh& !gy9KTtRyVt'R< :6rk[]2a7Ko]zjb"qE tﳮӂH$>)L29^"8]YVܓ̢G禮m?_1(k LJ1lZE(Ki,!՝ (HOj?LOưYg*-vK8Kh-YH'RtbA~OLoJ"NwqvD(UQ|=MH)jL{m*ӹ)4m &7vrczQ%/߀D>rwM5=tKܗu[JCjH!!<:4VY9'%7 'gk̎>>j4jox|E`+qhQP|~dAN0T+]m|iJZg5?j~$_AǕr}iLI*'Eu+(Y(莿iw"dk0ldt2VWhPqq~ AQE+Ʊ9wu;[O#|-ּTQ}|dm ~)j;#>4l]}DJ[pv#-O-V~<=ݺH_CTBf|!^\ԈB㛈# WƅoYvvy,qɑG:M5[t騞.J,ox A|~Sr:VV,ffllF[9O z<Z))c'W6=fO<'b#fb6#P ٞs|[mD~C@.6R ׀:V5cs"|A[9.eahoU.WIh[iw~?f]`iU2sn[t[l R \+]yw~I.^n0䆡;tJa.oS\޽Ս:tՖ&?w,P%rL^z"Km6ru *8c#J9g>|jNT(-q5[=h4רe峿z|ĀF.cg\zzoK+ݜ^dzͣJ%?e#. OJ)PYPos AD^;@oKt'ZarǶ['e6괿\PyK;f6-#qdL9F],܂9C ?cP1M6zXnT44-ZQ &kOuK{"qȧV/|~B3O\$:TwRJ~hϕ7!Ft嶛w>TD`fgz{t S˳lf/cki]ReA$ԑS6ŕSJBҷ]CZl}A{bwI[^qmY;D㭡Me%! w,aeY-hv %TI\>HP)ט47rZo[q}e]?-ZL45 ͵Wn$Fdž9pEkuB+,f[JqAzB}.$_8}%fnBq"ݪJTu[ze}n[8Zܘp<۩NɎ2Q;ɴqpm}V쬨!9.l56;b"5 M[BɭA}xSW*XoIqLyp)R#ݭ NJ MPIwI7sJ'[8aTE n鶇~x9um6t=umGR{TȾb1 ,vSj$г9]>qBsȭϻkmRCQ J7W;femٓ4<JSO~PԻۊYGq]6lO i<aŮ/QᾇGuSn3=+4zF&MzR ȧpԞ[y5 Zd+cMɮpju#lYSOjIsuT!=5lOp [5m<14:4+'ͳ75V ȡJS]DJ?hA^8ܻLF:, !~`5^66NҧJ`-$N֓uAkjMqOjWPOF$fq"5 q{k<Ms[ȕmOH3⥼0Ȳ,r6M<y8qBO525RTD}N5c அUDT:)t =/xl'C _*ڿwx+;e7mQӥM6I$,yŎզ3[EͺTI[rh */&t$֚ԊcBճ9 rB:Lƈ˘i>dw*uM .8)^Jcv=c)o%I׏t~{]7qט-RǜSö=dssZI⪩m4N{F"AxӺr%RَGЭU.y܏ Y9y#=5ZJ%)g o~:p :ʏ?EJxWٍ,LW筅XJVNlݙ /RO&~@_Aiw! dTeK4M#}UV[}"#MCMթ<)P֛>l%Z23,L*I̝p,eM9fͭtns+){kk G"J̏lqzbƼU,3k܍5"˔ldvsv`Fh1f)2T 4W?>1[V1 ]u"pd $_]4nx{6ڢE+ V*Rl1v`%+:ZO^s uFY<]镢 UQC56CZ.*٤iTuz밊ceDuÉnRG-ūHF.cA1R-NZպyں+p9]J\3IK"_3u}Y!XAn+^x$+&Z_,6Z-ԽTD葓Iך,t]FPXYXKҏ?q-kOBjDv@l5qhZn@gZm;+*;|}#dXq9!!m\Υ=M.|\)r/ۗQO?0:_}/-z&R-[}?T߱!a84-pTYM;kls:8P]GZQZc0[W'8 Y"Kc1vT%o4ռ/t"Nʧ;ݮF)]ѧ): :/Ïp+A ] i i,q hH66=.Ș?C޸7s!|n?NdYS>Q?L\Rr(t-9@{z5ֶsM ۢ)&(KV:ӯT=@+bxqamm;eC^ ϡ{B%W2T' XKZy̜®uE(=:뚑ȕNb2*c% Jl~8=QçwttkVGEUPcpvIJ֯uic6{%)˅L[^^HJx}wW* S/`y'_Y"w|^,v.1*SRG:[,RoJ]T*x|ʔJOǺ0H])犝84}zu[<m"\n H:-G i: fD$-"ۃ;iZJ5ta^)-Q[[/pJJsrftv^Cq(ꍨѩcSq@y6;z/ܻtO)ffkf\H[}U" P.^*/*G}I]I/\2'SZᨳ L%'(?D]nG62 rSګo{ hOYxkBr[1Rf07Cq ІˬkluB_ghÍLcrnкY)Zex}0ǶRݖ͕,Jڭ.j (&$-uԎwjܢ굏v[~PϮ?;u [:-]O*?@Vw$6kzSoW&Qq]f/+-Z#8;7*5'mmW&9[)O`,q xlwrԟP fm";vHH+IaOM1g"/ۏ?RaqcQSJoCi.&2%\%LHƭG ٰ=VNm s_Mr>)wl>vWXHkh(*@i!$:jm.ڔRUXyN$ z*.X|Oa'OH(Nven$[Ou&2L)o[BB8l>ɭ'jjsk.99NttHvMpo CeX@B@ގHH:;J]?o<ܢKf-:N)%c k6=AT\nƞt5caGn^;l[VTyCֹm.kSonxUkѠ@?|-qP&&-ÏDݢ2؇Uc5HJ|y{n˧wISaӐ损6:Ȅ$#QwL&u>f@w.R>؜jSe.6XYüЁR|py 4POJ$HVu.:$oQhU o>"ޱ:2jSϧfξ *-QUTQEDT%-M-UHLqеJp(e4 *s=Qls\yWY]PpBuRa4ڕOlA W~یiƳDUu*-:!+ud>u%ݙθ[7njR!hC.MAV@* Nn- '@\ٷL 2[e*F,v̔$g,̴eeŒN(>5B'Bxf{2[n-Qҝ䞷p;PwGvvCmͻ-md85ktnwy̮v*۳gP~R9$)PQ+Jxy#(lfdw0ХuR;Ʊ ٣o]ayqqoBDs co2Ԉtqm>$re v}Eb#H,qjlZ,8jJP:nOۻێ8m([gm'QwysVm.& 2I)f X,u1L;|sc)%HTO nr..z\Oċ4ɵf(Q[4lF{R'y|Obg:|yڕ8VohrШyځAE+Ʊ9wu;[O#|-ּTQ}|dm ~)j;#>4l]}DJ[pv#-O-V~<=ݺH_KTB:qOC0!͖VRE~Wמwu67Ӷ*Cn9c cdMn-p^OV5p-v|N ϸjT{+E*m|ҦbW|gi3oJ_71'wկo__O$YZ뛎 p1E\d"Ec8;xD3o$C#j>ӘЩ6:!$$j7ȱw\ LiQkicBw׍cZЁ/Ҙ%DT3MG+#_!- ];aO?Gue-Bc\Rn^dIR|u+7+JѹB76Tק5p^سy b_k+#9!trŹnj< 5UBk2;X}9RFΝ4c-#brʋ0)Nr+(({Fk%ch|W8f*>wZA#1ۻ*p!L91pWt븑O{vsw u4d2@J5<>4z0]ԛ$ڭ w^ Ixv罯VQDbHpӍWTv~d4]h෿!@giX?U,3h"ݧ#)i-88S8V˒2,+@9wO^lDG[BG폯,s!cN80=ۢ[dSnV6L[n*ӉGXXuͪ8f2JF8xuTy$IbY~sr4 ˁ:71$- B"}]OYEkk!KgQ ⏍n$Z/d3#7jc,89R{m !H==Յ)CX'>|74y/rfg+Qy wS¤'Ö|ݪ{va\f^rtĻrBSǓ*[<9$jy-*bsʉ9M%,8;e6\q{ަ׭in[:>sIڹ=? MXށ?fe[҃\Ϭ>$'NQ+p ~nؕF. k?RVpkoK3k?UUb2M.tؙ>c*f@BVLzwŮԏ]-~mn>!eN8)#mnO7wmCZ4*iHåU0$x`\ Wڸ±H)`Yk;O&>D0:*{K7M KrNßBOЩ!\zvc?x7jOI][U5Y~tÙkV]t? ?5MRd۳v2c!֮M>iM'7NxjY&6nZw+lt%m+S6_[#Y>(gIf8Ybkhe}escN&%2IW$ <9)? nwFcǦ O::J9+eء6!|IJۙ% "ӕl٤Mt=O5NF߬Wo.nFn (":8s~N۵^]iR8U'\_Ie5b-V(M-GNiZ;M!/e8IknV9QfRl{V]v?18QlQ!ARXxz1rGM#~d:c&YǎO»eW"v w.O:9&F.?R\X?s;6moqY،.8 YHs|lX[k@wg n!~gh{esٶ:Z ,{ڏDiʪXxBIZ_m*cP/݋-YO";8p{DZ7k!(Ů B7r|syAa6&mJ$؅\rS70 h>OU3wrjWdcV-:چud;Q+}^g-0W h/޾]2=F\Y-`p?U*@{O&. C~v!q:P#"[ms /kMFy/k#_rW|[67܈yB66 ŧe+ɀ*|QA[g1Q7KcJ)ƧrPH#o#Ť",<~_ (R[SKNb׬m\"}KH<9Dg+&cѣ-v@φsyGޯ4~qleM(r|[żn q"SIm)q\#A/DպSl[m;9o4eHZyi1#Hiv*Ñx*4*-^T28x)êkqK36ӓZՇ/3<)ʴ'>౪_x6p[ SpnS̎wnQ$l$˞e%H -#N#C(ѧ6-⽇O6Fs،pv$ IgcڟvUhqOI^$r[ia7VeGT*>/cnEcܓe'%HRBxs$wke$њ$CmS8n O2EV| sZtt Mc'_uK!l_&x;ާjZU2V J<+#heԓHes0_L;=## Jdu~:%\ YVNlʀ}Zq6jS$֏tS^'d-]`!VI>MޝʥݪB"ulTA44NuLC/Xmt};atTprzH5m_ ة麲>ϊp7tE$$:$wj&#TudP2DÜѯWOW `{K6b?ω4q湸U,}>[ h,W"`\SIqN.1؂ ui:FtI;mVj%4* }4н.Wo ?1yB6 xVKKWG6uf=+F5= bHw y!1nG aНBЈ68sL5Ŝ'k#/w^Z19=K[_>e?jb|ڄ54byr[B Ht6Ucs\IP< 2Nnr {O%hcu|f!'kn j<@&Iݯg*ߗ^stŻHu;K|n?5<1۔5n%CYzJXpvŲU]Z֙+{F2ȣNηqz~r7J=G֜ɨkg)]kU$ٚ/\/b4Xxx];d@& 3"!fG_ϵx4z^Guو\}PG*+m$s̤iit}zLb|ܤ_mT&o97؛dg` +Wy\Y|2vjIJOVĒ>=di%wxrj<*'nW#YaMTfŅ^?5VO~ZG ;I2<ru "(HגKZZ-N^rE(("("*uy+TZ1BH!5v6 TjЀATQXז=իGz[q{)P:) {kwUy kL_nK~Ғi6Xbj[Y~9϶O:z^Ubr:nK_gFÒC9 [yz&YD-X0ϴhŽt4yKPS%)s?sLυѿyGkk2y$솯v7Ջ.w'*m*sڤy[.%68n?qdZ7s^JY<(^ ktʶ}l͑6+Ht!oCCǂsTmkn\Kz>cPFwNH냺©'iw'|ǎ)A,y3^^0]:KE7ڵݣ4k ן@F$9'%`:~їgaia+d申_Ꜫsaon/Pq9ۖM㶘7FP97n~kBen/o}(8l{{לV}lTG,הn=0}~W_Pɼ2v}>?RM ^<==^oiO "LkdrUq(u ]5nmWxR <[Hղ5'{c̷aV'̳[9~ l*=iYk9]|Š:<3Z;5WκZD!9 v;eA,jW]׎)=l)gmԲnjXn6Ƕ{FmQy>UC0n5~#V[u-+~D-p=:.w'*$|k^w{w9U$~o ՚ӅR!$ۃ@uP޼ص室UGuZ6OWQPJ= 64{r_WIo?zYƒge82Ф[G^ѯ%y" ENҹ휂80\[ݡ~"IP;l38mw0,׹|K!ګxecsrk^{tc\km2FJKOp߭f-n~0@/Bԫ[+-j*-A:{k-tZ$d L;EtF[|l:V e{*D Rtm#Pw cu`= T{=o$elE1mojdPnTJX6 8y=i*'#2nGe 5x?c+}3q-" ( %Z+H4@|2M?.F۰~H|=jNjua7$F^8鯙ƨ!ZV__+-7aGO?+E:冓90jnNs|(oUet}Z;k^nB~Euoljخ>خ{w Կh[ל´ -BUoZmzfQ {Hn[im7V[o '%s闞ܓP9wY׵Tegl,Qo;N7 7hj3> ]Tu tq9lrUq(<]?.Æ;/5F'xa6 )v5mCRw-LqF\Χ9СN}Q/)^G3h*q?o?\cȣ7c6Ks/DGԫ~"# l Ktp?3ΎOnOWJ"lLi~m293Ve9HG)vۉU;{CX"4$림rI/Oʢn^:e;L?h//l]ZQu}7O.@ĭdSLNj5߯;AY)#V49XWGl\ihN?~JBU0Oc9ѴK[%FڟJh-IS*ljIc]XLoF>k7њ*){;E]"uM;Krw$*~ۆ+~tMr7k@;fdM) vl¹ 2m!Py5ώz~W(Sf0u]t|PxC@bڱsKgA<+e(oC]#qLY6V ( Rw aȦwSxy?8QtZqї@<\oEÔ穿{ӡw|mXJW_P/h|SfsVj[MC ( W&s\KVN<\${w_3ǟhSwTֲ71<;W1oGꔨ">z^<[')=Df"ԪuY"WP{m7H=(y+𦪟PO$s {彫-:TR q%q:Ҩqn?w{UUJ?:~lkUs] Jxֹ6j`vlFe4ޙMw樜mu Mm{g(WGlPi=q"VݔG%^% CZt'QJI:jnNPN睛nx}_cJ6`EHjxq+oEkMś{ltJo> (?ĎAw9Ud9y V(EQY,S$7TZy$ɼ%*-QUTQEDQEDTWW*:vʨEUEQDEN>:2jSϧfξ *-QUTQEDT%-M-UHX.+m4JMIs\c&LKSjXGhP$KiQ#AÏZ} gPqm$Pq#5Y8us֖ФFt%T)y5"/le4]CJ ni4l*r lذvId2+fMd9"Kb70loTuӸHy.9tldv&K!8ˍhX7]Q=BE' Sg}kiikTVn)I$hu+ϲ(EsZ @q{)(vnGӊHy%NC y}+KNPuu7΀V5&/zùuY&^*i* *PGhIW?mDNlCc}ԤQ*4fE2ZZ %ĤѰ0/*hj7W PWj߬߀cNmJ(`ʟZXٛ>t1M>0v̱rhɏma[RWT廳M~Yψ94 Œ?&7j82TX4GSR!phζJ.6O Χ2%}97OaDRݭMϼxkM}XO~Y-D@5!JU%*Z~;1U☢GQr$onͨ)u囂>5P؈ߔh me߾NJrUm$o~OQ퇝pDN"y&iMW3DϾ*s>hmG*Ѥm|vjHg_ECl(lϖ x ӮrH{}F*u٬F?u ꜧb߀k1ߚk2q5tnYƸw-(VImѦBDl_+Mj8XHo#vqgv \z=KvN;_b|^i~kږ+>:~|Wws% *Ɨu8ϟT/$]ifY|ǺWe{#&pe{oi|u$+)Ɵlɉ^4⽑+_6_F@yHª OvOC?*UdH_?=*"čܜp@p?==緶un bUf<~\fMgcu;{ꬔi]bXW,Ӟ4;btnfE1р1/ƾuF$7\qXĊ kݴ?bMsk 2q<񤑯Jo6o{U=fc%=g L[NxqW㪆Ɠso4*m}vn[>ӕOLIִG;o|ܬ<1'b{LZ3eovοʤ=o)W>mWkכI#[tȟR,u+TmFـl~*E^ّ zKdpKi* cjwWE\߉$ 'qvs~ftXn-BL;C_-x0+? {jlG;6-_l#WC'g {h)g~YMNm)N˜/fIå~Y;qoӹqh4;,M:]z}*}Hy^ul]:]q>xSג?/Ǡ𖨜f )<8t}˝[Fah*ZFu4-kn¾׊CX>vF$-Z=|+pO{d-ҵTS 1;%dYw?sSr|_m&.jOf|6(t#V0{OKVfM>?h"?k 5t^JSBC,ETo3.оVﶩ:~&OʦEn󱻆^>Qt0 ++5# = jj&b=ri0~35Hn-ǚd);Nw &&gݟuzWCU [F/"׸6 z[4}yDWҎLbq k"?;9yBX̸g $ğnfMcJO\2|>Se{2WS|U󲳬UJu3;oO'vNi**SP t~gR>f8t \Qu^.6)Jtp=^YY<uKb%w_QR6F4cuto>|'ER6P4s_~㩾m7t:*WS~@%<>vAVNJ3XɛlN $'l?}l3˘[Q@H9Z?Ho#R/n?Ho#UY$$4U l)W-m:jKU X6b4vFGfZJ07H$o$z"1@8"[aGR7@Ӊӏ5c9Y$ Ù4O`rdk@iV`Y]LxQY% ӔUɵړ N&Ƭ[*v|x Y̔v;  w5Pqk3;DtHc؍Cai*Y:üikX/6"; 6[NeehZV@@ 㦊e8W:ˋC^1!$'EoEӈ'TF="LJ5%В++XRRBH$ ltc،+uمjh(OS*Ug`d̚؀r9$_P~on0fI&=.;qU:]nMW%Mڍw[Osj dVF>ì۶nJqÏ&)u$jS;n\' g+eÅ;TwUvWrçl*Ɏ2k 5HzDiZInq{qmCҝ8Ȼ~ʘ9^'-j;2 %Zt>g"oٛm沝c&rҤXղ3 S1R w@w {B8s[lw;-nc)}.ICsWyCVh'tWF5x "dQ0hR5)*RNp>f^l-YpF\X$$$H  KN3;uȴ8[[au)X@:þ)V;0V29pJ$h蔤xIJ\Jl\IEN]r@KI n'ĝ4E-Œ#&mL&%:Y"61mĔMt-Y6Ԉ tӞvK>)U Nd H-D[p!*C:)y mlwBPR,v^YWY;[E]Lw cwC+3Pڝ7F1U7׋~sT]t Es&v|N\u(^CNx]W~qwuv ָ*QI#6v3_ )o!1aE xSgdߦ OUA|llf'LfaNJH}M7fѼglHv[} ==ǎ*䄻n{?n7kr(YN@y[6x7{[ɭmt&J W?kcTb]`JS5_KhKpoEwu׺y\>Q6G.MDҥ=:/CRhj% "=khHBlH Ǎ8cZnʝh6Çhu] *+xq[8b(wQ¢xX;6~抅B;b~tMD_f6ߟ2mfᦢ[1?Kg~,zOCMT?n y`O¢;phqJoؠV4gYI3:ݸZǶlg|tew27+_9)Su=2N{S"ӞN;z_wPj.%9!7ip'QSi'X#v['\q?mm yuZ}"}=|?U(i`Q~\)R5χG_ ,;rWƸIpj]S <`sa jQϋOٲ;TsGN9|n;V-پğ૖ƸT>']xvݷ|U īs*7,:'o? UWƛJTOq&vBu5VJkcW~ZQw{ZS &~4.*,UevΈč3ΚE"OeMb9{k[|\BL޻}?cIye}jh/cTꝲ16$ qz13NW rL q'\J~]6ގc{(̋⨧5ﳝ 7=g;eґK }aI7VS.gE?e']ڏJ~Ȫh]YK*?U5U vqϽ\ S$}/jvz NTZuwlN?%)hsMA-c\n~U  gX-{O-ퟁT/%ݼ{j^im0t;3`͓\NH;!Ndž,k6WqO9y#nH,:%+j+*(V>UmO7|Dؾv4-CPHvu6c\r{%TS'vˡ]xꇲU+4rׇmCO3e4 ?~HOECeW`n1."~M~ b`׮K?Rus?D]N\dw r2ty͋T_\AB|Tslj:r@B;Kɭ{{B>*mO,[V #_4*D)CVo7,z:4cg|UGc'M4U$h_Ԣ@N^>{il73^v_m}1FG.+%y#'7,dk?^,~e>#(t zaxvIϊ*7l^=T,}pnHz"q h'i/̷+:?9/?u+ls*7,:%5_8*[>m'?Q=Ě%_/NjW>,,ǣ"y?k^[7NEz?kW{(|}~l:NGz]UtEA5b mڏ®{ztAPhka3> sxh~ڽf̆6).]4~ aSXϊ@.)/Ow?٬TQtS7[JL~܏X@o%?"B{%Yԑ]_;\|#W>;H"PJugbEV5?}u)Zf&~";jN1>Uo% mq}_g[Q+6muٲuه79cדt;sCjRq0VjqiI0qկ_6w|I@.;GW6)j4zOE|tSvb .@Gri>)P*&F&l?m:HS6c(EN5>\=ʼ;/ ?<8]Tl!8i`x_-{#s*+-;yi:TDnGQ9~vQ!AQB;Hj~z%GT^ʝ1BGдi li ~*gM^cTPwY;ɢ;,[z/]ywKo:2hEUUi&,^?&T4IQKA[ [;D4) @׹VMkvJ RHBtH@:ᬋ7Xe mG?=EΧHߋԨ8+:ڊV MGAN^r1h}qOGaٙX^$A}]وu.[K)aҽ _l<yF&qEqaĩ7/}(B9/%w'@5$9vh}qOZ,"M>a/2)QXA^􀣼[XW7bL6I.E)3FVnVVPj.5]8|.K xlum y4󜛫q!iK[P=Ў "h}qOGaٙէ.1}pD,a)l` kTRkT$ wKw/%ΘM9MaRTiU=pH㮠ke)o93U. Ze)iI'q %4gWh~ &RPۉrriՠ;B IЃJ!~<%:WV*AЍq[&;=S&-ռyK+:4|tDY?fd_\SQmfE?h.fԈpyR.F[y%7@h%=-<½`w)x[yŹ ,JR-NX <7DM=?fd_\SQmfE?-'&mgK#¢SW'c~|H?*vM-NLF5S]j11]o mCZοO;!>y~ yvj1ZUX蒑j6?j9D]7~E?g?(bJA6I~sMr1kB=HDaWϝf EseUU-c;@sz#:ϭ(V ?lXSJ$i䣢/ڒ))⯭v&o _~qёMrWQe+:=QfݑOqhꪩ>$`Q p'gw=mmkDm|vo4O*rƛMi:y>p0qv? S_}guD&MW 52w }ψuQ#(o#QEdه/'\2=51sW8?Ey{\B4OE1b)]3o߀u8B{kƏZKxrjmh;㟳;_{8xN\*hlGlowvn4>1DF ~"[fѽ7Un\!c6QLbr4_cO56d']YLrk-vca?6YAͲ/~ }Ʋso @pDn,}1T+oi?2;*4# Ŧmvnھ]oWL@>J1A': I/H]!X7%YPtbN,{\7"cۥ[:lgL:LO@H_< |$2>3HHm;>l@GӾ¿вa{X 4{U4ι?ZRv4:'g]G65Z5 Vmw#o9Qͤ'e|9MCeRݾc{2'\-:~m~?,cƈ n5ʘ|}=x/939&Kux (UI>z2Ty'l;JYFc')`wdք.Pe /N0iC?^HlrMnpӇ~ȯiYg{^I?C.<ؽOVGE#&9x X=vq EVK5G<[E띜wu:{G'R605[>Vi7fǢz۾*TCIuUT.]buچDyDVm~N{TYuN$fx f^Ƹe~XU_m7h?4pO<̟M@?jIn;*vF&?EV] }zNvW|UD#љOx#NiK뷡n={j% q>>{\ovMEr8;>8Pt݆3A⪞<1=50RwOy*_;gDOqMPsC;Dӆ`}1qjt˓GQE~hhGxVB7tPj<}Jƽ U]w|Iv qG&;;>uE$ \u2lSi$y]t$y|VP.iɔf?qWdO㩮ƻ\liտpA<#?y>;/l~~b/GּU'wٰw|T`C=5*뽑O٤x ;~>=J?r>"y!UR߼e|SQ*B '\=.:2jSϧfξ "EUKKz n Fjn8=wWB5iIrybV VwF8V .曍rv-ɡiZ棂p¶x+*sF\{MHNQE!Ca-ZC%4FP)P{@גKZZ#ʋ%TX쟸+shТYtNO>̅!JuVfd1v[}lF= J gW+ ))ὠ m?qm_WUJ"{aѳwԔ(ԀTOsxt·Yvʼ^y^SB)jOZm*5{l=/^v70~نj)i&{ ĮIf gc0YQEUEQDEQDJ;>񬝛:bkg~vG5;oL_qMEy00o),AyƜHA5.7!%1tŰ췻{҄{rtE6u׊^Pç&?׷C yZ%J<|֩J&Swc y5簹cD%;GPrRz\G卒O:-Osb`sH%;F.6O`ߓbCX Pu7rtp-C:wR:kZzv)ylm˨=}+cң.2P.ҀhԤ~t8k_V0j?em_;x3 {w{U5h1^okK!JVk;N=UMkHp56w{E Φ:x9sJD +RSH$I[' ӹ]X:%h oz(sq!Ь1WQr|7"25T@J6w>5FH;q^7W:ҟJ>]9UHe2f64P=S))IUu t<&Kmh8jV#ß68agUu ]&{8uǴf2cWꉙ"9(RӲXBTR+Kcn$N\߻Z]+㮜NYN2c%m^PIQc OxVfՇwvou; K:|] m+R+T9ף!;zzܶ_noj^/qTn"7K춙!b:*el~Ǹj+䇰.n.ZVa'凬+*xDǵÀbs=U<۞4pORp̨͢NޚreiFqRq:}Zͯks!^GsNFq\e[.O%ml;Y'kmz2?gz00ØqwvF)RCeAq>Ҷ^GK lrݾ^_VR8iϧRV8eJo^'TI:v$U?:.Q.K\GEy =5W>lOUZ9+ӂJ%Ft:㮚W T-lPR [ zENlǰ4ko^][$!qkE¦yip=FMhqwtsm㯪4wvvyn[P@{Fģla1xnuHz^M@Ӟq8B'JWԭ7'M<Λ5s0{Jxɓ.r<ŭuHw?q+O:KC683ĕS77*:'mO8P6rVmIYӎ_9Q[[%ۤrzBպAҼǵ*͔6,9/R-HGk~َ3sofoZJjlYR]g%ןX%uӜi¾0fDKR:qAvzB҇qJ볗%ͺ`0޺eJ"m+5 I ܧڞnz}tutSRݛc VQ7 ?7wӣPVIqlK9_}SBR=h#_7TC nLeϘ҅J!.2駙#^,ziՙ66]P%)pLpxwEN RW`RAIVɭc uQ WHy/#!Q bUe6iR lKBB]XHO Ŏ#d%/"RĪAI įbAE_2:et=Im{po1.qSͻ/x/TxskR+[&3 p*3TShU n !˗* ~jIIJW$xk@/c¸eM;.:<|YgdY. ܙ{@T܇[:IVX\r_RZ#@44ϸ^ާ\.Uԥn,HQ5[$GV[ΞAY2I{]n5jhZfБagQݹBovvoD^RҟZfC ݦjw8pGs@uɯGiȩ_nUP#T-PFtWV&5ݏV'RnI'4jT"g!Kz͓Ʃy dB|ɶ䟗ھ iƣw$ Cqw߶hR+?[] ȿzkݑ]h.`iZ _d.!Yڑqx#~T#g\.6u;r%oȸ)hFW4=kfq ̚ofɅ7ʭI9ӁӞp85/ݛ[=5ֺՃ<]ƸlI!n'E Nxq1zUb2n>AqZ~۳/jFJ/t7(#sr-cW9<[F_W\oVV<ǂu:8ʖ7}YخD,>љ.yvҷ=&5[YqU䶭k#J +K{P nOxL>K=ox,7DuYeIRu#MtT22Զv*!$jF< 5F؎!Oo-gcutuUSIިG32o׶V+q:ojNsI5;-dкpt4cQq[5펜z=Jm]oOSuERڧp;}NEu۞UrHHOWn8t4/9ki">je NzS̉=A$i1<:M0^\npVB]VU()#N)NAܧkvwcžЍOPxrc7iN]f ]HF#^):ӧEu7g/BUK$vKF.}dKa8Q65sScrMuz8u<7tk,PUmٴ;rqG-ê iƹWf_ۈGfMvk@7- ֙'s9I֙+ixs)ѐVyi5iR-8dJre晓Ztu>#ٰ/iMeBp#Ӿ*P:H<KԧZSD `v=uW #S5$>#B[sNqITrA:wB=`zv{ug!tA4:tZݹ~ z1E\%=)CkhږK ҢkD#mWN[']MőuWۺ:D-L$ 8 $+jCyַo7YLCieZ#֬*,n@MxT҅ S3>Pn{s.r\^ņ8|ACqʇ9"m}/4t~U"\%Z/P㦼ASPv.7YcrsmӛJHėKM ֧8G9{]3daEk+\Uj\9E4ۼ@Һ]6bMVNԄ~}O+meڢKVKp7MuH?߭FάW96B)դpӠ na*݅Y -Tx 6VDZ6ql?grh.e5|zn$[AmSYv c!Vo7YQ6goD+VN{Ԧ\,\˯ֵrAАG wZwRO}A~߭+emq-SaHٍifIhqJ} EiuV2ྀڹ KXHooXݓIK[:tЎk:l3]L4kֶRFb yDN/o+Ճdڜjf 8a1ܡtꗇ"ặ.j`:3r[QwTp⑾~щǢ&t[o7Rljīq])9N&w g/G%tVX[|[6}v# :͜,8pMg Ȼ>G+Hv^ K n^6&;eЋ>XJ:eluKm* iICq>Ia#A$MqkcGlij<}WMئSɳ/q J iÀ Ǣ>]LK˟)KXwBjTxsxBmn .>$$ do(=ڂa;ɇ+=d=5e-\ dV*Tu ,<=@-|k-sX2ST8"6 ep+͗pxuq~BQ;߅? ]epUcy Z֥\8th);1I9:Q}`<"nZ}SBT?TwGstWPF,6ioVf_}USg3+iYb;iMnN T+bDTۭSYVAG6 ي/U6GF#kS[Hh:@nm*]\ =S"IyǼ VHܛm q yX P:pQ ^)XKh\PQԐ8+Gu5MhQVgɊIY:j^=O@~ZbD18F1Y2*V)'D']^Cfsߚdh5hۏܬ~Żdwى_$KmZ4O-$9]$2ܱ -2 Xrr M.K$7lV˟Y]D&6z!MhrV%wFVBfbR͆R4!{%ުhk_و1.6t~2#Z'Iʊ9o{ƴUp+w}C y$o`-k|c.Fӭ0W}f$"FwBwSѬo0HY6B M \JOsNq\q :y\HHHzg[4s54n`5[1G 5.lnqԍE4cfolwXڑ:9Ͼ/VdkE8fZ"Y\Iܥ7,/骕lxgC}| _H9x3[&O#|UnrQE:Iy_xKUEגKZZEUEQDEQDEN/>5x2S ϧi_^ *-QUTĈijnkknnJ@Jy>HH!C]SOTwl; -Ml)HNC}nAZ9PP$8O:|vkɪ-N>:2hEUU&&ŏrdu"S-=\n鸭xk<8Y)4'&$: %:/tjjkA59"Դ%Q7xjuM4$&]:z:y) VUOw@EEeO!ޞq! 2PCJh:zN^r>~uon4ɐ7{[2\)W47HS;+PzM0%ź5DaP wRAE҈;}6G`9߲k./&(3Ld CL%|*SSzА;hcBbfx}TKS!|u-7`9߲h![b"mR'm-RDaHuLuFԂPRF $;cˮa."6HʙGSkhn$S6N\9WTxhtv1g˵W&IvzG ion4{_#E;rAmE@H%CQڃsӣv+-j*:']V@3w@kyFkM8 s:?g}ٺľ>ttDslX&DDJr*v*ۏfDʼU tN<[K(aoS=UQEUUQEQE+Ʋvow)m~axN1}5[]oC~0S.7!! ˮKόCA;i nr&U?sMܪ>JǸ@?B[^dVΛO ԰LFHWM(ETuV-[M=fi(IdǘsTjE2<#d%D8ڹ)lk>MKj?+e>+>;䉢٣_^}/C>[ZqJB@WЩMZ#7N+t) :ƿ;tʾvR4%_w8fWrJ`ؚ-բܶ+t1&*%hYBNAI>k*{mKE'Y{IRlk[)a^Eu%I)k>WM#qXdžQDA6@Pv5.gRt%WZZO5R~Nv\mdZ^nRvg`Jq#}%yѺtkvqaQh[x"j}+NaA{m6yx^@(FƵZ9rf!pY#'_U<MZ˺?kn #ve)q7dV.}Nv/"'.wwC}uLi4TaiR>0ˍk-O)ħRӿ!Ԁ8 u~ : k2Hiؚwgtᏻ;nsX@'qJlqG9$">2!5{$+Zy~!gܺ>%]C͉=YT2< d:v9]___j])p11ͣ_r.T;n\c^u/2ҥ[)I5oRx_|,~`Zl $QҽےtT GG}il7PFgte!^WI)f%9~D-^1"Ąi(ǛUI%Pd*>#VMAqX Y4׻%#//9V.7{to=<xO6}*Fpi[̓ HV㦜4ssm{?enN&Xgq%s6s}KͱikNww\cŒ&JS;* ;ێqm.=FYrl$ڝV gC¾^ItgEnWilMw|$Mɝ.q@n)ʎ>hR8a5\cuaCCVh>CF䟹SN-TRoV~INov wkS;mgߧg7kZ}9Y 6O?sP~<)sr __t t[$2R.M|zlݼѧM=6˳kͫ!=+h6 *p~qR ]fɺ!M?JO$S|gyT$ ;$O{ֻ5+nIYCKr@_Zk6Gr9WmĆ܈ϡ '{wlvd-$1HZ, q!F fCj\Z[e{*Zُ+[{[Zkin.q -unQpoeoyDC1[. $Y.lvq^hͣkh>NZQ>G{Gry>@Ͷ-iX8&ȮYW hq܂˨aaH vkWo'ɐQ$]nOKz=wQ]eolWM) k 2{WDUt ŔD]צ.%`2S-L0\tE/*:RBnr4͏^EnaFwxH7TƔC`N +8V0ݲJ[&U~ѐn C 6+7RSmlt}rٰˍk0)䀴Kqn1g\W`Mu 3$tm. nqH \w2 L99G?1Szjc1w.츆ƭ!k8igXS>7pmM՟g+u}<{l1P6zǗmfXcq:9f)s:Tv}D{u7KOE6Vby@1ӽq; qs vh[릺\]Oޯy1u"<CQ3rY/ ?zCn~w׏8Q]{o: p]sFw4?7%rEM8^V}=،9]Ţ3I@ж*Vl;DDiђKm6 @7)p2|uqV$dv ʥ2K1ҝZR5,ƽ6~#N~k,SՋm6bsGwU،]If9johw*z)i:26B{nm8W4ܬޥ-,ڋ!V-iWLOqM$GɏE rV ݑz'J99ʽVerqHoo{xB-C^%QM')H;Fatr} 5Cv:n?:a3;iYl7VӊYKGA@"{$GƇLI-BslkvUT7o{u;#h/ [xy _Y b*:z4BGuΝ57`ak #:~֐*Yq>Ռx}$ h{/;6L=inmȓ[SloC;uMoqy3qe՜_cF֧ǝ@qi* n׏ f!"1>Eu +tm>ω\\6K{Ke3f)=E7ZV')HƮWS\O>4SE<|-Mzm9:܄<7KU!YtF_r͔`F^uv~om_[yӟ#OSO96d;D#3HSb1$-UGa^:/q7%vKVkl6_6}=8/f";CndqjG~(dя}_0W}G*VMF⸤(ZW&]"E& aKQw]Rp6dfX.\gO&4qOuǘr)Pi)?'﯏^Ԛh0G܂Z$:;'<ɰld#ss?=VQx:} y$K.7mmҩ[HA^ fcj\Q/& #B?2 6\B 6%|;g.̶QˈyfcItHdFXɞYg2 Cc2^Nx7զ=pʥ|nc9f-/Qy*vV^ELE6W|Tm(7[곛dIuBOj=Jd,SWZ.#u# L< :Py%.l f ȉsf,"#n]ۄRއOo& e3Wܖt8pO+7/ڻkk#5i`q`!|1O$>m4iK%&!Rۍ$E$(j7W'o-PYq4i_ZleI;7&C ;MƋۛUFD,l@\V(Ǐ:WdkΏHce43#y[]+́qfV]_^f̝ki2Dcu!_RRR j~vyv]"oh| y *OmIacO!"Ph {rk|0wfۍ[h{VM.rrzk{;7TxjF,Rt坖Yы׷JБg9yam#]9e{6b4;M 8ܸIr2&4Ӣ6ZZaHBP4JKݻCQQ&FƱCn  9Z[i:5 Vf(5Ӈ\I@uRXUm~Ě6WGR|M p5_Z.Z) CT8R5Qcx_UY+~E#\~c)%GUǝ"Ej^d,z0U{5ia6h:<-1uޘň>!JYIJvL=|"ƗI G?6Z+a ~*&d,h2Wh)Xs6&!Xr4W޺] ];eJV%yךOkql/RYhF:)|xd&ڏpOܧTdcOf7w?ɹxW]$\g׋1mjCFЧtll{'x*ꊣZ}AYDc- 02[emw.f&(sqJb8%r QHl281ܵ%-0YAl|i]󛹞p<1b g2ӧ=XNs:VDZ)lWfY KN.R91pH {tsإS}~;oӡЂ?U8c]ݨӕd& f>+eZH/c6 MLxHRA8th-f[Em(\˕dȚ $+7,/骕lxgC}|4~ZG ;I2<ru "(HגKZZ-N^rE(("("*uy+TZ`^};JjeTQQkӣK;F=O|USY61y!D*Sk!'Ed :2jSϧfξ "EUZ۵vunV%-)SRyǨtyX!n:Hɏ6AOwRva!s1Cd-7OFoE"yrb)NsOҢ*Hv?zTu6BԞkPA $s:Iy_xKTDui}֍GZvhtv\їZ,U I"TҖ֜h!q:t:)6^e/0,%EnC%RR+R#M5"XnprlW4qkЂ5Jdg4eE? –\SQgiDTBm@k^𯼏h7+B`,H^7e-%줄H.>dsVkTma!w Ӣ[R*J ڋ+;-{؞vիr96*|BP8Mfui}֍X7ޠ]/q:JjjCr 89Y@CI+]Kbb Oq$JeS@NH'A1HYl$b/h/ˈՅjM\ >h=jjNvvi4Xe<* )<}J95-ܙ0̛l7.51Z]st8wUidw,?ѯѿN.fxsʥZBRY ҄Q|vP?/—Vs/Rg@nT*&|Ċh}yX>bE4U QEUEQDEQDJ;>񬝛:bkg~vG5;oL_qME%C)L $@>l(PDsĜDmMs2fG[M=omP4M~op'~(Vl#bWT;p!fˉBIPБꚃ6͕b6funr %p$!A=5K~z^/7# C)@I@#NpzAg fr|SkBz# J#xE# G?mA㤩eU;'fQG 8i8^od嫭.@ʒH`Opԁ[bʍy'WZ.mGt~+Ô]aNe$!*F- W%Nݥs"%+-ޮ~1 [[MapY{]YEˊmp'^:j;W60IjŦ[oJ%==ANkeAFX0yѯ-$/~vVXvIqgz(LdKpܫGg͒j[mc=U(m#)iMN2ɠI:1#~;J-,Y#` ].+N*[+:Z7h^=f勄\.+SMJ pqiR <8N+Bv˕pR[oB vV߶yڠ^G=!*ogܯHkIg2;VZӄwԆ=u*1 R*vy{deײ~Ҷ[m$<4 6m@5@ӭymzљEk;mԆ'M9:Udm\EmTGI[_)-wXj=.ZKJi~I, TQ1RPʘYΝh2iVfq$H&"KÿNq Uo9U661F1RJtk?@8^pe"g6B5߮}V Bb[Qܳ\c;f=%? ^MLwROH:˶Nx_$ߜ>RkҮ5{emYV"ML~C CPHpk0:\gvEdzֺAT"Ojd-,Hx>kl˲BV6p^D.H_hz1ZI kKdϱ/9Dml8M @ss<;smXm˙MWEYd3ɥ7FI:q]\Wlyبe Z i%m8?S)Q?vj]KL{<ii m۫?L^=o}Jt)C| shu;^ܲ/Fq1**4--w5{hv:86Fm7W:+CcWN `9O< tEC6oϙڼF7\)yۨ i=EgjYv}T&di2%%koQ7r^Hq{!X&}2:se:Qm7ؔxlyXS.۳VޱF-p%LD(o@3ޫ-{Xko=]VNsOZl//%6m着H;7E5YḌxN=6ai\%0+yrDpF[P 鮫RGEzv̷͠)ol&"C(Q:wt^8 0ѫ :jSPN#َ:A jJ2[#-d)ikQq4\@I ͧ^~GK<"{[ P·POS5L.=9>6vl$Yז~ קp?i7l˞Y`~ -%mTT85;v[T38-(K8i[xHӽ]?:, ]r lKqTHrqG!X 5Q0'J G5m9#fANۇz譍ݶÜ`q//{|=Lv&*XoD xo:uIv]feJie`9OJBJ@&kcVb6!6 wV–kK,qcGVNahP$MiX- r;4U1Ĵ UOmСQa4epȷdHARuIzk\gn]qعԐʼn y–V:vOhXse\/EPy^#H?q.%Gu\9X;MȲ2*#kVx 5r6]ǕMi&&GɅOH ʾeG^'# -+7خX߲.l>3F]f0Q yzI ѡD e EqfOthڎꢔ;xV.ύ=":K ĩfG*w~5 :cVD^.?|ӮĮ_Ͱ{unF**p6]G:JFp߮9bW![g&!$PmKHN}Rj]䅾v٢li6lznmv:KQ1u|FjwT*bvӖ*6yN]5)SsǞiy;4 MKd5*b~A Dx][m-.gDj%O)j)`=E*89OC([Hl\*;lyɛȬašsp'S#(" =i_&JQiKOPoӨleڳFX0DfSЄ#t{B8 z^ĎWֱ\}G-򎶶ըxUomO8#د|KsR(-o8$uROFm[)aa&*[J{Sz JKzzUVؼ SgO@8s%~{u±|JCWhv #WY\ߜӵ{3n!s!-KioDR o6A ؠc#+Nj1/C}zd֯ Ÿ*+KrVΧGԕ%P sbXk$m=Wc ͂kFɶjZEtVZ -eDt$y䋶"<;J5%$#()xwPF0k=iu,Fq͞ya)Й%Mn "[]Fg=]>흃Cq#Q-$7 .޼2u3"X%r:O1 Osn Gfm3&9MТ#CE0m`{T -`n3#HHfש\K6ݤGMf\Жòf,S1ҶGJ='Z%6/?Ԣ6)o^9n*m輒}Tbhpo[I͹fM=jC.Jt9Q./d+|t ln[(Zu) 'je'!Qm+m2۪BT{XHe1 *9 ;^32mvXyG =nJN}^4ֲvA@D%|['Zm: qHVt^rHC^HjQZFMZB: ITkKd6m&e6iw&݆ie9RB<3d\ucVÎAנV}`\[mȍl24䐶OJe*=Ha gaQ+<>ԑԳg|Q-$m1r.ee&Im 8ӊNOk Eyv㙢M!kr2:S %%wRwJ[tKG[. Gt>vYĹ zhWhsZuM{*>]5C6lYG.eۅj[>0=-Ӹ{2nC790 BT^+,?ӽ2W=[,lj-)-ʶ](WG[ږӾwlI 03=iԼΨ&t!ƭo4iS.*p4 G5}c/nDm ܶlO%e)S| lϱJ$DSUqV~fN7'$2׿ype\wc+prn0џn) \C±[cKmTb!?h;{ΣM:5g?1ݿMy6쳣w7Pq{,r$ (tj" t1$:ܤqf-l,.Gfne0JTSthH$wn2:j!6Q ږUNcvzd43qןu Rm/YVg)tOJn{FXA1Tzھe7;ݪn[AEeO@: x]"W)u۟y2TҖ˥<84计2YGN8-n(}A<236Mw/qu1L,vbnؑdj:aƽ^ zy.vԆ97pgrJ#%]'w]ar}.!DZMPIqNQڲY r oRy(HEhC,f_c~rD/;]lN~d6v,.znS%EVfb_>+|Z0 TUǁ<;ƻ'lJ6;!%),NbЦ4e8- f8P>5 \`\oˡ%:3DfA%j*s]ŸﶫtAe2hHxJ= IIqvfBm:B^ҚM["65DibBK8Ta2+iYq鬝C\a-lZ9$9Fv@RSÁ.SyMVdr!x** [4-զ,?sGpmU{3g+I8؋.:#dV#E@'{]@n6!gYfB&x<4 6m@5@;{~zEk7m(8m]\z8Ueu.^Eii%l+:Ev+K.ZKTiͦfeӎ)3Rbo'\:p,ɘ6ƐPOeF"4\S_cX2:ccjLr5 iQ꒡OMe}6ӟVԹ/#P޽kH%b.\x.A ˙mk.lN?", rT4Cy:sx x)]'gs~>]2'TTy睻ڶ.2D>Q!,h qE$xV2ky64KqV~gN. AY{pLy]jW5-WZ.R[Yԙ:ތI?@WC|GKeZ\tY[-ݧDZjsQȈ(KlrouMt'Yvcڭ:87yQx=5x+[Nٱ-6+DL:2j(QEUWʐy@hh"H¶?zLiնZҞkRH sF#:Iy_xKUG]/ܘޔuiɍ[l*:UWm::PTM6wwBߡ"Zm1x<Ӎ9<0ҔRhp} u MDZm?_1(Ҽv)LFp“!-@Ҥ;GTR8:Rum &7vrczU"ln[gI3zD$re v}Eb#H,qjlZ,8jJP:njf׎D.7r]m*2 #<#p HiYoy5_X~^͋vj2.̀^ܯTg9x͓sfcܯiF'N>~P7$SM+l[hQEUEQDEQDJ;>񬝛:bkg~vG5;oL_qME([gMWH~}=^kJ3&+QZ?$?Q%\v~٥qH6յ`7V%+Jty]UPq0TԦëWo/RI;FeBܸm9B!rJ:N>KA|%StqBc mF/ U:@zt>*۲- \ƭ7EGSѾMӶFȲSlУD]uiԏ_~_'}m;#W6 o,}!nWb9ò澨տkRmzUeʻ]= dê{9O+>kenuZʊzf>A]{~#8ga4TϼGqN knɯd~75Tm97s㻥 }j!\KXB4G:|w~GG[Vbt.&օ-nZ㮝BxV<9x;h:JT$iIXf[N\[TG#;ei)z+ukyK;*G, H]GLlmw]kȁ~N̻q{4tUL,o6^ƭ1u[  H;PVmJh["6u[J7=J?XWO{?/~ eGXV6ƷAmGam]2n62齽?iH]ަm $jԤ~iڎ[hm=npjB=VD~A5>~.k#}܈ vXȵBq0=&3myۋuAK $7HgfYW\[lt8\x/$88VD5R(w~${>!,{Mߝ>X˯(iT.Fݥ6"  6I\Tn9mW[V.9UhC 0~rQ?+GJi*[,1hNэ[pJ xƣ-N^v~,nfCHp_(p++fIȭn ̻ǣ 9V%׻GjsW{k(m;C0A+QE{Q71}-nJiSv-*tr{uJuIT+E~Sm5n;GKu+mO!`y}N|? FyEq WxZy}ȹ:.-[K5 E$9t7hwzޚExڡe)gGΕǸ\#Uڶ]c<;nt,=el)Dj=?j ?x{R+RMq7aqȏ|W p^^paЍ.yw&,a-pt#.-Vu&,"e?8}+CQ5Qmv&Yxa/ZlsӨT oYUإ6QsJ\C% -((ۜR~wv3u5iAB^W̲ҤVr>B PTEn#өV }ڢV)`T] 8<)] @[fdFBPlnj{n%VF5VqFKGaTKb"?y["÷MA`Lm.;E)Oo-^ "VةgMخ2Uή@e? d~ϸ^8-4{Ӛb%_,Gx1N 7l7\6DoX`n7e%<ǘj7o4/lOiW?hilK{ȊMԲxۚqvluV=Tw;k#שV/LnuX3&8ߓrqZ ؘ^D?7R,vq-N1mw"+KSa ]򻔘9"Bhsǟ)p&"25|HOx>ؗir91LcЫ "Rre vߪƾm,nAyv՛ ڝPR ;nOg~VC_᪼ &x"k\4^o:Dp>kp[o/y^@l͵VHT$}[m#edQc$.͞Q97Ts ,(n?3Ϟ?5t& Pu).zt ّm.]sR1{by4%kJv)NJ,V#-A.&fJ|2`̯VҴ56O"_GG> 5q/ۅm,[..7my)S[*y,sH hN_Deql[i 'W)7ifk/RH:=b\SRNҹ96ӨOrFՒ۶z\w WN!]Ϭ+.nrhXScp8Jm.up㿹qO!ZAԷ8|mu].ä%.vfMwNjN߳G#ZR'WG7'+ olTu?(V_R\-^߄m)qgiozauLB]gr?rVnEo/jAt7#ny`zXܲv#V6L$Ju\k\ z<|? P]Oi-f[}n ~.n'MXvo3U+oM%d 'EzŃ5- 5ɳKpPYS,~}KiЮ,YSKCЭxM#˲5Ep蜱LN^c 8FPs߷Z=m R(Q &e'PG<%D&=Uc-q7x3P`&&^͋pVOAV{mZI^[s#iZXY+?LFGu9Y_;'M Id%)^5&>,Q?+QV%I:z: {7H4*P9KW L ▽k+HNW|"]d.q[d@Ů>X+m #DbpXCmG$[FB&Ţ#L]AJtO[Ils'JWޗ˯p~K])l[G>Ğf$)v^۳_.ns*Á!~[^rzyaGE6kR2Hr![JRU2Ӱ4O=3^mQv#w&IYaT/^<7wΞkOblC_}UҽAݒp X ivRG1}g1Vm]q޵U[MDѼntW?Ǯkum1bXͱЙa{nsL^VҴR2JhK;mF竏# ϳZ5 >vit[\JciǸO~M:v"uV)q\-n;o4CLJ7RC,dӮ?oQX"h30;.׿V#xJ*X ^skNy"X}σ+5?VGwK-F5mGYd8PTCV·YЩ{(Iq^%h-X>{ET/WtU ab8ݵ5ɥźAWxH[<[#'O]]X=azqHHզۇiEwhfk[K~%n ð r-;ʫYvgE$mE;X>kzz+gsھR,zn0VӁ#W&i6G}ʳ.?_V6(\Yp~@ ([*n%eCztL-1kz+!!. 7KᛕT9 w&YCmǛD^Oi~1KV<־ݠej S]H WڮQ " :Q\<{nt[Gnmc-PKa ۜD5QnuZGI;I}|q}rJ9savuؗoYWĻo]!K{@BR7}Jܶ6 YD0 (t #WvauU>d+2*C0;^5iz}+ET&|7h|E!R9wGB!,T\#09>2Bٗk!~҃Z= GЩ_Umn_>߁ZʊZ_.C0p {nOaO2~g84-n'Ne9i4iluIRFxL@f v)jy^YĔܧ[[T$m5ޏu|+X F/N\grHmHuP⊁nB8wJ4R-eK S{ǟ<V5x2S ϧi_^ *-QUTQEDT=ٯ&:|vkɨEUEQDEO ޙqkug6Ƭ[R'*3ڹ8t!%׫`Oj<ւNmvXXY ([Ln=̴p(CT/t)ׁk{7<.;_(ʕKj)Iw GqDwkKpɇĐK $;p-(mHJN)U=lw.d˞ph2->htR1.(lfdw0ХuR;Ʊ ٣o]ayqqoBijT!4 Bya+SN+!9:X׬dվeKXķⴷSۀvnDݶqciBݎ#8n =m͠Ӛmu0$XQIK1\@')LM疧bNمաr@)* Rîj7lVClTt̸UuiŁϦ:ˆ3W nNGJ_"F@Jf^$+颇Yoy5_X~^Ήvjr3y+fx|esnWz LhIT+vGi`?Wd~v骪dQEUEQDEQDJ;>񬝛:bkg~vG5;oL_qME([gMW~H9H1Ν?[ͦ|D?{+I~7QB.s8u6k|-%!CuĆӢcRVXc6 >*Mc:"{)5B6DOl:$+SpC, ukNu`;+vϛo5XFN~7m>N^>Y坠ϗ-bA1p]r(R=Ѻxn:+Wq3ZcXRw(pI?6h'z 6 #2 g[f}6Y=%c#KsPXZԔw?TuԪbCuSyXOێ ?{C\4΋ ^5fhIqE,+sq]TwOuDwn-JI BfrӋ\9I~?DFH}iVl2\ѾWXTqE+: 4Nn.Ic :,)8VM4cQ]Rz+߉ 7 {kk\VS\:ww>c=Ӡ KqsbI1Xic)2BRnbխ1lTAn2e!>aĐÜU?cKonG+efh t}zV.-"5xo=9d]J_ 7O GG~Am868xo-%#Ѯ?<Fxx.j4u4 $4n]UŖlg** v=2CYJG,T6O fo7Ov:Cc-A~@.AѢpσmR7!'z;Evl]J_Ӣ^tēmaw1H-淡oN06׮2p۔x[-'D uQ&dsG-ſpii2%NzkΫ.7\'cg,tPZ6Z&kdt<-bCuS;6 XV/I*$k\T._y[c􁎙Qp[<,-"m r%IHϠQ.e'-jfO :Wy& giK⥏]RܖZq6"gٳl7uQ iǢN)= V=shx}MÈZj8=Hv|52s58>A)[ߨ1,8൏LvYqeR;gm)P8s4Oc: Vy.E97=J5ic& >3GA@ϢVFI;-Ұ<$\h\J85ԥttw藃m)#+*tע+nz[nϳf[l?2udNQ.[SC aCICswJt1|V3o I X*_$猁Ua\vAuH qn)GS%TO͇3s˪6 hV/I*$Ҟyf6+uBnRD8W$z>Ja.MǗY+SNi$Xr rNftĉo6x<e"86f^/M Iz;g7 3,aUp ERZjy)x yq>h\i؆"]~σmR7!'z;W4˗Wx cA)\=lO.࿟y)&*] |'7³H*7.YCq,Eiℹj*G9g?jy(o-ER6H^i$h7psh\aI5&9YPv7OnD b#gԕW 7  'ONaOͯe5Flz*0kTGz;Kҟv]M.\}m:$2Enr+-00Pr3җ ʴI Ʉm *rkxMƤl #0F|G}u՘կ6Wn7]\G1\@rh)V~b"s~<ғ+gJ]BX5Ӣf~wΈ`prk珍6A-6nWXxV2;Q-'u$o)G0O7eB X%a#8YJ}Ѯ6ao.펟ŏk&PAr4i]j.*Ñ$rJP`Fnn2kHIpm5s(R` t߮ע8]1$}>gcLdl G zt%66[MRPb)G!295$73]untG5m=v>s޽u6?~foEr2 Z^(ĩD'$vQktEm%O963Y5̋!0OK@ RS:y%ƹO^%a:{g,[h )I|K@[QA7o%Ez H1t變> !f4&ӹo5m;$AFt[hoȸaqZl-IBB6%O3@NLZAyftQfG/W~qfLJ;Ko}Dn }!?ldwd-m(sw]Y󙼟м1=0E.W!r,QѴ4h6sdh\I5&?)YvK?T+ii^)uʴPfe۽.S\7"jܴ@ ~($4džvك4?rfhB;5bʱELD;ձ˷z]8ݳ6Vƭm.qk^HBoq軫76׮4:lO;nr{-5 RکQޗr⤭n;:&@ zU4)6y(Aj[$ e8˵^ E%Ij.Vըnx鮇.w'*i^|5Umfe۽.SG]O;UE[+eV6uE#mO%6 Ԥ I8Cɢ*n >w#kM )xjǴO;TrUE1BIe۽.SG]O;UE[+d͎ݖf%[CdAljӠ71mXyE1+d}uBH*'{oXOHF~FV*59O]O;T| d,y+zHq;Ol8M4;&c?|UqL,}Uk,3H kIPU.w'*\ z2?s,,wܟwo7g*HqiUy.< +tsvHӕPOG cluWxxߖ]O;U9;:TVʀUqIއ_8FD7C:u񮛮am~B.˷z],wܟw V1^ue]ՆGPޅ:~T;6]]!uLBJكw׈NB74~د[!ǾaGިkm%5n#Y߷@ӏ =Tju|B8ṿ!}EK7ԒE$5EW<ޗrÇ૪@nNYvK?VlCĴ96.=Qs]l 8 =^;2-{`1| I$xtW߆-?\Wƙg*sSe۽.SG]O;UE[+e2qmw6T]Zޅ:Tgm)ǡ9c^[QwJكvLj:1 v8t]P+W|>OYvK?T;5ż>ͪ4fDVݩVJ$?Oo<.% < r/Y35 x\9.w'*itͿo{TV):2j(QEUQEQS$C,V\}m%KZH$U^I/9ko j.ArF*!ƥ8ہZj#)?(B54bʵ)ZTdlr)l >$Pq#5Ӎٍ$,|'aoxH*HT:E}cf2qD89$ oiϧj"TYpkl9J{-7IH :A Zt#nȕ~cc=,iSqжTc(Fh4V衭g5bSjυdñLhPS骆Gs{]#Em;IR$$ DXY{IfCً1o~`mI%lذvId2+fMd9"Kb70loTuӸHy.9tldv&K!8ˍhX7]Q=C?5ۯx00-Ɋe惝I@;۳!=&vrăCNG=B,WӊHy%NC y}+KNPuu7΀V5&/zùuY&^*i* *PGhIW?mLM;3r\SdÎ]BzT5kZFa*p*^!VohG~"ms\cCHۘSrZc{m[ D9fڼ٪U)'f#Obƭ5٠&zxuYh"(m"+ܕQ\툎c[jʹ/\rUG1}5oPV%tQUdqlG<Ei,4uws<di|íg*sXUMw>G*N`e'JTT.?m9UƢ9Vcd>Vd'-\M3F-nڦBR? }?Ho#WUy!2+B7i'66iOzȿTݲqQ'ܙyy(Y"{n^.56أ{xʅBAίtU<>|dŇe'F?.M3\T?* (Y(ukٿ<>l toT5|ʪǼϘ&ʙkm>MS*khU+bW?]UjW! ܪQEUS- bZGl؈"?]dkӧ܇51!w?]NjsU:(!v`Gr+UƟi5ۜÍ8=lP벜pn$#, V#WCvT6_5;RVF|D3ND>;/~Z ;1߼ Sܼ.FCfxGTd#֒*EUUs~m6B~lAX@m&F~jB,(Y"??r^]\| ̛"*m!;#{kuZ\ 7&TEGKWU1V d:e{CY?PܴBQEd\tOOt[/h -qe+cvekg߼ bEEPjīME?D?jCTpk-O$#lS?O4@5>I 8~ڼ2OND_:۷xCu+$t]KO:۷Cu/>.94EUUK3_wÓEwY;ɢ_vlxgCUy/m_YYG腯$rʭԓ'>sg*]pB(dy$ɼ%%-M-TQQh("("XNҿUEӴUE(("*uTZg};5udQQhMX;~Lim%!擼v+M,iR'u )ԁs]t˩גKZZ-OcQ^q\Wu !@ DYS2<VIk(D&0eS;ܲ;2FqiU*-7ejgG"IH2t8rmv#SiG̋; ~Ⱦޢ$b[[ 4}n9ݕihrrHi[7+\HVkC.-Ez􄐝P#N j8R{SM?fd_\SVvK(ȓdheK,`n:VW (UAƈLVXYd;m2kbDtQNXt!CU*œ1U'hThvꥺJ5\7j5m=a.]?fd_\SQmfE?KvWrçl*Ɏ2k 5HzDiZInq{qmCҝ8Ȼ~ʘ9^'-j;2 %Zt>gYb-?krL-mwJesRIH M:Y82߃pɔ,\\qhꐷBt @AԵݐčcnqo6sKrJKFD;r1H]WY Y3EIRs4mfE??fd_\SQDw1ѭaEqP"8drRH4 )Ip'dظ6Z+J䀖@ ujO:h4qmfE??fd_\SQo7j?)́)n%Zt Em M(^MtP:wC.vGoۗ R^,v"#0 ']6x p 7$L[krh/g,bcZ--[-n6oqyeZt]9KQEQEQEQEQE-3&+QZ6Q{?*ϻ7[M|D?{+U:{ߨϻQE>!?;ckuZ\?&TD;L>:G%}덿Y 6mtIoW~!o+bMB[ӝ)]qQ?#Sm)7tDI[O$~d?t\ H65F1drDW;LOrcf+ke٧̙?ߏBWlkv#_+aZk9l?m~Q\/X۲|QpAJ{bğڨ_ѩd|ʿ Q9zLWϚx[4IkT? f P&q~o Tg'ŏ EQUU!'ܕQdp mgJjɟ p\~I%Ts&-?(V%_$0z߃Zm<-gr[h~5֛cܫW;XXUzOWNI ”6U|ުSc*+=ʭGȴ5l@xe=d{WUWI8^o[T+!܏_u(ETo?6Hݕ &fy*y Ʋ4۲LNi:EUEFzsjQϝ_?- 6PyX?y_)#a>t?ZsWN6EsV*5+ka"B]#EVK% v(~uǼϘԋ0kz0u<1}m~Z|*:ۘigtJ؞}ݰʩԻbK˿ڨ QEUTn֏R&(??ܬ͸?eV.ž]>qY<ʜQEUT^ru۴QGܷb^tId']q?ߧ-c1',Fʣ~HѩGI~E 0JoٰS'liy~ 'n^u_K fxYiݷ:㟶<8i$lՆ(\<~j CU~&;* 8aM!fQEVHyrnJ>Ӌ] \y$( Zp/k֓vF$;F>t%T?JjO;TrUIqX!5 ]袊dV;2WB>FxW>O^EȮ.>!dTgn:TgnG+pU)d\ '}#h2MOr_}oyd;DI;s~?7^%M7 rveUwn6Q;;ݧ4曨fkwNrh5'|94VڋZ]{ltJo> (?ĎAw9Ud9y V(EQY,S$7TZy$ɼ%*-QUTQEDQEDTWW*:vʨEUE?O rgUeiM!.CFy 7F(EN>:2jSϧfξ "EUZK6ڎ澔u+Kx7)K  #Q;, ncSqaCgC7y]ר0Spj3SwQǓW4$MzH6U[}R5 ¢aS$7TZ"\mޤ6R\U8\A"SDjAD["" FKrrYKnHBd5IJ10- %I6}TB|.u:'?ʋ%TX쟸(fęl]"RgQeN,(]:j(q]q4]kro i97V㍽Bҗȶ{mE~jղ]2QS8Ӿ)@u&{äQ} q%c KfkZZ ctNXwG09.timO LtjGu8 Hb<8H;Ѕ8z MOСaO\3{lP:J:QQl_89=yjĸգJPt#CG8ta Ej+NrTɭuo*@1^gRΫo2;Tfخ={ل $[)˹֋S,7mn?qm_QE~jS\]nuI3H]!.:Vmδ+B7& {<ǬCNISn)aj{mttԯyQc߲~ڿ$ʋ%1_ Jb ۚXumIDK-w]4o("("("("("("(y00o),AyƜHA5,}|D?{+Sɯ_=ݺy,qDX/;+L4@ :ImbEE7۱}HӼru6Ͱ(M9mDmdAti&o!Z2Aߑ苬) HqAk4טƺl-sSZj9wtzfol۳-fᒱNmk&=fw+L!lKiFn 9§Z!aN e~O fZ?}tiq6F's Eo6"u추ͱոNI|2hYַgN`buhUm 17ݦ3;«و%υ)gMUs6ݦx%>W<6OV[ͣh4m6\sekևNi-|k3Mg7C6CF@W_>Q/uvټݜZ,Q_ioHV\k0:@5%f2Zq]TX܈sU=[tʣH{15^[6R펅G=lU@:,}d=Hm VG>EM#s6Z7è0p؋Out$|ˏOUU#,|3- }O:t),V6D.sAjoNݖӈJNtk dҷ?v뱇m ܇~̾^}]mE&G[̎$ISa}CDX8=}Wi>BXtn{RNs mmE|ֺ 2vCTE 5dorMsLȺl^$-7ꗮHȱ%߯Lr e䐖V{|{ՂI\:L.8vV R9i*mF"'8tׇ߹ɿ+&Hvr+;tѴFRvcw+vsV1ѹRxsiz䚂Xַup0* 4!مv[&y_NًL/Mqui@R~V'+0ɲ[H%:G:,:i[kxC+]|k}ή}Pݼm]7?Q/~VTN#EOV t[lb)uxiJVw a!δ+tfmߞ f/y湾hvݏufW7iB^L:iQؼ\7YnVH3UNrI:fHXmp/YqSNژxmswWUck;fDŽ>B R7P䦛_sVdSmSS2-*ZjUN:kӠGSۗ>u`B§hs~w>[OEv;]lm].oU<r k=M-h![>f.6`8t8f+]]ڎ3wests}wv|?6f?\ƪ\ lE~"I[ĸYH6UDZ/Y5jaɒ{;5=Av]0?oO:pQկڭ{|̾BJ˲RTtCߥm=)3 žnķPj=5גHߔ{[Z>(]a~Z.yd09 5?jr#d D1ޛRVH9vnsÍ_o2^jLQ I!`iǡ^sKM\[Z;+f) \ iUk=eMZaʗj7}"*^ -[sB4*Wxph,Kݓd\*TFj8i\QP.lu]+DwIhӘ k;=j*;D=gWh6Baԩ*:du i ˭Ħ4[J%onxK ]eFXFϼ.c~}6ܼ*E{BChDy<\!ô׻?k .h"FO֮Sٺh:7>S\sEt8 Xk4o*y OM0O?{ڠ1_$r=ͯ?4jRnmԂ{09nuj[ B䊖SKם:$@ˋ{[cĴ9]Ʉ4tXV'Zm~ɲEL:q0ӡjohd=H$uoQ.NmkpJ>paqOU<<mRGLᨎko-I݊do\\[RBծpƱ  p=1'8ј ^R_M=tQ#iZTV0Jƽx%;4``-czzq~#c]$d%yȁ75uǍB1=bjhm o%&#N!) I&+f?vCŔ5-;Nj?ϦYQIu93# J԰԰HNp]Y̟!\-8S7AAzمNk]QSC!Fw)]McNƾw55 ×& ko5;*U_ˏ[\sڎ¨{Gm;0aFi$j'Q讬4"帮ZJ$l?>z*N5?.q#rMmKMЀBμ8&Ycqew YKwrԧ:9ʔA"fc3ZߥK_Iu]Gf'ݱoWsTzۙ\YEHuhQ% Qp6t ^IbrM{YJDgMHpeismΫ0Yua^}:z؞cpZɲS?$%8p+r=2d s$m;֪O6>hG^]̖eVž܏M~kbM/Honc&f Ŕ\YDPP`@{C$rdun踪eo{@H,N@cq[ɲ>7H>9 M.mfHK ZtöHgBmZ}"/`9pF~{ܕq?S~|ϘJovl(][鑫; 8=M1bq~v(6q_ $j72GJ#$xnqU4Npv@?Q$P?"2X,r[[6BY0` kxÏj=!&&GutHi#|r]+R<eÇUy,!ٲj4Bi{~NZ/Lyո~JCۯ<[%e:srؖujvOP3xr0N:]e4.ioeYuFfqw]r~?J؈BŻˈٺh)H<9tLF%DC ~wm'q)WVSPK3\4&R!RxiM1vL'\.-kCIO?6kwNrhl-y{N3{f/~[ԍp4W4:+ۅiU \_uy/mV ~:j]gޟgwB9y VIH9x3[\QEdEN^rQju&(QEUQEQEQS ϧi_^ WW*EZ +?[9=VpKIn 7{${u>K;o~]!ք揥[ $I~u/w\7&1%JS-qڐ3wV5WXWVV"l3p2d<BlhהH/{vm-ƎrMexmb}ۺSlԻ$ԾS B!Xywf%4Hk}#u:o:AׁQ{on4vm-ƈ/φ%1R;n9CkK|YW ZhS}UQEQEQEQEQEQEQKM~vwiwy;_uDMH1;bNeק}.C^G!n{ 9\ owT5oEc6I][;R$E|nNǏz.)n+o"qLT) N{H?B?8T/ }%!r+X4ֻc֞lnܖ8XА.pij&"36/0hKcD p |2ǾōC2Eoц'US$f]'s7je,~z6:ɎSt{.EQJ.1`*Q^ 'Ԯ϶Uz佴ٶIql (<ǛEe Kp']ڤU8>h$cZjv<) 򴴻6TlVp)Ƽ./#u'fحEcIhnwJ|6+frOZm*7,8i:)ҟ5ͧ ^+v;+>9֘6`ezo!Zts6!q9[#q)'^L#PuMt䡐F=Ms}NКfVkuShJd8^HH \u5zUv7i~dca1,9~Bڥ;%'@[hJqsJ>i0Y1I>(5nmO\. kS,)Uxťo{..He94 yZzؔPe:~+|CJne:w{ ;WJm0K|FIl\D Z#SgP:az|v<.lZiw}6끤ꤠ۹^L\e bnkubeN:Զ͆y!cRxLyNW&xeZ5Z#݉v< enʚ[4V~XxU-cJkOltruu%uSe(Ĩ&R> UwNkJlJ(c c<_ֺJc :eܫo0c&N(r*|$$z˖l)xm`Fu-#@.>WJtV蛚CiW-l;ɧRJ \GoٳyB"r`EѺFBTI ȧ7^G iiksŲ69VW҆KWN"VLOOMZ\w \anRYcNPnzG/#T%@uHqKR m{ w{(1o3men 4bDAER-\S“h7( )BG5)BUQA?{%kq9)Ŷ9ǐZ=dl~nOMW2T"u[JdqHPM7/k?bHJJd_xQHiun)i RSTW:*XW\uOeZCE.僰\mn*tJmXo_?Ԃ{tIV׭D~,S`~:;"*uSY,yle<`i[*䋉Um0y$bR+e;޺b`X?R k0Mۺe:aAk{AUbSyҖTU)'JCc2.WysCuC)['m*gӸji$(tگqgO-\GOIَ;iw^n[&wYoG1%FpڹZPozXܴyok7΀Ki@jPIii'&m9⪙FKaᘎΓ-s +լf!c iն\bT|tfV9,m(}ˍ)פ`Rq>H .2 YdvRr+&.ώ#]փӦ滊H?BWmݎ1p} lo)y\b?nw'G`J904r@*M;i&3q|T-rDpwkVTqf 席T::Iygˁ+2SYZ[2e׆ä){.m.dmM: (*k[G\b2Ic| ڿ)č,{nQm6WmvGln*I~zz9B{u̡}׎*GèձkH_LS sN )QO%)?B n~,-MDe-EWR`K+"w8Onՙy :ԞoaŸhדA;ոrHFNO9z[3me[CCCCiR$k@b8iWփw[Ol⎪QsDZ|еxTLXzni7V(P.9w{NL>b&CSeJ(1mYXxVNж!nc<7R$ݨܮ'x94uC;}U"b3t3U M:ʂ|6Zv$̹/wb8[-%ǸozRe:7p6!Sڷh5.P;-ە $4=Z=NlkiJ #2l_eoܯOe ن2[S3B< 'U [!7iWטR4 J|p]zjalw1%5Fڻj{mi)פ`Se+ؽs)fVζ[y!MZV滊H?B<% 1b1C˲@5av\hV>-tٮC ^j=CMr|,%  zԐSi5Fɯm7WU )64X:ǚqۢnֶB׉HY@ CRp>kp bNK-*}ds 悝>1uk`v+sg[<'#r\ww|6+͉\\*н_LG1i6gnZN_pN/j i: P(x%pu#i~7uw}Ii*sS%JKj %JNO:%gh;إqem*_gy@PCd-;=\ĆIQem-c^ܨbh^oY+Hm}oElaNB%nvGp `EiSºiS;#6H*' H7+\zH[k攑z-].P7iWף>[SI!I<֥+w~*Wx\wVuڸ-V'm7yk?TnuHֺK'm*g6Bwzo!T uu׉@0jjRUǙ{GVe:İZwڴt01ܩhUnqŸcϐΪ% :IC#lZڑaZhXC;]c!}MRD Myؽ b.6\t-Mꔣk-mcKO-Z<[V%xp6oi20 J.5?wx}Ye-^#De)\Uj=kMB-knrUll 5-xZP @.5>#Z:X{K]6vC5Br]-~?&Ge \#SNJǿ[6+tf|m*2Ri:#]{n\N(bc>i'\WbU5,Jִ^,:OjsvoꇢD`<ʴ[{є7{k^aǟP*ԴT]SV>.qʚү,u^NpTsٻِYD!1l.r\()rtn2IUdS7-XU;m w.`i+6whdKmiQ~&(#e$ #d=aLhIGa6I N{ųbKd`AU̧utHjËE`|oyCuK~x 'F7yq!r ݰE<t y`.ߋBZȎlGjЏ^P60[LjᱼձW?:@(M{0$X- ;Lde$hy:k [%콆;RvBwl9Ym,|} =Qx/aGx&E'Jq?5p[i3R{nRnҶC.ms9L7;wlpq* wX F# ver|oZ#1:+= 9S o[3zoWH{b#qdn JZQG>߳G<}A?z{i3 aQmvlaK_:~ p!UP$h7[stj;^Y*9AiZ&\YOm*-Kaeꂤ;o$}|2Ǿ1ZS/e& ?qަ>JlbcS=wd<$8􅻽>.17m{@L/[Y<KDԶ[s+R?&HHuA棏t Q lLo4GTKeS%Vd!)^)RVg@;rG48Y#O7׷+_^i9BpMz}A>ЯfX] \5'bY2"iw -'T(H$v_v+t.,}[uARJIu$[cRKo3<=wfϹn- ċˀC. NS=N/D+BZˡQweۈiu[^⴩Ey6/!~t1dSm7Heh:jx־w'e+s߇:Fܶ6c;hؒHVlT1s¹M\:m)Rt|$B{Tzº.6.qʚү,u^wSm*q9n9{S:[Mn:W5^!v;?5x> |;6KF_oҵ[ğ)'IZYRP$ǎsMxZ6_RtѻMJ9HZ\Sd ̉c<*w[JO(r$E(4Q[^컃SմKe94,ymeM eOx.gJFV\E-p'mJ_䧶 WThvA X'uC;}}P*^]f=$Sӽβ{n^hgC(PcE6%<ڥ'Z eobn )Jd(MK )cXHQ=+WS9l=T:Fim:ܞʅ+fWD4yyflhS2 Ge+KNU!M'C nK3iwיCi$o!ai>k+e&/Qox?B+?!MJ剸2{{۸bv^%Pt#0♔)JCmR5:owt)jnc9bi26nк6ZRy#UԋUJs!>U8>5b8 y16}h>su8{nrkŮZ[Q6~i< m5yIN&\pb9Kj+iWޣS%&7y=5ͧ bW' 9S%wJ|6+VSGxlV}xC{% 쵔R : +LZ0E]Z\lG $n67o*ǵ2^KjJ84*cwFm/^Za)NΛ+GW<<ex bԽA%[b L!Ǝ4Yl$S'[_Uȏ\h |69\\DSSYhwO_+y"*)%GuAڸR]#H4XU`؞#kT<5eIF*S~ڎ.%t} aq# ö5.]{=5MԖR)uHeg:0O|^46bTҰT<-6^o6ƓauGwuTS+\)sr__SiA|% 1﫸1C˲5d1_J;f]s ?JDϾ/VQK3lێl焉 $7I&dg:A}C߆HA,$lo6:;mBڊ[AK PIoV"YN|5E{ӳ__MQhL_6V).)+UkiH׎!2Х!םKаHZH:${:+b]mەKm BԄq^Vlۥ΅2cAmM)jSC[zy$ɼ%XNJێZMj!$bAӠQ n+$Ae۠ Sb;kԮ8ho-*xw@WF]P`Ktk -"o悋iCzui}֍GZvhtEh rc&2!@)ũJthHIFUiȱG3<>%)>@VqZy nScM朣.1\mzFUuf[Rˊj, M tkE+ݵHLHo!1R CJyt.#*eN˻۝Le:p]QZDZW眓3irShFA7rX%1.=9>Ӟ9hi]d/WS!=}SjFqqR΢,0i$ڑj m{w$!D]qN~ "߸}Em;oz+N-h SjA#RQ^egjWwǑn":d( 9I4(W]:2 M6W'}plwK|ys="TW<tMj]zs=}*us݇rOzߌZ'[MvDŽay-tx! u@pN%F71ǔGfd!ldOkCNWQCإ!o&j2e}(W#ͼAe22: "su$F47ŃUl(MsMprۗ&yyVJ)WiMt_vmZmX=FeANҐTT&E'? 1'ָӞ9k6͵ ӝO^FrmA mN0T|ij]psher^3ݧݾr\d"TRjt 4&eg~Hj-w#ܜ2#Ӏ+QAuʶQWu-B[%n>뎔uВOF{Xk޲Ӟ9j!m+iBdK#0Q%u:@ע+.8gN!%wC?m5KegG[<=dR*VJA  yj(MRƩ~yʟZӞ9jѰ?\aL}WBPԈ^:=ѭU^J>!Wl?iC3dV%ˀBj* <Iнegi;͉&lSJ[[RG ui*r:/φiaEfy^KoQyi-uXĄ h: _YvDŵ;˟2)O Y>zjm6"߯۔K[aQ"rkl@(|i^-Źm.bd%N{yCCҳ;]EL:˶NxvNxE` a -a * jAUUdæϗ5tmOK(_ٛg_zjV5(ŤvŜ9 ҦD iA* BP+1.=9>Ӟ9j5/cE};vۡeKFWS vwFMNW(?˛!r!5akӇCbEݸA tsMn+6vkKen8JF SSTy.=9>|k_MGXMؘۅkX. ~`s^n, 8Ĩsp芀@f[֔'Ȍ p5AM۶vʬV(qL9h IiCV.RڬX%6S-NTR5N*_ bIeߎN=(z˔>yV'ƸF^#]ɋJ8z=6ɜHyYHe0AZv*('G 9Q0++l{ͳCsg*RLG ;u+%*u&𖪋S$7QEE*((`^};JjeUXNҿUTZ(({ӳ__MQjuQEE*[I ǖو%$,qm$z7t}2-0q3#HBwF~Nn!^i)>גKZZ-Ol~N8qCm=T֤$@zG=1ݮ4e֋<CCbȕ!o4u#u(Hy\NB Mi}pKL: w[yu> ԢMHm?_1(҈=ܭ cȲ]#xZq"W(SR5 YeScm'NmK,(2[j.:GTF:{A~OLoJ"{0TVRe.+išި\BjNZ5]3{9'RT(FDuA: t]vrczQm &7,rh& !gy9KTtRyVt'R< :6rk[]2a7Ko]zjb"qE tﳮӂH$>)L29^"8]YVܓ̢G禮m?_1(k LJ1lZE(Ki,!՝ (HOj?LOưYg*-vK8Kh-YH'RtbA~OLoJ"NwqvD(UQ|=MH)jL{m*ӹ)4m &7vrczQ%/߀D*Pٛ^9DwPed69#A7UQEQEQEQEQEQEQE>Dm+wK{IzD|T%VVBO*:TT{]N{4;5OϐCj_A|y0"u~ɛvOҤXVɬ0I?u2K%NqJULZtԧOnS*ŋJǗ4U Lf,094]پ%湊QuXea>u͹KA5OO:5mu3$T^}nQBDf*QZD6̢?U)jl f_^v޽QXJgGwfkT[ۣP\upIWucN*h,xK'@0Cήٝ wIBBC"G=\ʏ"5 . /lSݟ㽯lYVu e2oty^rxݵn()hĔۛoQYW}ZB+r㫭ARRٞ396~N{;Tt([~-}ϐ\c(:|nuu?zkOjg{EpiXB9]F]["dq7e.,[b;diSi͚^ۛKܵsTˇDs Hn:M嘵3mu$u%n\+ ֚i~fup>V-7KF.t iM'.(DG|O6S2NV_Wqa WJkr76]rmum &FA?z+cqN)kڜW2JAW `5{u[w+ʙX4mt.])wsUqN \tyo(a08|QpvßeƠ▀ZީA#Us(,RN:f8QYFBZS$^K$j3om}먶AnbӲZd%nѠ+SaJWQ'Ur/5>1lu֑ NБ+6'+0-▿:@7x],Zi$aHnpiӽpzU[1Y6VNM2[mm'P5f^z \y]RBDR8Hz)vYe]F5mqۼ.j uZ#THQֳ28j9mw*\֞8f-B:|hڅ׌@RR5#_kZ$V`'}ZBwi |w~9~TztU9|.#MuW-Ns> _:,p]q;CKR^?yGMqKJh B\[N3me@q%ޥvK W,g I]KVJtw eMNJZlƑCiHJΚ1[كZmd22Iy\:w'#1qR׺qy\QIWH55 z,u=E!*6A>a Pl.nS;eҲgJC Hʈ0Ͽަ+Nܲ]Vb%hX`t6Mk$Emעª3SD8 -P꺲ey"31N)jڜW0 |9͠_J۱+:: H JO ^h#4̞e4rRo۫f]`i_rK)DYHFgUŽuLJA %t_5:s֓豊P%i6:]|6aBd$i-2l(Ъurv̳>7m|[ku@w #Vݯ$N`䷣'Ue~]?UޤU ōNI;zŏU$ƲF5J$.&Rݲ{Q$>Tc+zu?zoA&6-6KeV$:<Sd2ݚ'Ա-jsE1\K)=]-%źAVR2WňyCe\i{\4=mu4sm};XuJ R>[DSDXIZyҒ_J=zg;%-{]ѨWE-C.oX!6r%=<^nӿ]̐H)/ $kݡ«(S׼0#("ǂZ1wP#A<*Gc]\m{*Ť)mڠY"╝Π2?YyZYB> pITLP[~g]*?Bw6.շl{gZ ZZ }@vRΧ{&;5Oi%IH&j B=~00KF?x 21+CdG+ʑ?Dү kzǭ̼ZfNNomK'ZlckV-*)N=oxkf@STtW:T,yu_;5[L)e`9s7Q}4篽u"s^a▽P+$k2ӷl{g Xh)ڡK:S c'av0jy*jas#W8EL=گٻW K[#-nQ5/YZܐHӔ_.)@T(ynF$%ˇ5Sڤ%B*ڊٖcFݹJZ Qk_wjx1*Pl6)CU4UQKsA!y| :o$>$C\ZSjO:{>H/F)k`/G$ί,f^*C{bjS]BZIö=۪ _z\X\ݐ\];:wz& fr\ք|X PeRW)[v2;mz,L(.Drq`t6MmS1mN+% pa!P nmo[W3L o|ڗ1ҕ h~7*;H_㶑kk_/'͓/YH+w IUqq$O(N{rBrܷyC*bT5̝],檙8vd略c]h<-[8n.3t^KSG޾wj{!\qK^tG |w~v̮׭ŭhW T+hڸ@krM {p H:7]Ov'Tw !kyuJGS#YoWelţfݶ:@m\toL+$k]21a -[ՈTuCN{ot{[V1{b)TT UEQ8pqjƛ)s H pyԔW2EfCR7Tҵy\:S61V-Qe'T,\7RkyNR|9~ NڜDvQ9w'[ھp϶_l D  w4^!'iuңt+َ]em>SVU8ѻq*{]?oa+M7R;Nkx*2aI6ݮ1&%Øsatí;ġl6i~iʹWۦ[jXc6QiUɴ JFD[-zmZ}זAz!xN '%1p*a$~CMX@RK9:˜BzyzZ.9yQМj;$ʭ:9u +xHɄ6&..<4VJ|2`,*q7f:Z63MJ$RӨQvi3LdrUsFf'v)k.WkXw Zű`.(R } wrf5,BܭKRIyBS4i1ŭT]P$ժh'KK,iJb9iێu qpgwBK[J:hO@tSO$Nc%.)Rףn)I2$Wb63ZJC imN:sN_ 9ͱ:./u.[d9S6&l }jĮy6RU84eۍ'XrmmvJ1k&rP.DvR;nn'ڟ$N`&'bQM߮ :g טq76~Na ɕnMg*V]JG}i)IE@ a6:k[ןD O~9&W[TT~ VPeܝ[/vۆ+T:rZs;▾I O[OZח ;nRŅM<n.3WL_^q~߾R:R!km7Cj'6* $IMOt-nWn-V=A<@ӹZ;6^spV[ppY.T. :-5SkH;svO$oW3CfL5/ir@4ٮ}'X=}vj0ytqGHCع?$uZ-f[E-dwLgr{l;t!虜&PRnW ֎*6X\ӱy/mV ~:jugޟgv#B9y VIH9x3[\QEdEN^rQju&(QEUQEQEQS ϧi_^ WW*EUUQE:|vkɪ-N>:2j(QEUQEQS$7TZ"C2B*y*;AtQEooYrc]evCåqIjWp]=t)]n2%W8ӓcI )E/WѠPt5]%zV rKgWby5#̒9k{f 6w}ĴDY@K#J@T CF[IgTZKiRKkP))u'zI~K5ygo9MST{#}RTҗخv}Rvg:o6Xߵ%Kc\5r)Y$k:E䶸0XsfnK 3d4˩lF[)42RxAl2ӳ]-C 2Ss-8 @P uyO8ˎm2GڷJwzCQQ"K:ɵw6[uSխѺV:xW2cLn͞\[ CyHJAD )Db..Qiw!ëOBH7fv AmǓSS kQY.&qR"r%Ŵ ɔo JVT7Tt qaߕ uũhM*@FN?nn8{1nRmV@@lF iY̺kv,($.mДۀ&K_LT9nNEql?&tX"$diBBΚ(q4UTQEDQEDQEDQEDQEDQEDQEDR'oiv[V [m4ꄶH@x4Y@x'ֱSHƍKH':)'[a⣲[ac/aq폋~i!Aq5ʺA}%^yi.**v_JemT8j0]& u+-ϻx·:~'?[KkCooךwq:HkveWo5}QK;ۧwMy~ gN u r:t^N/oqA;}t۽tDvgiZ5O"Om|%э^c%G(_I^}#*wi_ GJB3L.i:6S|T ? U7knh𹽃]wLt '_MEM}w\acگ>*nn`EUՙ}w[aK<,WhqY^ xsp+Yv#8)>*MM+X/~nEc/̨͏hMMml A`?MsSݷ6pr<:d;kK AכSK YF uIRu)=ޭyo_ưLN#(:pq =KuHCfc$e#I(vply!P94ʹ[&m^ yK㽾uQO ݰ[<FjWf 9cbt#`wS9v_uO6o#+X u eF㽻Zs*K-ulΥ |607zwpBeF;d؇9v+Oyd7'iW{xـ]p:կ׬+7Mv#CB 6fL{xaEU=֥tA؛0Z<$?)3nwۃm*`SS<twE$`S[<^}}I7E ^0Xa8sGs:r^Jƿ|[Us⡏6铱-u'`Wp`yRx+y'N+x6Mݹ]wQmiyʒz>V؍$Ndh⼗cv L52 EzhVU5jxSU=q8B,Ҕ84#U?m释g%QqN9KS7cbH;r!7AҾr|/IW>fw.;Ԩ\hٚpkR#<:tWW6!OXOHHֆ[]FwZ&~#{|uF dkyt0M*«x)g{t5xo+_ݝqYvv6U]vGנ{*#~ lۑ\QII'B`E85rRtIע/0U$ Og#A].77YMO̗Ur)Q pkd%ڞ ׳fTݎo] w PQOD/{l}W zy#,cnc◯L^h+VEInGS`r:+mmLD`TA)<5nS'.幛c hڐZIPeL;DZXn]sT.Ӈr]6yC˭yPGsMm1jigkm`|W<0x+%T >z]i]߆?l;ETh5/k[dnu)i^d6 k|\ ZjeY>+WƸK<h^ŝ@^<|^g-0T=&\o,}@]:TOz츒*=Bs8Oj+_O_0CcHu:lb|Q\>gc_>(n[p}&Y<7J-_ms(Rt׽߯:9˹~яpQ^q'Gl{Kx/*7~Γ˧1' ԑ=Ɩ:)Y8~9Y9Y<O0[Pn`۸_JpߤlgvZyNvol~U~{fVlh^ uRTI=ߢσmSiА9.RfxɳNXNOM8Xk%VYʦU;Ds?@Wt-u2ØXms(R` t~$p@y? ð6Hc=~!U|;s@gS?i"`Ef6IHR F@bC8ċ8n4O7>ֳieY O1 J*Ys9m]%{UD~>Z~i_[>d= in1#Wjx'fWu8-Rڞ |kTyN,KN5{bs筌~'z1ݠ3MpVF[-CJeyȶ_@YECNr16 =u|K^]3cs Auƶ<%BNݣ7j%yK|蜪՝Xp#lLNnIR CN~YZp[ ?ʞOGVk꾥SpĴx9 ].t|JiϞ1v0}.-Ctյ'qcAf6) Z:Ujp9I`/ݩ_B"q>h%VcƎ` 'lCK? BCtyTY.~ϯ 6VYXꂲO֥6ZLpkKlxn65K-Et۵ֱ}ct? tU,ٚA9n$6괖χo5 i$s]#ؑe+7N u)PR7O _}mT'K wxoNn\s˙`AxeS(D3 љ7ۼwM(|[y6\D0kK-7OӘ>UubXndnu)MtSN8!2\k#yZNo3Z~oS,k|dFl|FZyicZL? 5_]?n6fۜ,BR{Y+p`wcayJMt(*$E>,*pLC&~3ap2Ot`2r4|ƶqnT`7v6O,(jR79T֦ۃm2`SHS<tw5TcntZ<3 0Zd0,t9mm禋I~; {cGx6b@V t<$ :Ug_n#fDqw:[iIE|xh34}l7!Vk硓U+E*dn}79֖5)e0A5㬡9q_6ªov*.Sk4䓬w_?ub>rX-ԇjx 'k݃m3yyڞ#_?vRCCr}tD4s'a^w7ߞR54ś l3\mJyGc*,ȄpkRc:2i+LxҦL,G!c &-z 8Y u#ME6]"4vEwO򚪦*)w+Lx&E<h^I/9ko j"DȿM*mm9.]۞=moMJrk&[gR$9(.w^ dqԖB7[Cki+Rʔ4I 8 iؽRQ 徶ežNRPJB@p [I\ع/g.0۝SCB4qÜDF=yɪ9, o ƌ)Gp"Y2wKۖnC{DJjPtWxT=c)ympn2e+mR7oB RFOZ1p\Ωd2\liHSYQd(tֳ"j"{>ˢhi)-$%Ħ`蔤vZQ:՟KjDF{W"p$$l BSNRUn)hsWyeRR$@4ZM1vEwO"l.p\ a$0e  Jς?D-~O#|Un?ĎAw9UEVK$QEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEDQEE,~.Mfyd&Q}K]y/mV ~:j}gޟge'>sg*RLG ;u+%("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("("fyd&3_wÓEmu.ټaMTfŅ^?5VOಏ _H9x3[&O#|UnrQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEK3_wÓEwY;ɢ_vlxgCUy/m_YYG腯$rʭԓ'>sg*]pB(d((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((wY;ɢ;,[j/]iwKo> (?ĎAw9U F! m2]pe-9lVVtAij_H9x3Pڵ~܎}A?7Ϩ I\.Pw([9I*z 9SHHԔHcYm;#~ɧQd0P˦0,YӾiMUǚ[8ٶSey,nT9 hn{No%ŕ6l'ӟBij.:la2za)BrR<$w֪؞g3ZmX G=ZW*>;lMHm^(F+wMOH$OZ˸wD@3<9V &67-gv"'~xL؞g3[*([؞g3GbxgYׄl-obxgYׄ៭f^я>F._^{%~:}_v]%[C1[C16+ףdONˤh#F>`:h#F>`޾^{%~::zb|IڹtQmh׌{GQmh׌{\ףdG_/^\=>;W.-h-kzzbыW'j]E?^0}E?^0}so_/^\=|z1pJt$\K4c4cmыW㣯F._WĝIuF}xuF}xͽ|z1pJtu+r.я>я>F._^{%~:}_v]%[C1[C16+ףdONˤh#F>`:h#F>`޾^{%~::zb|IڹtQmh׌{GQmh׌{\ףdG_/^\=>;W.-h-kzzbыW'j]E?^0}E?^0}so_/^\=|z1pJt$\K4c4cmыW㣯F._WĝIuF}xuF}xͽ|z1pJtu+r.я>я>F._^{%~:}_v]%[C1[C16+ףdONˤh#F>`:h#F>`޾^{%~::zb|IڹtQmh׌{GQmh׌{\ףdG_/^\=>;W.-h-kzzbыW'j]E?^0}E?^0}so_/^\=|z1pJt$\K4c4cmыW㣯F._WĝIuF}xuF}xͽ|z1pJtu+r.я>я>F._^{%~:}_v]%[C1[C16+ףdONˤh#F>`:h#F>`޾^{%~::zb|IڹtQmh׌{GQmh׌{\ףdG_/^\=>;W.-h-kzzbыW'j]E?^0}E?^0}so_/^\=|z1pJt$\K4c4cmыW㣯F._WĝIuF}xuF}xͽ|z1pJtu+r.я>я>F._^{%~:}_v]1Dvd6jqA NIϋc|ˋߎiu[`!@$'B 9cыW㬨fU3qצXo{mJShJQ*'\RFpd[|>&̲MWߪ;25_~;難ɚκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκO|>&̲MWߪ;25_~;Lڷțhoj"ol/}ᆪ,UꃾLκ&^#µgY^Q1N;ujk,hh:u)^tr+_@C-a+RT\A هm1_SimGrid-3.10/doc/html/group__TRACE__category.html000640 007661 000620 00000031227 12242224150 022064 0ustar00gierschand000000 000000 SimGrid: Tracing categories
SimGrid  3.10
Versatile Simulation of Distributed Systems
Tracing categories

Functions to declare tracing categories. More...

Functions

void TRACE_category (const char *category)
 Declare a new category with a random color.
void TRACE_category_with_color (const char *category, const char *color)
 Declare a new category with a color.
xbt_dynar_t TRACE_get_categories (void)
 Get declared categories.

Detailed Description

Functions to declare tracing categories.

Function Documentation

void TRACE_category ( const char *  category)

Declare a new category with a random color.

This function should be used to define a user category. The category can be used to differentiate the tasks that are created during the simulation (for example, tasks from server1, server2, or request tasks, computation tasks, communication tasks). All resource utilization (host power and link bandwidth) will be classified according to the task category. Tasks that do not belong to a category are not traced. The color for the category that is being declared is random. This function has no effect if a category with the same name has been already declared.

See Tracing Simulations for details on how to trace the (categorized) resource utilization.

Parameters
categoryThe name of the new tracing category to be created.
See Also
TRACE_category_with_color, MSG_task_set_category, SD_task_set_category
void TRACE_category_with_color ( const char *  category,
const char *  color 
)

Declare a new category with a color.

Same as TRACE_category, but let user specify a color encoded as a RGB-like string with three floats from 0 to 1. So, to specify a red color, pass "1 0 0" as color parameter. A light-gray color can be specified using "0.7 0.7 0.7" as color. This function has no effect if a category with the same name has been already declared.

See Tracing Simulations for details on how to trace the (categorized) resource utilization.

Parameters
categoryThe name of the new tracing category to be created.
colorThe color of the category (see Tracing Simulations to know how to correctly specify the color)
See Also
MSG_task_set_category, SD_task_set_category
xbt_dynar_t TRACE_get_categories ( void  )

Get declared categories.

This function should be used to get categories that were already declared with TRACE_category or with TRACE_category_with_color.

See Tracing Simulations for details on how to trace the (categorized) resource utilization.

Returns
A dynar with the declared categories, must be freed with xbt_dynar_free.
See Also
MSG_task_set_category, SD_task_set_category
SimGrid-3.10/doc/html/ftv2mlastnode.png000640 007661 000620 00000000366 12242224150 020227 0ustar00gierschand000000 000000 PNG  IHDRɪ|IDATx!NA\ Um@`5i`h W7] b&ofdY4 c 3v=]\B I=BB;k WN@vy4]Y|M}]x6a }dׇY>||5?>|B"'IENDB`SimGrid-3.10/doc/html/dir_441d5feab27fb7aae4b219aea0ba73fa.html000640 007661 000620 00000014022 12242224150 023442 0ustar00gierschand000000 000000 SimGrid: examples/msg/gtnets/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/structs__smx__rvpoint.js000640 007661 000620 00000000752 12242224150 021743 0ustar00gierschand000000 000000 var structs__smx__rvpoint = [ [ "name", "structs__smx__rvpoint.html#aa62b404646a9748768dcc3ed3ed52424", null ], [ "comm_fifo", "structs__smx__rvpoint.html#ac926954d89514d291ba00b48563c0222", null ], [ "data", "structs__smx__rvpoint.html#abfc69646b084de488b6af1ba9b9131a8", null ], [ "permanent_receiver", "structs__smx__rvpoint.html#ae08262b4ac90c0e0e8026aa4586dc7ef", null ], [ "done_comm_fifo", "structs__smx__rvpoint.html#a96a10df3eb5e0cb0693629297832148d", null ] ];SimGrid-3.10/doc/html/FAQ.html000640 007661 000620 00000162752 12242224150 016236 0ustar00gierschand000000 000000 SimGrid: Frequently Asked Questions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Frequently Asked Questions

Table of Contents

I'm new to SimGrid. I have some questions. Where should I start?

You are at the right place... Having a look to these the slides of the HPCS'10 tutorial (or to these ancient slides, or to these "obsolete" slides) may give you some insights on what SimGrid can help you to do and what are its limitations. Then you definitely should read the MSG examples.

If you are stuck at any point and if this FAQ cannot help you, please drop us a mail to the user mailing list: simgr.nosp@m.id-u.nosp@m.ser@l.nosp@m.ists.nosp@m..gfor.nosp@m.ge.i.nosp@m.nria..nosp@m.fr.

What is the difference between MSG and SimDag? Do they serve the same purpose?

It depend on how you define "purpose", I guess ;)

They all allow you to build a prototype of application which you can run within the simulator afterward. They all share the same simulation kernel, which is the core of the SimGrid project. They differ by the way you express your application.

With SimDag, you express your code as a collection of interdependent parallel tasks. So, in this model, applications can be seen as a DAG of tasks. This is the interface of choice for people wanting to port old code designed for SimGrid v1 or v2 to the framework current version.

With MSG, your application is seen as a set of communicating processes, exchanging data by the way of messages and performing computation on their own.

Visualizing and analyzing the results

It is sometime convenient to "see" how the agents are behaving. If you like colors, you can use tools/MSG_visualization/colorize.pl as a filter to your MSG outputs. It works directly with INFO. Beware, INFO() prints on stderr. Do not forget to redirect if you want to filter (e.g. with bash):

./msg_test small_platform.xml small_deployment.xml 2>&1 | ../../tools/MSG_visualization/colorize.pl

We also have a more graphical output. Have a look at section Configuring the tracing subsystem.

Argh! Do I really have to code in C?

Currently bindings on top of MSG are supported for Java, Ruby and Lua. You can find a few documentation about them on the doc page. Note that bindings are released separately from the main dist and so have their own version numbers.

Moreover If you use C++, you should be able to use the SimGrid library as a standard C library and everything should work fine (simply link against this library; recompiling SimGrid with a C++ compiler won't work and it wouldn't help if you could).

For now, we do not feel a real demand for any other language. But if you think there is one, please speak up!

Feature related questions

"Could you please add (your favorite feature here) to SimGrid?"

Here is the deal. The whole SimGrid project (MSG, SURF, ...) is meant to be kept as simple and generic as possible. We cannot add functions for everybody's needs when these functions can easily be built from the ones already in the API. Most of the time, it is possible and when it was not possible we always have upgraded the API accordingly. When somebody asks us a question like "How to do that? Is there a function in the API to simply do this?", we're always glad to answer and help. However if we don't need this code for our own need, there is no chance we're going to write it... it's your job! :) The counterpart to our answers is that once you come up with a neat implementation of this feature (task duplication, RPC, thread synchronization, ...), you should send it to us and we will be glad to add it to the distribution. Thus, other people will take advantage of it (and we don't have to answer this question again and again ;).

You'll find in this section a few "Missing In Action" features. Many people have asked about it and we have given hints on how to simply do it with MSG. Feel free to contribute...

MSG features

I want some more complex MSG examples!

Many people have come to ask me a more complex example and each time, they have realized afterward that the basics were in the previous three examples.

Of course they have often been needing more complex functions like MSG_process_suspend(), MSG_process_resume() and MSG_process_isSuspended() (to perform synchronization), or MSG_task_Iprobe() and MSG_process_sleep() (to avoid blocking receptions), or even MSG_process_create() (to design asynchronous communications or computations). But the examples are sufficient to start.

We know. We should add some more examples, but not really some more complex ones... We should add some examples that illustrate some other functionalists (like how to simply encode asynchronous communications, RPC, process migrations, thread synchronization, ...) and we will do it when we will have a little bit more time. We have tried to document the examples so that they are understandable. Tell us if something is not clear and once again feel free to participate! :)

Missing in action: MSG Task duplication/replication

There is no task duplication in MSG. When you create a task, you can process it or send it somewhere else. As soon as a process has sent this task, he doesn't have this task anymore. It's gone. The receiver process has got the task. However, you could decide upon receiving to create a "copy" of a task but you have to handle by yourself the semantic associated to this "duplication".

As we already told, we prefer keeping the API as simple as possible. This kind of feature is rather easy to implement by users and the semantic you associate really depends on people. Having a generic task duplication mechanism is not that trivial (in particular because of the data field). That is why I would recommend that you write it by yourself even if I can give you advice on how to do it.

You have the following functions to get information about a task: MSG_task_get_name(), MSG_task_get_compute_duration(), MSG_task_get_remaining_computation(), MSG_task_get_data_size(), and MSG_task_get_data().

You could use a dictionary (xbt_dict_t) of dynars (xbt_dynar_t). If you still don't see how to do it, please come back to us...

I want to do asynchronous communications in MSG

In the past (version <= 3.4), there was no function to perform asynchronous communications. It could easily be implemented by creating new process when needed though. Since version 3.5, we have introduced the following functions:

We refer you to the description of these functions for more details on their usage as well as to the example section on Asynchronous communications.

I need to synchronize my MSG processes

You obviously cannot use pthread_mutexes of pthread_conds since we handle every scheduling related decision within SimGrid.

In the past (version <=3.3.4) you could do it by playing with MSG_process_suspend() and MSG_process_resume() or with fake communications (using MSG_task_get(), MSG_task_put() and MSG_task_Iprobe()).

Since version 3.4, you can use classical synchronization structures. See page Synchro stuff or simply check in include/xbt/synchro_core.h.

Where is the get_host_load function hidden in MSG?

There is no such thing because its semantic wouldn't be really clear. Of course, it is something about the amount of host throughput, but there is as many definition of "host load" as people asking for this function. First, you have to remember that resource availability may vary over time, which make any load notion harder to define.

It may be instantaneous value or an average one. Moreover it may be only the power of the computer, or may take the background load into account, or may even take the currently running tasks into account. In some SURF models, communications have an influence on computational power. Should it be taken into account too?

First of all, it's near to impossible to predict the load beforehand in the simulator since it depends on too much parameters (background load variation, bandwidth sharing algorithmic complexity) some of them even being not known beforehand (other task starting at the same time). So, getting this information is really hard (just like in real life). It's not just that we want MSG to be as painful as real life. But as it is in some way realistic, we face some of the same problems as we would face in real life.

How would you do it for real? The most common option is to use something like NWS that performs active probes. The best solution is probably to do the same within MSG, as in next code snippet. It is very close from what you would have to do out of the simulator, and thus gives you information that you could also get in real settings to not hinder the realism of your simulation.

double get_host_load() {
   m_task_t task = MSG_task_create("test", 0.001, 0, NULL);
   double date = MSG_get_clock();

   MSG_task_execute(task);
   date = MSG_get_clock() - date;
   MSG_task_destroy(task);
   return (0.001/date);
}

Of course, it may not match your personal definition of "host load". In this case, please detail what you mean on the mailing list, and we will extend this FAQ section to fit your taste if possible.

How can I get the *real* communication time?

Communications are synchronous and thus if you simply get the time before and after a communication, you'll only get the transmission time and the time spent to really communicate (it will also take into account the time spent waiting for the other party to be ready). However, getting the real communication time is not really hard either. The following solution is a good starting point.

int sender()
{
  m_task_t task = MSG_task_create("Task", task_comp_size, task_comm_size,
                                  calloc(1,sizeof(double)));
  *((double*) task->data) = MSG_get_clock();
  MSG_task_put(task, slaves[i % slaves_count], PORT_22);
  XBT_INFO("Send completed");
  return 0;
}
int receiver()
{
  m_task_t task = NULL;
  double time1,time2;

  time1 = MSG_get_clock();
  a = MSG_task_get(&(task), PORT_22);
  time2 = MSG_get_clock();
  if(time1<*((double *)task->data))
     time1 = *((double *) task->data);
  XBT_INFO("Communication time :  \"%f\" ", time2-time1);
  free(task->data);
  MSG_task_destroy(task);
  return 0;
}

SimDag related questions

Implementing communication delays between tasks.

A classic question of SimDag newcomers is about how to express a communication delay between tasks. The thing is that in SimDag, both computation and communication are seen as tasks. So, if you want to model a data dependency between two DAG tasks t1 and t2, you have to create 3 SD_tasks: t1, t2 and c and add dependencies in the following way:

SD_task_dependency_add(NULL, NULL, t1, c);
SD_task_dependency_add(NULL, NULL, c, t2);

This way task t2 cannot start before the termination of communication c which in turn cannot start before t1 ends.

When creating task c, you have to associate an amount of data (in bytes) corresponding to what has to be sent by t1 to t2.

Finally to schedule the communication task c, you have to build a list comprising the workstations on which t1 and t2 are scheduled (w1 and w2 for example) and build a communication matrix that should look like [0;amount ; 0; 0].

How to implement a distributed dynamic scheduler of DAGs.

Distributed is somehow "contagious". If you start making distributed decisions, there is no way to handle DAGs directly anymore (unless I am missing something). You have to encode your DAGs in term of communicating process to make the whole scheduling process distributed. Here is an example of how you could do that. Assume T1 has to be done before T2.

 int your_agent(int argc, char *argv[] {
   ...
   T1 = MSG_task_create(...);
   T2 = MSG_task_create(...);
   ...
   while(1) {
     ...
     if(cond) MSG_task_execute(T1);
     ...
     if((MSG_task_get_remaining_computation(T1)=0.0) && (you_re_in_a_good_mood))
        MSG_task_execute(T2)
     else {
        /* do something else */
     }
   }
 }

If you decide that the distributed part is not that much important and that DAG is really the level of abstraction you want to work with, then you should give a try to SimDag.

Generic features

Increasing the amount of simulated processes

Here are a few tricks you can apply if you want to increase the amount of processes in your simulations.

  • A few thousands of simulated processes (soft tricks)
    SimGrid can use either pthreads library or the UNIX98 contexts. On most systems, the number of pthreads is limited and then your simulation may be limited for a stupid reason. This is especially true with the current linux pthreads, and I cannot get more than 2000 simulated processes with pthreads on my box. The UNIX98 contexts allow me to raise the limit to 25,000 simulated processes on my laptop.

    The –with-context option of the ./configure script allows you to choose between UNIX98 contexts (–with-context=ucontext) and the pthread version (–with-context=pthread). The default value is ucontext when the script detect a working UNIX98 context implementation. On Windows boxes, the provided value is discarded and an adapted version is picked up.

    We experienced some issues with contexts on some rare systems (solaris 8 and lower or old alpha linuxes comes to mind). The main problem is that the configure script detect the contexts as being functional when it's not true. If you happen to use such a system, switch manually to the pthread version, and provide us with a good patch for the configure script so that it is done automatically ;)
  • Hundred thousands of simulated processes (hard-core tricks)
    As explained above, SimGrid can use UNIX98 contexts to represent and handle the simulated processes. Thanks to this, the main limitation to the number of simulated processes becomes the available memory.

    Here are some tricks I had to use in order to run a token ring between 25,000 processes on my laptop (1Gb memory, 1.5Gb swap).
    • First of all, make sure your code runs for a few hundreds processes before trying to push the limit. Make sure it's valgrind-clean, i.e. that valgrind does not report neither memory error nor memory leaks. Indeed, numerous simulated processes result in fat simulation hindering debugging.
    • It was really boring to write 25,000 entries in the deployment file, so I wrote a little script examples/gras/mutual_exclusion/simple_token/make_deployment.pl, which you may want to adapt to your case. You could also think about hijacking the SURFXML parser (have look at Bypassing the XML parser with your own C functions).
    • The deployment file became quite big, so I had to do what is in the FAQ entry "surf_parse_lex: Assertion `next limit' failed."
    • Each UNIX98 context has its own stack entry. As debugging this is quite hairy, the default value is a bit overestimated so that user doesn't get into trouble about this. You want to tune this size to increase the number of processes. This is the STACK_SIZE define in src/xbt/xbt_context_sysv.c, which is 128kb by default. Reduce this as much as you can, but be warned that if this value is too low, you'll get a segfault. The token ring example, which is quite simple, runs with 40kb stacks.
    • You may tweak the logs to reduce the stack size further. When logging something, we try to build the string to display in a char array on the stack. The size of this array is constant (and equal to XBT_LOG_BUFF_SIZE, defined in include/xbt/log/h). If the string is too large to fit this buffer, we move to a dynamically sized buffer. In which case, we have to traverse one time the log event arguments to compute the size we need for the buffer, malloc it, and traverse the argument list again to do the actual job.
      The idea here is to move XBT_LOG_BUFF_SIZE to 1, forcing the logs to use a dynamic array each time. This allows us to lower further the stack size at the price of some performance loss...
      This allowed me to run the reduce the stack size to ... 4k. Ie, on my 1Gb laptop, I can run more than 250,000 processes!

Is there a native support for batch schedulers in SimGrid?

No, there is no native support for batch schedulers and none is planned because this is a very specific need (and doing it in a generic way is thus very hard). However some people have implemented their own batch schedulers. Vincent Garonne wrote one during his PhD and put his code in the contrib directory of our SVN so that other can keep working on it. You may find inspiring ideas in it.

I need a checkpointing thing

Actually, it depends on whether you want to checkpoint the simulation, or to simulate checkpoints.

The first one could help if your simulation is a long standing process you want to keep running even on hardware issues. It could also help to rewind the simulation by jumping sometimes on an old checkpoint to cancel recent calculations.
Unfortunately, such thing will probably never exist in SG. One would have to duplicate all data structures because doing a rewind at the simulator level is very very hard (not talking about the malloc free operations that might have been done in between). Instead, you may be interested in the Libckpt library (http://www.cs.utk.edu/~plank/plank/www/libckpt.html). This is the checkpointing solution used in the condor project, for example. It makes it easy to create checkpoints (at the OS level, creating something like core files), and rerunning them on need.

If you want to simulate checkpoints instead, it means that you want the state of an executing task (in particular, the progress made towards completion) to be saved somewhere. So if a host (and the task executing on it) fails (cf. MSG_HOST_FAILURE), then the task can be restarted from the last checkpoint.

Actually, such a thing does not exist in SimGrid either, but it's just because we don't think it is fundamental and it may be done in the user code at relatively low cost. You could for example use a watcher that periodically get the remaining amount of things to do (using MSG_task_get_remaining_computation()), or fragment the task in smaller subtasks.

Platform building and Dynamic resources

Where can I find SimGrid platform files?

There are several little examples in the archive, in the examples/msg directory. From time to time, we are asked for other files, but we don't have much at hand right now.

You should refer to the Platform Description Archive (http://pda.gforge.inria.fr) project to see the other platform file we have available, as well as the Simulacrum simulator, meant to generate SimGrid platforms using all classical generation algorithms.

How can I automatically map an existing platform?

We are working on a project called ALNeM (Application-Level Network Mapper) which goal is to automatically discover the topology of an existing network. Its output will be a platform description file following the SimGrid syntax, so everybody will get the ability to map their own lab network (and contribute them to the catalog project). This tool is not ready yet, but it move quite fast forward. Just stay tuned.

Generating synthetic but realistic platforms

The third possibility to get a platform file (after manual or automatic mapping of real platforms) is to generate synthetic platforms. Getting a realistic result is not a trivial task, and moreover, nobody is really able to define what "realistic" means when speaking of topology files. You can find some more thoughts on this topic in these slides.

If you are looking for an actual tool, there we have a little tool to annotate Tiers-generated topologies. This perl-script is in tools/platform_generation/ directory of the SVN. Dinda et Al. released a very comparable tool, and called it GridG.

The specified computing power will be available to up to 6 sequential tasks without sharing. If more tasks are placed on this host, the resource will be shared accordingly. For example, if you schedule 12 tasks on the host, each will get half of the computing power. Please note that although sound, this model were never scientifically assessed. Please keep this fact in mind when using it.

Using random variable for the resource power or availability

The best way to model the resouce power using a random variable is to use an availability trace that is directed by a probability distribution. This can be done using the function tmgr_trace_generator_value() below. The date and value generators is created with one of tmgr_event_generator_new_uniform(), tmgr_event_generator_new_exponential() or tmgr_event_generator_new_weibull() (if you need other generators, adding them to src/surf/trace_mgr.c should be quite trivial and your patch will be welcomed). Once your trace is created, you have to connect it to the resource with the function sg_platf_new_trace_connect().

That the process is very similar if you want to model the resource availability with a random variable (deciding whether it's on/off instead of deciding its speed) using the function tmgr_trace_generator_state() or tmgr_trace_generator_avail_unavail() instead of tmgr_trace_generator_value().

Unfortunately, all this is currently lacking a proper documentation, and there is even no proper example of use. You'll thus have to check the header file include/simgrid/platf.h and experiment a bit by yourself. The following code should be a good starting point, and contributing a little clean example would be a good way to help the SimGrid project.

tmgr_trace_generator_value("mytrace",tmgr_event_generator_new_exponential(.5)
tmgr_event_generator_new_uniform(100000,9999999));
sg_platf_trace_connect_cbarg_t myconnect = SG_PLATF_TRACE_CONNECT_INITIALIZER;
myconnect.kind = SURF_TRACE_CONNECT_KIND_BANDWIDTH;
myconnect.trace = "mytrace";
myconnect.element = "mylink";
sg_platf_trace_connect(myconnect);

Troubleshooting

The feature X stopped to work after my last update

I guess that you want to read the ChangeLog file, that always contains all the information that could be important to the users during the upgrade. Actually, you may want to read it (alongside with the NEWS file that highlights the most important changes) even before you upgrade your copy of SimGrid, too.

Backward compatibility is very important to us, as we want to provide a scientific tool allowing to evaluate the code you write in several years, too. That being said, we sometimes change the interface to make them more usable to the users. When we do so, we always keep the old interface as DEPRECATED. If you still want to use them, you want to define the SIMGRID_DEPRECATED preprocessor symbol before loading the SimGrid files:

#define SIMGRID_DEPRECATED
#include <msg/msg.h>

SimGrid compilation and installation problems

cmake fails!

We know only one reason for the configure to fail:

  • You are using a broken build environment
    If symptom is that the configury magic complains about gcc not being able to build executables, you are probably missing the libc6-dev package. Damn Ubuntu.

If you experience other kind of issue, please get in touch with us. We are always interested in improving our portability to new systems.

Dude! "ctest" fails on my machine!

Don't assume we never run this target, because we do. Check http://cdash.inria.fr/CDash/index.php?project=Simgrid (click on previous if there is no result for today: results are produced only by 11am, French time) and https://buildd.debian.org/status/logs.php?pkg=simgrid if you don't believe us.

If it's failing on your machine in a way not experienced by the autobuilders above, please drop us a mail on the mailing list so that we can check it out. Make sure to read So I've found a bug in SimGrid. How to report it? before you do so.

User code compilation problems

"gcc: _simgrid_this_log_category_does_not_exist__??? undeclared (first use in this function)"

This is because you are using the log mecanism, but you didn't created any default category in this file. You should refer to Logging support for all the details, but you simply forgot to call one of XBT_LOG_NEW_DEFAULT_CATEGORY() or XBT_LOG_NEW_DEFAULT_SUBCATEGORY().

"gcc: undefined reference to pthread_key_create"

This indicates that one of the library SimGrid depends on (libpthread here) was missing on the linking command line. Dependencies of libsimgrid are expressed directly in the dynamic library, so it's quite impossible that you see this message when doing dynamic linking.

If you compile your code statically (and if you use a pthread version of SimGrid – see Increasing the amount of simulated processes), you must absolutely specify -lpthread on the linker command line. As usual, this should come after -lsimgrid on this command line.

"gcc: undefined reference to MSG_*"

Since version 3.7 all the m_channel_t mecanism is deprecated. So functions about this mecanism may get removed in future releases.

List of functions:

  • XBT_PUBLIC(m_host_t *) MSG_get_host_table(void);
  • XBT_PUBLIC(MSG_error_t) MSG_task_get_ext(m_task_t * task, int channel, double max_duration, m_host_t host);
  • XBT_PUBLIC(MSG_error_t) MSG_set_channel_number(int number);
  • XBT_PUBLIC(int) MSG_get_channel_number(void);

If you want them you have to compile Simgrid v3.7 with option "-Denable_msg_deprecated=ON". Using them should print warning to inform what new function you have to use.

Runtime error messages

"surf_parse_lex: Assertion `next limit' failed."

This is because your platform file is too big for the parser.

Actually, the message comes directly from FleXML, the technology on top of which the parser is built. FleXML has the bad idea of fetching the whole document in memory before parsing it. And moreover, the memory buffer size must be determined at compilation time.

We use a value which seems big enough for our need without bloating the simulators footprints. But of course your mileage may vary. In this case, just edit src/surf/surfxml.l modify the definition of FLEXML_BUFFERSTACKSIZE. E.g.

#define FLEXML_BUFFERSTACKSIZE 1000000000

Then recompile and everything should be fine, provided that your version of Flex is recent enough (>= 2.5.31). If not the compilation process should warn you.

A while ago, we worked on FleXML to reduce a bit its memory consumption, but these issues remain. There is two things we should do:

  • use a dynamic buffer instead of a static one so that the only limit becomes your memory, not a stupid constant fixed at compilation time (maybe not so difficult).
  • change the parser so that it does not need to get the whole file in memory before parsing (seems quite difficult, but I'm a complete newbe wrt flex stuff).

These are changes to FleXML itself, not SimGrid. But since we kinda hijacked the development of FleXML, I can grant you that any patches would be really welcome and quickly integrated.

Update: A new version of FleXML (1.7) was released. Most of the work was done by William Dowling, who use it in his own work. The good point is that it now use a dynamic buffer, and that the memory usage was greatly improved. The downside is that William also changed some things internally, and it breaks the hack we devised to bypass the parser, as explained in Bypassing the XML parser with your own C functions. Indeed, this is not a classical usage of the parser, and Will didn't imagine that we may have used (and even documented) such a crude usage of FleXML. So, we now have to repair the bypassing functionality to use the latest FleXML version and fix the memory usage in SimGrid.

I'm told that my XML files are too old.

The format of the XML platform description files is sometimes improved. For example, we decided to change the units used in SimGrid from MBytes, MFlops and seconds to Bytes, Flops and seconds to ease people exchanging small messages. We also reworked the route descriptions to allow more compact descriptions.

That is why the XML files are versionned using the 'version' attribute of the root tag. Currently, it should read:

  <platform version="2">

If your files are too old, you can use the simgrid_update_xml.pl script which can be found in the tools directory of the archive.

Valgrind-related and other debugger issues

If you don't, you really should use valgrind to debug your code, it's almost magic.

longjmp madness in valgrind

This is when valgrind starts complaining about longjmp things, just like:

==21434== Conditional jump or move depends on uninitialised value(s)
==21434==    at 0x420DBE5: longjmp (longjmp.c:33)
==21434==
==21434== Use of uninitialised value of size 4
==21434==    at 0x420DC3A: __longjmp (__longjmp.S:48)

This is the sign that you didn't used the exception mecanism well. Most probably, you have a return; somewhere within a TRY{} block. This is evil, and you must not do this. Did you read the section about Exception support??

Valgrind spits tons of errors about backtraces!

It may happen that valgrind, the memory debugger beloved by any decent C programmer, spits tons of warnings like the following :

==8414== Conditional jump or move depends on uninitialised value(s)
==8414==    at 0x400882D: (within /lib/ld-2.3.6.so)
==8414==    by 0x414EDE9: (within /lib/tls/i686/cmov/libc-2.3.6.so)
==8414==    by 0x400B105: (within /lib/ld-2.3.6.so)
==8414==    by 0x414F937: _dl_open (in /lib/tls/i686/cmov/libc-2.3.6.so)
==8414==    by 0x4150F4C: (within /lib/tls/i686/cmov/libc-2.3.6.so)
==8414==    by 0x400B105: (within /lib/ld-2.3.6.so)
==8414==    by 0x415102D: __libc_dlopen_mode (in /lib/tls/i686/cmov/libc-2.3.6.so)
==8414==    by 0x412D6B9: backtrace (in /lib/tls/i686/cmov/libc-2.3.6.so)
==8414==    by 0x8076446: xbt_dictelm_get_ext (dict_elm.c:714)
==8414==    by 0x80764C1: xbt_dictelm_get (dict_elm.c:732)
==8414==    by 0x8079010: xbt_cfg_register (config.c:208)
==8414==    by 0x806821B: MSG_config (msg_config.c:42)

This problem is somewhere in the libc when using the backtraces and there is very few things we can do ourselves to fix it. Instead, here is how to tell valgrind to ignore the error. Add the following to your ~/.valgrind.supp (or create this file on need). Make sure to change the obj line according to your personnal mileage (change 2.3.6 to the actual version you are using, which you can retrieve with a simple "ls /lib/ld*.so").

{
   name: Backtrace madness
   Memcheck:Cond
   obj:/lib/ld-2.3.6.so
   fun:dl_open_worker
   fun:_dl_open
   fun:do_dlopen
   fun:dlerror_run
   fun:__libc_dlopen_mode
}

Then, you have to specify valgrind to use this suppression file by passing the –suppressions=$HOME/.valgrind.supp option on the command line. You can also add the following to your ~/.bashrc so that it gets passed automatically. Actually, it passes a bit more options to valgrind, and this happen to be my personnal settings. Check the valgrind documentation for more information.

export VALGRIND_OPTS="--leak-check=yes --leak-resolution=high --num-callers=40 --tool=memcheck --suppressions=$HOME/.valgrind.supp" 

Truncated backtraces

When debugging SimGrid, it's easier to pass the –disable-compiler-optimization flag to the configure if valgrind or gdb get fooled by the optimization done by the compiler. But you should remove these flag when everything works before going in production (before launching your 1252135 experiments), or everything will run only one half of the true SimGrid potential.

There is a deadlock in my code!!!

Unfortunately, we cannot debug every code written in SimGrid. We furthermore believe that the framework provides ways enough information to debug such informations yourself. If the textual output is not enough, Make sure to check the Visualizing and analyzing the results FAQ entry to see how to get a graphical one.

Now, if you come up with a really simple example that deadlocks and you're absolutely convinced that it should not, you can ask on the list. Just be aware that you'll be severely punished if the mistake is on your side... We have plenty of FAQ entries to redact and new features to implement for the impenitents! ;)

I get weird timings when I play with the latencies.

OK, first of all, remember that units should be Bytes, Flops and Seconds. If you don't use such units, some SimGrid constants (e.g. the SG_TCP_CTE_GAMMA constant used in most network models) won't have the right unit and you'll end up with weird results.

Here is what happens with a single transfer of size L on a link (bw,lat) when nothing else happens.

0-----lat--------------------------------------------------t
|-----|**** real_bw =min(bw,SG_TCP_CTE_GAMMA/(2*lat)) *****|

In more complex situations, this min is the solution of a complex max-min linear system. Have a look here and read the two threads "Bug in SURF?" and "Surf bug not fixed?". You'll have a few other examples of such computations. You can also read "A Network Model for Simulation of Grid Application" by Henri Casanova and Loris Marchal to have all the details. The fact that the real_bw is smaller than bw is easy to understand. The fact that real_bw is smaller than SG_TCP_CTE_GAMMA/(2*lat) is due to the window-based congestion mechanism of TCP. With TCP, you can't exploit your huge network capacity if you don't have a good round-trip-time because of the acks...

Anyway, what you get is t=lat + L/min(bw,SG_TCP_CTE_GAMMA/(2*lat)).

if I you set (bw,lat)=(100 000 000, 0.00001), you get t =  1.00001 (you fully

use your link) if I you set (bw,lat)=(100 000 000, 0.0001), you get t = 1.0001 (you're on the limit) if I you set (bw,lat)=(100 000 000, 0.001), you get t = 10.001 (ouch!)

This bound on the effective bandwidth of a flow is not the only thing that may make your result be unexpected. For example, two flows competing on a saturated link receive an amount of bandwidth inversely proportional to their round trip time.

So I've found a bug in SimGrid. How to report it?

We do our best to make sure to hammer away any bugs of SimGrid, but this is still an academic project so please be patient if/when you find bugs in it. If you do, the best solution is to drop an email either on the simgrid-user or the simgrid-devel mailing list and explain us about the issue. You can also decide to open a formal bug report using the relevant interface. You need to login on the server to get the ability to submit bugs.

We will do our best to solve any problem repported, but you need to help us finding the issue. Just telling "it segfault" isn't enough. Telling "It segfaults when running the attached simulator" doesn't really help either. You may find the following article interesting to see how to repport informative bug repports: http://www.chiark.greenend.org.uk/~sgtatham/bugs.html (it is not SimGrid specific at all, but it's full of good advices).

Author
Da SimGrid team simgr.nosp@m.id-d.nosp@m.evel@.nosp@m.list.nosp@m.s.gfo.nosp@m.rge..nosp@m.inria.nosp@m..fr
SimGrid-3.10/doc/html/simgrid.css000664 007661 000620 00000000602 12242224150 017100 0ustar00gierschand000000 000000 /* Table Of Content styles, by Martin Quinson (but not original at all) */ DIV.toc { background-color: #e8eef2; border: 1px solid #84b0c7; font-size: 120%; display: block; float: right; margin: 10px; padding: 10px; padding-top: 0px; padding-bottom: 0px; } DIV.tocTitle { text-align: center; font-weight: bold; font-size: 130%; }SimGrid-3.10/doc/html/group__TRACE__user__variables.html000640 007661 000620 00000332553 12242224150 023422 0ustar00gierschand000000 000000 SimGrid: Tracing user variables
SimGrid  3.10
Versatile Simulation of Distributed Systems
Tracing user variables

Functions to declare and define user variables associated to resources. More...

Functions

void TRACE_vm_variable_declare (const char *variable)
 Declare a new user variable associated to VMs.
void TRACE_vm_variable_declare_with_color (const char *variable, const char *color)
 Declare a new user variable associated to VMs with a color.
void TRACE_vm_variable_set (const char *vm, const char *variable, double value)
 Set the value of a variable of a host.
void TRACE_vm_variable_add (const char *vm, const char *variable, double value)
 Add a value to a variable of a VM.
void TRACE_vm_variable_sub (const char *vm, const char *variable, double value)
 Subtract a value from a variable of a VM.
void TRACE_vm_variable_set_with_time (double time, const char *vm, const char *variable, double value)
 Set the value of a variable of a VM at a given timestamp.
void TRACE_vm_variable_add_with_time (double time, const char *vm, const char *variable, double value)
 Add a value to a variable of a VM at a given timestamp.
void TRACE_vm_variable_sub_with_time (double time, const char *vm, const char *variable, double value)
 Subtract a value from a variable of a VM at a given timestamp.
xbt_dynar_t TRACE_get_vm_variables (void)
 Get declared user vm variables.
void TRACE_host_variable_declare (const char *variable)
 Declare a new user variable associated to hosts.
void TRACE_host_variable_declare_with_color (const char *variable, const char *color)
 Declare a new user variable associated to hosts with a color.
void TRACE_host_variable_set (const char *host, const char *variable, double value)
 Set the value of a variable of a host.
void TRACE_host_variable_add (const char *host, const char *variable, double value)
 Add a value to a variable of a host.
void TRACE_host_variable_sub (const char *host, const char *variable, double value)
 Subtract a value from a variable of a host.
void TRACE_host_variable_set_with_time (double time, const char *host, const char *variable, double value)
 Set the value of a variable of a host at a given timestamp.
void TRACE_host_variable_add_with_time (double time, const char *host, const char *variable, double value)
 Add a value to a variable of a host at a given timestamp.
void TRACE_host_variable_sub_with_time (double time, const char *host, const char *variable, double value)
 Subtract a value from a variable of a host at a given timestamp.
xbt_dynar_t TRACE_get_host_variables (void)
 Get declared user host variables.
void TRACE_link_variable_declare (const char *variable)
 Declare a new user variable associated to links.
void TRACE_link_variable_declare_with_color (const char *variable, const char *color)
 Declare a new user variable associated to links with a color.
void TRACE_link_variable_set (const char *link, const char *variable, double value)
 Set the value of a variable of a link.
void TRACE_link_variable_add (const char *link, const char *variable, double value)
 Add a value to a variable of a link.
void TRACE_link_variable_sub (const char *link, const char *variable, double value)
 Subtract a value from a variable of a link.
void TRACE_link_variable_set_with_time (double time, const char *link, const char *variable, double value)
 Set the value of a variable of a link at a given timestamp.
void TRACE_link_variable_add_with_time (double time, const char *link, const char *variable, double value)
 Add a value to a variable of a link at a given timestamp.
void TRACE_link_variable_sub_with_time (double time, const char *link, const char *variable, double value)
 Subtract a value from a variable of a link at a given timestamp.
void TRACE_link_srcdst_variable_set (const char *src, const char *dst, const char *variable, double value)
 Set the value of the variable present in the links connecting source and destination.
void TRACE_link_srcdst_variable_add (const char *src, const char *dst, const char *variable, double value)
 Add a value to the variable present in the links connecting source and destination.
void TRACE_link_srcdst_variable_sub (const char *src, const char *dst, const char *variable, double value)
 Subtract a value from the variable present in the links connecting source and destination.
void TRACE_link_srcdst_variable_set_with_time (double time, const char *src, const char *dst, const char *variable, double value)
 Set the value of the variable present in the links connecting source and destination at a given timestamp.
void TRACE_link_srcdst_variable_add_with_time (double time, const char *src, const char *dst, const char *variable, double value)
 Add a value to the variable present in the links connecting source and destination at a given timestamp.
void TRACE_link_srcdst_variable_sub_with_time (double time, const char *src, const char *dst, const char *variable, double value)
 Subtract a value from the variable present in the links connecting source and destination at a given timestamp.
xbt_dynar_t TRACE_get_link_variables (void)
 Get declared user link variables.
void TRACE_host_state_declare (const char *state)
 Declare a new user state associated to hosts.
void TRACE_host_state_declare_value (const char *state, const char *value, const char *color)
 Declare a new value for a user state associated to hosts.
void TRACE_host_set_state (const char *host, const char *state, const char *value)
 Set the user state to the given value.
void TRACE_host_push_state (const char *host, const char *state, const char *value)
 Push a new value for a state of a given host.
void TRACE_host_pop_state (const char *host, const char *state)
 Pop the last value of a state of a given host.
void TRACE_host_reset_state (const char *host, const char *state)
 Reset the state of a given host.

Detailed Description

Functions to declare and define user variables associated to resources.

Function Documentation

void TRACE_vm_variable_declare ( const char *  variable)

Declare a new user variable associated to VMs.

Declare a user variable that will be associated to VMs. A user vm variable can be used to trace user variables such as the number of tasks in a VM, the number of clients in an application (for VMs), and so on. The color associated to this new variable will be random.

Parameters
variableThe name of the new variable to be declared.
See Also
TRACE_vm_variable_declare_with_color
void TRACE_vm_variable_declare_with_color ( const char *  variable,
const char *  color 
)

Declare a new user variable associated to VMs with a color.

Same as TRACE_vm_variable_declare, but associated a color to the newly created user host variable. The color needs to be a string with three numbers separated by spaces in the range [0,1]. A light-gray color can be specified using "0.7 0.7 0.7" as color.

Parameters
variableThe name of the new variable to be declared.
colorThe color for the new variable.
void TRACE_vm_variable_set ( const char *  vm,
const char *  variable,
double  value 
)

Set the value of a variable of a host.

Parameters
vmThe name of the VM to be considered.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_vm_variable_declare, TRACE_vm_variable_add, TRACE_vm_variable_sub
void TRACE_vm_variable_add ( const char *  vm,
const char *  variable,
double  value 
)

Add a value to a variable of a VM.

Parameters
vmThe name of the VM to be considered.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_vm_variable_declare, TRACE_vm_variable_set, TRACE_vm_variable_sub
void TRACE_vm_variable_sub ( const char *  vm,
const char *  variable,
double  value 
)

Subtract a value from a variable of a VM.

Parameters
vmThe name of the vm to be considered.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_vm_variable_declare, TRACE_vm_variable_set, TRACE_vm_variable_add
void TRACE_vm_variable_set_with_time ( double  time,
const char *  vm,
const char *  variable,
double  value 
)

Set the value of a variable of a VM at a given timestamp.

Same as TRACE_vm_variable_set, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
vmThe name of the VM to be considered.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_vm_variable_declare, TRACE_vm_variable_add_with_time, TRACE_vm_variable_sub_with_time
void TRACE_vm_variable_add_with_time ( double  time,
const char *  vm,
const char *  variable,
double  value 
)

Add a value to a variable of a VM at a given timestamp.

Same as TRACE_vm_variable_add, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
vmThe name of the VM to be considered.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_vm_variable_declare, TRACE_vm_variable_set_with_time, TRACE_vm_variable_sub_with_time
void TRACE_vm_variable_sub_with_time ( double  time,
const char *  vm,
const char *  variable,
double  value 
)

Subtract a value from a variable of a VM at a given timestamp.

Same as TRACE_vm_variable_sub, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
vmThe name of the VM to be considered.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_vm_variable_declare, TRACE_vm_variable_set_with_time, TRACE_vm_variable_add_with_time
xbt_dynar_t TRACE_get_vm_variables ( void  )

Get declared user vm variables.

This function should be used to get VM variables that were already declared with TRACE_vm_variable_declare or with TRACE_vm_variable_declare_with_color.

Returns
A dynar with the declared host variables, must be freed with xbt_dynar_free.
void TRACE_host_variable_declare ( const char *  variable)

Declare a new user variable associated to hosts.

Declare a user variable that will be associated to hosts. A user host variable can be used to trace user variables such as the number of tasks in a server, the number of clients in an application (for hosts), and so on. The color associated to this new variable will be random.

Parameters
variableThe name of the new variable to be declared.
See Also
TRACE_host_variable_declare_with_color
void TRACE_host_variable_declare_with_color ( const char *  variable,
const char *  color 
)

Declare a new user variable associated to hosts with a color.

Same as TRACE_host_variable_declare, but associated a color to the newly created user host variable. The color needs to be a string with three numbers separated by spaces in the range [0,1]. A light-gray color can be specified using "0.7 0.7 0.7" as color.

Parameters
variableThe name of the new variable to be declared.
colorThe color for the new variable.
void TRACE_host_variable_set ( const char *  host,
const char *  variable,
double  value 
)

Set the value of a variable of a host.

Parameters
hostThe name of the host to be considered.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_host_variable_declare, TRACE_host_variable_add, TRACE_host_variable_sub
void TRACE_host_variable_add ( const char *  host,
const char *  variable,
double  value 
)

Add a value to a variable of a host.

Parameters
hostThe name of the host to be considered.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_host_variable_declare, TRACE_host_variable_set, TRACE_host_variable_sub
void TRACE_host_variable_sub ( const char *  host,
const char *  variable,
double  value 
)

Subtract a value from a variable of a host.

Parameters
hostThe name of the host to be considered.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_host_variable_declare, TRACE_host_variable_set, TRACE_host_variable_add
void TRACE_host_variable_set_with_time ( double  time,
const char *  host,
const char *  variable,
double  value 
)

Set the value of a variable of a host at a given timestamp.

Same as TRACE_host_variable_set, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
hostThe name of the host to be considered.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_host_variable_declare, TRACE_host_variable_add_with_time, TRACE_host_variable_sub_with_time
void TRACE_host_variable_add_with_time ( double  time,
const char *  host,
const char *  variable,
double  value 
)

Add a value to a variable of a host at a given timestamp.

Same as TRACE_host_variable_add, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
hostThe name of the host to be considered.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_host_variable_declare, TRACE_host_variable_set_with_time, TRACE_host_variable_sub_with_time
void TRACE_host_variable_sub_with_time ( double  time,
const char *  host,
const char *  variable,
double  value 
)

Subtract a value from a variable of a host at a given timestamp.

Same as TRACE_host_variable_sub, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
hostThe name of the host to be considered.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_host_variable_declare, TRACE_host_variable_set_with_time, TRACE_host_variable_add_with_time
xbt_dynar_t TRACE_get_host_variables ( void  )

Get declared user host variables.

This function should be used to get host variables that were already declared with TRACE_host_variable_declare or with TRACE_host_variable_declare_with_color.

Returns
A dynar with the declared host variables, must be freed with xbt_dynar_free.
void TRACE_link_variable_declare ( const char *  variable)

Declare a new user variable associated to links.

Declare a user variable that will be associated to links. A user link variable can be used, for example, to trace user variables such as the number of messages being transferred through network links. The color associated to this new variable will be random.

Parameters
variableThe name of the new variable to be declared.
See Also
TRACE_link_variable_declare_with_color
void TRACE_link_variable_declare_with_color ( const char *  variable,
const char *  color 
)

Declare a new user variable associated to links with a color.

Same as TRACE_link_variable_declare, but associated a color to the newly created user link variable. The color needs to be a string with three numbers separated by spaces in the range [0,1]. A light-gray color can be specified using "0.7 0.7 0.7" as color.

Parameters
variableThe name of the new variable to be declared.
colorThe color for the new variable.
void TRACE_link_variable_set ( const char *  link,
const char *  variable,
double  value 
)

Set the value of a variable of a link.

Parameters
linkThe name of the link to be considered.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_link_variable_declare, TRACE_link_variable_add, TRACE_link_variable_sub
void TRACE_link_variable_add ( const char *  link,
const char *  variable,
double  value 
)

Add a value to a variable of a link.

Parameters
linkThe name of the link to be considered.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_link_variable_declare, TRACE_link_variable_set, TRACE_link_variable_sub
void TRACE_link_variable_sub ( const char *  link,
const char *  variable,
double  value 
)

Subtract a value from a variable of a link.

Parameters
linkThe name of the link to be considered.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_link_variable_declare, TRACE_link_variable_set, TRACE_link_variable_add
void TRACE_link_variable_set_with_time ( double  time,
const char *  link,
const char *  variable,
double  value 
)

Set the value of a variable of a link at a given timestamp.

Same as TRACE_link_variable_set, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
linkThe name of the link to be considered.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_link_variable_declare, TRACE_link_variable_add_with_time, TRACE_link_variable_sub_with_time
void TRACE_link_variable_add_with_time ( double  time,
const char *  link,
const char *  variable,
double  value 
)

Add a value to a variable of a link at a given timestamp.

Same as TRACE_link_variable_add, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
linkThe name of the link to be considered.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_link_variable_declare, TRACE_link_variable_set_with_time, TRACE_link_variable_sub_with_time
void TRACE_link_variable_sub_with_time ( double  time,
const char *  link,
const char *  variable,
double  value 
)

Subtract a value from a variable of a link at a given timestamp.

Same as TRACE_link_variable_sub, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
linkThe name of the link to be considered.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_link_variable_declare, TRACE_link_variable_set_with_time, TRACE_link_variable_add_with_time
void TRACE_link_srcdst_variable_set ( const char *  src,
const char *  dst,
const char *  variable,
double  value 
)

Set the value of the variable present in the links connecting source and destination.

Same as TRACE_link_variable_set, but instead of providing the name of link to be considered, provide the source and destination hosts. All links that are part of the route between source and destination will have the variable set to the provided value.

Parameters
srcThe name of the source host for get route.
dstThe name of the destination host for get route.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_link_variable_declare, TRACE_link_srcdst_variable_add, TRACE_link_srcdst_variable_sub
void TRACE_link_srcdst_variable_add ( const char *  src,
const char *  dst,
const char *  variable,
double  value 
)

Add a value to the variable present in the links connecting source and destination.

Same as TRACE_link_variable_add, but instead of providing the name of link to be considered, provide the source and destination hosts. All links that are part of the route between source and destination will have the value passed as parameter added to the current value of the variable name to be considered.

Parameters
srcThe name of the source host for get route.
dstThe name of the destination host for get route.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_link_variable_declare, TRACE_link_srcdst_variable_set, TRACE_link_srcdst_variable_sub
void TRACE_link_srcdst_variable_sub ( const char *  src,
const char *  dst,
const char *  variable,
double  value 
)

Subtract a value from the variable present in the links connecting source and destination.

Same as TRACE_link_variable_sub, but instead of providing the name of link to be considered, provide the source and destination hosts. All links that are part of the route between source and destination will have the value passed as parameter subtracted from the current value of the variable name to be considered.

Parameters
srcThe name of the source host for get route.
dstThe name of the destination host for get route.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_link_variable_declare, TRACE_link_srcdst_variable_set, TRACE_link_srcdst_variable_add
void TRACE_link_srcdst_variable_set_with_time ( double  time,
const char *  src,
const char *  dst,
const char *  variable,
double  value 
)

Set the value of the variable present in the links connecting source and destination at a given timestamp.

Same as TRACE_link_srcdst_variable_set, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
srcThe name of the source host for get route.
dstThe name of the destination host for get route.
variableThe name of the variable to be considered.
valueThe new value of the variable.
See Also
TRACE_link_variable_declare, TRACE_link_srcdst_variable_add_with_time, TRACE_link_srcdst_variable_sub_with_time
void TRACE_link_srcdst_variable_add_with_time ( double  time,
const char *  src,
const char *  dst,
const char *  variable,
double  value 
)

Add a value to the variable present in the links connecting source and destination at a given timestamp.

Same as TRACE_link_srcdst_variable_add, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
srcThe name of the source host for get route.
dstThe name of the destination host for get route.
variableThe name of the variable to be considered.
valueThe value to be added to the variable.
See Also
TRACE_link_variable_declare, TRACE_link_srcdst_variable_set_with_time, TRACE_link_srcdst_variable_sub_with_time
void TRACE_link_srcdst_variable_sub_with_time ( double  time,
const char *  src,
const char *  dst,
const char *  variable,
double  value 
)

Subtract a value from the variable present in the links connecting source and destination at a given timestamp.

Same as TRACE_link_srcdst_variable_sub, but let user specify the time used to trace it. Users can specify a time that is not the simulated clock time as defined by the core simulator. This allows a fine-grain control of time definition, but should be used with caution since the trace can be inconsistent if resource utilization traces are also traced.

Parameters
timeThe timestamp to be used to tag this change of value.
srcThe name of the source host for get route.
dstThe name of the destination host for get route.
variableThe name of the variable to be considered.
valueThe value to be subtracted from the variable.
See Also
TRACE_link_variable_declare, TRACE_link_srcdst_variable_set_with_time, TRACE_link_srcdst_variable_add_with_time
xbt_dynar_t TRACE_get_link_variables ( void  )

Get declared user link variables.

This function should be used to get link variables that were already declared with TRACE_link_variable_declare or with TRACE_link_variable_declare_with_color.

Returns
A dynar with the declared link variables, must be freed with xbt_dynar_free.
void TRACE_host_state_declare ( const char *  state)

Declare a new user state associated to hosts.

Declare a user state that will be associated to hosts. A user host state can be used to trace application states.

Parameters
stateThe name of the new state to be declared.
See Also
TRACE_host_state_declare_value
void TRACE_host_state_declare_value ( const char *  state,
const char *  value,
const char *  color 
)

Declare a new value for a user state associated to hosts.

Declare a value for a state. The color needs to be a string with three numbers separated by spaces in the range [0,1]. A light-gray color can be specified using "0.7 0.7 0.7" as color.

Parameters
stateThe name of the new state to be declared.
valueThe name of the value
colorThe color of the value
See Also
TRACE_host_state_declare
void TRACE_host_set_state ( const char *  host,
const char *  state,
const char *  value 
)

Set the user state to the given value.

Change a user state previously declared to the given value.

Parameters
hostThe name of the host to be considered.
stateThe name of the state previously declared.
valueThe new value of the state.
See Also
TRACE_host_state_declare, TRACE_host_push_state, TRACE_host_pop_state, TRACE_host_reset_state
void TRACE_host_push_state ( const char *  host,
const char *  state,
const char *  value 
)

Push a new value for a state of a given host.

Change a user state previously declared by pushing the new value to the state.

Parameters
hostThe name of the host to be considered.
stateThe name of the state previously declared.
valueThe value to be pushed.
See Also
TRACE_host_state_declare, TRACE_host_set_state, TRACE_host_pop_state, TRACE_host_reset_state
void TRACE_host_pop_state ( const char *  host,
const char *  state 
)

Pop the last value of a state of a given host.

Change a user state previously declared by removing the last value of the state.

Parameters
hostThe name of the host to be considered.
stateThe name of the state to be popped.
See Also
TRACE_host_state_declare, TRACE_host_set_state, TRACE_host_push_state, TRACE_host_reset_state
void TRACE_host_reset_state ( const char *  host,
const char *  state 
)

Reset the state of a given host.

Clear all previous values of a user state.

Parameters
hostThe name of the host to be considered.
stateThe name of the state to be cleared.
See Also
TRACE_host_state_declare, TRACE_host_set_state, TRACE_host_push_state, TRACE_host_pop_state
SimGrid-3.10/doc/html/group__m__process__management.js000640 007661 000620 00000005455 12242224150 023332 0ustar00gierschand000000 000000 var group__m__process__management = [ [ "msg_process_t", "group__m__process__management.html#ga49407197cb1ba4a2b1943285786eacec", null ], [ "MSG_process_create", "group__m__process__management.html#ga943d27b38754b2af9f78e80cc29db306", null ], [ "MSG_process_create_with_arguments", "group__m__process__management.html#ga1540ef18107c4d2387a937017dcf97c5", null ], [ "MSG_process_create_with_environment", "group__m__process__management.html#ga640b4cc9200796bc211e6d8b794ba922", null ], [ "MSG_process_kill", "group__m__process__management.html#gab7ed321f5bf4776d42e1d91158d67b8d", null ], [ "MSG_process_migrate", "group__m__process__management.html#ga6651c72dff79c7f1aa6eff05db5b3063", null ], [ "MSG_process_get_data", "group__m__process__management.html#ga2a510fa3957f963a04eaf6b483bfc6a9", null ], [ "MSG_process_set_data", "group__m__process__management.html#gad1ad359bc57b8a7008435ee29e1da681", null ], [ "MSG_process_set_data_cleanup", "group__m__process__management.html#ga2c75b91ef5b61cad66a7fa3a72d122d0", null ], [ "MSG_process_get_host", "group__m__process__management.html#ga7b74e6c2c40a8365b4bed0e37c798ea5", null ], [ "MSG_process_from_PID", "group__m__process__management.html#ga842d26b5c9352aea228378d8ef12209b", null ], [ "MSG_process_set_kill_time", "group__m__process__management.html#ga090d763945c2286f7227f1fe069efb79", null ], [ "MSG_process_get_PID", "group__m__process__management.html#ga180e1dbb474bda1958a409825e2928cb", null ], [ "MSG_process_get_PPID", "group__m__process__management.html#ga9f28a934b5e2e220093131c7c93d63c4", null ], [ "MSG_process_get_name", "group__m__process__management.html#gaf22fa3dcf713f37e292397eea9744e7a", null ], [ "MSG_process_get_property_value", "group__m__process__management.html#ga7894a7c080a4821b49b17d0b6abd46ae", null ], [ "MSG_process_get_properties", "group__m__process__management.html#gad7570aff7510cbed3fc1dc3b97d0231b", null ], [ "MSG_process_self_PID", "group__m__process__management.html#ga2eea811c91c7e85a21160b53d65ec79c", null ], [ "MSG_process_self_PPID", "group__m__process__management.html#ga0b6f46d91ad8f9e6862e26d8a89d2047", null ], [ "MSG_process_self", "group__m__process__management.html#gaf76911391b5116a7d1775e74185e64d5", null ], [ "MSG_process_suspend", "group__m__process__management.html#gac00bbc4ebc824d14a3f6719de8190618", null ], [ "MSG_process_resume", "group__m__process__management.html#ga9f25a30269f39c7683d18f9d4e1fd331", null ], [ "MSG_process_is_suspended", "group__m__process__management.html#ga4fd646e5d31bdecfc5e93405a2c32d56", null ], [ "MSG_process_on_exit", "group__m__process__management.html#ga42cde2901797dfce3db7d13e0bcc02d5", null ], [ "MSG_process_auto_restart_set", "group__m__process__management.html#gaa8489360976ff79e94e3db2254e5b7db", null ] ];SimGrid-3.10/doc/html/group__XBT__dict__nnul.js000640 007661 000620 00000000673 12242224150 021635 0ustar00gierschand000000 000000 var group__XBT__dict__nnul = [ [ "xbt_dict_set_ext", "group__XBT__dict__nnul.html#gac10a4d2fd3a86576c1be1b61811317d8", null ], [ "xbt_dict_get_ext", "group__XBT__dict__nnul.html#ga7e5810ce5387ee78e25bb92c206deacd", null ], [ "xbt_dict_get_or_null_ext", "group__XBT__dict__nnul.html#gabfcc7b250b01f46a4397946a7a104fd1", null ], [ "xbt_dict_remove_ext", "group__XBT__dict__nnul.html#gad36d0be75e939e85ee17a9756332b6c4", null ] ];SimGrid-3.10/doc/html/group__m__host__management.js000640 007661 000620 00000004266 12242224150 022630 0ustar00gierschand000000 000000 var group__m__host__management = [ [ "msg_host_t", "group__m__host__management.html#ga0cc2134715cceaeea82df1c1305fbecf", null ], [ "MSG_host_set_data", "group__m__host__management.html#gab52e164f5e7710facf114234152cfe85", null ], [ "MSG_host_get_data", "group__m__host__management.html#ga074e447602d8c0eab3f442c78a1dfe5f", null ], [ "MSG_host_get_name", "group__m__host__management.html#gad4daf43406f4dce8caae5310cdf40bde", null ], [ "MSG_host_self", "group__m__host__management.html#ga8552d95b844f896978eca735cbd73e9f", null ], [ "MSG_get_host_number", "group__m__host__management.html#gaafceb2773bb9e39878592ff9a9a81a01", null ], [ "MSG_hosts_as_dynar", "group__m__host__management.html#gaa886b8367e635efe11211b2aca5a1d43", null ], [ "MSG_get_host_msgload", "group__m__host__management.html#ga94b03ec6fe7c2bbf3c6c7bef2f89ee0b", null ], [ "MSG_get_host_speed", "group__m__host__management.html#ga6e910e3a884ebbe0b8ccae3277619374", null ], [ "MSG_host_get_core_number", "group__m__host__management.html#gab0df78011e11a95b3318120aa950a32f", null ], [ "MSG_host_get_process_list", "group__m__host__management.html#ga266e69ef1f9145caea0d507b84dd8044", null ], [ "MSG_host_get_property_value", "group__m__host__management.html#gadcefcdecf27f1dfb19a5c2ac5a775402", null ], [ "MSG_host_get_properties", "group__m__host__management.html#gac5d6359399bb8c8daba83cf62f47785f", null ], [ "MSG_host_set_property_value", "group__m__host__management.html#ga1b84e13e966d6ec0a2c013144d33f194", null ], [ "MSG_get_host_power_peak_at", "group__m__host__management.html#gaadeccc6816ff0e7809fb090207fa2504", null ], [ "MSG_get_host_current_power_peak", "group__m__host__management.html#ga0b6fdd80f2f66ac2fec711c712981ec5", null ], [ "MSG_get_host_nb_pstates", "group__m__host__management.html#ga921573751f861dc32ded07521b63eae0", null ], [ "MSG_set_host_power_peak_at", "group__m__host__management.html#ga2befbe7955de345ce7e02556f21bb7b4", null ], [ "MSG_get_host_consumed_energy", "group__m__host__management.html#ga906e9852651be55265a7c8489470e1e9", null ], [ "MSG_host_get_storage_list", "group__m__host__management.html#ga8398f7a284fd227c078e0d019819436b", null ] ];SimGrid-3.10/doc/html/group__TRACE__user__variables.js000640 007661 000620 00000011120 12242224150 023052 0ustar00gierschand000000 000000 var group__TRACE__user__variables = [ [ "TRACE_vm_variable_declare", "group__TRACE__user__variables.html#ga3aa9e4ecfa5e9f22cd4742bab032156d", null ], [ "TRACE_vm_variable_declare_with_color", "group__TRACE__user__variables.html#gaba9508562b4cbfbdc27904df5b913324", null ], [ "TRACE_vm_variable_set", "group__TRACE__user__variables.html#ga8f2371c0b41d2e462a2b94d81be4e148", null ], [ "TRACE_vm_variable_add", "group__TRACE__user__variables.html#gafc3f5b621994a050372b53996fed3557", null ], [ "TRACE_vm_variable_sub", "group__TRACE__user__variables.html#ga20ce487069e27bb3d2eca34295a3c20c", null ], [ "TRACE_vm_variable_set_with_time", "group__TRACE__user__variables.html#ga35222cf7a7c43583b550c3a5ac12bda2", null ], [ "TRACE_vm_variable_add_with_time", "group__TRACE__user__variables.html#ga8c4126bc2a48fe3fa811b9c0fc035914", null ], [ "TRACE_vm_variable_sub_with_time", "group__TRACE__user__variables.html#ga6de804cf8760ca23a2c787850150e42c", null ], [ "TRACE_get_vm_variables", "group__TRACE__user__variables.html#ga21d00d19c12055de18047e7973508e91", null ], [ "TRACE_host_variable_declare", "group__TRACE__user__variables.html#ga1672865b1bc48cff5bdb759edf0a7c90", null ], [ "TRACE_host_variable_declare_with_color", "group__TRACE__user__variables.html#gaacaaa40fa93265cc87dc804edb6a61b3", null ], [ "TRACE_host_variable_set", "group__TRACE__user__variables.html#ga650d08f8e0547ffe3d3c5a6a6ceebcdf", null ], [ "TRACE_host_variable_add", "group__TRACE__user__variables.html#gae0a8625485d9cffc5c12676b65cd959c", null ], [ "TRACE_host_variable_sub", "group__TRACE__user__variables.html#ga287fcd04c563ff2f795460850e4fc5d6", null ], [ "TRACE_host_variable_set_with_time", "group__TRACE__user__variables.html#ga3adacb71a4ab331c93efdf250f73cbfc", null ], [ "TRACE_host_variable_add_with_time", "group__TRACE__user__variables.html#gab6e7856a8181341e524cb4c9920c24ba", null ], [ "TRACE_host_variable_sub_with_time", "group__TRACE__user__variables.html#gae9ab3b84945d21bd06529d6705471d65", null ], [ "TRACE_get_host_variables", "group__TRACE__user__variables.html#ga421836b9a1d435300ff777cd04b68f4c", null ], [ "TRACE_link_variable_declare", "group__TRACE__user__variables.html#ga0b79340b330704fc7f30596988ce937c", null ], [ "TRACE_link_variable_declare_with_color", "group__TRACE__user__variables.html#ga1c3d1a22e56a7a9a2fa6e5e6feb7978e", null ], [ "TRACE_link_variable_set", "group__TRACE__user__variables.html#ga5a521dffa1a5705e9e65d77053ef0cfa", null ], [ "TRACE_link_variable_add", "group__TRACE__user__variables.html#gabbc55f2a3e25e49248be7d9b71f15cb8", null ], [ "TRACE_link_variable_sub", "group__TRACE__user__variables.html#ga009ecbc92025f7f2106386e5c8822e0b", null ], [ "TRACE_link_variable_set_with_time", "group__TRACE__user__variables.html#gaccafa87e0e58f2f3e282a7d23e56d792", null ], [ "TRACE_link_variable_add_with_time", "group__TRACE__user__variables.html#ga139bde27fec64c468d16b5231fc41118", null ], [ "TRACE_link_variable_sub_with_time", "group__TRACE__user__variables.html#gae6b2b2b1f2ad80588d5b4eccb7d5ab6c", null ], [ "TRACE_link_srcdst_variable_set", "group__TRACE__user__variables.html#gab93d0d4ffb907c4d4b43cdc53cbe4f8c", null ], [ "TRACE_link_srcdst_variable_add", "group__TRACE__user__variables.html#gae19a0f01ea6240ceaba534dab0f15919", null ], [ "TRACE_link_srcdst_variable_sub", "group__TRACE__user__variables.html#gaa0af1adaf2ee2e0ea3b045e8ef5c4edf", null ], [ "TRACE_link_srcdst_variable_set_with_time", "group__TRACE__user__variables.html#ga1abd4aeafd36e40fd2aa8f15566df013", null ], [ "TRACE_link_srcdst_variable_add_with_time", "group__TRACE__user__variables.html#ga0fec5f8d16e8d8ba4c82b2dba1ba6234", null ], [ "TRACE_link_srcdst_variable_sub_with_time", "group__TRACE__user__variables.html#ga37278937e06f41f0a0b06b6b91bbdfa6", null ], [ "TRACE_get_link_variables", "group__TRACE__user__variables.html#ga4b07c188420bbc143deea8dcdce06642", null ], [ "TRACE_host_state_declare", "group__TRACE__user__variables.html#ga65a9ce22195518352da785b36527864d", null ], [ "TRACE_host_state_declare_value", "group__TRACE__user__variables.html#gae5c66eb6918e75c5f38e06727d43e7bc", null ], [ "TRACE_host_set_state", "group__TRACE__user__variables.html#gacc421a6483570671a916a1d402add564", null ], [ "TRACE_host_push_state", "group__TRACE__user__variables.html#gab74f50cb9ed31f4436663acd34ed044a", null ], [ "TRACE_host_pop_state", "group__TRACE__user__variables.html#ga111dc1b94c7f69e999f98163922332a6", null ], [ "TRACE_host_reset_state", "group__TRACE__user__variables.html#ga995ecd02343b09fd5ecdce8b8b1cd0d7", null ] ];SimGrid-3.10/doc/html/group__XBT__dynar__array.js000640 007661 000620 00000002415 12242224150 022165 0ustar00gierschand000000 000000 var group__XBT__dynar__array = [ [ "xbt_dynar_get_cpy", "group__XBT__dynar__array.html#ga21d02c5fc8289c0bfc6c7d57222bcf90", null ], [ "xbt_dynar_set", "group__XBT__dynar__array.html#ga145c591bf6e4e58edaeeda85e639ff8e", null ], [ "xbt_dynar_replace", "group__XBT__dynar__array.html#ga22ccf4f0b47dd4a187af2e0a05abd323", null ], [ "xbt_dynar_insert_at", "group__XBT__dynar__array.html#ga26fe1c942bfecc8261d3fd9bc4df9bab", null ], [ "xbt_dynar_remove_at", "group__XBT__dynar__array.html#ga32a7eaf157e28533482cda7d84460705", null ], [ "xbt_dynar_remove_n_at", "group__XBT__dynar__array.html#ga2e5d288ac2ec53692fb0d56cbb213411", null ], [ "xbt_dynar_search", "group__XBT__dynar__array.html#ga0ec08fdba0bad2c1ef0e07269564edcd", null ], [ "xbt_dynar_search_or_negative", "group__XBT__dynar__array.html#gafff87cf8f67e2cc57e783a7c740a476e", null ], [ "xbt_dynar_member", "group__XBT__dynar__array.html#gaa1f2f12b574997619e36d46ac747f880", null ], [ "xbt_dynar_sort", "group__XBT__dynar__array.html#ga666d4ca5510ffa9f2cc9a1463c19e935", null ], [ "xbt_dynar_three_way_partition", "group__XBT__dynar__array.html#ga136826efe107769033d82e9d162ff65d", null ], [ "xbt_dynar_to_array", "group__XBT__dynar__array.html#ga8fb5745b688cae53556f69b8e728ef70", null ] ];SimGrid-3.10/doc/html/structs__smx__timer.html000640 007661 000620 00000013602 12242224150 021710 0ustar00gierschand000000 000000 SimGrid: s_smx_timer Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_smx_timer Struct Reference

Timer datatype. More...

#include <smx_private.h>

Detailed Description

Timer datatype.


The documentation for this struct was generated from the following file:
  • src/simix/smx_private.h
SimGrid-3.10/doc/html/dir_0fa1f9f9bfded4011a1639113cabffc9.html000640 007661 000620 00000034260 12242224150 023324 0ustar00gierschand000000 000000 SimGrid: src/xbt/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
xbt Directory Reference

Files

file  backtrace_dummy.c
file  backtrace_linux.c
file  backtrace_windows.c
file  config.c
file  cunit.c
file  dict.c
file  dict_cursor.c
file  dict_elm.c
file  dict_multi.c
file  dict_private.h
file  dynar.c
file  ex.c
file  ex_interface.h
file  fifo.c
file  fifo_private.h
file  graph.c
file  graph_private.h
file  graphxml.c
file  graphxml_parse.c
file  heap.c
file  heap_private.h
file  lib.c
file  log.c
file  log_private.h
file  mallocator.c
file  mallocator_private.h
file  parmap.c
file  RngStream.c
file  set.c
file  setset.c
file  setset_private.h
file  snprintf.c
file  swag.c
file  win32_ucontext.c
file  xbt_log_appender_file.c
file  xbt_log_layout_format.c
file  xbt_log_layout_simple.c
file  xbt_main.c
file  xbt_matrix.c
file  xbt_os_thread.c
file  xbt_os_time.c
file  xbt_peer.c
file  xbt_queue.c
file  xbt_replay.c
file  xbt_sg_stubs.c
file  xbt_sg_synchro.c
file  xbt_sha.c
file  xbt_str.c
file  xbt_strbuff.c
file  xbt_virtu.c
SimGrid-3.10/doc/html/structs__xbt__parmap.js000640 007661 000620 00000003031 12242224150 021501 0ustar00gierschand000000 000000 var structs__xbt__parmap = [ [ "status", "structs__xbt__parmap.html#afe6c4afdbdfecc9dc4cc141e264e1fa7", null ], [ "work", "structs__xbt__parmap.html#acbf2e11c9c8d053907e5bc6f8e4d396d", null ], [ "thread_counter", "structs__xbt__parmap.html#a4cb1478d076f1df7aa59518292b9300e", null ], [ "num_workers", "structs__xbt__parmap.html#a4610f24b4081b535323b5ae767221137", null ], [ "workers", "structs__xbt__parmap.html#a8c93b6fa9e0bdfaf8322245e731bc2af", null ], [ "fun", "structs__xbt__parmap.html#ab41017148fff9bfd45f1e4562cd8881f", null ], [ "data", "structs__xbt__parmap.html#ae218d5ac5ff8b9a5910f445627cb248e", null ], [ "index", "structs__xbt__parmap.html#ac583971bdbd4b8d9693e6bb539da69fe", null ], [ "ready_cond", "structs__xbt__parmap.html#a4cf0a8a6d432cf3f1d9d5706d9c101e6", null ], [ "ready_mutex", "structs__xbt__parmap.html#ae87660dc030d4dd525227abcd178f67d", null ], [ "done_cond", "structs__xbt__parmap.html#a7abf26f2438db8b96cccabfe2866aece", null ], [ "done_mutex", "structs__xbt__parmap.html#a82dd2440e5bd6fbb9f5001ae9506e0a0", null ], [ "mode", "structs__xbt__parmap.html#ac414c60f2d3a61b47e436bfb96245969", null ], [ "master_wait_f", "structs__xbt__parmap.html#a675dabf4d9e2117c079aa3dcf1c82678", null ], [ "worker_signal_f", "structs__xbt__parmap.html#a9ba6b2ab3c8e1f943d9308c77c4f13ec", null ], [ "master_signal_f", "structs__xbt__parmap.html#a5cf66c7f69b8cf8e5546561d5feddfb5", null ], [ "worker_wait_f", "structs__xbt__parmap.html#a5524248ea1a35b7094e3c898e293bf0d", null ] ];SimGrid-3.10/doc/html/doxygen.png000640 007661 000620 00000007303 12242224150 017112 0ustar00gierschand000000 000000 PNG  IHDRh ;IDATx]y\պ~45%TL QPE"q11]8aw*(*" z`8 m,p$%B(8k6lk[߷;?kPx'tz3_Q4g@m ci{~4:Hc'PP7^h zbcP 3}OqNkT(?d ~z<4ǡ؞vz٦Zd,6k]Fz< Zs?sU2Sw1c`[}%ѽ.Լ6BLZ!F8[ T #g]:vu?vbR?wgb$kF~;عƕX?lNʪ,HCgAzlӺg ]jM3oҳ'=$f}GS_co.ȹ:ds:1={9?zqviDp moaEqҵw}~{j{ºFNë[OqOSXO]>muľe5{Jկ(bl}`UyacCAklysA7oJ .Be. Z'-PyF.lp&.j7rez19HG%qz׈c_k_")HJn~֘5 q5#+9T Rܸrzϴ̝ =υ{áOfwg|/$;֙ƭ]W"/< DఽB}yIEc^=[VhM$l];Kr¦* t$]M;I1!M (f<5~z mՠ>کIz;u[ie^ӳNF6B\}7+,'a -yHY,^f~?Hc{Z+4\sٷnߣFơsغD?<vkx0MlذIxdEEAMg*YE7ۙ^[uv[wG=Edn׶l'pGk+C82 dz3H BS[wŘ ~xptmţiQ歉AB1fى4uI]6% 1t.NJphz̠R1"3-"&1[:N mW0_œ 6&)ꦬ}~{m]zMP~^:eQT_*798ˍ 347E¿uSɻU_ NWeNӏ|;;d"ȉ޵ᆴ"ĴMM+bY_E]PXKНIޥoE<_(EP|m,өZߺk,kM`jzeU t36˷r}w:Χ |TܵQK_pໃYd0!a –W$$/\$ 2mLH dHV,:RZJaz*>_NT(‚^SVFU8E܈nd;8\C]=m:bDd=ߞUU5O|]Pv\]2"y[yzg{Y{Ù5;w{N3nĨwKݭ29Id y)P8ũ@mPwjl,6 hWd ump.DžtwR xBδYcxg*vo y򑕓[?V0NO난~󒯷h#Hk8kӍ^q@]ӓ,56-κUn[>]@nϜp[6# 4tn:}8T9_Y$/GK(ђM`dѺ;OB &P{qhJ+閧l2M_1ӫtlya L^y.۽[ u/]iS}N>e1qjf&iT\=kϛX-.84V5u!TE .OH4zwTr. xքHHg hT$yqzp< qrwI]I鲘s":ՖbզL69VW<;3?M3AV#ޯKUr9!qtH+6V/TS^pqgLP'5E ޺ n"2|;W"֬TwtO' +W+Z̖<&nO,I06.Z.h*INڒOegBXZ9hDSʍ A/c`A"z|ş;H#|%OOD mcƤqmu&~n πZj =_n[nN$_bE)8?6l}#bW( d-p&a"9ņ$ڛA!;{~8ޣ10`#kuN Qbh 8Mawhq(bK Z%m֍(J)@> 7% {y ohf>{p.­_%glZ\B2B #Һphݚ[<#SpA7Ht4:|gtL*($Ʃ$;b`=MM5ǾHH.HeA5}rd)T};Q5i2O00;,냔}g]79_{C>h{.II?[Kswz6u;OJa˶zvd l舊yc'rTWӰL |ʽhB T'ò]K(=Kx  L,Pʵu׈ž1ݫ;pGDxZY kf676oھH~޸ 8Up6(? K+?%ݷ/19U?B)l @=ޞkIENDB`SimGrid-3.10/doc/html/group__m__datatypes__management__details.html000640 007661 000620 00000013044 12242224150 026037 0ustar00gierschand000000 000000 SimGrid: SIMIX datatypes management details
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/awstats_logo3.png000664 007661 000620 00000006377 12242224150 020246 0ustar00gierschand000000 000000 PNG  IHDRf/(tIME $ή pHYsnu>gAMA a IDATx]hUǧ}N VōZzݻU#&!TDQII4A/En.QRoi&MvӯWf93<ϙմjVwӭ_VZfyw۷g/"z7t;sǎ ѻ۲,#w}7\|u޽?+Zmmmgx≟ayG|7%\f/°z۶mv-T*uy]K/_|w}L&СC=|詧b,bsOx*&y o/Ы tغu vO6\d_ v% }g{iuˊk2 f{6m+/첷zK֭;d^g 8^d֯_8TL)=@ ~{7>[n/`8րd9ꪫjHrpZGoۗ옵ZC_ϟ~;묳p4^xk/plGcosl L7p4+_??V2;kƍ2/99۷3d27xă>x_v\ǩƭRQqff bEi1K@ lh̃G7wU|gyf4F3s4kxd\J g3]¬@ \?۟ fT,Pz@dŠ)#' l![""L8/T*%8}=#Q RP>V1쁁>uf6#~ĢAНquSZ|j<9x2.OEF\_ N|tr/v97۟ec' lWeDE LIvxŵ'&:FݪSUjuF1 ql 2&Ke%j@ r4.8ljj۴|=AԼ0n Tj"7U` S2Ƣ SimGrid: Mallocator constructor and destructor
SimGrid  3.10
Versatile Simulation of Distributed Systems
Mallocator constructor and destructor

Typedefs

typedef struct s_xbt_mallocator * xbt_mallocator_t
 Mallocator data type (opaque structure)

Functions

xbt_mallocator_t xbt_mallocator_new (int size, pvoid_f_void_t new_f, void_f_pvoid_t free_f, void_f_pvoid_t reset_f)
 Constructor.
void xbt_mallocator_free (xbt_mallocator_t mallocator)
 Destructor.

Detailed Description

Function Documentation

xbt_mallocator_t xbt_mallocator_new ( int  size,
pvoid_f_void_t  new_f,
void_f_pvoid_t  free_f,
void_f_pvoid_t  reset_f 
)

Constructor.

Parameters
sizesize of the internal stack: number of objects the mallocator will be able to store
new_ffunction to allocate a new object of your datatype, called in xbt_mallocator_get() when the mallocator is empty
free_ffunction to free an object of your datatype, called in xbt_mallocator_release() when the stack is full, and when the mallocator is freed.
reset_ffunction to reinitialise an object of your datatype, called when you extract an object from the mallocator (can be NULL)

Create and initialize a new mallocator for a given datatype.

Returns
pointer to the created mallocator
See Also
xbt_mallocator_free()
void xbt_mallocator_free ( xbt_mallocator_t  m)

Destructor.

Parameters
mthe mallocator you want to destroy

Destroy the mallocator and all its data. The function free_f is called on each object in the mallocator.

See Also
xbt_mallocator_new()
SimGrid-3.10/doc/html/internals.js000640 007661 000620 00000011006 12242224150 017257 0ustar00gierschand000000 000000 var internals = [ [ "Overview of the toolkit components", "internals.html#ug_overview", [ [ "Programmation environments layer", "internals.html#ug_overview_envs", null ], [ "Simulation kernel layer", "internals.html#ug_overview_kernel", null ], [ "Base layer", "internals.html#ug_overview_fondation", null ], [ "Tracing simulation", "internals.html#ug_lucas_layer", null ] ] ], [ "Documenting SimGrid", "inside_doxygen.html", [ [ "Adding a new module to the reference guide", "inside_doxygen.html#inside_doxygen_module", [ [ "Declaring the module to doxygen", "inside_doxygen.html#inside_doxygen_module_create", null ], [ "Adding symbols to your module", "inside_doxygen.html#inside_doxygen_module_populate", null ], [ "Documenting the symbols of your module", "inside_doxygen.html#inside_doxygen_module_document", null ] ] ], [ "Adding a new page to the user guide", "inside_doxygen.html#inside_doxygen_page", [ [ "Writing a new documentation page", "inside_doxygen.html#inside_doxygen_page_write", null ], [ "Registering a documentation page to doxygen", "inside_doxygen.html#inside_doxygen_page_doxy", null ], [ "Registering a documentation page to cmake", "inside_doxygen.html#inside_doxygen_page_cmake", null ] ] ], [ "Adding an image to the documentation", "inside_doxygen.html#inside_doxygen_image", null ], [ "Working on the website", "inside_doxygen.html#inside_doxygen_website", null ], [ "Regenerating the documentation", "inside_doxygen.html#inside_doxygen_regen", null ] ] ], [ "Extending SimGrid", "inside_extending.html", [ [ "How to add a new MSG function?", "inside_extending.html#simgrid_dev_guide_api", null ], [ "How to add a new model in surf?", "inside_extending.html#simgrid_dev_guide_model", null ], [ "How to add a new simcall?", "inside_extending.html#simgrid_dev_guide_simcall", null ], [ "What is How to add a new tag for xml files?", "inside_extending.html#simgrid_dev_guide_tag", null ] ] ], [ "Modifying the cmake files", "inside_cmake.html", [ [ "Generalities on Cmake", "inside_cmake.html#inside_cmake_intro", [ [ "What is Cmake?", "inside_cmake.html#inside_cmake_what", null ], [ "Why cmake?", "inside_cmake.html#inside_cmake_why", null ] ] ], [ "How to add source files?", "inside_cmake.html#inside_cmake_addsrc", null ], [ "How to add examples?", "inside_cmake.html#cmake_dev_guide_ex", null ], [ "How to add tests?", "inside_cmake.html#inside_cmake_addtest", [ [ "Unit testing in SimGrid", "inside_cmake.html#inside_cmake_addtest_unit", null ], [ "Integration testing in SimGrid", "inside_cmake.html#inside_cmake_addtest_integration", null ], [ "Performance testing in SimGrid", "inside_cmake.html#inside_cmake_addtest_perf", null ] ] ] ] ], [ "SimGrid Developer Guide - Releasing", "inside_release.html", [ [ "Releasing the main library", "inside_release.html#inside_release_c", [ [ "Before releasing", "inside_release.html#inside_release_c_preconditions", null ], [ "Building the source archive", "inside_release.html#inside_release_c_source", null ], [ "Binary distribution under Win32", "inside_release.html#inside_release_c_win32", null ], [ "Check list after releasing", "inside_release.html#inside_release_c_postchecks", null ] ] ], [ "Releasing the bindings", "inside_release.html#inside_release_bindings", null ] ] ], [ "Automatic Testing Infrastructure", "inside_autotests.html", [ [ "How to run test in pipol?", "inside_autotests.html#xps_dev_guide_pipol", [ [ "What is PIPOL?", "inside_autotests.html#inside_autotests_dev_guide_pipol_general", null ], [ "From PIPOL frontend", "inside_autotests.html#inside_autotests_dev_guide_pipol_frontend", null ], [ "From a computer", "inside_autotests.html#inside_autotests_dev_guide_pipol_home", null ] ] ], [ "How to use nightly builds?", "inside_autotests.html#inside_autotests_dev_guide_pipol_nightly", null ], [ "How to report tests in cdash?", "inside_autotests.html#inside_autotests_dev_guide_cdash", null ], [ "Infrastructure of the SimGrid Performance Regresion tests", "inside_autotests.html#inside_autotests_perf", [ [ "How to execute g5k campaign?", "inside_autotests.html#inside_autotests_dev_guide_g5k_campaign", null ], [ "How to analyze logs?", "inside_autotests.html#inside_autotests_dev_guide_g5k_log", null ] ] ] ] ] ];SimGrid-3.10/doc/html/dir_7c4a5eaadd5fa4ec39b4115f433c2a9c.html000640 007661 000620 00000014043 12242224150 023317 0ustar00gierschand000000 000000 SimGrid: examples/msg/properties/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__SURF__API.js000640 007661 000620 00000000516 12242224150 020246 0ustar00gierschand000000 000000 var group__SURF__API = [ [ "Simulation", "group__SURF__simulation.html", "group__SURF__simulation" ], [ "SURF actions", "group__SURF__actions.html", "group__SURF__actions" ], [ "SURF resources", "group__SURF__resources.html", null ], [ "Create a new API", "group__SURF__build__api.html", "group__SURF__build__api" ] ];SimGrid-3.10/doc/html/search/002750 007661 000620 00000000000 12242224150 016172 5ustar00gierschand000000 000000 SimGrid-3.10/doc/html/search/all_73.html000640 007661 000620 00000001704 12242224150 020142 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_6c.html000640 007661 000620 00000001712 12242224150 021420 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_74.html000640 007661 000620 00000001704 12242224150 020143 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_63.js000640 007661 000620 00000002672 12242224150 017616 0ustar00gierschand000000 000000 var searchData= [ ['cancel_5ferror',['cancel_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a78725e8318a373565146a9c29698eb30',1,'ex.h']]], ['catch',['CATCH',['../group__XBT__ex.html#gab3271e393133e395129cc74272f9fae2',1,'ex.h']]], ['catch_5fanonymous',['CATCH_ANONYMOUS',['../group__XBT__ex.html#ga070f91546c08b1e31c1d7184c3c9b345',1,'ex.h']]], ['category',['category',['../structxbt__ex__t.html#a2fdd312ae1d96663701d743283404924',1,'xbt_ex_t::category()'],['../structsurf__action.html#ad4acecd52a2d4699e5f2145225fc890d',1,'surf_action::category()']]], ['contributing_20to_20simgrid',['Contributing to SimGrid',['../contributing.html',1,'advanced']]], ['cost',['cost',['../structsurf__action.html#a240981003cb7b2ef07b822b07a3e9973',1,'surf_action']]], ['communication_20management_20functions',['Communication Management Functions',['../group__simix__comm__management.html',1,'']]], ['create_20a_20new_20api',['Create a new API',['../group__SURF__build__api.html',1,'']]], ['configuration_20type_20declaration_20and_20memory_20management',['Configuration type declaration and memory management',['../group__XBT__cfg__decl.html',1,'']]], ['configuration_20support',['Configuration support',['../group__XBT__config.html',1,'']]], ['cursors_20on_20dictionaries',['Cursors on dictionaries',['../group__XBT__dict__curs.html',1,'']]], ['cursors_20on_20dynar',['Cursors on dynar',['../group__XBT__dynar__cursor.html',1,'']]] ]; SimGrid-3.10/doc/html/search/groups_74.js000640 007661 000620 00000001610 12242224150 020356 0ustar00gierschand000000 000000 var searchData= [ ['task_20management_20functions',['Task Management Functions',['../group__m__task__management.html',1,'']]], ['task_20actions',['Task Actions',['../group__msg__task__usage.html',1,'']]], ['trace_2ddriven_20simulations',['Trace-driven simulations',['../group__msg__trace__driven.html',1,'']]], ['tasks_20dependencies',['Tasks dependencies',['../group__SD__task__dependency__management.html',1,'']]], ['tasks',['Tasks',['../group__SD__task__management.html',1,'']]], ['trace',['TRACE',['../group__TRACE__API.html',1,'']]], ['tracing_20categories',['Tracing categories',['../group__TRACE__category.html',1,'']]], ['tracing_20marks',['Tracing marks',['../group__TRACE__mark.html',1,'']]], ['tracing_20user_20variables',['Tracing user variables',['../group__TRACE__user__variables.html',1,'']]], ['thread_20stuff',['Thread stuff',['../group__XBT__thread.html',1,'']]] ]; SimGrid-3.10/doc/html/search/all_77.js000640 007661 000620 00000002052 12242224150 017613 0ustar00gierschand000000 000000 var searchData= [ ['workstations',['Workstations',['../group__SD__workstation__management.html',1,'']]], ['watched_5fhosts_5flib',['watched_hosts_lib',['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.h'],['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.c'],['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.h'],['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.h']]], ['work',['work',['../structs__xbt__parmap.html#acbf2e11c9c8d053907e5bc6f8e4d396d',1,'s_xbt_parmap']]], ['worker_5fsignal_5ff',['worker_signal_f',['../structs__xbt__parmap.html#a9ba6b2ab3c8e1f943d9308c77c4f13ec',1,'s_xbt_parmap']]], ['worker_5fwait_5ff',['worker_wait_f',['../structs__xbt__parmap.html#a5524248ea1a35b7094e3c898e293bf0d',1,'s_xbt_parmap']]], ['workers',['workers',['../structs__xbt__parmap.html#a8c93b6fa9e0bdfaf8322245e731bc2af',1,'s_xbt_parmap']]] ]; SimGrid-3.10/doc/html/search/enumvalues_6e.html000640 007661 000620 00000001713 12242224150 021637 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_5f.html000640 007661 000620 00000001712 12242224150 021462 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_62.js000640 007661 000620 00000000242 12242224150 021220 0ustar00gierschand000000 000000 var searchData= [ ['bound_5ferror',['bound_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854ae2954a4c5a79d65f9f68675fea93376b',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/search_l.png000640 007661 000620 00000001134 12242224150 020456 0ustar00gierschand000000 000000 PNG  IHDR- pHYs   cHRMms8zʴ3Dv6*IDATxڬT=P~91M@0FPD/ѡ.;JtCڥ܊D(I.xo4hpFD8Ecmmnnl1 ,"vh4zl6{D:iP%>aax
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_78.js000640 007661 000620 00000303124 12242224150 017620 0ustar00gierschand000000 000000 var searchData= [ ['xbt_5fabort',['xbt_abort',['../group__XBT__error.html#gaca8531c4c752e94c638c030c80528021',1,'sysdep.h']]], ['xbt',['XBT',['../group__XBT__API.html',1,'']]], ['xbt_5fassert',['xbt_assert',['../group__XBT__error.html#gadd837b8bf67480aea409a8580072f0be',1,'asserts.h']]], ['xbt_5fbacktrace_5fcurrent',['xbt_backtrace_current',['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_dummy.c'],['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_dummy.c'],['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_linux.c'],['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_windows.c']]], ['xbt_5fbacktrace_5fdisplay',['xbt_backtrace_display',['../group__XBT__ex.html#gaea1e39d44bcaaebb91a34f6ef053c60c',1,'xbt_backtrace_display(xbt_ex_t *e): ex.c'],['../group__XBT__ex.html#gaea1e39d44bcaaebb91a34f6ef053c60c',1,'xbt_backtrace_display(xbt_ex_t *e): ex.c']]], ['xbt_5fbacktrace_5fdisplay_5fcurrent',['xbt_backtrace_display_current',['../group__XBT__ex.html#ga36813e215c49af92c8a62dd8286d6421',1,'xbt_backtrace_display_current(void): ex.c'],['../group__XBT__syscall.html#ga36813e215c49af92c8a62dd8286d6421',1,'xbt_backtrace_display_current(void): ex.c'],['../group__XBT__ex.html#ga36813e215c49af92c8a62dd8286d6421',1,'xbt_backtrace_display_current(void): ex.c']]], ['xbt_5fbacktrace_5fno_5fmalloc',['xbt_backtrace_no_malloc',['../group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f',1,'xbt_backtrace_no_malloc(void **bt, int size): backtrace_dummy.c'],['../group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f',1,'xbt_backtrace_no_malloc(void **array, int size): backtrace_dummy.c'],['../group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f',1,'xbt_backtrace_no_malloc(void **array, int size): backtrace_linux.c']]], ['xbt_5fboolean_5fcouple',['xbt_boolean_couple',['../structxbt__boolean__couple.html',1,'']]], ['xbt_5fccritical',['XBT_CCRITICAL',['../group__XBT__log.html#ga4b5b9ad4a5086e2e9bd2ee47b3c03c9c',1,'log.h']]], ['xbt_5fcdebug',['XBT_CDEBUG',['../group__XBT__log.html#ga08edef341742c903623742c6e05d54ee',1,'log.h']]], ['xbt_5fcerror',['XBT_CERROR',['../group__XBT__log.html#ga0cd5463eb5b259b005b5c3f87db1709a',1,'log.h']]], ['xbt_5fcfg_5fcb_5ft',['xbt_cfg_cb_t',['../group__XBT__cfg__decl.html#ga4080887ffe36fb58611ee70094c003be',1,'config.h']]], ['xbt_5fcfg_5fcheck',['xbt_cfg_check',['../group__XBT__cfg__register.html#ga6c53f538a2901ceca585e075e43e3c3e',1,'xbt_cfg_check(xbt_cfg_t cfg): config.c'],['../group__XBT__cfg__register.html#ga6c53f538a2901ceca585e075e43e3c3e',1,'xbt_cfg_check(xbt_cfg_t cfg): config.c']]], ['xbt_5fcfg_5fcpy',['xbt_cfg_cpy',['../group__XBT__cfg__decl.html#gac679f68b23823dc08aceaefaf9b372da',1,'xbt_cfg_cpy(xbt_cfg_t tocopy, xbt_cfg_t *whereto): config.c'],['../group__XBT__cfg__decl.html#gac679f68b23823dc08aceaefaf9b372da',1,'xbt_cfg_cpy(xbt_cfg_t tocopy, xbt_cfg_t *whereto): config.c']]], ['xbt_5fcfg_5fdump',['xbt_cfg_dump',['../group__XBT__cfg__decl.html#ga9ef64a88e6fa46d78938b32247a29528',1,'xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cfg): config.c'],['../group__XBT__cfg__decl.html#ga9ef64a88e6fa46d78938b32247a29528',1,'xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cfg): config.c']]], ['xbt_5fcfg_5fempty',['xbt_cfg_empty',['../group__XBT__cfg__use.html#gabefb42525b7f81c273a9e15ebc2fc401',1,'xbt_cfg_empty(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__use.html#gabefb42525b7f81c273a9e15ebc2fc401',1,'xbt_cfg_empty(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5ffree',['xbt_cfg_free',['../group__XBT__cfg__decl.html#ga67592bfbe600c89f45f40ceeb7df2c9a',1,'xbt_cfg_free(xbt_cfg_t *cfg): config.c'],['../group__XBT__cfg__decl.html#ga67592bfbe600c89f45f40ceeb7df2c9a',1,'xbt_cfg_free(xbt_cfg_t *cfg): config.c']]], ['xbt_5fcfg_5fget_5fboolean',['xbt_cfg_get_boolean',['../group__XBT__cfg__get.html#ga09f8bb0889e37d084a28c43a86adb0c8',1,'xbt_cfg_get_boolean(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#ga09f8bb0889e37d084a28c43a86adb0c8',1,'xbt_cfg_get_boolean(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fboolean_5fat',['xbt_cfg_get_boolean_at',['../group__XBT__cfg__get.html#ga0802bc4a5f9d6e418c1ff9bdefa1e782',1,'xbt_cfg_get_boolean_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#ga0802bc4a5f9d6e418c1ff9bdefa1e782',1,'xbt_cfg_get_boolean_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5fdouble',['xbt_cfg_get_double',['../group__XBT__cfg__get.html#ga31012ed478ffd718fafac27b66f653b2',1,'xbt_cfg_get_double(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#ga31012ed478ffd718fafac27b66f653b2',1,'xbt_cfg_get_double(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fdouble_5fat',['xbt_cfg_get_double_at',['../group__XBT__cfg__get.html#gab893722f0ee3b17a6fe0ae7534f60d73',1,'xbt_cfg_get_double_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#gab893722f0ee3b17a6fe0ae7534f60d73',1,'xbt_cfg_get_double_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5fdynar',['xbt_cfg_get_dynar',['../group__XBT__cfg__get.html#gab69701ad4dbc805b23573f0e4ac02a6f',1,'xbt_cfg_get_dynar(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#gab69701ad4dbc805b23573f0e4ac02a6f',1,'xbt_cfg_get_dynar(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fint',['xbt_cfg_get_int',['../group__XBT__cfg__get.html#gaf058b35acfe7f058412fece263b9bede',1,'xbt_cfg_get_int(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#gaf058b35acfe7f058412fece263b9bede',1,'xbt_cfg_get_int(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fint_5fat',['xbt_cfg_get_int_at',['../group__XBT__cfg__get.html#gae59bb89c4d59bcc7a47193444369141f',1,'xbt_cfg_get_int_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#gae59bb89c4d59bcc7a47193444369141f',1,'xbt_cfg_get_int_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5fpeer',['xbt_cfg_get_peer',['../group__XBT__cfg__get.html#gad5690b3e30986f2b43e0fd0a92b3b553',1,'xbt_cfg_get_peer(xbt_cfg_t cfg, const char *name, char **peer, int *port): config.c'],['../group__XBT__cfg__get.html#gad5690b3e30986f2b43e0fd0a92b3b553',1,'xbt_cfg_get_peer(xbt_cfg_t cfg, const char *name, char **peer, int *port): config.c']]], ['xbt_5fcfg_5fget_5fpeer_5fat',['xbt_cfg_get_peer_at',['../group__XBT__cfg__get.html#ga0555ea640404cc5214c7243e6e91b070',1,'xbt_cfg_get_peer_at(xbt_cfg_t cfg, const char *name, int pos, char **peer, int *port): config.c'],['../group__XBT__cfg__get.html#ga0555ea640404cc5214c7243e6e91b070',1,'xbt_cfg_get_peer_at(xbt_cfg_t cfg, const char *name, int pos, char **peer, int *port): config.c']]], ['xbt_5fcfg_5fget_5fstring',['xbt_cfg_get_string',['../group__XBT__cfg__get.html#ga6e8854c299ca293a8531f3ac477babdd',1,'xbt_cfg_get_string(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#ga6e8854c299ca293a8531f3ac477babdd',1,'xbt_cfg_get_string(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fstring_5fat',['xbt_cfg_get_string_at',['../group__XBT__cfg__get.html#ga436a50804f44ad8d4cb7e3b4282c3cf4',1,'xbt_cfg_get_string_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#ga436a50804f44ad8d4cb7e3b4282c3cf4',1,'xbt_cfg_get_string_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5ftype',['xbt_cfg_get_type',['../group__XBT__cfg__register.html#ga754d4928f875979d3fe3dadbb5c3d32e',1,'xbt_cfg_get_type(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__register.html#ga754d4928f875979d3fe3dadbb5c3d32e',1,'xbt_cfg_get_type(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fhelp',['xbt_cfg_help',['../group__XBT__cfg__register.html#ga20967f829423faa8b91e35978ef46252',1,'xbt_cfg_help(xbt_cfg_t cfg): config.c'],['../group__XBT__cfg__register.html#ga20967f829423faa8b91e35978ef46252',1,'xbt_cfg_help(xbt_cfg_t cfg): config.c']]], ['xbt_5fcfg_5fnew',['xbt_cfg_new',['../group__XBT__cfg__decl.html#ga25f767ddf162fcf5cf45c2aac58f47b8',1,'xbt_cfg_new(void): config.c'],['../group__XBT__cfg__decl.html#ga25f767ddf162fcf5cf45c2aac58f47b8',1,'xbt_cfg_new(void): config.c']]], ['xbt_5fcfg_5fregister',['xbt_cfg_register',['../group__XBT__cfg__register.html#gad60c5763f9eba3371840f7eb5eaccf6d',1,'xbt_cfg_register(xbt_cfg_t *cfg, const char *name, const char *description, e_xbt_cfgelm_type_t type, int min, int max, xbt_cfg_cb_t cb_set, xbt_cfg_cb_t cb_rm): config.c'],['../group__XBT__cfg__register.html#gad60c5763f9eba3371840f7eb5eaccf6d',1,'xbt_cfg_register(xbt_cfg_t *cfg, const char *name, const char *desc, e_xbt_cfgelm_type_t type, int min, int max, xbt_cfg_cb_t cb_set, xbt_cfg_cb_t cb_rm): config.c']]], ['xbt_5fcfg_5fregister_5fstr',['xbt_cfg_register_str',['../group__XBT__cfg__register.html#ga0dd096bfc41dc388b5d82a670dfe23f7',1,'xbt_cfg_register_str(xbt_cfg_t *cfg, const char *entry): config.c'],['../group__XBT__cfg__register.html#ga0dd096bfc41dc388b5d82a670dfe23f7',1,'xbt_cfg_register_str(xbt_cfg_t *cfg, const char *entry): config.c']]], ['xbt_5fcfg_5frm_5fat',['xbt_cfg_rm_at',['../group__XBT__cfg__use.html#gaf90fa7699759834310e5fc90d4cf2594',1,'xbt_cfg_rm_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__use.html#gaf90fa7699759834310e5fc90d4cf2594',1,'xbt_cfg_rm_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5frm_5fboolean',['xbt_cfg_rm_boolean',['../group__XBT__cfg__use.html#gaf3b2d88039707c69865da363c6a91fb9',1,'xbt_cfg_rm_boolean(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#gaf3b2d88039707c69865da363c6a91fb9',1,'xbt_cfg_rm_boolean(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5frm_5fdouble',['xbt_cfg_rm_double',['../group__XBT__cfg__use.html#gaca2fa14bf75f51960538227132d696d5',1,'xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, double val): config.c'],['../group__XBT__cfg__use.html#gaca2fa14bf75f51960538227132d696d5',1,'xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, double val): config.c']]], ['xbt_5fcfg_5frm_5fint',['xbt_cfg_rm_int',['../group__XBT__cfg__use.html#ga6dd959a8fc5ea496641f329423964681',1,'xbt_cfg_rm_int(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#ga6dd959a8fc5ea496641f329423964681',1,'xbt_cfg_rm_int(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5frm_5fpeer',['xbt_cfg_rm_peer',['../group__XBT__cfg__use.html#ga495c3de5609e29eb4a5a2edaff1e9119',1,'xbt_cfg_rm_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c'],['../group__XBT__cfg__use.html#ga495c3de5609e29eb4a5a2edaff1e9119',1,'xbt_cfg_rm_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c']]], ['xbt_5fcfg_5frm_5fstring',['xbt_cfg_rm_string',['../group__XBT__cfg__use.html#ga6b96677e59c03e920f616ef8f6f03db3',1,'xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga6b96677e59c03e920f616ef8f6f03db3',1,'xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fset',['xbt_cfg_set',['../group__XBT__cfg__use.html#ga7abcc7c8e0c839f5430ccc5bb04cd29b',1,'xbt_cfg_set(xbt_cfg_t cfg, const char *name,...): config.c'],['../group__XBT__cfg__use.html#ga7abcc7c8e0c839f5430ccc5bb04cd29b',1,'xbt_cfg_set(xbt_cfg_t cfg, const char *name,...): config.c']]], ['xbt_5fcfg_5fset_5fas_5fstring',['xbt_cfg_set_as_string',['../group__XBT__cfg__use.html#ga81ecaccf6e2ae624866d9e4bd4b71927',1,'xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga81ecaccf6e2ae624866d9e4bd4b71927',1,'xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *key, const char *value): config.c']]], ['xbt_5fcfg_5fset_5fboolean',['xbt_cfg_set_boolean',['../group__XBT__cfg__use.html#ga14463cfbdbd7d19e758e443ac96b7e70',1,'xbt_cfg_set_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga14463cfbdbd7d19e758e443ac96b7e70',1,'xbt_cfg_set_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fset_5fdouble',['xbt_cfg_set_double',['../group__XBT__cfg__use.html#ga660807bb21d0d7a3a0ac9219e2330dbe',1,'xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, double val): config.c'],['../group__XBT__cfg__use.html#ga660807bb21d0d7a3a0ac9219e2330dbe',1,'xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, double val): config.c']]], ['xbt_5fcfg_5fset_5fint',['xbt_cfg_set_int',['../group__XBT__cfg__use.html#ga593f941aa66b21104ebdaa2786a0265e',1,'xbt_cfg_set_int(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#ga593f941aa66b21104ebdaa2786a0265e',1,'xbt_cfg_set_int(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5fset_5fparse',['xbt_cfg_set_parse',['../group__XBT__cfg__use.html#ga660f47d0af70382a502cee9734e32229',1,'xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options): config.c'],['../group__XBT__cfg__use.html#ga660f47d0af70382a502cee9734e32229',1,'xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options): config.c']]], ['xbt_5fcfg_5fset_5fpeer',['xbt_cfg_set_peer',['../group__XBT__cfg__use.html#ga3ec95e8fb08cc7dffdc32fd7cb05f679',1,'xbt_cfg_set_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c'],['../group__XBT__cfg__use.html#ga3ec95e8fb08cc7dffdc32fd7cb05f679',1,'xbt_cfg_set_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c']]], ['xbt_5fcfg_5fset_5fstring',['xbt_cfg_set_string',['../group__XBT__cfg__use.html#gaf42b4fd31ad45646a03638ef32fc5a26',1,'xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#gaf42b4fd31ad45646a03638ef32fc5a26',1,'xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fset_5fvargs',['xbt_cfg_set_vargs',['../group__XBT__cfg__use.html#gad36ce933af452e3f74373b7a88b097bd',1,'xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa): config.c'],['../group__XBT__cfg__use.html#gad36ce933af452e3f74373b7a88b097bd',1,'xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa): config.c']]], ['xbt_5fcfg_5fsetdefault_5fboolean',['xbt_cfg_setdefault_boolean',['../group__XBT__cfg__use.html#gafbcf5ece0a77ed07d6571b940eb1bcf7',1,'xbt_cfg_setdefault_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#gafbcf5ece0a77ed07d6571b940eb1bcf7',1,'xbt_cfg_setdefault_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fsetdefault_5fdouble',['xbt_cfg_setdefault_double',['../group__XBT__cfg__use.html#gafa60b1f2d2e1351522f977cce3b54d99',1,'xbt_cfg_setdefault_double(xbt_cfg_t cfg, const char *name, double val): config.c'],['../group__XBT__cfg__use.html#gafa60b1f2d2e1351522f977cce3b54d99',1,'xbt_cfg_setdefault_double(xbt_cfg_t cfg, const char *name, double val): config.c']]], ['xbt_5fcfg_5fsetdefault_5fint',['xbt_cfg_setdefault_int',['../group__XBT__cfg__use.html#ga56c8db370b0a3ae4c638867a0e0911c0',1,'xbt_cfg_setdefault_int(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#ga56c8db370b0a3ae4c638867a0e0911c0',1,'xbt_cfg_setdefault_int(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5fsetdefault_5fpeer',['xbt_cfg_setdefault_peer',['../group__XBT__cfg__use.html#ga304c927c166b217d29eee9e18cb1e969',1,'xbt_cfg_setdefault_peer(xbt_cfg_t cfg, const char *name, const char *host, int port): config.c'],['../group__XBT__cfg__use.html#ga304c927c166b217d29eee9e18cb1e969',1,'xbt_cfg_setdefault_peer(xbt_cfg_t cfg, const char *name, const char *host, int port): config.c']]], ['xbt_5fcfg_5fsetdefault_5fstring',['xbt_cfg_setdefault_string',['../group__XBT__cfg__use.html#ga10751dc480c2ea9b0c9637c68ed359e6',1,'xbt_cfg_setdefault_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga10751dc480c2ea9b0c9637c68ed359e6',1,'xbt_cfg_setdefault_string(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5ft',['xbt_cfg_t',['../group__XBT__cfg__use.html#gac5894d3947cb042db07d729ebfe064ca',1,'config.h']]], ['xbt_5fcfg_5funregister',['xbt_cfg_unregister',['../group__XBT__cfg__register.html#gaec318f1ce663340e84726e5eb88ae81b',1,'xbt_cfg_unregister(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__register.html#gaec318f1ce663340e84726e5eb88ae81b',1,'xbt_cfg_unregister(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfgelm_5fboolean',['xbt_cfgelm_boolean',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cab46f486cddae583964bd0667fabb269b',1,'config.h']]], ['xbt_5fcfgelm_5fdouble',['xbt_cfgelm_double',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca35412ca92ec3591c76f5403810aed6f3',1,'config.h']]], ['xbt_5fcfgelm_5fint',['xbt_cfgelm_int',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6caf101f0c7af43525d4a07e9bcb5d3b7f2',1,'config.h']]], ['xbt_5fcfgelm_5fpeer',['xbt_cfgelm_peer',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca79bd0045369cbc55fe7191a28d31d168',1,'config.h']]], ['xbt_5fcfgelm_5fstring',['xbt_cfgelm_string',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cac8df732d454a4bc85379de2c154a737e',1,'config.h']]], ['xbt_5fcinfo',['XBT_CINFO',['../group__XBT__log.html#gac2f65621104f3bcff51738a12d5c2921',1,'log.h']]], ['xbt_5fcond_5fbroadcast',['xbt_cond_broadcast',['../group__XBT__synchro.html#ga0d3469f3d7692423b82786ffa4e30c70',1,'xbt_cond_broadcast(xbt_cond_t cond): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga0d3469f3d7692423b82786ffa4e30c70',1,'xbt_cond_broadcast(xbt_cond_t cond): xbt_sg_synchro.c']]], ['xbt_5fcond_5fdestroy',['xbt_cond_destroy',['../group__XBT__synchro.html#ga8382820073c787494cafa0634e86c96f',1,'xbt_cond_destroy(xbt_cond_t cond): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga8382820073c787494cafa0634e86c96f',1,'xbt_cond_destroy(xbt_cond_t cond): xbt_sg_synchro.c']]], ['xbt_5fcond_5finit',['xbt_cond_init',['../group__XBT__synchro.html#ga9ec2fa18ad2edb1356034fb6c488a9a3',1,'xbt_cond_init(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga9ec2fa18ad2edb1356034fb6c488a9a3',1,'xbt_cond_init(void): xbt_sg_synchro.c']]], ['xbt_5fcond_5fsignal',['xbt_cond_signal',['../group__XBT__synchro.html#ga20471db1f98e58b75d8d58ed66e48438',1,'xbt_cond_signal(xbt_cond_t cond): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga20471db1f98e58b75d8d58ed66e48438',1,'xbt_cond_signal(xbt_cond_t cond): xbt_sg_synchro.c']]], ['xbt_5fcond_5ft',['xbt_cond_t',['../group__XBT__synchro.html#gace9e6b68048d41411b38765f614c1301',1,'synchro_core.h']]], ['xbt_5fcond_5ftimedwait',['xbt_cond_timedwait',['../group__XBT__synchro.html#ga2283204fd8b68891a404c4101542a7e3',1,'xbt_cond_timedwait(xbt_cond_t cond, xbt_mutex_t mutex, double delay): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga2283204fd8b68891a404c4101542a7e3',1,'xbt_cond_timedwait(xbt_cond_t cond, xbt_mutex_t mutex, double delay): xbt_sg_synchro.c']]], ['xbt_5fcond_5fwait',['xbt_cond_wait',['../group__XBT__synchro.html#ga083997cea536a10a81ed9cbdee741ab4',1,'xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga083997cea536a10a81ed9cbdee741ab4',1,'xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fcritical',['XBT_CRITICAL',['../group__XBT__log.html#gadb4c7510140f9e4437be797baf5122a2',1,'log.h']]], ['xbt_5fcverb',['XBT_CVERB',['../group__XBT__log.html#ga2c0bed18aac8cf41d8f3480513f564bc',1,'log.h']]], ['xbt_5fcwarn',['XBT_CWARN',['../group__XBT__log.html#ga2c14b44f6b1abbf73104d17727315e3b',1,'log.h']]], ['xbt_5fdebug',['XBT_DEBUG',['../group__XBT__log.html#gaec7da836fa1482fcda89227dfb1284d9',1,'log.h']]], ['xbt_5fdict_5fcursor_5ffirst',['xbt_dict_cursor_first',['../group__XBT__dict__curs.html#gaed25ac933321fa3837877f2210979db7',1,'xbt_dict_cursor_first(const xbt_dict_t dict, xbt_dict_cursor_t *cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#gaed25ac933321fa3837877f2210979db7',1,'xbt_dict_cursor_first(const xbt_dict_t dict, xbt_dict_cursor_t *cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5ffree',['xbt_dict_cursor_free',['../group__XBT__dict__curs.html#ga88eb8699e8778f9d1c5821da0bab1849',1,'xbt_dict_cursor_free(xbt_dict_cursor_t *cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga88eb8699e8778f9d1c5821da0bab1849',1,'xbt_dict_cursor_free(xbt_dict_cursor_t *cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fget_5fdata',['xbt_dict_cursor_get_data',['../group__XBT__dict__curs.html#ga2ebcfc14c62baafab95b9c994a2e6012',1,'xbt_dict_cursor_get_data(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga2ebcfc14c62baafab95b9c994a2e6012',1,'xbt_dict_cursor_get_data(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fget_5fkey',['xbt_dict_cursor_get_key',['../group__XBT__dict__curs.html#ga86b45796b83225553370f1ed2298bdba',1,'xbt_dict_cursor_get_key(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga86b45796b83225553370f1ed2298bdba',1,'xbt_dict_cursor_get_key(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fget_5for_5ffree',['xbt_dict_cursor_get_or_free',['../group__XBT__dict__curs.html#gad8ef9a04e0c50a3ed9a2dfa7ca36d599',1,'xbt_dict_cursor_get_or_free(xbt_dict_cursor_t *cursor, char **key, void **data): dict_cursor.c'],['../group__XBT__dict__curs.html#gad8ef9a04e0c50a3ed9a2dfa7ca36d599',1,'xbt_dict_cursor_get_or_free(xbt_dict_cursor_t *cursor, char **key, void **data): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fnew',['xbt_dict_cursor_new',['../group__XBT__dict__curs.html#ga5c29813d0de67603640f948b2d712209',1,'xbt_dict_cursor_new(const xbt_dict_t dict): dict_cursor.c'],['../group__XBT__dict__curs.html#ga5c29813d0de67603640f948b2d712209',1,'xbt_dict_cursor_new(const xbt_dict_t dict): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5frewind',['xbt_dict_cursor_rewind',['../group__XBT__dict__curs.html#ga0f0f7f26eef7dca0f3d837bac985a0ff',1,'xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga0f0f7f26eef7dca0f3d837bac985a0ff',1,'xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fset_5fdata',['xbt_dict_cursor_set_data',['../group__XBT__dict__curs.html#ga714c4490d2187b042a6993c68e860fad',1,'xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn): dict_cursor.c'],['../group__XBT__dict__curs.html#ga714c4490d2187b042a6993c68e860fad',1,'xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fstep',['xbt_dict_cursor_step',['../group__XBT__dict__curs.html#ga9871423165388f7637dd67116b68044a',1,'xbt_dict_cursor_step(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga9871423165388f7637dd67116b68044a',1,'xbt_dict_cursor_step(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fdump',['xbt_dict_dump',['../group__XBT__dict__basic.html#ga7d8b3282a0599ed922bbac9c0686e456',1,'xbt_dict_dump(xbt_dict_t dict, void(*output)(void *)): dict.c'],['../group__XBT__dict__basic.html#ga7d8b3282a0599ed922bbac9c0686e456',1,'xbt_dict_dump(xbt_dict_t dict, void_f_pvoid_t output): dict.c']]], ['xbt_5fdict_5fdump_5foutput_5fstring',['xbt_dict_dump_output_string',['../group__XBT__dict__basic.html#ga38d0003fc16ce9d437c9cb1c7b2e4a8e',1,'xbt_dict_dump_output_string(void *s): dict.c'],['../group__XBT__dict__basic.html#ga38d0003fc16ce9d437c9cb1c7b2e4a8e',1,'xbt_dict_dump_output_string(void *s): dict.c']]], ['xbt_5fdict_5fdump_5fsizes',['xbt_dict_dump_sizes',['../group__XBT__dict__basic.html#gaa8c1e5beb5655c030df76fbcce9c9bbc',1,'xbt_dict_dump_sizes(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#gaa8c1e5beb5655c030df76fbcce9c9bbc',1,'xbt_dict_dump_sizes(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5fforeach',['xbt_dict_foreach',['../group__XBT__dict__curs.html#ga3124aa46173fbf9fc703b748cebd4b70',1,'dict.h']]], ['xbt_5fdict_5ffree',['xbt_dict_free',['../group__XBT__dict__cons.html#ga35d2edf4086c13f0c096621aaf421c7d',1,'xbt_dict_free(xbt_dict_t *dict): dict.c'],['../group__XBT__dict__cons.html#ga35d2edf4086c13f0c096621aaf421c7d',1,'xbt_dict_free(xbt_dict_t *dict): dict.c']]], ['xbt_5fdict_5fget',['xbt_dict_get',['../group__XBT__dict__basic.html#gadc5080181f23fa2802b17b0982d76115',1,'xbt_dict_get(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gadc5080181f23fa2802b17b0982d76115',1,'xbt_dict_get(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5felm',['xbt_dict_get_elm',['../group__XBT__dict__basic.html#gab67a60fbdab0a809e15e0db87a146584',1,'xbt_dict_get_elm(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gab67a60fbdab0a809e15e0db87a146584',1,'xbt_dict_get_elm(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5felm_5for_5fnull',['xbt_dict_get_elm_or_null',['../group__XBT__dict__basic.html#gab3a92ff52f725fd7eff99ff619643272',1,'xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gab3a92ff52f725fd7eff99ff619643272',1,'xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5fext',['xbt_dict_get_ext',['../group__XBT__dict__nnul.html#ga7e5810ce5387ee78e25bb92c206deacd',1,'xbt_dict_get_ext(xbt_dict_t dict, const char *key, int key_len): dict.c'],['../group__XBT__dict__nnul.html#ga7e5810ce5387ee78e25bb92c206deacd',1,'xbt_dict_get_ext(xbt_dict_t dict, const char *key, int key_len): dict.c']]], ['xbt_5fdict_5fget_5fkey',['xbt_dict_get_key',['../group__XBT__dict__basic.html#ga16e3ad7d2a93d89b95582ad82d1ce100',1,'xbt_dict_get_key(xbt_dict_t dict, const void *data): dict.c'],['../group__XBT__dict__basic.html#ga16e3ad7d2a93d89b95582ad82d1ce100',1,'xbt_dict_get_key(xbt_dict_t dict, const void *data): dict.c']]], ['xbt_5fdict_5fget_5for_5fnull',['xbt_dict_get_or_null',['../group__XBT__dict__basic.html#gac1398f8a025c0f22195e74f2bd5522fa',1,'xbt_dict_get_or_null(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gac1398f8a025c0f22195e74f2bd5522fa',1,'xbt_dict_get_or_null(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5for_5fnull_5fext',['xbt_dict_get_or_null_ext',['../group__XBT__dict__nnul.html#gabfcc7b250b01f46a4397946a7a104fd1',1,'xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key, int key_len): dict.c'],['../group__XBT__dict__nnul.html#gabfcc7b250b01f46a4397946a7a104fd1',1,'xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key, int key_len): dict.c']]], ['xbt_5fdict_5fis_5fempty',['xbt_dict_is_empty',['../group__XBT__dict__basic.html#ga68fb97981b63d246769f4b6fbbcb3eaf',1,'xbt_dict_is_empty(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#ga68fb97981b63d246769f4b6fbbcb3eaf',1,'xbt_dict_is_empty(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5flength',['xbt_dict_length',['../group__XBT__dict__basic.html#gac0cf96e5e13da996aac831d8d10f0985',1,'xbt_dict_length(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#gac0cf96e5e13da996aac831d8d10f0985',1,'xbt_dict_length(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5fnew',['xbt_dict_new',['../group__XBT__dict__cons.html#ga3f03623cb96849ab40db9b9af25ac38c',1,'xbt_dict_new(void): dict.c'],['../group__XBT__dict__cons.html#ga3f03623cb96849ab40db9b9af25ac38c',1,'xbt_dict_new(void): dict.c']]], ['xbt_5fdict_5fnew_5fhomogeneous',['xbt_dict_new_homogeneous',['../group__XBT__dict__cons.html#ga99fe5eb49d3fa9f1f31fb6d519fb7197',1,'xbt_dict_new_homogeneous(void_f_pvoid_t free_ctn): dict.c'],['../group__XBT__dict__cons.html#ga99fe5eb49d3fa9f1f31fb6d519fb7197',1,'xbt_dict_new_homogeneous(void_f_pvoid_t free_ctn): dict.c']]], ['xbt_5fdict_5fremove',['xbt_dict_remove',['../group__XBT__dict__basic.html#gac8befeb2dc3ba97fb0ff1d3da83f21fb',1,'xbt_dict_remove(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gac8befeb2dc3ba97fb0ff1d3da83f21fb',1,'xbt_dict_remove(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fremove_5fext',['xbt_dict_remove_ext',['../group__XBT__dict__nnul.html#gad36d0be75e939e85ee17a9756332b6c4',1,'xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len): dict.c'],['../group__XBT__dict__nnul.html#gad36d0be75e939e85ee17a9756332b6c4',1,'xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len): dict.c']]], ['xbt_5fdict_5freset',['xbt_dict_reset',['../group__XBT__dict__basic.html#ga0fe854e3c13798e32ebc642c00be6ad4',1,'xbt_dict_reset(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#ga0fe854e3c13798e32ebc642c00be6ad4',1,'xbt_dict_reset(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5fset',['xbt_dict_set',['../group__XBT__dict__basic.html#ga5167ca9336b1c9d5e2a3dacd6b702055',1,'xbt_dict_set(xbt_dict_t dict, const char *key, void *data, void_f_pvoid_t free_ctn): dict.c'],['../group__XBT__dict__basic.html#ga5167ca9336b1c9d5e2a3dacd6b702055',1,'xbt_dict_set(xbt_dict_t dict, const char *key, void *data, void_f_pvoid_t free_ctn): dict.c']]], ['xbt_5fdict_5fset_5fext',['xbt_dict_set_ext',['../group__XBT__dict__nnul.html#gac10a4d2fd3a86576c1be1b61811317d8',1,'xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn): dict.c'],['../group__XBT__dict__nnul.html#gac10a4d2fd3a86576c1be1b61811317d8',1,'xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn): dict.c']]], ['xbt_5fdict_5fsize',['xbt_dict_size',['../group__XBT__dict__cons.html#ga79130ac36df5cbdc334a3424a92eff5d',1,'xbt_dict_size(xbt_dict_t dict): dict.c'],['../group__XBT__dict__cons.html#ga79130ac36df5cbdc334a3424a92eff5d',1,'xbt_dict_size(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5ft',['xbt_dict_t',['../group__XBT__dict__cons.html#gac60ea15fce6ea593be308de876712f04',1,'dict.h']]], ['xbt_5fdie',['xbt_die',['../group__XBT__error.html#ga9bf4916de59dbf2c5bc790e85df7c189',1,'sysdep.h']]], ['xbt_5fdynar_5fcursor_5frm',['xbt_dynar_cursor_rm',['../group__XBT__dynar__cursor.html#ga478b49fe9e8280b4c73b9ccd208a4f78',1,'xbt_dynar_cursor_rm(xbt_dynar_t dynar, unsigned int *const cursor): dynar.c'],['../group__XBT__dynar__cursor.html#ga478b49fe9e8280b4c73b9ccd208a4f78',1,'xbt_dynar_cursor_rm(xbt_dynar_t dynar, unsigned int *const cursor): dynar.c']]], ['xbt_5fdynar_5fforeach',['xbt_dynar_foreach',['../group__XBT__dynar__cursor.html#ga315906139864e84a34aa5610ba0be1fc',1,'dynar.h']]], ['xbt_5fdynar_5ffree',['xbt_dynar_free',['../group__XBT__dynar__cons.html#ga9b7808eb7a87dcf331a467f323ae16a6',1,'xbt_dynar_free(xbt_dynar_t *dynar): dynar.c'],['../group__XBT__dynar__cons.html#ga9b7808eb7a87dcf331a467f323ae16a6',1,'xbt_dynar_free(xbt_dynar_t *dynar): dynar.c']]], ['xbt_5fdynar_5ffree_5fcontainer',['xbt_dynar_free_container',['../group__XBT__dynar__cons.html#ga7bc3c4dffd7740c9c1ea129d1167c0bc',1,'xbt_dynar_free_container(xbt_dynar_t *dynar): dynar.c'],['../group__XBT__dynar__cons.html#ga7bc3c4dffd7740c9c1ea129d1167c0bc',1,'xbt_dynar_free_container(xbt_dynar_t *dynar): dynar.c']]], ['xbt_5fdynar_5ffree_5fvoidp',['xbt_dynar_free_voidp',['../group__XBT__dynar__cons.html#gacab2aaa46863a53beaa1637bd41995aa',1,'xbt_dynar_free_voidp(void *dynar): dynar.c'],['../group__XBT__dynar__cons.html#gacab2aaa46863a53beaa1637bd41995aa',1,'xbt_dynar_free_voidp(void *d): dynar.c']]], ['xbt_5fdynar_5fget_5fas',['xbt_dynar_get_as',['../group__XBT__dynar__speed.html#ga5604d34153e9c96ac193245757f63085',1,'dynar.h']]], ['xbt_5fdynar_5fget_5fcpy',['xbt_dynar_get_cpy',['../group__XBT__dynar__array.html#ga21d02c5fc8289c0bfc6c7d57222bcf90',1,'xbt_dynar_get_cpy(const xbt_dynar_t dynar, const unsigned long idx, void *const dst): dynar.c'],['../group__XBT__dynar__array.html#ga21d02c5fc8289c0bfc6c7d57222bcf90',1,'xbt_dynar_get_cpy(const xbt_dynar_t dynar, const unsigned long idx, void *const dst): dynar.c']]], ['xbt_5fdynar_5fget_5fptr',['xbt_dynar_get_ptr',['../group__XBT__dynar__ctn.html#ga7cee77666f148fc987bbdeca3d10bdc2',1,'xbt_dynar_get_ptr(const xbt_dynar_t dynar, const unsigned long idx): dynar.c'],['../group__XBT__dynar__ctn.html#ga7cee77666f148fc987bbdeca3d10bdc2',1,'xbt_dynar_get_ptr(const xbt_dynar_t dynar, const unsigned long idx): dynar.c']]], ['xbt_5fdynar_5fgetfirst_5fas',['xbt_dynar_getfirst_as',['../group__XBT__dynar__speed.html#ga209a34611a295f0e3516536e753893c3',1,'dynar.h']]], ['xbt_5fdynar_5fgetlast_5fas',['xbt_dynar_getlast_as',['../group__XBT__dynar__speed.html#gac056cfe5092e40327377547abd9995ee',1,'dynar.h']]], ['xbt_5fdynar_5finsert_5fat',['xbt_dynar_insert_at',['../group__XBT__dynar__array.html#ga26fe1c942bfecc8261d3fd9bc4df9bab',1,'xbt_dynar_insert_at(xbt_dynar_t const dynar, const int idx, const void *src): dynar.c'],['../group__XBT__dynar__array.html#ga26fe1c942bfecc8261d3fd9bc4df9bab',1,'xbt_dynar_insert_at(xbt_dynar_t const dynar, const int idx, const void *const src): dynar.c']]], ['xbt_5fdynar_5finsert_5fat_5fas',['xbt_dynar_insert_at_as',['../group__XBT__dynar__speed.html#ga767cbdbaddd71fb98140eb78309b5739',1,'dynar.h']]], ['xbt_5fdynar_5finsert_5fat_5fptr',['xbt_dynar_insert_at_ptr',['../group__XBT__dynar__ctn.html#ga06afc0831b210b5323e61a9a217d6158',1,'xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, const int idx): dynar.c'],['../group__XBT__dynar__ctn.html#ga06afc0831b210b5323e61a9a217d6158',1,'xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, const int idx): dynar.c']]], ['xbt_5fdynar_5fis_5fempty',['xbt_dynar_is_empty',['../group__XBT__dynar__misc.html#ga57aab83ad4ff1a1df5a1c293627c41d8',1,'xbt_dynar_is_empty(const xbt_dynar_t dynar): dynar.c'],['../group__XBT__dynar__misc.html#ga57aab83ad4ff1a1df5a1c293627c41d8',1,'xbt_dynar_is_empty(const xbt_dynar_t dynar): dynar.c']]], ['xbt_5fdynar_5flength',['xbt_dynar_length',['../group__XBT__dynar__misc.html#ga3beec123eb77ceda5b750f6f2ca48e18',1,'xbt_dynar_length(const xbt_dynar_t dynar): dynar.c'],['../group__XBT__dynar__misc.html#ga3beec123eb77ceda5b750f6f2ca48e18',1,'xbt_dynar_length(const xbt_dynar_t dynar): dynar.c']]], ['xbt_5fdynar_5fmap',['xbt_dynar_map',['../group__XBT__dynar__perl.html#ga02bb7b95aaa0fe03c26222f65566e744',1,'xbt_dynar_map(const xbt_dynar_t dynar, void_f_pvoid_t const op): dynar.c'],['../group__XBT__dynar__perl.html#ga02bb7b95aaa0fe03c26222f65566e744',1,'xbt_dynar_map(const xbt_dynar_t dynar, void_f_pvoid_t const op): dynar.c']]], ['xbt_5fdynar_5fmember',['xbt_dynar_member',['../group__XBT__dynar__array.html#gaa1f2f12b574997619e36d46ac747f880',1,'xbt_dynar_member(xbt_dynar_t const dynar, void *elem): dynar.c'],['../group__XBT__dynar__array.html#gaa1f2f12b574997619e36d46ac747f880',1,'xbt_dynar_member(xbt_dynar_t const dynar, void *const elem): dynar.c']]], ['xbt_5fdynar_5fmerge',['xbt_dynar_merge',['../group__XBT__dynar__misc.html#ga92e52b3898cb02ad47244b88ab7895e4',1,'xbt_dynar_merge(xbt_dynar_t *d1, xbt_dynar_t *d2): dynar.c'],['../group__XBT__dynar__misc.html#ga92e52b3898cb02ad47244b88ab7895e4',1,'xbt_dynar_merge(xbt_dynar_t *d1, xbt_dynar_t *d2): dynar.c']]], ['xbt_5fdynar_5fnew',['xbt_dynar_new',['../group__XBT__dynar__cons.html#ga69ab371f667dfe5aa51fb612b9afaca5',1,'xbt_dynar_new(const unsigned long elm_size, void_f_pvoid_t const free_f): dynar.c'],['../group__XBT__dynar__cons.html#ga69ab371f667dfe5aa51fb612b9afaca5',1,'xbt_dynar_new(const unsigned long elmsize, void_f_pvoid_t const free_f): dynar.c']]], ['xbt_5fdynar_5fpop',['xbt_dynar_pop',['../group__XBT__dynar__perl.html#ga37d2b11c522e02ede79a12a89575ceb1',1,'xbt_dynar_pop(xbt_dynar_t const dynar, void *const dst): dynar.c'],['../group__XBT__dynar__perl.html#ga37d2b11c522e02ede79a12a89575ceb1',1,'xbt_dynar_pop(xbt_dynar_t const dynar, void *const dst): dynar.c']]], ['xbt_5fdynar_5fpop_5fas',['xbt_dynar_pop_as',['../group__XBT__dynar__speed.html#gab6dd8b8802c7ad0b12a81ecd806370cc',1,'dynar.h']]], ['xbt_5fdynar_5fpop_5fptr',['xbt_dynar_pop_ptr',['../group__XBT__dynar__ctn.html#ga4f1ef94eae8a2060697a9674d46f0c2f',1,'xbt_dynar_pop_ptr(xbt_dynar_t const dynar): dynar.c'],['../group__XBT__dynar__ctn.html#ga4f1ef94eae8a2060697a9674d46f0c2f',1,'xbt_dynar_pop_ptr(xbt_dynar_t const dynar): dynar.c']]], ['xbt_5fdynar_5fpush',['xbt_dynar_push',['../group__XBT__dynar__perl.html#gac89da4c2c302218759c7fe477d8eacc0',1,'xbt_dynar_push(xbt_dynar_t const dynar, const void *src): dynar.c'],['../group__XBT__dynar__perl.html#gac89da4c2c302218759c7fe477d8eacc0',1,'xbt_dynar_push(xbt_dynar_t const dynar, const void *const src): dynar.c']]], ['xbt_5fdynar_5fpush_5fas',['xbt_dynar_push_as',['../group__XBT__dynar__speed.html#ga50d763465a98678a3e83afa6b5ecd243',1,'dynar.h']]], ['xbt_5fdynar_5fpush_5fptr',['xbt_dynar_push_ptr',['../group__XBT__dynar__ctn.html#ga35272457aa299d326977767a00e01ffe',1,'xbt_dynar_push_ptr(xbt_dynar_t const dynar): dynar.c'],['../group__XBT__dynar__ctn.html#ga35272457aa299d326977767a00e01ffe',1,'xbt_dynar_push_ptr(xbt_dynar_t const dynar): dynar.c']]], ['xbt_5fdynar_5fremove_5fat',['xbt_dynar_remove_at',['../group__XBT__dynar__array.html#ga32a7eaf157e28533482cda7d84460705',1,'xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void *const dst): dynar.c'],['../group__XBT__dynar__array.html#ga32a7eaf157e28533482cda7d84460705',1,'xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void *const object): dynar.c']]], ['xbt_5fdynar_5fremove_5fn_5fat',['xbt_dynar_remove_n_at',['../group__XBT__dynar__array.html#ga2e5d288ac2ec53692fb0d56cbb213411',1,'xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned int n, const int idx): dynar.c'],['../group__XBT__dynar__array.html#ga2e5d288ac2ec53692fb0d56cbb213411',1,'xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned int n, const int idx): dynar.c']]], ['xbt_5fdynar_5freplace',['xbt_dynar_replace',['../group__XBT__dynar__array.html#ga22ccf4f0b47dd4a187af2e0a05abd323',1,'xbt_dynar_replace(xbt_dynar_t dynar, const unsigned long idx, const void *object): dynar.c'],['../group__XBT__dynar__array.html#ga22ccf4f0b47dd4a187af2e0a05abd323',1,'xbt_dynar_replace(xbt_dynar_t dynar, const unsigned long idx, const void *const object): dynar.c']]], ['xbt_5fdynar_5freset',['xbt_dynar_reset',['../group__XBT__dynar__misc.html#gadbe6a462084ca281bab5ac3a1585097e',1,'xbt_dynar_reset(xbt_dynar_t const dynar): dynar.c'],['../group__XBT__dynar__misc.html#gadbe6a462084ca281bab5ac3a1585097e',1,'xbt_dynar_reset(xbt_dynar_t const dynar): dynar.c']]], ['xbt_5fdynar_5fsearch',['xbt_dynar_search',['../group__XBT__dynar__array.html#ga0ec08fdba0bad2c1ef0e07269564edcd',1,'xbt_dynar_search(xbt_dynar_t const dynar, void *elem): dynar.c'],['../group__XBT__dynar__array.html#ga0ec08fdba0bad2c1ef0e07269564edcd',1,'xbt_dynar_search(xbt_dynar_t const dynar, void *const elem): dynar.c']]], ['xbt_5fdynar_5fsearch_5for_5fnegative',['xbt_dynar_search_or_negative',['../group__XBT__dynar__array.html#gafff87cf8f67e2cc57e783a7c740a476e',1,'xbt_dynar_search_or_negative(xbt_dynar_t const dynar, void *const elem): dynar.c'],['../group__XBT__dynar__array.html#gafff87cf8f67e2cc57e783a7c740a476e',1,'xbt_dynar_search_or_negative(xbt_dynar_t const dynar, void *const elem): dynar.c']]], ['xbt_5fdynar_5fset',['xbt_dynar_set',['../group__XBT__dynar__array.html#ga145c591bf6e4e58edaeeda85e639ff8e',1,'xbt_dynar_set(xbt_dynar_t dynar, const int idx, const void *src): dynar.c'],['../group__XBT__dynar__array.html#ga145c591bf6e4e58edaeeda85e639ff8e',1,'xbt_dynar_set(xbt_dynar_t dynar, const int idx, const void *const src): dynar.c']]], ['xbt_5fdynar_5fset_5fas',['xbt_dynar_set_as',['../group__XBT__dynar__speed.html#gafee03470eed0dc5e8eb240288ba8b11b',1,'dynar.h']]], ['xbt_5fdynar_5fshift',['xbt_dynar_shift',['../group__XBT__dynar__perl.html#ga2966d02b350ef985447c4053c258a1a0',1,'xbt_dynar_shift(xbt_dynar_t const dynar, void *const dst): dynar.c'],['../group__XBT__dynar__perl.html#ga2966d02b350ef985447c4053c258a1a0',1,'xbt_dynar_shift(xbt_dynar_t const dynar, void *const dst): dynar.c']]], ['xbt_5fdynar_5fshrink',['xbt_dynar_shrink',['../group__XBT__dynar__cons.html#ga8c1a192e8119147d92eaf873a2861fc0',1,'xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots): dynar.c'],['../group__XBT__dynar__cons.html#ga8c1a192e8119147d92eaf873a2861fc0',1,'xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots_wanted): dynar.c']]], ['xbt_5fdynar_5fsort',['xbt_dynar_sort',['../group__XBT__dynar__array.html#ga666d4ca5510ffa9f2cc9a1463c19e935',1,'xbt_dynar_sort(xbt_dynar_t const dynar, int_f_cpvoid_cpvoid_t compar_fn): dynar.c'],['../group__XBT__dynar__array.html#ga666d4ca5510ffa9f2cc9a1463c19e935',1,'xbt_dynar_sort(xbt_dynar_t dynar, int_f_cpvoid_cpvoid_t compar_fn): dynar.c']]], ['xbt_5fdynar_5ft',['xbt_dynar_t',['../group__XBT__dynar__cons.html#gac826571988d2b63ae225e5c62ecdbc79',1,'dynar.h']]], ['xbt_5fdynar_5fthree_5fway_5fpartition',['xbt_dynar_three_way_partition',['../group__XBT__dynar__array.html#ga136826efe107769033d82e9d162ff65d',1,'xbt_dynar_three_way_partition(xbt_dynar_t const dynar, int_f_pvoid_t color): dynar.c'],['../group__XBT__dynar__array.html#ga136826efe107769033d82e9d162ff65d',1,'xbt_dynar_three_way_partition(xbt_dynar_t const dynar, int_f_pvoid_t color): dynar.c']]], ['xbt_5fdynar_5fto_5farray',['xbt_dynar_to_array',['../group__XBT__dynar__array.html#ga8fb5745b688cae53556f69b8e728ef70',1,'xbt_dynar_to_array(xbt_dynar_t dynar): dynar.c'],['../group__XBT__dynar__array.html#ga8fb5745b688cae53556f69b8e728ef70',1,'xbt_dynar_to_array(xbt_dynar_t dynar): dynar.c']]], ['xbt_5fdynar_5funshift',['xbt_dynar_unshift',['../group__XBT__dynar__perl.html#ga3499315d48944f3bfaf6aeea1e2c75e8',1,'xbt_dynar_unshift(xbt_dynar_t const dynar, const void *src): dynar.c'],['../group__XBT__dynar__perl.html#ga3499315d48944f3bfaf6aeea1e2c75e8',1,'xbt_dynar_unshift(xbt_dynar_t const dynar, const void *const src): dynar.c']]], ['xbt_5ferrcat_5ft',['xbt_errcat_t',['../group__XBT__ex.html#gaa45fec59aa57056784554a7f998f0854',1,'ex.h']]], ['xbt_5ferror',['XBT_ERROR',['../group__XBT__log.html#ga46c64033e6f2d9f309f498bbb2c475f5',1,'log.h']]], ['xbt_5fex_5fcatname',['xbt_ex_catname',['../group__XBT__ex.html#gad584839e617fbfe728225fc7bcfcda9f',1,'xbt_ex_catname(xbt_errcat_t cat): ex.c'],['../group__XBT__ex.html#gad584839e617fbfe728225fc7bcfcda9f',1,'xbt_ex_catname(xbt_errcat_t cat): ex.c']]], ['xbt_5fex_5ffree',['xbt_ex_free',['../group__XBT__ex.html#ga9a7c9f33be5ab51ff734142b07178553',1,'ex.h']]], ['xbt_5fex_5ft',['xbt_ex_t',['../structxbt__ex__t.html',1,'']]], ['xbt_5ffifo_5fcopy',['xbt_fifo_copy',['../group__XBT__fifo__misc.html#ga9fc2652fb4c1d80adbf4f8e7267846fd',1,'xbt_fifo_copy(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__misc.html#ga9fc2652fb4c1d80adbf4f8e7267846fd',1,'xbt_fifo_copy(xbt_fifo_t f): fifo.c']]], ['xbt_5ffifo_5fforeach',['xbt_fifo_foreach',['../group__XBT__fifo__direct.html#ga7062f0aae3a97fa72fcf86673675d434',1,'fifo.h']]], ['xbt_5ffifo_5ffree',['xbt_fifo_free',['../group__XBT__fifo__cons.html#ga7e4e0a12b0bb5a0cc761e926a6ec8ea7',1,'xbt_fifo_free(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__cons.html#ga7e4e0a12b0bb5a0cc761e926a6ec8ea7',1,'xbt_fifo_free(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5ffree_5fitem',['xbt_fifo_free_item',['../group__XBT__fifo__direct.html#ga4bfc376902e2e15da4acb31c2ac77d84',1,'xbt_fifo_free_item(xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#ga4bfc376902e2e15da4acb31c2ac77d84',1,'xbt_fifo_free_item(xbt_fifo_item_t b): fifo.c']]], ['xbt_5ffifo_5fget_5ffirst_5fitem',['xbt_fifo_get_first_item',['../group__XBT__fifo__direct.html#gadde4755e50e84bf3235182227cdc1580',1,'xbt_fifo_get_first_item(xbt_fifo_t l): fifo.c'],['../group__XBT__fifo__direct.html#gadde4755e50e84bf3235182227cdc1580',1,'xbt_fifo_get_first_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fget_5fitem_5fcontent',['xbt_fifo_get_item_content',['../group__XBT__fifo__direct.html#ga601af16f78f6f1753477ce8e91eece01',1,'xbt_fifo_get_item_content(xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#ga601af16f78f6f1753477ce8e91eece01',1,'xbt_fifo_get_item_content(xbt_fifo_item_t i): fifo.c']]], ['xbt_5ffifo_5fget_5flast_5fitem',['xbt_fifo_get_last_item',['../group__XBT__fifo__direct.html#ga8cbb245158703f78cab3d076804eaa61',1,'xbt_fifo_get_last_item(xbt_fifo_t l): fifo.c'],['../group__XBT__fifo__direct.html#ga8cbb245158703f78cab3d076804eaa61',1,'xbt_fifo_get_last_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fget_5fnext_5fitem',['xbt_fifo_get_next_item',['../group__XBT__fifo__direct.html#ga6fde465c7d19469ee07e28d7ae5f611b',1,'xbt_fifo_get_next_item(xbt_fifo_item_t i): fifo.c'],['../group__XBT__fifo__direct.html#ga6fde465c7d19469ee07e28d7ae5f611b',1,'xbt_fifo_get_next_item(xbt_fifo_item_t i): fifo.c']]], ['xbt_5ffifo_5fget_5fprev_5fitem',['xbt_fifo_get_prev_item',['../group__XBT__fifo__direct.html#gac47a383a08e9c08cc4dd5bf29cd50994',1,'xbt_fifo_get_prev_item(xbt_fifo_item_t i): fifo.c'],['../group__XBT__fifo__direct.html#gac47a383a08e9c08cc4dd5bf29cd50994',1,'xbt_fifo_get_prev_item(xbt_fifo_item_t i): fifo.c']]], ['xbt_5ffifo_5fis_5fin',['xbt_fifo_is_in',['../group__XBT__fifo__perl.html#ga29753ca3f59d8e810bcee69304cd8b42',1,'xbt_fifo_is_in(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__perl.html#ga29753ca3f59d8e810bcee69304cd8b42',1,'xbt_fifo_is_in(xbt_fifo_t f, void *content): fifo.c']]], ['xbt_5ffifo_5fitem_5ft',['xbt_fifo_item_t',['../group__XBT__fifo__cons.html#ga58e96f4a3637f7ff6bb1a9f53e7865c8',1,'fifo.h']]], ['xbt_5ffifo_5fnew',['xbt_fifo_new',['../group__XBT__fifo__cons.html#ga2797ae0ae47b096ffdd99fbd60d8402d',1,'xbt_fifo_new(void): fifo.c'],['../group__XBT__fifo__cons.html#ga2797ae0ae47b096ffdd99fbd60d8402d',1,'xbt_fifo_new(void): fifo.c']]], ['xbt_5ffifo_5fnew_5fitem',['xbt_fifo_new_item',['../group__XBT__fifo__direct.html#gad9f577f95ac147ed876083d60166a662',1,'xbt_fifo_new_item(void): fifo.c'],['../group__XBT__fifo__direct.html#gad9f577f95ac147ed876083d60166a662',1,'xbt_fifo_new_item(void): fifo.c']]], ['xbt_5ffifo_5fpop',['xbt_fifo_pop',['../group__XBT__fifo__perl.html#gaa8ae3369665727b54c3c3d0f5c1e91be',1,'xbt_fifo_pop(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__perl.html#gaa8ae3369665727b54c3c3d0f5c1e91be',1,'xbt_fifo_pop(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fpop_5fitem',['xbt_fifo_pop_item',['../group__XBT__fifo__direct.html#ga32cfb8161a224dafafbf3f667d8257aa',1,'xbt_fifo_pop_item(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__direct.html#ga32cfb8161a224dafafbf3f667d8257aa',1,'xbt_fifo_pop_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fpush',['xbt_fifo_push',['../group__XBT__fifo__perl.html#ga62606f494627c7be494082bb2a239f7a',1,'xbt_fifo_push(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__perl.html#ga62606f494627c7be494082bb2a239f7a',1,'xbt_fifo_push(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5fpush_5fitem',['xbt_fifo_push_item',['../group__XBT__fifo__direct.html#gae1266d2dc81fc9d46334500682756b93',1,'xbt_fifo_push_item(xbt_fifo_t, xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#gae1266d2dc81fc9d46334500682756b93',1,'xbt_fifo_push_item(xbt_fifo_t l, xbt_fifo_item_t new): fifo.c']]], ['xbt_5ffifo_5fremove',['xbt_fifo_remove',['../group__XBT__fifo__direct.html#gafae46252cee20c382f9ce4f2e2573135',1,'xbt_fifo_remove(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__direct.html#gafae46252cee20c382f9ce4f2e2573135',1,'xbt_fifo_remove(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5fremove_5fall',['xbt_fifo_remove_all',['../group__XBT__fifo__direct.html#ga0662ae632f8f72753074f0cf234f8c46',1,'xbt_fifo_remove_all(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__direct.html#ga0662ae632f8f72753074f0cf234f8c46',1,'xbt_fifo_remove_all(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5fremove_5fitem',['xbt_fifo_remove_item',['../group__XBT__fifo__direct.html#gabd68f9b13a5e4984224760e9e5afed3b',1,'xbt_fifo_remove_item(xbt_fifo_t, xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#gabd68f9b13a5e4984224760e9e5afed3b',1,'xbt_fifo_remove_item(xbt_fifo_t l, xbt_fifo_item_t current): fifo.c']]], ['xbt_5ffifo_5freset',['xbt_fifo_reset',['../group__XBT__fifo__cons.html#ga028b8b135de99c5526269b5c124093cf',1,'xbt_fifo_reset(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__cons.html#ga028b8b135de99c5526269b5c124093cf',1,'xbt_fifo_reset(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fsearch_5fitem',['xbt_fifo_search_item',['../group__XBT__fifo__perl.html#ga1010933a447b08cbc125304c66587da7',1,'xbt_fifo_search_item(xbt_fifo_t f, int_f_pvoid_pvoid_t cmp_fun, void *closure): fifo.c'],['../group__XBT__fifo__perl.html#ga1010933a447b08cbc125304c66587da7',1,'xbt_fifo_search_item(xbt_fifo_t f, int_f_pvoid_pvoid_t cmp_fun, void *closure): fifo.c']]], ['xbt_5ffifo_5fset_5fitem_5fcontent',['xbt_fifo_set_item_content',['../group__XBT__fifo__direct.html#ga3a95882cc4858a10fa29216c939eb1b4',1,'xbt_fifo_set_item_content(xbt_fifo_item_t, void *): fifo.c'],['../group__XBT__fifo__direct.html#ga3a95882cc4858a10fa29216c939eb1b4',1,'xbt_fifo_set_item_content(xbt_fifo_item_t i, void *v): fifo.c']]], ['xbt_5ffifo_5fshift',['xbt_fifo_shift',['../group__XBT__fifo__perl.html#ga79a99aa3de3fb2d15836fffca5e28c83',1,'xbt_fifo_shift(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__perl.html#ga79a99aa3de3fb2d15836fffca5e28c83',1,'xbt_fifo_shift(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fshift_5fitem',['xbt_fifo_shift_item',['../group__XBT__fifo__direct.html#ga46dbde2e3359af8a79f2d4da7582d18c',1,'xbt_fifo_shift_item(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__direct.html#ga46dbde2e3359af8a79f2d4da7582d18c',1,'xbt_fifo_shift_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fsize',['xbt_fifo_size',['../group__XBT__fifo__perl.html#gad7fdf56ec51e0c1ec442225b3e3ccc07',1,'xbt_fifo_size(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__perl.html#gad7fdf56ec51e0c1ec442225b3e3ccc07',1,'xbt_fifo_size(xbt_fifo_t f): fifo.c']]], ['xbt_5ffifo_5ft',['xbt_fifo_t',['../group__XBT__fifo__cons.html#ga24efbdc1db204e1a628958ce7509a312',1,'fifo.h']]], ['xbt_5ffifo_5fto_5farray',['xbt_fifo_to_array',['../group__XBT__fifo__misc.html#ga0a85e5e8e1e0774885f73614f3a40770',1,'xbt_fifo_to_array(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__misc.html#ga0a85e5e8e1e0774885f73614f3a40770',1,'xbt_fifo_to_array(xbt_fifo_t f): fifo.c']]], ['xbt_5ffifo_5funshift',['xbt_fifo_unshift',['../group__XBT__fifo__perl.html#gad165b0eb7ea833480776eb02062da45f',1,'xbt_fifo_unshift(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__perl.html#gad165b0eb7ea833480776eb02062da45f',1,'xbt_fifo_unshift(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5funshift_5fitem',['xbt_fifo_unshift_item',['../group__XBT__fifo__direct.html#gab5d6b760390ffc095f35f50e5bfd890a',1,'xbt_fifo_unshift_item(xbt_fifo_t, xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#gab5d6b760390ffc095f35f50e5bfd890a',1,'xbt_fifo_unshift_item(xbt_fifo_t l, xbt_fifo_item_t new): fifo.c']]], ['xbt_5ffree_5fref',['xbt_free_ref',['../group__XBT__syscall.html#gadc6cc4c3185be3635bb1ef2d9528f67a',1,'xbt_free_ref(void *d): xbt_main.c'],['../group__XBT__syscall.html#gadc6cc4c3185be3635bb1ef2d9528f67a',1,'xbt_free_ref(void *d): xbt_main.c']]], ['xbt_5fgetline',['xbt_getline',['../group__XBT__str.html#ga7e85b04b6111d11c26329b4b6d2bfb89',1,'xbt_getline(char **lineptr, size_t *n, FILE *stream): xbt_str.c'],['../group__XBT__str.html#ga7e85b04b6111d11c26329b4b6d2bfb89',1,'xbt_getline(char **buf, size_t *n, FILE *stream): xbt_str.c']]], ['xbt_5fgraph_5fedge_5fget_5fdata',['xbt_graph_edge_get_data',['../group__XBT__graph.html#ga7105c211e327da8f90b432224451cfb3',1,'xbt_graph_edge_get_data(xbt_edge_t edge): graph.c'],['../group__XBT__graph.html#ga7105c211e327da8f90b432224451cfb3',1,'xbt_graph_edge_get_data(xbt_edge_t edge): graph.c']]], ['xbt_5fgraph_5fedge_5fget_5flength',['xbt_graph_edge_get_length',['../group__XBT__graph.html#gac906c4328b3d910457c960cd64d70784',1,'xbt_graph_edge_get_length(xbt_edge_t e): graph.c'],['../group__XBT__graph.html#gac906c4328b3d910457c960cd64d70784',1,'xbt_graph_edge_get_length(xbt_edge_t edge): graph.c']]], ['xbt_5fgraph_5fedge_5fget_5fsource',['xbt_graph_edge_get_source',['../group__XBT__graph.html#ga8946bd8838820677e2e44e793be2c9e6',1,'xbt_graph_edge_get_source(xbt_edge_t e): graph.c'],['../group__XBT__graph.html#ga8946bd8838820677e2e44e793be2c9e6',1,'xbt_graph_edge_get_source(xbt_edge_t e): graph.c']]], ['xbt_5fgraph_5fedge_5fget_5ftarget',['xbt_graph_edge_get_target',['../group__XBT__graph.html#ga137cf4ffadf401a1080795664d99834a',1,'xbt_graph_edge_get_target(xbt_edge_t e): graph.c'],['../group__XBT__graph.html#ga137cf4ffadf401a1080795664d99834a',1,'xbt_graph_edge_get_target(xbt_edge_t e): graph.c']]], ['xbt_5fgraph_5fedge_5fset_5fdata',['xbt_graph_edge_set_data',['../group__XBT__graph.html#ga9cbe4fe591cf0d6746909db9ae2cd2aa',1,'xbt_graph_edge_set_data(xbt_edge_t edge, void *data): graph.c'],['../group__XBT__graph.html#ga9cbe4fe591cf0d6746909db9ae2cd2aa',1,'xbt_graph_edge_set_data(xbt_edge_t edge, void *data): graph.c']]], ['xbt_5fgraph_5fedge_5fset_5flength',['xbt_graph_edge_set_length',['../group__XBT__graph.html#ga68339a976c82e67edf79fa59d4619396',1,'xbt_graph_edge_set_length(xbt_edge_t e, double length): graph.c'],['../group__XBT__graph.html#ga68339a976c82e67edf79fa59d4619396',1,'xbt_graph_edge_set_length(xbt_edge_t e, double length): graph.c']]], ['xbt_5fgraph_5fexport_5fgraphviz',['xbt_graph_export_graphviz',['../group__XBT__graph.html#gacbbb619bcd7032ba6c0f8e932126d26b',1,'xbt_graph_export_graphviz(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t)): graph.c'],['../group__XBT__graph.html#gacbbb619bcd7032ba6c0f8e932126d26b',1,'xbt_graph_export_graphviz(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t)): graph.c']]], ['xbt_5fgraph_5fexport_5fgraphxml',['xbt_graph_export_graphxml',['../group__XBT__graph.html#ga59db9ffe13c1c4e4012e61fe38525363',1,'xbt_graph_export_graphxml(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t), const char *(node_data_print)(void *), const char *(edge_data_print)(void *)): graph.c'],['../group__XBT__graph.html#ga59db9ffe13c1c4e4012e61fe38525363',1,'xbt_graph_export_graphxml(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t), const char *(node_data_print)(void *), const char *(edge_data_print)(void *)): graph.c']]], ['xbt_5fgraph_5ffree_5fedge',['xbt_graph_free_edge',['../group__XBT__graph.html#ga6b9895d6065b7e122bc55c71e32da821',1,'xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e, void_f_pvoid_t free_function): graph.c'],['../group__XBT__graph.html#ga6b9895d6065b7e122bc55c71e32da821',1,'xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e, void_f_pvoid_t free_function): graph.c']]], ['xbt_5fgraph_5ffree_5fgraph',['xbt_graph_free_graph',['../group__XBT__graph.html#gad290d4c3fa3f0c82f7f6cc18a3506546',1,'xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function): graph.c'],['../group__XBT__graph.html#gad290d4c3fa3f0c82f7f6cc18a3506546',1,'xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function): graph.c']]], ['xbt_5fgraph_5ffree_5fnode',['xbt_graph_free_node',['../group__XBT__graph.html#ga966d2089b5392e5f556a6d149bdc112c',1,'xbt_graph_free_node(xbt_graph_t g, xbt_node_t n, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function): graph.c'],['../group__XBT__graph.html#ga966d2089b5392e5f556a6d149bdc112c',1,'xbt_graph_free_node(xbt_graph_t g, xbt_node_t n, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function): graph.c']]], ['xbt_5fgraph_5fget_5fedge',['xbt_graph_get_edge',['../group__XBT__graph.html#ga4a037e91f75ccee400b51b5564720693',1,'xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst): graph.c'],['../group__XBT__graph.html#ga4a037e91f75ccee400b51b5564720693',1,'xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst): graph.c']]], ['xbt_5fgraph_5fget_5fedges',['xbt_graph_get_edges',['../group__XBT__graph.html#ga1c292fb71d5119d59496a89d90a8ba30',1,'xbt_graph_get_edges(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#ga1c292fb71d5119d59496a89d90a8ba30',1,'xbt_graph_get_edges(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fget_5flength_5fmatrix',['xbt_graph_get_length_matrix',['../group__XBT__graph.html#ga3c4697edd9ee89142ec85ed882aad249',1,'xbt_graph_get_length_matrix(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#ga3c4697edd9ee89142ec85ed882aad249',1,'xbt_graph_get_length_matrix(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fget_5fnodes',['xbt_graph_get_nodes',['../group__XBT__graph.html#gada4b1109afba1fe3a8f046a45694c707',1,'xbt_graph_get_nodes(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#gada4b1109afba1fe3a8f046a45694c707',1,'xbt_graph_get_nodes(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fload',['xbt_graph_load',['../group__XBT__graph.html#ga11cca6af16cef8e4ea7f5f340da517dd',1,'xbt_graph_load(const char *filename): graph.c'],['../group__XBT__graph.html#ga11cca6af16cef8e4ea7f5f340da517dd',1,'xbt_graph_load(const char *filename): graph.c']]], ['xbt_5fgraph_5fnew_5fedge',['xbt_graph_new_edge',['../group__XBT__graph.html#gaec90776579173b58de9b89868abbda0f',1,'xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data): graph.c'],['../group__XBT__graph.html#gaec90776579173b58de9b89868abbda0f',1,'xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data): graph.c']]], ['xbt_5fgraph_5fnew_5fgraph',['xbt_graph_new_graph',['../group__XBT__graph.html#ga782dba2130eee76b8bd4e6934098fd8f',1,'xbt_graph_new_graph(unsigned short int directed, void *data): graph.c'],['../group__XBT__graph.html#ga782dba2130eee76b8bd4e6934098fd8f',1,'xbt_graph_new_graph(unsigned short int directed, void *data): graph.c']]], ['xbt_5fgraph_5fnew_5fnode',['xbt_graph_new_node',['../group__XBT__graph.html#ga95d8d120c9be3efbed1880700458d8ca',1,'xbt_graph_new_node(xbt_graph_t g, void *data): graph.c'],['../group__XBT__graph.html#ga95d8d120c9be3efbed1880700458d8ca',1,'xbt_graph_new_node(xbt_graph_t g, void *data): graph.c']]], ['xbt_5fgraph_5fnode_5fget_5fdata',['xbt_graph_node_get_data',['../group__XBT__graph.html#gaed845d52f5432f7940e1bceb336d3c38',1,'xbt_graph_node_get_data(xbt_node_t node): graph.c'],['../group__XBT__graph.html#gaed845d52f5432f7940e1bceb336d3c38',1,'xbt_graph_node_get_data(xbt_node_t node): graph.c']]], ['xbt_5fgraph_5fnode_5fget_5foutedges',['xbt_graph_node_get_outedges',['../group__XBT__graph.html#gac8dd5691103f6c69b8f773a5937c2a8a',1,'xbt_graph_node_get_outedges(xbt_node_t n): graph.c'],['../group__XBT__graph.html#gac8dd5691103f6c69b8f773a5937c2a8a',1,'xbt_graph_node_get_outedges(xbt_node_t n): graph.c']]], ['xbt_5fgraph_5fnode_5fset_5fdata',['xbt_graph_node_set_data',['../group__XBT__graph.html#gaa100e0fe6d317aa185dffe89b3a9deae',1,'xbt_graph_node_set_data(xbt_node_t node, void *data): graph.c'],['../group__XBT__graph.html#gaa100e0fe6d317aa185dffe89b3a9deae',1,'xbt_graph_node_set_data(xbt_node_t node, void *data): graph.c']]], ['xbt_5fgraph_5fsave',['xbt_graph_save',['../group__XBT__graph.html#ga2b6d7cfdc45b1df905eba88fdc1d8c18',1,'xbt_graph_save(xbt_graph_t span, const char *filename, const char *(nname)(xbt_node_t), const char *(ename)(xbt_edge_t)): graph.c'],['../group__XBT__graph.html#ga2b6d7cfdc45b1df905eba88fdc1d8c18',1,'xbt_graph_save(xbt_graph_t span, const char *filename, const char *(nname)(xbt_node_t), const char *(ename)(xbt_edge_t)): graph.c']]], ['xbt_5fgraph_5fshortest_5fpaths',['xbt_graph_shortest_paths',['../group__XBT__graph.html#gaa5d7e658935aa26a17acaa1cdcd575a4',1,'xbt_graph_shortest_paths(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#gaa5d7e658935aa26a17acaa1cdcd575a4',1,'xbt_graph_shortest_paths(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fspanning_5ftree_5fprim',['xbt_graph_spanning_tree_prim',['../group__XBT__graph.html#gac305eb0dfe08abbe849f2a74dfa3a3a4',1,'xbt_graph_spanning_tree_prim(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#gac305eb0dfe08abbe849f2a74dfa3a3a4',1,'xbt_graph_spanning_tree_prim(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5ftopo_5fsort',['xbt_graph_topo_sort',['../group__XBT__graph.html#ga80c9aa63aac343d7b3ba246a6e4f6297',1,'xbt_graph_topo_sort(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#ga80c9aa63aac343d7b3ba246a6e4f6297',1,'xbt_graph_topo_sort(xbt_graph_t g): graph.c']]], ['xbt_5fheap_5ffree',['xbt_heap_free',['../group__XBT__heap.html#gace5e6cc225d3698de6af159229c94587',1,'xbt_heap_free(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#gace5e6cc225d3698de6af159229c94587',1,'xbt_heap_free(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fmaxcontent',['xbt_heap_maxcontent',['../group__XBT__heap.html#ga804cb0f43208ddf228b515ec14f13965',1,'xbt_heap_maxcontent(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#ga804cb0f43208ddf228b515ec14f13965',1,'xbt_heap_maxcontent(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fmaxkey',['xbt_heap_maxkey',['../group__XBT__heap.html#gaecf9ff064287ee533e166d631aced6df',1,'xbt_heap_maxkey(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#gaecf9ff064287ee533e166d631aced6df',1,'xbt_heap_maxkey(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fnew',['xbt_heap_new',['../group__XBT__heap.html#gaa4b5f8cfee32bb2df3cb2b5d6649b114',1,'xbt_heap_new(int init_size, void_f_pvoid_t const free_func): heap.c'],['../group__XBT__heap.html#gaa4b5f8cfee32bb2df3cb2b5d6649b114',1,'xbt_heap_new(int init_size, void_f_pvoid_t const free_func): heap.c']]], ['xbt_5fheap_5fpop',['xbt_heap_pop',['../group__XBT__heap.html#ga61f5e2665882b14b15a48bf66e9631a4',1,'xbt_heap_pop(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#ga61f5e2665882b14b15a48bf66e9631a4',1,'xbt_heap_pop(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fpush',['xbt_heap_push',['../group__XBT__heap.html#ga5e44b85be2d2ba1d7ed9d400546f43dd',1,'xbt_heap_push(xbt_heap_t H, void *content, double key): heap.c'],['../group__XBT__heap.html#ga5e44b85be2d2ba1d7ed9d400546f43dd',1,'xbt_heap_push(xbt_heap_t H, void *content, double key): heap.c']]], ['xbt_5fheap_5fremove',['xbt_heap_remove',['../group__XBT__heap.html#ga2035074b0de4d7a74fc5f9a22c148437',1,'xbt_heap_remove(xbt_heap_t H, int i): heap.c'],['../group__XBT__heap.html#ga2035074b0de4d7a74fc5f9a22c148437',1,'xbt_heap_remove(xbt_heap_t H, int i): heap.c']]], ['xbt_5fheap_5fset_5fupdate_5fcallback',['xbt_heap_set_update_callback',['../group__XBT__heap.html#ga0617a1f1c3f63f951f17698e783bc24d',1,'xbt_heap_set_update_callback(xbt_heap_t H, void(*update_callback)(void *, int)): heap.c'],['../group__XBT__heap.html#ga0617a1f1c3f63f951f17698e783bc24d',1,'xbt_heap_set_update_callback(xbt_heap_t H, void(*update_callback)(void *, int)): heap.c']]], ['xbt_5fheap_5fsize',['xbt_heap_size',['../group__XBT__heap.html#ga21ef0cccfab2e937012f1286cc3ecb66',1,'xbt_heap_size(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#ga21ef0cccfab2e937012f1286cc3ecb66',1,'xbt_heap_size(xbt_heap_t H): heap.c']]], ['xbt_5fhere',['XBT_HERE',['../group__XBT__log.html#gaed62d764d379720d6ce03d2a0d9c3c32',1,'log.h']]], ['xbt_5fin',['XBT_IN',['../group__XBT__log.html#ga20e7ed6a7dd096897446901c39e1194f',1,'log.h']]], ['xbt_5finfo',['XBT_INFO',['../group__XBT__log.html#ga57f4469c36aeb5f44b5786882b364af8',1,'log.h']]], ['xbt_5flibunwind_5fbacktrace',['xbt_libunwind_backtrace',['../group__XBT__ex.html#ga6752f914268fb60019f9cf94a34ad28a',1,'ex.h']]], ['xbt_5flog_5fcontrol_5fset',['xbt_log_control_set',['../group__XBT__log.html#ga2289997893363b1ad5f7ff32cbfbf432',1,'xbt_log_control_set(const char *cs): log.c'],['../group__XBT__log.html#ga2289997893363b1ad5f7ff32cbfbf432',1,'xbt_log_control_set(const char *control_string): log.c']]], ['xbt_5flog_5fdefault_5fcategory',['XBT_LOG_DEFAULT_CATEGORY',['../group__XBT__log.html#gaa23cb30f6de5c9e0a26a6516817c7e20',1,'log.h']]], ['xbt_5flog_5fexternal_5fcategory',['XBT_LOG_EXTERNAL_CATEGORY',['../group__XBT__log.html#ga7db05649e5c3c7aba06909409e470143',1,'log.h']]], ['xbt_5flog_5fexternal_5fdefault_5fcategory',['XBT_LOG_EXTERNAL_DEFAULT_CATEGORY',['../group__XBT__log.html#ga28625f3f3aa5986954a2b90f029c2e96',1,'log.h']]], ['xbt_5flog_5fisenabled',['XBT_LOG_ISENABLED',['../group__XBT__log.html#ga6c9d37281690342c607e30b1f0b59aed',1,'log.h']]], ['xbt_5flog_5fnew_5fcategory',['XBT_LOG_NEW_CATEGORY',['../group__XBT__log.html#ga9e4d4fda6d921febf75e85f9cd9d611a',1,'log.h']]], ['xbt_5flog_5fnew_5fdefault_5fcategory',['XBT_LOG_NEW_DEFAULT_CATEGORY',['../group__XBT__log.html#ga5094a0e812d0012e6ee4d2257b1a13f1',1,'log.h']]], ['xbt_5flog_5fnew_5fdefault_5fsubcategory',['XBT_LOG_NEW_DEFAULT_SUBCATEGORY',['../group__XBT__log.html#ga8a4327fc994afcfb2eaebea0c4d1b00a',1,'log.h']]], ['xbt_5flog_5fnew_5fsubcategory',['XBT_LOG_NEW_SUBCATEGORY',['../group__XBT__log.html#ga1cd0df7ea8110bd27c2843812f4c93ee',1,'log.h']]], ['xbt_5flog_5fpriority_5fcritical',['xbt_log_priority_critical',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a8bd5d340adeae3a8e5a3182912c230f3',1,'log.h']]], ['xbt_5flog_5fpriority_5fdebug',['xbt_log_priority_debug',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82aac8ecdd32b640581940959e6f9ed1588',1,'log.h']]], ['xbt_5flog_5fpriority_5ferror',['xbt_log_priority_error',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a32afa42aab40395dbabb07cafbf84eb5',1,'log.h']]], ['xbt_5flog_5fpriority_5finfinite',['xbt_log_priority_infinite',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a875884ddb873e6613178c5b3c71b8a77',1,'log.h']]], ['xbt_5flog_5fpriority_5finfo',['xbt_log_priority_info',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82af28091fa16fda657d0768baaab6f4c27',1,'log.h']]], ['xbt_5flog_5fpriority_5ftrace',['xbt_log_priority_trace',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a1b9b706830e4aa1405157d20117aa5cd',1,'log.h']]], ['xbt_5flog_5fpriority_5fverbose',['xbt_log_priority_verbose',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82afef8e3f2e237f8de9c839a2f5c875fc7',1,'log.h']]], ['xbt_5flog_5fpriority_5fwarning',['xbt_log_priority_warning',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82ac87b95b266f551288e8d9faec534baa9',1,'log.h']]], ['xbt_5flog_5fstatic_5fthreshold',['XBT_LOG_STATIC_THRESHOLD',['../group__XBT__log.html#ga78721bb3ac4ce5dcddb5b102d03ec9ad',1,'log.h']]], ['xbt_5fmallocator_5ffree',['xbt_mallocator_free',['../group__XBT__mallocator__cons.html#gaa884a3ef269f0709b9b2e025708f2e95',1,'xbt_mallocator_free(xbt_mallocator_t mallocator): mallocator.c'],['../group__XBT__mallocator__cons.html#gaa884a3ef269f0709b9b2e025708f2e95',1,'xbt_mallocator_free(xbt_mallocator_t m): mallocator.c']]], ['xbt_5fmallocator_5fget',['xbt_mallocator_get',['../group__XBT__mallocator__objects.html#ga3e52409c5b24294ef98367b56cad4c7b',1,'xbt_mallocator_get(xbt_mallocator_t mallocator): mallocator.c'],['../group__XBT__mallocator__objects.html#ga3e52409c5b24294ef98367b56cad4c7b',1,'xbt_mallocator_get(xbt_mallocator_t m): mallocator.c']]], ['xbt_5fmallocator_5finitialization_5fis_5fdone',['xbt_mallocator_initialization_is_done',['../group__XBT__mallocator__objects.html#ga98bad11b395593e2681d1bc8daebfc5f',1,'xbt_mallocator_initialization_is_done(int protect): mallocator.c'],['../group__XBT__mallocator__objects.html#ga98bad11b395593e2681d1bc8daebfc5f',1,'xbt_mallocator_initialization_is_done(int protect): mallocator.c']]], ['xbt_5fmallocator_5fnew',['xbt_mallocator_new',['../group__XBT__mallocator__cons.html#ga31b8b348c6b44d730c915c5442a64637',1,'xbt_mallocator_new(int size, pvoid_f_void_t new_f, void_f_pvoid_t free_f, void_f_pvoid_t reset_f): mallocator.c'],['../group__XBT__mallocator__cons.html#ga31b8b348c6b44d730c915c5442a64637',1,'xbt_mallocator_new(int size, pvoid_f_void_t new_f, void_f_pvoid_t free_f, void_f_pvoid_t reset_f): mallocator.c']]], ['xbt_5fmallocator_5frelease',['xbt_mallocator_release',['../group__XBT__mallocator__objects.html#gaf33e29b8ca5ab081c3ab323cf42fd244',1,'xbt_mallocator_release(xbt_mallocator_t mallocator, void *object): mallocator.c'],['../group__XBT__mallocator__objects.html#gaf33e29b8ca5ab081c3ab323cf42fd244',1,'xbt_mallocator_release(xbt_mallocator_t m, void *object): mallocator.c']]], ['xbt_5fmallocator_5ft',['xbt_mallocator_t',['../group__XBT__mallocator__cons.html#gab949b93743d06b31bbdf3828d34a72ac',1,'mallocator.h']]], ['xbt_5fmutex_5facquire',['xbt_mutex_acquire',['../group__XBT__synchro.html#gaa6e5de3feee929f5212a988cc67159b5',1,'xbt_mutex_acquire(xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gaa6e5de3feee929f5212a988cc67159b5',1,'xbt_mutex_acquire(xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fmutex_5fdestroy',['xbt_mutex_destroy',['../group__XBT__synchro.html#ga4deb9869591b5673738ae97a7d12dd10',1,'xbt_mutex_destroy(xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga4deb9869591b5673738ae97a7d12dd10',1,'xbt_mutex_destroy(xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fmutex_5finit',['xbt_mutex_init',['../group__XBT__synchro.html#ga2b5f21533b44d2dd61c9335d0db48e93',1,'xbt_mutex_init(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga2b5f21533b44d2dd61c9335d0db48e93',1,'xbt_mutex_init(void): xbt_sg_synchro.c']]], ['xbt_5fmutex_5frelease',['xbt_mutex_release',['../group__XBT__synchro.html#ga90c18013e0a7a19ee22cb668b6082b39',1,'xbt_mutex_release(xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga90c18013e0a7a19ee22cb668b6082b39',1,'xbt_mutex_release(xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fmutex_5ft',['xbt_mutex_t',['../group__XBT__synchro.html#ga6e01b815cfcb1b932c9ad5c334ee82cd',1,'synchro_core.h']]], ['xbt_5fnew',['xbt_new',['../group__XBT__syscall.html#ga1d356d21c8a37c3e19de37d5f7896810',1,'sysdep.h']]], ['xbt_5fnew0',['xbt_new0',['../group__XBT__syscall.html#gaaea21518b543392c869f6564c36cdc2b',1,'sysdep.h']]], ['xbt_5fos_5fcond_5ft',['xbt_os_cond_t',['../group__XBT__thread.html#ga2c6224cb25614dc8b972aca6288ebe60',1,'xbt_os_thread.h']]], ['xbt_5fos_5fget_5fnumcores',['xbt_os_get_numcores',['../group__XBT__thread.html#ga737321f05368f70c51d5d4c939b3aa11',1,'xbt_os_get_numcores(void): xbt_os_thread.c'],['../group__XBT__thread.html#ga737321f05368f70c51d5d4c939b3aa11',1,'xbt_os_get_numcores(void): xbt_os_thread.c']]], ['xbt_5fos_5fmutex_5ft',['xbt_os_mutex_t',['../group__XBT__thread.html#ga51b6d74f9dcfa8d7563ddf6386f9bd89',1,'xbt_os_thread.h']]], ['xbt_5fos_5frmutex_5ft',['xbt_os_rmutex_t',['../group__XBT__thread.html#gaac45eea7caeae848b86cf78d989d9aee',1,'xbt_os_thread.h']]], ['xbt_5fos_5fsem_5ft',['xbt_os_sem_t',['../group__XBT__thread.html#gab48cac979eebc8c1e26ca7adc7cec0ac',1,'xbt_os_thread.h']]], ['xbt_5fos_5fthread_5fatfork',['xbt_os_thread_atfork',['../group__XBT__thread.html#gad4f77b979102bcbb4dc49538481146ac',1,'xbt_os_thread.h']]], ['xbt_5fos_5fthread_5ft',['xbt_os_thread_t',['../group__XBT__thread.html#ga7994e3241b60f854c77043c49a83873c',1,'xbt_os_thread.h']]], ['xbt_5fout',['XBT_OUT',['../group__XBT__log.html#gaec5266e036c60029988444fcfdb91e6c',1,'log.h']]], ['xbt_5fparmap_5fapply',['xbt_parmap_apply',['../group__XBT__parmap.html#ga7d2b99167edbcbccb7a514451042f09f',1,'xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data): parmap.c'],['../group__XBT__parmap.html#ga7d2b99167edbcbccb7a514451042f09f',1,'xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data): parmap.c']]], ['xbt_5fparmap_5fbusy_5fwait',['XBT_PARMAP_BUSY_WAIT',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aafd6884f2f0271777d1e8ea1db1b29229',1,'parmap.h']]], ['xbt_5fparmap_5fdefault',['XBT_PARMAP_DEFAULT',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aa0329f52f37cdb070e8d64330c7a1b395',1,'parmap.h']]], ['xbt_5fparmap_5fdestroy',['xbt_parmap_destroy',['../group__XBT__parmap.html#ga3e1c75bd9e1a502350a2d2098dc316bb',1,'xbt_parmap_destroy(xbt_parmap_t parmap): parmap.c'],['../group__XBT__parmap.html#ga3e1c75bd9e1a502350a2d2098dc316bb',1,'xbt_parmap_destroy(xbt_parmap_t parmap): parmap.c']]], ['xbt_5fparmap_5ffutex',['XBT_PARMAP_FUTEX',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaec7bc115136c58098a826d86296d2f7d',1,'parmap.h']]], ['xbt_5fparmap_5fnew',['xbt_parmap_new',['../group__XBT__parmap.html#ga939a0ab549af87ff1df13642396d5087',1,'xbt_parmap_new(unsigned int num_workers, e_xbt_parmap_mode_t mode): parmap.c'],['../group__XBT__parmap.html#ga939a0ab549af87ff1df13642396d5087',1,'xbt_parmap_new(unsigned int num_workers, e_xbt_parmap_mode_t mode): parmap.c']]], ['xbt_5fparmap_5fnext',['xbt_parmap_next',['../group__XBT__parmap.html#gac667744f002bbf8d1d8dc32e36d0d308',1,'xbt_parmap_next(xbt_parmap_t parmap): parmap.c'],['../group__XBT__parmap.html#gac667744f002bbf8d1d8dc32e36d0d308',1,'xbt_parmap_next(xbt_parmap_t parmap): parmap.c']]], ['xbt_5fparmap_5fposix',['XBT_PARMAP_POSIX',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaa076c8a9592fd4f8656a078483688700',1,'parmap.h']]], ['xbt_5fparmap_5ft',['xbt_parmap_t',['../group__XBT__parmap.html#gaebe875868080812c5e303884551ced62',1,'parmap.h']]], ['xbt_5fpeer_5fcopy',['xbt_peer_copy',['../group__XBT__peer.html#ga9bc5b54374abccaff888cd3852c85702',1,'xbt_peer_copy(xbt_peer_t h): xbt_peer.c'],['../group__XBT__peer.html#ga9bc5b54374abccaff888cd3852c85702',1,'xbt_peer_copy(xbt_peer_t h): xbt_peer.c']]], ['xbt_5fpeer_5ffree',['xbt_peer_free',['../group__XBT__peer.html#ga251d6140c311d7c04e503e3d463adba4',1,'xbt_peer_free(xbt_peer_t peer): xbt_peer.c'],['../group__XBT__peer.html#ga251d6140c311d7c04e503e3d463adba4',1,'xbt_peer_free(xbt_peer_t peer): xbt_peer.c']]], ['xbt_5fpeer_5ffree_5fvoidp',['xbt_peer_free_voidp',['../group__XBT__peer.html#ga793bb9b0c2ee6221c8e9b7d3c886dbb9',1,'xbt_peer_free_voidp(void *d): xbt_peer.c'],['../group__XBT__peer.html#ga793bb9b0c2ee6221c8e9b7d3c886dbb9',1,'xbt_peer_free_voidp(void *d): xbt_peer.c']]], ['xbt_5fpeer_5ffrom_5fstring',['xbt_peer_from_string',['../group__XBT__peer.html#ga0d8d75aed70cb99a925b8974ce8ce4e4',1,'xbt_peer_from_string(const char *peerport): xbt_peer.c'],['../group__XBT__peer.html#ga0d8d75aed70cb99a925b8974ce8ce4e4',1,'xbt_peer_from_string(const char *peerport): xbt_peer.c']]], ['xbt_5fpeer_5fnew',['xbt_peer_new',['../group__XBT__peer.html#ga2d87fccb2ac0c6f71db29ed857b01eb2',1,'xbt_peer_new(const char *name, int port): xbt_peer.c'],['../group__XBT__peer.html#ga2d87fccb2ac0c6f71db29ed857b01eb2',1,'xbt_peer_new(const char *name, int port): xbt_peer.c']]], ['xbt_5fpeer_5ft',['xbt_peer_t',['../group__XBT__peer.html#gad2304165af1ed80fe6d82eb14343eca7',1,'peer.h']]], ['xbt_5fpublic_5fdata',['XBT_PUBLIC_DATA',['../group__SURF__simulation.html#ga35bd1d3b1139b2f6990002f4aaeac759',1,'surf.h']]], ['xbt_5fqueue_5ffree',['xbt_queue_free',['../group__XBT__queue.html#gae4509298241a6179e0b61667faebe613',1,'xbt_queue_free(xbt_queue_t *queue): xbt_queue.c'],['../group__XBT__queue.html#gae4509298241a6179e0b61667faebe613',1,'xbt_queue_free(xbt_queue_t *queue): xbt_queue.c']]], ['xbt_5fqueue_5flength',['xbt_queue_length',['../group__XBT__queue.html#ga49cfb91b2f730487bd31f2f9ffb974fa',1,'xbt_queue_length(const xbt_queue_t queue): xbt_queue.c'],['../group__XBT__queue.html#ga49cfb91b2f730487bd31f2f9ffb974fa',1,'xbt_queue_length(const xbt_queue_t queue): xbt_queue.c']]], ['xbt_5fqueue_5fnew',['xbt_queue_new',['../group__XBT__queue.html#ga04f81fdbf3a660617deb9f6f48234161',1,'xbt_queue_new(int capacity, unsigned long elm_size): xbt_queue.c'],['../group__XBT__queue.html#ga04f81fdbf3a660617deb9f6f48234161',1,'xbt_queue_new(int capacity, unsigned long elm_size): xbt_queue.c']]], ['xbt_5fqueue_5fpop',['xbt_queue_pop',['../group__XBT__queue.html#ga368e7ef82906e1c5baefa8083879c215',1,'xbt_queue_pop(xbt_queue_t queue, void *const dst): xbt_queue.c'],['../group__XBT__queue.html#ga368e7ef82906e1c5baefa8083879c215',1,'xbt_queue_pop(xbt_queue_t queue, void *const dst): xbt_queue.c']]], ['xbt_5fqueue_5fpop_5ftimed',['xbt_queue_pop_timed',['../group__XBT__queue.html#ga99d1d70f1a59f3f45bcd4e5d35b77f51',1,'xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c'],['../group__XBT__queue.html#ga99d1d70f1a59f3f45bcd4e5d35b77f51',1,'xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c']]], ['xbt_5fqueue_5fpush',['xbt_queue_push',['../group__XBT__queue.html#ga687d865601b586f65162cde66b944163',1,'xbt_queue_push(xbt_queue_t queue, const void *src): xbt_queue.c'],['../group__XBT__queue.html#ga687d865601b586f65162cde66b944163',1,'xbt_queue_push(xbt_queue_t queue, const void *src): xbt_queue.c']]], ['xbt_5fqueue_5fpush_5ftimed',['xbt_queue_push_timed',['../group__XBT__queue.html#gab68bab7ad2af3afc35130971d668c2b3',1,'xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c'],['../group__XBT__queue.html#gab68bab7ad2af3afc35130971d668c2b3',1,'xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c']]], ['xbt_5fqueue_5fshift',['xbt_queue_shift',['../group__XBT__queue.html#ga60a1272bb4a1463b8254cf857b8d7441',1,'xbt_queue_shift(xbt_queue_t queue, void *const dst): xbt_queue.c'],['../group__XBT__queue.html#ga60a1272bb4a1463b8254cf857b8d7441',1,'xbt_queue_shift(xbt_queue_t queue, void *const dst): xbt_queue.c']]], ['xbt_5fqueue_5fshift_5ftimed',['xbt_queue_shift_timed',['../group__XBT__queue.html#ga48988a7bf6134fc397147b16408c0778',1,'xbt_queue_shift_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c'],['../group__XBT__queue.html#ga48988a7bf6134fc397147b16408c0778',1,'xbt_queue_shift_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c']]], ['xbt_5fqueue_5ft',['xbt_queue_t',['../group__XBT__queue.html#gae44d114ab24c5175b9500f0a80058f4f',1,'queue.h']]], ['xbt_5fqueue_5funshift',['xbt_queue_unshift',['../group__XBT__queue.html#gaba17464ddde9dec336376a2e4e9f3a4e',1,'xbt_queue_unshift(xbt_queue_t queue, const void *src): xbt_queue.c'],['../group__XBT__queue.html#gaba17464ddde9dec336376a2e4e9f3a4e',1,'xbt_queue_unshift(xbt_queue_t queue, const void *src): xbt_queue.c']]], ['xbt_5fqueue_5funshift_5ftimed',['xbt_queue_unshift_timed',['../group__XBT__queue.html#ga9a868b5c72f70f207999b8a0beefed84',1,'xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c'],['../group__XBT__queue.html#ga9a868b5c72f70f207999b8a0beefed84',1,'xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c']]], ['xbt_5freplay_5faction_5fregister',['xbt_replay_action_register',['../group__XBT__replay.html#ga994ddcd8aa680aabc58762d8965f93ef',1,'xbt_replay_action_register(const char *action_name, action_fun function): xbt_replay.c'],['../group__XBT__replay.html#ga994ddcd8aa680aabc58762d8965f93ef',1,'xbt_replay_action_register(const char *action_name, action_fun function): xbt_replay.c']]], ['xbt_5freplay_5faction_5frunner',['xbt_replay_action_runner',['../group__XBT__replay.html#ga1a034387ae8f039bca99f6fc44518da0',1,'xbt_replay_action_runner(int argc, char *argv[]): xbt_replay.c'],['../group__XBT__replay.html#ga1a034387ae8f039bca99f6fc44518da0',1,'xbt_replay_action_runner(int argc, char *argv[]): xbt_replay.c']]], ['xbt_5freplay_5faction_5funregister',['xbt_replay_action_unregister',['../group__XBT__replay.html#ga83842574c19fdf7d056cdfeacd64dae7',1,'xbt_replay_action_unregister(const char *action_name): xbt_replay.c'],['../group__XBT__replay.html#ga83842574c19fdf7d056cdfeacd64dae7',1,'xbt_replay_action_unregister(const char *action_name): xbt_replay.c']]], ['xbt_5fset_5fadd',['xbt_set_add',['../group__XBT__set__basic.html#ga1db2802704edc8b5d404ca204fc5b34d',1,'xbt_set_add(xbt_set_t set, xbt_set_elm_t elm, void_f_pvoid_t free_func): set.c'],['../group__XBT__set__basic.html#ga1db2802704edc8b5d404ca204fc5b34d',1,'xbt_set_add(xbt_set_t set, xbt_set_elm_t elm, void_f_pvoid_t free_func): set.c']]], ['xbt_5fset_5fcursor_5ffirst',['xbt_set_cursor_first',['../group__XBT__set__curs.html#ga0ae677ad09fbf19fc8f9343dcc647dc2',1,'xbt_set_cursor_first(xbt_set_t set, xbt_set_cursor_t *cursor): set.c'],['../group__XBT__set__curs.html#ga0ae677ad09fbf19fc8f9343dcc647dc2',1,'xbt_set_cursor_first(xbt_set_t set, xbt_set_cursor_t *cursor): set.c']]], ['xbt_5fset_5fcursor_5fget_5for_5ffree',['xbt_set_cursor_get_or_free',['../group__XBT__set__curs.html#gac4c1fa14c3207e4ad1c9973db97147d5',1,'xbt_set_cursor_get_or_free(xbt_set_cursor_t *cursor, xbt_set_elm_t *elm): set.c'],['../group__XBT__set__curs.html#gac4c1fa14c3207e4ad1c9973db97147d5',1,'xbt_set_cursor_get_or_free(xbt_set_cursor_t *curs, xbt_set_elm_t *elm): set.c']]], ['xbt_5fset_5fcursor_5fstep',['xbt_set_cursor_step',['../group__XBT__set__curs.html#ga1e42bd77295716cac5d3a38f4b7419b1',1,'xbt_set_cursor_step(xbt_set_cursor_t cursor): set.c'],['../group__XBT__set__curs.html#ga1e42bd77295716cac5d3a38f4b7419b1',1,'xbt_set_cursor_step(xbt_set_cursor_t cursor): set.c']]], ['xbt_5fset_5fcursor_5ft',['xbt_set_cursor_t',['../group__XBT__set__curs.html#ga07bc36055121d6d2b49a483608033827',1,'set.h']]], ['xbt_5fset_5felm_5f',['xbt_set_elm_',['../structxbt__set__elm__.html',1,'']]], ['xbt_5fset_5fforeach',['xbt_set_foreach',['../group__XBT__set__curs.html#ga58f50aee97a03985e1af193fbdea92ba',1,'set.h']]], ['xbt_5fset_5ffree',['xbt_set_free',['../group__XBT__set__cons.html#ga268b2b486920b5f0a580b3d1bed6875a',1,'xbt_set_free(xbt_set_t *set): set.c'],['../group__XBT__set__cons.html#ga268b2b486920b5f0a580b3d1bed6875a',1,'xbt_set_free(xbt_set_t *set): set.c']]], ['xbt_5fset_5fget_5fby_5fid',['xbt_set_get_by_id',['../group__XBT__set__basic.html#ga19df8b5e26799112d5aba9f677739138',1,'xbt_set_get_by_id(xbt_set_t set, int id): set.c'],['../group__XBT__set__basic.html#ga19df8b5e26799112d5aba9f677739138',1,'xbt_set_get_by_id(xbt_set_t set, int id): set.c']]], ['xbt_5fset_5fget_5fby_5fname',['xbt_set_get_by_name',['../group__XBT__set__basic.html#gaa5ebcac05554bc6c20129b437851b12e',1,'xbt_set_get_by_name(xbt_set_t set, const char *key): set.c'],['../group__XBT__set__basic.html#gaa5ebcac05554bc6c20129b437851b12e',1,'xbt_set_get_by_name(xbt_set_t set, const char *name): set.c']]], ['xbt_5fset_5fget_5fby_5fname_5fext',['xbt_set_get_by_name_ext',['../group__XBT__set__basic.html#ga6a7bc28b3bedbcb05e2a60297c9df8f0',1,'xbt_set_get_by_name_ext(xbt_set_t set, const char *key, int key_len): set.c'],['../group__XBT__set__basic.html#ga6a7bc28b3bedbcb05e2a60297c9df8f0',1,'xbt_set_get_by_name_ext(xbt_set_t set, const char *name, int name_len): set.c']]], ['xbt_5fset_5fget_5fby_5fname_5for_5fnull',['xbt_set_get_by_name_or_null',['../group__XBT__set__basic.html#ga02fb94d3aa9fcfaae688f61a0ca9cdc2',1,'xbt_set_get_by_name_or_null(xbt_set_t set, const char *key): set.c'],['../group__XBT__set__basic.html#ga02fb94d3aa9fcfaae688f61a0ca9cdc2',1,'xbt_set_get_by_name_or_null(xbt_set_t set, const char *name): set.c']]], ['xbt_5fset_5flength',['xbt_set_length',['../group__XBT__set__basic.html#ga5a1935dab5ad9e2f3c9820e6db7889a7',1,'xbt_set_length(const xbt_set_t set): set.c'],['../group__XBT__set__basic.html#ga5a1935dab5ad9e2f3c9820e6db7889a7',1,'xbt_set_length(const xbt_set_t set): set.c']]], ['xbt_5fset_5fnew',['xbt_set_new',['../group__XBT__set__cons.html#ga2cb4e125f22594bb8f7a2726464fed3d',1,'xbt_set_new(void): set.c'],['../group__XBT__set__cons.html#ga2cb4e125f22594bb8f7a2726464fed3d',1,'xbt_set_new(void): set.c']]], ['xbt_5fset_5fremove',['xbt_set_remove',['../group__XBT__set__basic.html#gadd31f4f1a5a5fdce54f3a8bfbc37de8a',1,'xbt_set_remove(xbt_set_t set, xbt_set_elm_t elm): set.c'],['../group__XBT__set__basic.html#gadd31f4f1a5a5fdce54f3a8bfbc37de8a',1,'xbt_set_remove(xbt_set_t set, xbt_set_elm_t elm): set.c']]], ['xbt_5fset_5fremove_5fby_5fid',['xbt_set_remove_by_id',['../group__XBT__set__basic.html#ga917c20ea5adb57ca287dd1d48ca12ec7',1,'xbt_set_remove_by_id(xbt_set_t set, int id): set.c'],['../group__XBT__set__basic.html#ga917c20ea5adb57ca287dd1d48ca12ec7',1,'xbt_set_remove_by_id(xbt_set_t set, int id): set.c']]], ['xbt_5fset_5fremove_5fby_5fname',['xbt_set_remove_by_name',['../group__XBT__set__basic.html#gac5ac26bcb50f5a22c1b2af1f8a1f49c4',1,'xbt_set_remove_by_name(xbt_set_t set, const char *key): set.c'],['../group__XBT__set__basic.html#gac5ac26bcb50f5a22c1b2af1f8a1f49c4',1,'xbt_set_remove_by_name(xbt_set_t set, const char *key): set.c']]], ['xbt_5fset_5fremove_5fby_5fname_5fext',['xbt_set_remove_by_name_ext',['../group__XBT__set__basic.html#gabda240bc3fa5bc0ac6983b19f4caa5f8',1,'xbt_set_remove_by_name_ext(xbt_set_t set, const char *key, int key_len): set.c'],['../group__XBT__set__basic.html#gabda240bc3fa5bc0ac6983b19f4caa5f8',1,'xbt_set_remove_by_name_ext(xbt_set_t set, const char *key, int key_len): set.c']]], ['xbt_5fset_5ft',['xbt_set_t',['../group__XBT__set__cons.html#ga5a56bcacbc9efbb918abb6be2f7c8b7d',1,'set.h']]], ['xbt_5fstr_5fdiff',['xbt_str_diff',['../group__XBT__str.html#gadfd8938aaade2e991b8b51bed5aea886',1,'xbt_str_diff(const char *a, const char *b): xbt_str.c'],['../group__XBT__str.html#gadfd8938aaade2e991b8b51bed5aea886',1,'xbt_str_diff(const char *a, const char *b): xbt_str.c']]], ['xbt_5fstr_5ffrom_5ffile',['xbt_str_from_file',['../group__XBT__str.html#ga3d0726833fdc157351600358cc67097c',1,'xbt_str_from_file(FILE *file): xbt_str.c'],['../group__XBT__str.html#ga3d0726833fdc157351600358cc67097c',1,'xbt_str_from_file(FILE *file): xbt_str.c']]], ['xbt_5fstr_5fhash',['xbt_str_hash',['../group__XBT__str.html#ga7b484f038534879efb07619091341977',1,'str.h']]], ['xbt_5fstr_5fhash_5fext',['xbt_str_hash_ext',['../group__XBT__str.html#ga10c19e31b7f944a5f426a7d436a44e6d',1,'str.h']]], ['xbt_5fstr_5fjoin',['xbt_str_join',['../group__XBT__str.html#ga1271575a77363ce72fbdf65298a49622',1,'xbt_str_join(xbt_dynar_t dynar, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga1271575a77363ce72fbdf65298a49622',1,'xbt_str_join(xbt_dynar_t dyn, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fjoin_5farray',['xbt_str_join_array',['../group__XBT__str.html#ga17585fd9f6432df9f84db21059486900',1,'xbt_str_join_array(const char *const *strs, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga17585fd9f6432df9f84db21059486900',1,'xbt_str_join_array(const char *const *strs, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fltrim',['xbt_str_ltrim',['../group__XBT__str.html#gaeb745f202229799d900aa3a20953186f',1,'xbt_str_ltrim(char *s, const char *char_list): xbt_str.c'],['../group__XBT__str.html#gaeb745f202229799d900aa3a20953186f',1,'xbt_str_ltrim(char *s, const char *char_list): xbt_str.c']]], ['xbt_5fstr_5frtrim',['xbt_str_rtrim',['../group__XBT__str.html#ga9d7c43274b5a6339adfc724e2efd0ead',1,'xbt_str_rtrim(char *s, const char *char_list): xbt_str.c'],['../group__XBT__str.html#ga9d7c43274b5a6339adfc724e2efd0ead',1,'xbt_str_rtrim(char *s, const char *char_list): xbt_str.c']]], ['xbt_5fstr_5fsplit',['xbt_str_split',['../group__XBT__str.html#ga91672ded3b13340f1dfa6fb5ce64fb42',1,'xbt_str_split(const char *s, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga91672ded3b13340f1dfa6fb5ce64fb42',1,'xbt_str_split(const char *s, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fsplit_5fquoted',['xbt_str_split_quoted',['../group__XBT__str.html#gaa6839f81f1789acf3865eeade8c23c77',1,'xbt_str_split_quoted(const char *s): xbt_str.c'],['../group__XBT__str.html#gaa6839f81f1789acf3865eeade8c23c77',1,'xbt_str_split_quoted(const char *s): xbt_str.c']]], ['xbt_5fstr_5fsplit_5fquoted_5fin_5fplace',['xbt_str_split_quoted_in_place',['../group__XBT__str.html#ga2454f448cda4a1ba94409196a2f31d78',1,'xbt_str_split_quoted_in_place(char *s): xbt_str.c'],['../group__XBT__str.html#ga2454f448cda4a1ba94409196a2f31d78',1,'xbt_str_split_quoted_in_place(char *s): xbt_str.c']]], ['xbt_5fstr_5fsplit_5fstr',['xbt_str_split_str',['../group__XBT__str.html#ga84523a36aef41594015c8c2a22256385',1,'xbt_str_split_str(const char *s, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga84523a36aef41594015c8c2a22256385',1,'xbt_str_split_str(const char *s, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fstrip_5fspaces',['xbt_str_strip_spaces',['../group__XBT__str.html#ga5b8c3f04c5bd47a54c6700c634c48d40',1,'xbt_str_strip_spaces(char *): xbt_str.c'],['../group__XBT__str.html#ga5b8c3f04c5bd47a54c6700c634c48d40',1,'xbt_str_strip_spaces(char *s): xbt_str.c']]], ['xbt_5fstr_5fsubst',['xbt_str_subst',['../group__XBT__str.html#ga2aaaa9b7cdc3e30d0a2b85c7561ad0e6',1,'xbt_str_subst(char *str, char from, char to, int amount): xbt_str.c'],['../group__XBT__str.html#ga2aaaa9b7cdc3e30d0a2b85c7561ad0e6',1,'xbt_str_subst(char *str, char from, char to, int occurence): xbt_str.c']]], ['xbt_5fstr_5ftrim',['xbt_str_trim',['../group__XBT__str.html#ga5259c70a74df4d63f39e68cc5fe8f1b3',1,'xbt_str_trim(char *s, const char *char_list): xbt_str.c'],['../group__XBT__str.html#ga5259c70a74df4d63f39e68cc5fe8f1b3',1,'xbt_str_trim(char *s, const char *char_list): xbt_str.c']]], ['xbt_5fstr_5fvarsubst',['xbt_str_varsubst',['../group__XBT__str.html#ga42a82b549ada759cfc7ec4e0999dde1e',1,'xbt_str_varsubst(const char *str, xbt_dict_t patterns): xbt_str.c'],['../group__XBT__str.html#ga42a82b549ada759cfc7ec4e0999dde1e',1,'xbt_str_varsubst(const char *str, xbt_dict_t patterns): xbt_str.c']]], ['xbt_5fswag_5fextract',['xbt_swag_extract',['../group__XBT__swag__func.html#ga008f75ad3c220b326121e44a6cadb6d3',1,'xbt_swag_extract(xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#ga008f75ad3c220b326121e44a6cadb6d3',1,'xbt_swag_extract(xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5fforeach',['xbt_swag_foreach',['../group__XBT__swag__curs.html#gad0579732a4cf176b7812381b85c1df42',1,'swag.h']]], ['xbt_5fswag_5fforeach_5fsafe',['xbt_swag_foreach_safe',['../group__XBT__swag__curs.html#ga1cd81b745c6799a768b8f08c5d4c7974',1,'swag.h']]], ['xbt_5fswag_5ffree',['xbt_swag_free',['../group__XBT__swag__func.html#ga936859aae1ee95f8cfb9f32047dc482d',1,'xbt_swag_free(xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#ga936859aae1ee95f8cfb9f32047dc482d',1,'xbt_swag_free(xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5finit',['xbt_swag_init',['../group__XBT__swag__func.html#ga08da2ee0936e19da57695b5d99007c64',1,'xbt_swag_init(xbt_swag_t swag, size_t offset): swag.c'],['../group__XBT__swag__func.html#ga08da2ee0936e19da57695b5d99007c64',1,'xbt_swag_init(xbt_swag_t swag, size_t offset): swag.c']]], ['xbt_5fswag_5finsert',['xbt_swag_insert',['../group__XBT__swag__func.html#ga1bb1fb6d0e53c58a6d5c9ceac94339b6',1,'swag.h']]], ['xbt_5fswag_5finsert_5fat_5fhead',['xbt_swag_insert_at_head',['../group__XBT__swag__func.html#ga19c8dc8c1637bb0fce94c4bc38b7d088',1,'xbt_swag_insert_at_head(void *obj, xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#ga19c8dc8c1637bb0fce94c4bc38b7d088',1,'xbt_swag_insert_at_head(void *obj, xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5finsert_5fat_5ftail',['xbt_swag_insert_at_tail',['../group__XBT__swag__func.html#gae5919f7e25c402ac3079d792e033a1fb',1,'xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#gae5919f7e25c402ac3079d792e033a1fb',1,'xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5fnew',['xbt_swag_new',['../group__XBT__swag__func.html#ga11b0c605fb84243e1c399831c9efbf6c',1,'xbt_swag_new(size_t offset): swag.c'],['../group__XBT__swag__func.html#ga11b0c605fb84243e1c399831c9efbf6c',1,'xbt_swag_new(size_t offset): swag.c']]], ['xbt_5fswag_5foffset',['xbt_swag_offset',['../group__XBT__swag__func.html#ga96193348bca3b2b0840cbc122d8516f7',1,'swag.h']]], ['xbt_5fswag_5fremove',['xbt_swag_remove',['../group__XBT__swag__func.html#gabce3d24a60fbd2e2cbd31df6612418a3',1,'xbt_swag_remove(void *obj, xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#gabce3d24a60fbd2e2cbd31df6612418a3',1,'xbt_swag_remove(void *obj, xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5freset',['xbt_swag_reset',['../group__XBT__swag__func.html#ga178b8841e1a3e2561f5b73fbfdecdfa1',1,'swag.h']]], ['xbt_5fswag_5fsize',['xbt_swag_size',['../group__XBT__swag__func.html#gaef55e706dcbabb605cf71e522caa82e6',1,'xbt_swag_size(xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#gaef55e706dcbabb605cf71e522caa82e6',1,'xbt_swag_size(xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5ft',['xbt_swag_t',['../group__XBT__swag__type.html#gae08645c9a236bae019fb12ab374dc17f',1,'swag.h']]], ['xbt_5ftest_5fadd',['xbt_test_add',['../group__XBT__cunit.html#ga33c58870448aa6698fd8ceb02b5414a4',1,'cunit.h']]], ['xbt_5ftest_5fassert',['xbt_test_assert',['../group__XBT__cunit.html#ga15e0116c033c1125582021c76f407ea6',1,'cunit.h']]], ['xbt_5ftest_5fexception',['xbt_test_exception',['../group__XBT__cunit.html#ga7b2f459569efbe7862537a2223374f24',1,'xbt_test_exception(xbt_ex_t e): cunit.c'],['../group__XBT__cunit.html#ga7b2f459569efbe7862537a2223374f24',1,'xbt_test_exception(xbt_ex_t e): cunit.c']]], ['xbt_5ftest_5fexpect_5ffailure',['xbt_test_expect_failure',['../group__XBT__cunit.html#gab6fa2a7525ea09e047ebc849a36afac4',1,'xbt_test_expect_failure(void): cunit.c'],['../group__XBT__cunit.html#gab6fa2a7525ea09e047ebc849a36afac4',1,'xbt_test_expect_failure(void): cunit.c']]], ['xbt_5ftest_5ffail',['xbt_test_fail',['../group__XBT__cunit.html#ga04e70ec73d2366145a38eff836653ee6',1,'cunit.h']]], ['xbt_5ftest_5fskip',['xbt_test_skip',['../group__XBT__cunit.html#gab1fe95862df7198fb9fc71f1fd031f5d',1,'xbt_test_skip(void): cunit.c'],['../group__XBT__cunit.html#gab1fe95862df7198fb9fc71f1fd031f5d',1,'xbt_test_skip(void): cunit.c']]], ['xbt_5ftest_5fsuite',['XBT_TEST_SUITE',['../group__XBT__cunit.html#gaaf7f17704d7f1b2070c69bbd4a22469e',1,'cunit.h']]], ['xbt_5ftest_5funit',['XBT_TEST_UNIT',['../group__XBT__cunit.html#ga00e45218050b20e0874600bf8a093fca',1,'cunit.h']]], ['xbt_5fthread_5fcancel',['xbt_thread_cancel',['../group__XBT__synchro.html#gaeaeb76bcf1386f57104957ffe50dd913',1,'xbt_thread_cancel(xbt_thread_t thread): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gaeaeb76bcf1386f57104957ffe50dd913',1,'xbt_thread_cancel(xbt_thread_t thread): xbt_sg_synchro.c']]], ['xbt_5fthread_5fcreate',['xbt_thread_create',['../group__XBT__synchro.html#ga7faf7010fd7bc47cd1487fe7bfba2214',1,'xbt_thread_create(const char *name, void_f_pvoid_t start_routine, void *param, int joinable): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga7faf7010fd7bc47cd1487fe7bfba2214',1,'xbt_thread_create(const char *name, void_f_pvoid_t code, void *param, int joinable): xbt_sg_synchro.c']]], ['xbt_5fthread_5fexit',['xbt_thread_exit',['../group__XBT__synchro.html#ga2c8ac4c62ee9788b889dd135db67871f',1,'xbt_thread_exit(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga2c8ac4c62ee9788b889dd135db67871f',1,'xbt_thread_exit(): xbt_sg_synchro.c']]], ['xbt_5fthread_5fjoin',['xbt_thread_join',['../group__XBT__synchro.html#ga4633b9357c418a88723d3a11f02b9280',1,'xbt_thread_join(xbt_thread_t thread): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga4633b9357c418a88723d3a11f02b9280',1,'xbt_thread_join(xbt_thread_t thread): xbt_sg_synchro.c']]], ['xbt_5fthread_5fname',['xbt_thread_name',['../group__XBT__synchro.html#ga3b74bd7c7a6fbdf1ef7e4a9c9f6035c0',1,'xbt_thread_name(xbt_thread_t t): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga3b74bd7c7a6fbdf1ef7e4a9c9f6035c0',1,'xbt_thread_name(xbt_thread_t t): xbt_sg_synchro.c']]], ['xbt_5fthread_5fself',['xbt_thread_self',['../group__XBT__synchro.html#gab781e679c968c3a7ae12d32ffa3dd63e',1,'xbt_thread_self(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gab781e679c968c3a7ae12d32ffa3dd63e',1,'xbt_thread_self(void): xbt_sg_synchro.c']]], ['xbt_5fthread_5fself_5fname',['xbt_thread_self_name',['../group__XBT__synchro.html#ga44f3eaa106769bb7bd269b95e4dc46e8',1,'xbt_thread_self_name(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga44f3eaa106769bb7bd269b95e4dc46e8',1,'xbt_thread_self_name(void): xbt_sg_synchro.c']]], ['xbt_5fthread_5ft',['xbt_thread_t',['../group__XBT__synchro.html#gabe2e83a69fdb54e7513cfde241a8b6e9',1,'synchro_core.h']]], ['xbt_5fthread_5fyield',['xbt_thread_yield',['../group__XBT__synchro.html#gad94ddaafcea741ad2cce5b97184ccb1f',1,'xbt_thread_yield(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gad94ddaafcea741ad2cce5b97184ccb1f',1,'xbt_thread_yield(void): xbt_sg_synchro.c']]], ['xbt_5fverb',['XBT_VERB',['../group__XBT__log.html#gab9815968eb142e81c5e661ececb1f0f3',1,'log.h']]], ['xbt_5fwarn',['XBT_WARN',['../group__XBT__log.html#ga6accdad9dccecd8d220a479ea0202827',1,'log.h']]] ]; SimGrid-3.10/doc/html/search/variables_73.html000640 007661 000620 00000001712 12242224150 021341 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_64.html000640 007661 000620 00000001712 12242224150 021341 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_6d.js000640 007661 000620 00000001677 12242224150 021317 0ustar00gierschand000000 000000 var searchData= [ ['mismatch_5ferror',['mismatch_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854aad84e78423b0ba9b3df634f564a38586',1,'ex.h']]], ['msg_5fhost_5ffailure',['MSG_HOST_FAILURE',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a69965b44e0393c3ba81482bb975c55e5',1,'msg.h']]], ['msg_5fok',['MSG_OK',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a7db209a18c6374183567534787dccc1b',1,'msg.h']]], ['msg_5ftask_5fcanceled',['MSG_TASK_CANCELED',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a115b6882d73de65d775aa8c7f1abaf70',1,'msg.h']]], ['msg_5ftimeout',['MSG_TIMEOUT',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a2f90300a07b9b18285e1897b1fabfd06',1,'msg.h']]], ['msg_5ftransfer_5ffailure',['MSG_TRANSFER_FAILURE',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a373b92dc6a498dea6ab408fb1670386f',1,'msg.h']]] ]; SimGrid-3.10/doc/html/search/variables_74.html000640 007661 000620 00000001712 12242224150 021342 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_62.js000640 007661 000620 00000000624 12242224150 021050 0ustar00gierschand000000 000000 var searchData= [ ['bprintf',['bprintf',['../group__XBT__str.html#ga6f0a0c16ffed231430899dabdb426ac6',1,'simgrid_config.h']]], ['bvprintf',['bvprintf',['../group__XBT__str.html#ga2faec67938497d455b6ab3ccb69d7fb3',1,'bvprintf(const char *fmt, va_list ap): snprintf.c'],['../group__XBT__str.html#ga2faec67938497d455b6ab3ccb69d7fb3',1,'bvprintf(const char *fmt, va_list ap): snprintf.c']]] ]; SimGrid-3.10/doc/html/search/enumvalues_63.html000640 007661 000620 00000001713 12242224150 021555 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_66.html000640 007661 000620 00000001704 12242224150 020144 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_6e.html000640 007661 000620 00000001704 12242224150 020223 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enums_6d.js000640 007661 000620 00000000213 12242224150 020243 0ustar00gierschand000000 000000 var searchData= [ ['msg_5ferror_5ft',['msg_error_t',['../group__msg__simulation.html#gaf79b56c0bd3b78b539b0cb4c12e56425',1,'msg.h']]] ]; SimGrid-3.10/doc/html/search/groups_66.js000640 007661 000620 00000001205 12242224150 020357 0ustar00gierschand000000 000000 var searchData= [ ['full_20index',['Full Index',['../group__API__index.html',1,'']]], ['file_20management_20functions',['File Management Functions',['../group__msg__file__management.html',1,'']]], ['file_20management_20functions',['File Management Functions',['../group__simix__file__management.html',1,'']]], ['fifo_3a_20generic_20workqueue',['Fifo: generic workqueue',['../group__XBT__fifo.html',1,'']]], ['fifo_20constructor_20and_20destructor',['Fifo constructor and destructor',['../group__XBT__fifo__cons.html',1,'']]], ['fifo_20perl_2dlike_20functions',['Fifo perl-like functions',['../group__XBT__fifo__perl.html',1,'']]] ]; SimGrid-3.10/doc/html/search/typedefs_6d.html000640 007661 000620 00000001711 12242224150 021273 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_68.html000640 007661 000620 00000001713 12242224150 021562 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_62.js000640 007661 000620 00000001141 12242224150 017603 0ustar00gierschand000000 000000 var searchData= [ ['bindings',['Bindings',['../bindings.html',1,'advanced']]], ['bound_5ferror',['bound_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854ae2954a4c5a79d65f9f68675fea93376b',1,'ex.h']]], ['bprintf',['bprintf',['../group__XBT__str.html#ga6f0a0c16ffed231430899dabdb426ac6',1,'simgrid_config.h']]], ['bvprintf',['bvprintf',['../group__XBT__str.html#ga2faec67938497d455b6ab3ccb69d7fb3',1,'bvprintf(const char *fmt, va_list ap): snprintf.c'],['../group__XBT__str.html#ga2faec67938497d455b6ab3ccb69d7fb3',1,'bvprintf(const char *fmt, va_list ap): snprintf.c']]] ]; SimGrid-3.10/doc/html/search/variables_76.html000640 007661 000620 00000001712 12242224150 021344 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_69.html000640 007661 000620 00000001713 12242224150 021563 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_72.js000640 007661 000620 00000001012 12242224150 021001 0ustar00gierschand000000 000000 var searchData= [ ['ready_5faction_5fset',['ready_action_set',['../structsurf__action__state.html#a037da16821384bfb2364d03d7bc7c6b2',1,'surf_action_state']]], ['remains',['remains',['../structsurf__action.html#a524498b274bd63b350e368a57105f47f',1,'surf_action']]], ['resume',['resume',['../structsurf__model.html#a8f0b61e06575462b3c5cbf1a22f3e859',1,'surf_model']]], ['running_5faction_5fset',['running_action_set',['../structsurf__action__state.html#a25766c647f7fadf3b54cdd5f7ab81957',1,'surf_action_state']]] ]; SimGrid-3.10/doc/html/search/variables_6e.js000640 007661 000620 00000001050 12242224150 021065 0ustar00gierschand000000 000000 var searchData= [ ['name',['name',['../structxbt__set__elm__.html#a5a2ab800a2ad4e62739c13ff4f7d6104',1,'xbt_set_elm_::name()'],['../structsurf__model.html#a285237be60a0c75c56d50f754f10ca1b',1,'surf_model::name()'],['../structs__smx__process.html#a5c047926058308fa200c609bbd6e4d27',1,'s_smx_process::name()']]], ['name_5flen',['name_len',['../structxbt__set__elm__.html#a6896ad1af2ffaa976b0aa3850bd0a9c9',1,'xbt_set_elm_']]], ['num_5fworkers',['num_workers',['../structs__xbt__parmap.html#a4610f24b4081b535323b5ae767221137',1,'s_xbt_parmap']]] ]; SimGrid-3.10/doc/html/search/all_73.js000640 007661 000620 00000167466 12242224150 017634 0ustar00gierschand000000 000000 var searchData= [ ['simgrid_20in_2030mn',['SimGrid in 30mn',['../getting_started.html',1,'index']]], ['simgrid_20documentation',['SimGrid Documentation',['../index.html',1,'']]], ['simgrid_20developer_20guide_20_2d_20releasing',['SimGrid Developer Guide - Releasing',['../inside_release.html',1,'internals']]], ['simgrid_20internals',['SimGrid internals',['../internals.html',1,'advanced']]], ['simix_20datatypes_20management_20details',['SIMIX datatypes management details',['../group__m__datatypes__management__details.html',1,'']]], ['simgrid_20options_20and_20configurations',['Simgrid options and configurations',['../options.html',1,'use']]], ['s_5fmodel_5ftype',['s_model_type',['../structs__model__type.html',1,'']]], ['s_5fsmx_5faction',['s_smx_action',['../structs__smx__action.html',1,'']]], ['s_5fsmx_5fhost_5fpriv',['s_smx_host_priv',['../structs__smx__host__priv.html',1,'']]], ['s_5fsmx_5fprocess',['s_smx_process',['../structs__smx__process.html',1,'']]], ['s_5fsmx_5frvpoint',['s_smx_rvpoint',['../structs__smx__rvpoint.html',1,'']]], ['s_5fsmx_5fsimcall',['s_smx_simcall',['../structs__smx__simcall.html',1,'']]], ['s_5fsmx_5fstorage_5fpriv',['s_smx_storage_priv',['../structs__smx__storage__priv.html',1,'']]], ['s_5fsmx_5ftimer',['s_smx_timer',['../structs__smx__timer.html',1,'']]], ['s_5fsurf_5faction_5fstate_5ft',['s_surf_action_state_t',['../group__SURF__actions.html#gafbcc9ab9767482d92f8709d78858d2ae',1,'surf.h']]], ['s_5fsurf_5faction_5ft',['s_surf_action_t',['../group__SURF__actions.html#gae49733011b74942c0a896745bc825e92',1,'surf.h']]], ['s_5fsurf_5fmetric_5ft',['s_surf_metric_t',['../structs__surf__metric__t.html',1,'']]], ['s_5fxbt_5fdict_5fcursor',['s_xbt_dict_cursor',['../structs__xbt__dict__cursor.html',1,'']]], ['s_5fxbt_5fparmap',['s_xbt_parmap',['../structs__xbt__parmap.html',1,'']]], ['s_5fxbt_5fparmap_5fthread_5fdata',['s_xbt_parmap_thread_data',['../structs__xbt__parmap__thread__data.html',1,'']]], ['s_5fxbt_5fpeer',['s_xbt_peer',['../structs__xbt__peer.html',1,'']]], ['s_5fxbt_5fpeer_5ft',['s_xbt_peer_t',['../group__XBT__peer.html#ga6d62b8bce4ac8f6206f66f8dd34d2532',1,'peer.h']]], ['s_5fxbt_5fset_5felm_5ft',['s_xbt_set_elm_t',['../group__XBT__set__cons.html#gaf8bb4c0082689473e7aa16791283a38e',1,'set.h']]], ['s_5fxbt_5fstrbuff_5ft',['s_xbt_strbuff_t',['../structs__xbt__strbuff__t.html',1,'']]], ['s_5fxbt_5fswag_5fhookup_5ft',['s_xbt_swag_hookup_t',['../group__XBT__swag__type.html#ga1cb9298c552ff2834e5dad4848311692',1,'swag.h']]], ['simdag',['SimDag',['../group__SD__API.html',1,'']]], ['sd_5fapplication_5freinit',['SD_application_reinit',['../group__SD__simulation.html#ga8c9fdcd05effacd9b20c0ea75c5c5f7e',1,'SD_application_reinit(void): sd_global.c'],['../group__SD__simulation.html#ga8c9fdcd05effacd9b20c0ea75c5c5f7e',1,'SD_application_reinit(void): sd_global.c']]], ['sd_5fconfig',['SD_config',['../group__SD__simulation.html#ga32a2bbed292f8d4ebeafc0b6debd0af3',1,'SD_config(const char *key, const char *value): sd_global.c'],['../group__SD__simulation.html#ga32a2bbed292f8d4ebeafc0b6debd0af3',1,'SD_config(const char *key, const char *value): sd_global.c']]], ['sd_5fcreate_5fenvironment',['SD_create_environment',['../group__SD__simulation.html#gac961eff01737333623e3b5343e78a269',1,'SD_create_environment(const char *platform_file): sd_global.c'],['../group__SD__simulation.html#gac961eff01737333623e3b5343e78a269',1,'SD_create_environment(const char *platform_file): sd_global.c']]], ['sd_20data_20types',['SD Data Types',['../group__SD__datatypes__management.html',1,'']]], ['sd_5fdaxload',['SD_daxload',['../group__SD__simulation.html#ga1882fd299f53829a131dd01c83ed5471',1,'SD_daxload(const char *filename): sd_daxloader.c'],['../group__SD__simulation.html#ga1882fd299f53829a131dd01c83ed5471',1,'SD_daxload(const char *filename): sd_daxloader.c']]], ['sd_5fdone',['SD_DONE',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ae654935882dec5b2345a3128aed69632',1,'datatypes.h']]], ['sd_5fdotload',['SD_dotload',['../group__SD__simulation.html#ga35de259bc832b4926a310d0359a36dd6',1,'SD_dotload(const char *filename): sd_dotloader.c'],['../group__SD__simulation.html#ga35de259bc832b4926a310d0359a36dd6',1,'SD_dotload(const char *filename): sd_dotloader.c']]], ['sd_5fexit',['SD_exit',['../group__SD__simulation.html#gad1a92b51e423aad6d47be2b82c6536ba',1,'SD_exit(void): sd_global.c'],['../group__SD__simulation.html#gad1a92b51e423aad6d47be2b82c6536ba',1,'SD_exit(void): sd_global.c']]], ['sd_5ffailed',['SD_FAILED',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5adda3fbec6b0da252275f20c79044201c',1,'datatypes.h']]], ['sd_5fget_5fclock',['SD_get_clock',['../group__SD__simulation.html#gafc34707cae382f245f7a33d1eb202392',1,'SD_get_clock(void): sd_global.c'],['../group__SD__simulation.html#gafc34707cae382f245f7a33d1eb202392',1,'SD_get_clock(void): sd_global.c']]], ['sd_5fin_5ffifo',['SD_IN_FIFO',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ac055f0cd1ac85271cc31d0340acc8c4c',1,'datatypes.h']]], ['sd_5finit',['SD_init',['../group__SD__simulation.html#gaa4c19ede9d99b8925e62f30c52f1e65f',1,'SD_init(int *argc, char **argv): sd_global.c'],['../group__SD__simulation.html#gaa4c19ede9d99b8925e62f30c52f1e65f',1,'SD_init(int *argc, char **argv): sd_global.c']]], ['sd_5flink_5fget_5fcurrent_5fbandwidth',['SD_link_get_current_bandwidth',['../group__SD__link__management.html#ga4bdb09a991d2366f38c303ed2e48c885',1,'SD_link_get_current_bandwidth(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#ga4bdb09a991d2366f38c303ed2e48c885',1,'SD_link_get_current_bandwidth(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5fcurrent_5flatency',['SD_link_get_current_latency',['../group__SD__link__management.html#ga61b0106214ae990e8f4c9aaecfbc0779',1,'SD_link_get_current_latency(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#ga61b0106214ae990e8f4c9aaecfbc0779',1,'SD_link_get_current_latency(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5fdata',['SD_link_get_data',['../group__SD__link__management.html#ga4f56602832da18405e8d0e2653f0744c',1,'SD_link_get_data(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#ga4f56602832da18405e8d0e2653f0744c',1,'SD_link_get_data(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5flist',['SD_link_get_list',['../group__SD__link__management.html#gae6a4a20a3269c3595a195d24f220fb40',1,'SD_link_get_list(void): sd_link.c'],['../group__SD__link__management.html#gae6a4a20a3269c3595a195d24f220fb40',1,'SD_link_get_list(void): sd_link.c']]], ['sd_5flink_5fget_5fname',['SD_link_get_name',['../group__SD__link__management.html#gace788d7f0b4b57c5af0b8a5025929780',1,'SD_link_get_name(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#gace788d7f0b4b57c5af0b8a5025929780',1,'SD_link_get_name(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5fnumber',['SD_link_get_number',['../group__SD__link__management.html#ga8f5ff7ea86c621aa77f44e913222613d',1,'SD_link_get_number(void): sd_link.c'],['../group__SD__link__management.html#ga8f5ff7ea86c621aa77f44e913222613d',1,'SD_link_get_number(void): sd_link.c']]], ['sd_5flink_5fget_5fsharing_5fpolicy',['SD_link_get_sharing_policy',['../group__SD__link__management.html#gaab6c4e1b06d62ed57157b508561b28c8',1,'SD_link_get_sharing_policy(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#gaab6c4e1b06d62ed57157b508561b28c8',1,'SD_link_get_sharing_policy(SD_link_t link): sd_link.c']]], ['sd_5flink_5fset_5fdata',['SD_link_set_data',['../group__SD__link__management.html#ga180c8056827783104c4cecce3acc9b23',1,'SD_link_set_data(SD_link_t link, void *data): sd_link.c'],['../group__SD__link__management.html#ga180c8056827783104c4cecce3acc9b23',1,'SD_link_set_data(SD_link_t link, void *data): sd_link.c']]], ['sd_5flink_5ft',['SD_link_t',['../group__SD__datatypes__management.html#ga0b4ef9c55c15ac2612409087d89d8415',1,'datatypes.h']]], ['sd_5fnot_5fscheduled',['SD_NOT_SCHEDULED',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5aec1d4dfae04f63ec58dd8ab7941a8801',1,'datatypes.h']]], ['sd_5froute_5fget_5fcommunication_5ftime',['SD_route_get_communication_time',['../group__SD__workstation__management.html#ga0983ee235addaee99467ef4c4f97966b',1,'SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t dst, double communication_amount): sd_workstation.c'],['../group__SD__workstation__management.html#ga0983ee235addaee99467ef4c4f97966b',1,'SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t dst, double communication_amount): sd_workstation.c']]], ['sd_5froute_5fget_5fcurrent_5fbandwidth',['SD_route_get_current_bandwidth',['../group__SD__workstation__management.html#gad52c195122d5cd98331a3838c52d4d81',1,'SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#gad52c195122d5cd98331a3838c52d4d81',1,'SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5froute_5fget_5fcurrent_5flatency',['SD_route_get_current_latency',['../group__SD__workstation__management.html#ga224866561ec8000a495faea7c5e25b48',1,'SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#ga224866561ec8000a495faea7c5e25b48',1,'SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5froute_5fget_5flist',['SD_route_get_list',['../group__SD__workstation__management.html#gaa9522a1e095218a426cf6c70315fdc9d',1,'SD_route_get_list(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#gaa9522a1e095218a426cf6c70315fdc9d',1,'SD_route_get_list(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5froute_5fget_5fsize',['SD_route_get_size',['../group__SD__workstation__management.html#gad28c1465fa8cc17f0d73668ed8dbca4a',1,'SD_route_get_size(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#gad28c1465fa8cc17f0d73668ed8dbca4a',1,'SD_route_get_size(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5frunnable',['SD_RUNNABLE',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a4deae4c6080598bd869d22fa4d35328d',1,'datatypes.h']]], ['sd_5frunning',['SD_RUNNING',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a79dc5ff4b6f36bfae26b9666feb4ba78',1,'datatypes.h']]], ['sd_5fsched_5fno_5fcost',['SD_SCHED_NO_COST',['../group__SD__task__management.html#ga430717fbd36bb2d92b85e4c47a96ffa0',1,'simdag.h']]], ['sd_5fschedulable',['SD_SCHEDULABLE',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a2c3f70794cc8b27495bd2c7b6b6872af',1,'datatypes.h']]], ['sd_5fscheduled',['SD_SCHEDULED',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a626549e8ac33c3142d9b3ab66abcc374',1,'datatypes.h']]], ['sd_5fsimulate',['SD_simulate',['../group__SD__simulation.html#ga5a1f4e7f674374210de13181acbd98d3',1,'SD_simulate(double how_long): sd_global.c'],['../group__SD__simulation.html#ga5a1f4e7f674374210de13181acbd98d3',1,'SD_simulate(double how_long): sd_global.c']]], ['simulation',['Simulation',['../group__SD__simulation.html',1,'']]], ['sd_5fstorage_5ft',['SD_storage_t',['../group__SD__datatypes__management.html#ga488f5d5cd3010184019e42e4cc130793',1,'datatypes.h']]], ['sd_5ftask_5fcomm_5fe2e',['SD_TASK_COMM_E2E',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a9add1089dc99e90c905ec491db980d76',1,'datatypes.h']]], ['sd_5ftask_5fcomm_5fpar_5fmxn_5f1d_5fblock',['SD_TASK_COMM_PAR_MXN_1D_BLOCK',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a6c7da099fce2770ab770c40a0d32e93d',1,'datatypes.h']]], ['sd_5ftask_5fcomp_5fpar_5famdahl',['SD_TASK_COMP_PAR_AMDAHL',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a60c8326cd59d07e45a3910594478dba9',1,'datatypes.h']]], ['sd_5ftask_5fcomp_5fseq',['SD_TASK_COMP_SEQ',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a3fb8ac37142196af9ac8e97e27f2c59c',1,'datatypes.h']]], ['sd_5ftask_5fcreate',['SD_task_create',['../group__SD__task__management.html#ga4ac4414bf72fd959333848d88562502f',1,'SD_task_create(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#ga4ac4414bf72fd959333848d88562502f',1,'SD_task_create(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomm_5fe2e',['SD_task_create_comm_e2e',['../group__SD__task__management.html#ga5690de45db3666e42b97c171f952df15',1,'SD_task_create_comm_e2e(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#ga5690de45db3666e42b97c171f952df15',1,'SD_task_create_comm_e2e(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomm_5fpar_5fmxn_5f1d_5fblock',['SD_task_create_comm_par_mxn_1d_block',['../group__SD__task__management.html#gaaa2a2ba19ce7315069ec4642b6aa16a2',1,'SD_task_create_comm_par_mxn_1d_block(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#gaaa2a2ba19ce7315069ec4642b6aa16a2',1,'SD_task_create_comm_par_mxn_1d_block(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomp_5fpar_5famdahl',['SD_task_create_comp_par_amdahl',['../group__SD__task__management.html#ga39c7eb7e2db73d0c022c78bf0d4a64a2',1,'SD_task_create_comp_par_amdahl(const char *name, void *data, double amount, double alpha): sd_task.c'],['../group__SD__task__management.html#ga39c7eb7e2db73d0c022c78bf0d4a64a2',1,'SD_task_create_comp_par_amdahl(const char *name, void *data, double amount, double alpha): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomp_5fseq',['SD_task_create_comp_seq',['../group__SD__task__management.html#ga3f6480d75795a3309c0c026e540d86e0',1,'SD_task_create_comp_seq(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#ga3f6480d75795a3309c0c026e540d86e0',1,'SD_task_create_comp_seq(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fdependency_5fadd',['SD_task_dependency_add',['../group__SD__task__dependency__management.html#gaeaa883b0561beefb647c5c4280299138',1,'SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#gaeaa883b0561beefb647c5c4280299138',1,'SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fexists',['SD_task_dependency_exists',['../group__SD__task__dependency__management.html#gad492251b41fcd05684d88359c26656e1',1,'SD_task_dependency_exists(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#gad492251b41fcd05684d88359c26656e1',1,'SD_task_dependency_exists(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fget_5fdata',['SD_task_dependency_get_data',['../group__SD__task__dependency__management.html#gaa1bdcdfefbf9b19e03cf90376d6fbbb0',1,'SD_task_dependency_get_data(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#gaa1bdcdfefbf9b19e03cf90376d6fbbb0',1,'SD_task_dependency_get_data(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fget_5fname',['SD_task_dependency_get_name',['../group__SD__task__dependency__management.html#ga5e94f0a64b796de2fb3e7164bd4c7173',1,'SD_task_dependency_get_name(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#ga5e94f0a64b796de2fb3e7164bd4c7173',1,'SD_task_dependency_get_name(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fremove',['SD_task_dependency_remove',['../group__SD__task__dependency__management.html#ga3a22709b38b7a4eb86317e334a8110e0',1,'SD_task_dependency_remove(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#ga3a22709b38b7a4eb86317e334a8110e0',1,'SD_task_dependency_remove(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdestroy',['SD_task_destroy',['../group__SD__task__management.html#ga0cffb2af680086f53fb1599db6ae3c42',1,'SD_task_destroy(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga0cffb2af680086f53fb1599db6ae3c42',1,'SD_task_destroy(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fdistribute_5fcomp_5famdahl',['SD_task_distribute_comp_amdahl',['../group__SD__task__management.html#ga6ab4cb771f03089d33aca732f7f097b8',1,'SD_task_distribute_comp_amdahl(SD_task_t task, int ws_count): sd_task.c'],['../group__SD__task__management.html#ga6ab4cb771f03089d33aca732f7f097b8',1,'SD_task_distribute_comp_amdahl(SD_task_t task, int ws_count): sd_task.c']]], ['sd_5ftask_5fdotty',['SD_task_dotty',['../group__SD__task__management.html#gab29f36e954266588b46c3f2e76e4afe3',1,'SD_task_dotty(SD_task_t task, void *out_FILE): sd_task.c'],['../group__SD__task__management.html#gab29f36e954266588b46c3f2e76e4afe3',1,'SD_task_dotty(SD_task_t task, void *out): sd_task.c']]], ['sd_5ftask_5fdump',['SD_task_dump',['../group__SD__task__management.html#ga9ea8bd4d42155b26f17a875ce24a9ca0',1,'SD_task_dump(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga9ea8bd4d42155b26f17a875ce24a9ca0',1,'SD_task_dump(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5falpha',['SD_task_get_alpha',['../group__SD__task__management.html#ga43e829e6e9e93b39b765ce6e592229a4',1,'SD_task_get_alpha(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga43e829e6e9e93b39b765ce6e592229a4',1,'SD_task_get_alpha(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5famount',['SD_task_get_amount',['../group__SD__task__management.html#gaff407e0ad880fe3e34e0905bbbc1568a',1,'SD_task_get_amount(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#gaff407e0ad880fe3e34e0905bbbc1568a',1,'SD_task_get_amount(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fchildren',['SD_task_get_children',['../group__SD__task__management.html#gabcb438f55dd8fb525a6753576c8c4069',1,'SD_task_get_children(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#gabcb438f55dd8fb525a6753576c8c4069',1,'SD_task_get_children(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fdata',['SD_task_get_data',['../group__SD__task__management.html#ga766539121eadc77886003186e1b45e83',1,'SD_task_get_data(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga766539121eadc77886003186e1b45e83',1,'SD_task_get_data(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fexecution_5ftime',['SD_task_get_execution_time',['../group__SD__task__management.html#ga6c7f9b54e7f061555f07c6ade5fc1e9f',1,'SD_task_get_execution_time(SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount): sd_task.c'],['../group__SD__task__management.html#ga6c7f9b54e7f061555f07c6ade5fc1e9f',1,'SD_task_get_execution_time(SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount): sd_task.c']]], ['sd_5ftask_5fget_5ffinish_5ftime',['SD_task_get_finish_time',['../group__SD__task__management.html#ga9ed01cda917f36b4da719f0594fbe9ee',1,'SD_task_get_finish_time(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga9ed01cda917f36b4da719f0594fbe9ee',1,'SD_task_get_finish_time(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fname',['SD_task_get_name',['../group__SD__task__management.html#gaf1f33ccbe8a0568836387a46d444473d',1,'SD_task_get_name(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#gaf1f33ccbe8a0568836387a46d444473d',1,'SD_task_get_name(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fparents',['SD_task_get_parents',['../group__SD__task__management.html#ga8e6a82c3100081945a6afc650975dee3',1,'SD_task_get_parents(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga8e6a82c3100081945a6afc650975dee3',1,'SD_task_get_parents(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fremaining_5famount',['SD_task_get_remaining_amount',['../group__SD__task__management.html#ga4f8d27d92e9fc813c44b5a64adb24410',1,'SD_task_get_remaining_amount(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga4f8d27d92e9fc813c44b5a64adb24410',1,'SD_task_get_remaining_amount(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fstart_5ftime',['SD_task_get_start_time',['../group__SD__task__management.html#ga1cc17b4c7857521fc4b679bff63446b6',1,'SD_task_get_start_time(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga1cc17b4c7857521fc4b679bff63446b6',1,'SD_task_get_start_time(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fstate',['SD_task_get_state',['../group__SD__task__management.html#ga2b320214a7e5a1c74cf50b236453b288',1,'SD_task_get_state(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga2b320214a7e5a1c74cf50b236453b288',1,'SD_task_get_state(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fworkstation_5fcount',['SD_task_get_workstation_count',['../group__SD__task__management.html#ga4092ccda7d10951ffaf47b65a2da4ae3',1,'SD_task_get_workstation_count(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga4092ccda7d10951ffaf47b65a2da4ae3',1,'SD_task_get_workstation_count(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fworkstation_5flist',['SD_task_get_workstation_list',['../group__SD__task__management.html#ga773124574884bcff102efa3adc9b6120',1,'SD_task_get_workstation_list(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga773124574884bcff102efa3adc9b6120',1,'SD_task_get_workstation_list(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fnot_5ftyped',['SD_TASK_NOT_TYPED',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a8c1896c3c033bea7ecf469a75f83d5f4',1,'datatypes.h']]], ['sd_5ftask_5fschedule',['SD_task_schedule',['../group__SD__task__management.html#ga30a5dbfc2983c1700375075f16c22364',1,'SD_task_schedule(SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount, double rate): sd_task.c'],['../group__SD__task__management.html#ga30a5dbfc2983c1700375075f16c22364',1,'SD_task_schedule(SD_task_t task, int workstation_count, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount, double rate): sd_task.c']]], ['sd_5ftask_5fschedulel',['SD_task_schedulel',['../group__SD__task__management.html#ga35bc9c3b6f25462bacb8f467605f87bb',1,'SD_task_schedulel(SD_task_t task, int count,...): sd_task.c'],['../group__SD__task__management.html#ga35bc9c3b6f25462bacb8f467605f87bb',1,'SD_task_schedulel(SD_task_t task, int count,...): sd_task.c']]], ['sd_5ftask_5fschedulev',['SD_task_schedulev',['../group__SD__task__management.html#gab0ec206f43cda6a8cbdb4aaa8d1a9d02',1,'SD_task_schedulev(SD_task_t task, int count, const SD_workstation_t *list): sd_task.c'],['../group__SD__task__management.html#gab0ec206f43cda6a8cbdb4aaa8d1a9d02',1,'SD_task_schedulev(SD_task_t task, int count, const SD_workstation_t *list): sd_task.c']]], ['sd_5ftask_5fset_5famount',['SD_task_set_amount',['../group__SD__task__management.html#gaebb308fda516592dcee717e657f39966',1,'SD_task_set_amount(SD_task_t task, double amount): sd_task.c'],['../group__SD__task__management.html#gaebb308fda516592dcee717e657f39966',1,'SD_task_set_amount(SD_task_t task, double amount): sd_task.c']]], ['sd_5ftask_5fset_5fdata',['SD_task_set_data',['../group__SD__task__management.html#ga8f5b24ab48696ea78998b42ace35900a',1,'SD_task_set_data(SD_task_t task, void *data): sd_task.c'],['../group__SD__task__management.html#ga8f5b24ab48696ea78998b42ace35900a',1,'SD_task_set_data(SD_task_t task, void *data): sd_task.c']]], ['sd_5ftask_5fset_5fname',['SD_task_set_name',['../group__SD__task__management.html#gaea6138e1ab09935b8a575e1ccbea045c',1,'SD_task_set_name(SD_task_t task, const char *name): sd_task.c'],['../group__SD__task__management.html#gaea6138e1ab09935b8a575e1ccbea045c',1,'SD_task_set_name(SD_task_t task, const char *name): sd_task.c']]], ['sd_5ftask_5fset_5frate',['SD_task_set_rate',['../group__SD__task__management.html#ga5763ec9afe02f381bd1ae9b0be8cb64a',1,'SD_task_set_rate(SD_task_t task, double rate): sd_task.c'],['../group__SD__task__management.html#ga5763ec9afe02f381bd1ae9b0be8cb64a',1,'SD_task_set_rate(SD_task_t task, double rate): sd_task.c']]], ['sd_5ftask_5ft',['SD_task_t',['../group__SD__datatypes__management.html#gabe39904e3bf5f57456382cfcd3814352',1,'datatypes.h']]], ['sd_5ftask_5funschedule',['SD_task_unschedule',['../group__SD__task__management.html#ga5f1619e6ed05db349d89ea12944f64ba',1,'SD_task_unschedule(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga5f1619e6ed05db349d89ea12944f64ba',1,'SD_task_unschedule(SD_task_t task): sd_task.c']]], ['sd_5ftask_5funwatch',['SD_task_unwatch',['../group__SD__task__management.html#ga5cc2370b3d1c43b298a0d5512d8d9312',1,'SD_task_unwatch(SD_task_t task, e_SD_task_state_t state): sd_task.c'],['../group__SD__task__management.html#ga5cc2370b3d1c43b298a0d5512d8d9312',1,'SD_task_unwatch(SD_task_t task, e_SD_task_state_t state): sd_task.c']]], ['sd_5ftask_5fwatch',['SD_task_watch',['../group__SD__task__management.html#ga7853f1943b540ff9d3d7078ed46206cb',1,'SD_task_watch(SD_task_t task, e_SD_task_state_t state): sd_task.c'],['../group__SD__task__management.html#ga7853f1943b540ff9d3d7078ed46206cb',1,'SD_task_watch(SD_task_t task, e_SD_task_state_t state): sd_task.c']]], ['sd_5fworkstation_5fdump',['SD_workstation_dump',['../group__SD__workstation__management.html#ga71b72259a6d31b4445700eb1d21a087a',1,'SD_workstation_dump(SD_workstation_t ws): sd_workstation.c'],['../group__SD__workstation__management.html#ga71b72259a6d31b4445700eb1d21a087a',1,'SD_workstation_dump(SD_workstation_t ws): sd_workstation.c']]], ['sd_5fworkstation_5fget_5faccess_5fmode',['SD_workstation_get_access_mode',['../group__SD__workstation__management.html#ga68c974556d55dc2ae760fde9408a32e6',1,'SD_workstation_get_access_mode(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga68c974556d55dc2ae760fde9408a32e6',1,'SD_workstation_get_access_mode(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5favailable_5fpower',['SD_workstation_get_available_power',['../group__SD__workstation__management.html#gadfd3673bc4bc5011babfd0247d45ef28',1,'SD_workstation_get_available_power(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#gadfd3673bc4bc5011babfd0247d45ef28',1,'SD_workstation_get_available_power(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fby_5fname',['SD_workstation_get_by_name',['../group__SD__workstation__management.html#ga1c912ef7ecda05d307afefad0fc759b6',1,'SD_workstation_get_by_name(const char *name): sd_workstation.c'],['../group__SD__workstation__management.html#ga1c912ef7ecda05d307afefad0fc759b6',1,'SD_workstation_get_by_name(const char *name): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fcomputation_5ftime',['SD_workstation_get_computation_time',['../group__SD__workstation__management.html#ga9caaba45417c65427ee74da841dd14e2',1,'SD_workstation_get_computation_time(SD_workstation_t workstation, double computation_amount): sd_workstation.c'],['../group__SD__workstation__management.html#ga9caaba45417c65427ee74da841dd14e2',1,'SD_workstation_get_computation_time(SD_workstation_t workstation, double computation_amount): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fcurrent_5ftask',['SD_workstation_get_current_task',['../group__SD__workstation__management.html#ga0e4d5fa0f15423b8c1e55abfecd25164',1,'SD_workstation_get_current_task(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga0e4d5fa0f15423b8c1e55abfecd25164',1,'SD_workstation_get_current_task(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fdata',['SD_workstation_get_data',['../group__SD__workstation__management.html#gaed29af2c807f986fccf6d3ad4bf15156',1,'SD_workstation_get_data(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#gaed29af2c807f986fccf6d3ad4bf15156',1,'SD_workstation_get_data(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5flist',['SD_workstation_get_list',['../group__SD__workstation__management.html#ga2849ed01ae4dc580923fbd6782d9ccf4',1,'SD_workstation_get_list(void): sd_workstation.c'],['../group__SD__workstation__management.html#ga2849ed01ae4dc580923fbd6782d9ccf4',1,'SD_workstation_get_list(void): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fname',['SD_workstation_get_name',['../group__SD__workstation__management.html#ga229affb29b5472c8f62f054b0def9547',1,'SD_workstation_get_name(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga229affb29b5472c8f62f054b0def9547',1,'SD_workstation_get_name(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fnumber',['SD_workstation_get_number',['../group__SD__workstation__management.html#gacdc811bb1046b88da230d51c68533ba2',1,'SD_workstation_get_number(void): sd_workstation.c'],['../group__SD__workstation__management.html#gacdc811bb1046b88da230d51c68533ba2',1,'SD_workstation_get_number(void): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fpower',['SD_workstation_get_power',['../group__SD__workstation__management.html#ga324f3ae1cea2ae9e52bfb70448361f26',1,'SD_workstation_get_power(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga324f3ae1cea2ae9e52bfb70448361f26',1,'SD_workstation_get_power(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fproperties',['SD_workstation_get_properties',['../group__SD__workstation__management.html#ga24a4f207e56f070fa83c56d8bb0c35c1',1,'SD_workstation_get_properties(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga24a4f207e56f070fa83c56d8bb0c35c1',1,'SD_workstation_get_properties(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fproperty_5fvalue',['SD_workstation_get_property_value',['../group__SD__workstation__management.html#ga6977e577293bd72f9e191dd2613b650f',1,'SD_workstation_get_property_value(SD_workstation_t workstation, const char *name): sd_workstation.c'],['../group__SD__workstation__management.html#ga6977e577293bd72f9e191dd2613b650f',1,'SD_workstation_get_property_value(SD_workstation_t ws, const char *name): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fstorage_5flist',['SD_workstation_get_storage_list',['../group__SD__workstation__management.html#ga5bb5798685fdcd82966f1238c620e2a0',1,'SD_workstation_get_storage_list(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga5bb5798685fdcd82966f1238c620e2a0',1,'SD_workstation_get_storage_list(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fsequential_5faccess',['SD_WORKSTATION_SEQUENTIAL_ACCESS',['../group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a722f0fd2ff6e52a77206f879e50714df',1,'datatypes.h']]], ['sd_5fworkstation_5fset_5faccess_5fmode',['SD_workstation_set_access_mode',['../group__SD__workstation__management.html#gac00d8cc9c460d532aedfb9ba8fc49c66',1,'SD_workstation_set_access_mode(SD_workstation_t workstation, e_SD_workstation_access_mode_t access_mode): sd_workstation.c'],['../group__SD__workstation__management.html#gac00d8cc9c460d532aedfb9ba8fc49c66',1,'SD_workstation_set_access_mode(SD_workstation_t workstation, e_SD_workstation_access_mode_t access_mode): sd_workstation.c']]], ['sd_5fworkstation_5fset_5fdata',['SD_workstation_set_data',['../group__SD__workstation__management.html#ga63c39639777faf77a8e6c0bd41694fa1',1,'SD_workstation_set_data(SD_workstation_t workstation, void *data): sd_workstation.c'],['../group__SD__workstation__management.html#ga63c39639777faf77a8e6c0bd41694fa1',1,'SD_workstation_set_data(SD_workstation_t workstation, void *data): sd_workstation.c']]], ['sd_5fworkstation_5fshared_5faccess',['SD_WORKSTATION_SHARED_ACCESS',['../group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a6615a65c696b373eef6500a7b8f43c4e',1,'datatypes.h']]], ['sd_5fworkstation_5ft',['SD_workstation_t',['../group__SD__datatypes__management.html#ga4c8d9b64c01d21a1ae8e51632b0dc595',1,'datatypes.h']]], ['set_5fcategory',['set_category',['../structsurf__model.html#a2fe3155ae5dfb3782e1e7b01dc90a988',1,'surf_model']]], ['set_5fmax_5fduration',['set_max_duration',['../structsurf__model.html#a4702f5e90dc62742ec188695e0ff1c72',1,'surf_model']]], ['set_5fpower_5fpeak_5fat',['set_power_peak_at',['../structsurf__workstation__model__extension__public.html#ae83fe4298008ce08652906ccf51ad66e',1,'surf_workstation_model_extension_public']]], ['set_5fpriority',['set_priority',['../structsurf__model.html#a34f89ec266f457c37000f52cdd354a08',1,'surf_model']]], ['simcall_5fasr_5fget_5fproperties',['simcall_asr_get_properties',['../group__simix__host__management.html#ga1a3288b39aba9f321caca13166518cc0',1,'simcall_asr_get_properties(const char *name): smx_user.c'],['../group__simix__host__management.html#ga1a3288b39aba9f321caca13166518cc0',1,'simcall_asr_get_properties(const char *name): smx_user.c']]], ['simcall_5ffile_5fget_5fdata',['simcall_file_get_data',['../group__simix__file__management.html#ga1d4bafa33327c5ce72d7db4a3f1b78d0',1,'simcall_file_get_data(smx_file_t fd): smx_user.c'],['../group__simix__file__management.html#ga1d4bafa33327c5ce72d7db4a3f1b78d0',1,'simcall_file_get_data(smx_file_t fd): smx_user.c']]], ['simcall_5ffile_5fset_5fdata',['simcall_file_set_data',['../group__simix__file__management.html#ga6a768555110db361a4e78fe04719c408',1,'simcall_file_set_data(smx_file_t fd, void *data): smx_user.c'],['../group__simix__file__management.html#ga6a768555110db361a4e78fe04719c408',1,'simcall_file_set_data(smx_file_t fd, void *data): smx_user.c']]], ['simcall_5fhost_5fexecute',['simcall_host_execute',['../group__simix__host__management.html#ga5257c159ed0002779a0d88a1e067bd20',1,'simcall_host_execute(const char *name, smx_host_t host, double computation_amount, double priority): smx_user.c'],['../group__simix__host__management.html#ga5257c159ed0002779a0d88a1e067bd20',1,'simcall_host_execute(const char *name, smx_host_t host, double computation_amount, double priority): smx_user.c']]], ['simcall_5fhost_5fexecution_5fcancel',['simcall_host_execution_cancel',['../group__simix__host__management.html#gab177e0a327bde207864adbb4abf90e57',1,'simcall_host_execution_cancel(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#gab177e0a327bde207864adbb4abf90e57',1,'simcall_host_execution_cancel(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fdestroy',['simcall_host_execution_destroy',['../group__simix__host__management.html#gaf31f9cd17e99f88b734b37a91f25d476',1,'simcall_host_execution_destroy(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#gaf31f9cd17e99f88b734b37a91f25d476',1,'simcall_host_execution_destroy(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fget_5fremains',['simcall_host_execution_get_remains',['../group__simix__host__management.html#ga23839f5acd57bb8d12620d0e1bad56c1',1,'simcall_host_execution_get_remains(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#ga23839f5acd57bb8d12620d0e1bad56c1',1,'simcall_host_execution_get_remains(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fget_5fstate',['simcall_host_execution_get_state',['../group__simix__host__management.html#ga66026abb4f24bd3a528a9bcc41200c4f',1,'simcall_host_execution_get_state(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#ga66026abb4f24bd3a528a9bcc41200c4f',1,'simcall_host_execution_get_state(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fset_5fpriority',['simcall_host_execution_set_priority',['../group__simix__host__management.html#ga3df7d10c87185d6c03c90cfa3b62cc43',1,'simcall_host_execution_set_priority(smx_action_t execution, double priority): smx_user.c'],['../group__simix__host__management.html#ga3df7d10c87185d6c03c90cfa3b62cc43',1,'simcall_host_execution_set_priority(smx_action_t execution, double priority): smx_user.c']]], ['simcall_5fhost_5fexecution_5fwait',['simcall_host_execution_wait',['../group__simix__host__management.html#ga8760a71314f39b57eafca4782251369f',1,'simcall_host_execution_wait(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#ga8760a71314f39b57eafca4782251369f',1,'simcall_host_execution_wait(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fget_5favailable_5fspeed',['simcall_host_get_available_speed',['../group__simix__host__management.html#gaa93a5302ec2a513b76498b91428fefe2',1,'simcall_host_get_available_speed(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaa93a5302ec2a513b76498b91428fefe2',1,'simcall_host_get_available_speed(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fby_5fname',['simcall_host_get_by_name',['../group__simix__host__management.html#ga22bd604a7c15c1980e0ed09281141472',1,'simcall_host_get_by_name(const char *name): smx_user.c'],['../group__simix__host__management.html#ga22bd604a7c15c1980e0ed09281141472',1,'simcall_host_get_by_name(const char *name): smx_user.c']]], ['simcall_5fhost_5fget_5fconsumed_5fenergy',['simcall_host_get_consumed_energy',['../group__simix__host__management.html#ga15cc5be1060eae3638ac2c00ec5364ef',1,'simcall_host_get_consumed_energy(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga15cc5be1060eae3638ac2c00ec5364ef',1,'simcall_host_get_consumed_energy(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fcore',['simcall_host_get_core',['../group__simix__host__management.html#gada381d983887aefa0ecfa92395aead7b',1,'simcall_host_get_core(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gada381d983887aefa0ecfa92395aead7b',1,'simcall_host_get_core(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fcurrent_5fpower_5fpeak',['simcall_host_get_current_power_peak',['../group__simix__host__management.html#ga51aacd521d7590712def7fcc86367491',1,'simcall_host_get_current_power_peak(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga51aacd521d7590712def7fcc86367491',1,'simcall_host_get_current_power_peak(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fdata',['simcall_host_get_data',['../group__simix__host__management.html#ga6acb64cfef3e7284442f6e20bee9317d',1,'simcall_host_get_data(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga6acb64cfef3e7284442f6e20bee9317d',1,'simcall_host_get_data(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fname',['simcall_host_get_name',['../group__simix__host__management.html#gac627f752c965060cb592ebda7ff5e8ce',1,'simcall_host_get_name(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gac627f752c965060cb592ebda7ff5e8ce',1,'simcall_host_get_name(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fnb_5fpstates',['simcall_host_get_nb_pstates',['../group__simix__host__management.html#gaaf0a2fb59b6754184673bcc775401da1',1,'simcall_host_get_nb_pstates(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaaf0a2fb59b6754184673bcc775401da1',1,'simcall_host_get_nb_pstates(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fpower_5fpeak_5fat',['simcall_host_get_power_peak_at',['../group__simix__host__management.html#ga0656f3e6508c217106c8d760afdcb11d',1,'simcall_host_get_power_peak_at(smx_host_t host, int pstate_index): smx_user.c'],['../group__simix__host__management.html#ga0656f3e6508c217106c8d760afdcb11d',1,'simcall_host_get_power_peak_at(smx_host_t host, int pstate_index): smx_user.c']]], ['simcall_5fhost_5fget_5fprocess_5flist',['simcall_host_get_process_list',['../group__simix__host__management.html#gaefe3f6813e0791704516253577457058',1,'simcall_host_get_process_list(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaefe3f6813e0791704516253577457058',1,'simcall_host_get_process_list(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fproperties',['simcall_host_get_properties',['../group__simix__host__management.html#ga03e97c1154f4925d1fb378d68dd5a888',1,'simcall_host_get_properties(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga03e97c1154f4925d1fb378d68dd5a888',1,'simcall_host_get_properties(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fspeed',['simcall_host_get_speed',['../group__simix__host__management.html#gaa45133ec4a6376f0de1efb4e08746f2c',1,'simcall_host_get_speed(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaa45133ec4a6376f0de1efb4e08746f2c',1,'simcall_host_get_speed(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fstate',['simcall_host_get_state',['../group__simix__host__management.html#ga2683ae7336c84958f9fba0c2a8e502fd',1,'simcall_host_get_state(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga2683ae7336c84958f9fba0c2a8e502fd',1,'simcall_host_get_state(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fparallel_5fexecute',['simcall_host_parallel_execute',['../group__simix__host__management.html#ga57ef6dbb3d85979561de1881d3cba1bb',1,'simcall_host_parallel_execute(const char *name, int host_nb, smx_host_t *host_list, double *computation_amount, double *communication_amount, double amount, double rate): smx_user.c'],['../group__simix__host__management.html#ga57ef6dbb3d85979561de1881d3cba1bb',1,'simcall_host_parallel_execute(const char *name, int host_nb, smx_host_t *host_list, double *computation_amount, double *communication_amount, double amount, double rate): smx_user.c']]], ['simcall_5fhost_5fset_5fdata',['simcall_host_set_data',['../group__simix__host__management.html#ga8201c0350e48d696ef915e4fe668014b',1,'simcall_host_set_data(smx_host_t host, void *data): smx_user.c'],['../group__simix__host__management.html#ga8201c0350e48d696ef915e4fe668014b',1,'simcall_host_set_data(smx_host_t host, void *data): smx_user.c']]], ['simcall_5fhost_5fset_5fpower_5fpeak_5fat',['simcall_host_set_power_peak_at',['../group__simix__host__management.html#ga0b9cc33e2ba9c59627be871c46be9892',1,'simcall_host_set_power_peak_at(smx_host_t host, int pstate_index): smx_user.c'],['../group__simix__host__management.html#ga0b9cc33e2ba9c59627be871c46be9892',1,'simcall_host_set_power_peak_at(smx_host_t host, int pstate_index): smx_user.c']]], ['simcall_5fprocess_5fauto_5frestart_5fset',['simcall_process_auto_restart_set',['../group__simix__process__management.html#ga433713db62cee73ad3006d2d3eabc702',1,'simcall_process_auto_restart_set(smx_process_t process, int auto_restart): smx_user.c'],['../group__simix__process__management.html#ga433713db62cee73ad3006d2d3eabc702',1,'simcall_process_auto_restart_set(smx_process_t process, int auto_restart): smx_user.c']]], ['simcall_5fprocess_5fchange_5fhost',['simcall_process_change_host',['../group__simix__process__management.html#gab10c8ebfd02973f5556bada2bb0a2915',1,'simcall_process_change_host(smx_process_t process, smx_host_t dest): smx_user.c'],['../group__simix__process__management.html#gab10c8ebfd02973f5556bada2bb0a2915',1,'simcall_process_change_host(smx_process_t process, smx_host_t dest): smx_user.c']]], ['simcall_5fprocess_5fcleanup',['simcall_process_cleanup',['../group__simix__process__management.html#gabbc2bb1e3346602a7e7ce8af2f9963b0',1,'simcall_process_cleanup(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gabbc2bb1e3346602a7e7ce8af2f9963b0',1,'simcall_process_cleanup(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fcount',['simcall_process_count',['../group__simix__process__management.html#gae7ec2e782070e190356478e8c88a0cc5',1,'simcall_process_count(void): smx_user.c'],['../group__simix__process__management.html#gae7ec2e782070e190356478e8c88a0cc5',1,'simcall_process_count(void): smx_user.c']]], ['simcall_5fprocess_5fcreate',['simcall_process_create',['../group__simix__process__management.html#gaf19a836d7ea387f1526fc48231726dc9',1,'simcall_process_create(smx_process_t *process, const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart): smx_user.c'],['../group__simix__process__management.html#gaf19a836d7ea387f1526fc48231726dc9',1,'simcall_process_create(smx_process_t *process, const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart): smx_user.c']]], ['simcall_5fprocess_5fget_5fdata',['simcall_process_get_data',['../group__simix__process__management.html#ga3ef2cbb5679f4f103f1d56b0e4e74f6b',1,'simcall_process_get_data(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga3ef2cbb5679f4f103f1d56b0e4e74f6b',1,'simcall_process_get_data(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fhost',['simcall_process_get_host',['../group__simix__process__management.html#gada27408ad1425a1a1f94e8d9dbab31ee',1,'simcall_process_get_host(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gada27408ad1425a1a1f94e8d9dbab31ee',1,'simcall_process_get_host(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fname',['simcall_process_get_name',['../group__simix__process__management.html#ga86836c7ddd8864c4662a384014959a76',1,'simcall_process_get_name(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga86836c7ddd8864c4662a384014959a76',1,'simcall_process_get_name(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fpid',['simcall_process_get_PID',['../group__simix__process__management.html#gab71a0ff395a1ba9075f4ca76da63b5c3',1,'simcall_process_get_PID(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gab71a0ff395a1ba9075f4ca76da63b5c3',1,'simcall_process_get_PID(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fppid',['simcall_process_get_PPID',['../group__simix__process__management.html#ga84d861a0d2125159a5f55a767f710ad6',1,'simcall_process_get_PPID(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga84d861a0d2125159a5f55a767f710ad6',1,'simcall_process_get_PPID(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fproperties',['simcall_process_get_properties',['../group__simix__process__management.html#gad0cdca75425dbbb863121e44b1462612',1,'simcall_process_get_properties(smx_process_t host): smx_user.c'],['../group__simix__process__management.html#gad0cdca75425dbbb863121e44b1462612',1,'simcall_process_get_properties(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fis_5fsuspended',['simcall_process_is_suspended',['../group__simix__process__management.html#ga5ba7792648b97d73a68a0472f756bf17',1,'simcall_process_is_suspended(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga5ba7792648b97d73a68a0472f756bf17',1,'simcall_process_is_suspended(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fkill',['simcall_process_kill',['../group__simix__process__management.html#ga2fd1c21b67cdf31506f5cd2a94d91313',1,'simcall_process_kill(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga2fd1c21b67cdf31506f5cd2a94d91313',1,'simcall_process_kill(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fkillall',['simcall_process_killall',['../group__simix__process__management.html#ga2a8d8ea34037935fcba5456884a0e886',1,'simcall_process_killall(int reset_pid): smx_user.c'],['../group__simix__process__management.html#ga2a8d8ea34037935fcba5456884a0e886',1,'simcall_process_killall(int reset_pid): smx_user.c']]], ['simcall_5fprocess_5fon_5fexit',['simcall_process_on_exit',['../group__simix__process__management.html#ga3e5f4a672ee15995a110ef2bff287b00',1,'simcall_process_on_exit(smx_process_t process, int_f_pvoid_t fun, void *data): smx_user.c'],['../group__simix__process__management.html#ga3e5f4a672ee15995a110ef2bff287b00',1,'simcall_process_on_exit(smx_process_t process, int_f_pvoid_t fun, void *data): smx_user.c']]], ['simcall_5fprocess_5frestart',['simcall_process_restart',['../group__simix__process__management.html#gaf4fd76982573c1f58d3eed172ba2d64c',1,'simcall_process_restart(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gaf4fd76982573c1f58d3eed172ba2d64c',1,'simcall_process_restart(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fresume',['simcall_process_resume',['../group__simix__process__management.html#ga2e9bb138e7ba7f7e588cb662be3b1757',1,'simcall_process_resume(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga2e9bb138e7ba7f7e588cb662be3b1757',1,'simcall_process_resume(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fset_5fdata',['simcall_process_set_data',['../group__simix__process__management.html#ga18c58debc643922bf68b5d8de563e4c5',1,'simcall_process_set_data(smx_process_t process, void *data): smx_user.c'],['../group__simix__process__management.html#ga18c58debc643922bf68b5d8de563e4c5',1,'simcall_process_set_data(smx_process_t process, void *data): smx_user.c']]], ['simcall_5fprocess_5fset_5fkill_5ftime',['simcall_process_set_kill_time',['../group__simix__process__management.html#gac55e617472e645926ca1cdcea8533508',1,'simcall_process_set_kill_time(smx_process_t process, double kill_time): smx_user.c'],['../group__simix__process__management.html#gac55e617472e645926ca1cdcea8533508',1,'simcall_process_set_kill_time(smx_process_t process, double kill_time): smx_user.c']]], ['simcall_5fprocess_5fsleep',['simcall_process_sleep',['../group__simix__process__management.html#ga7e5cce2d1b8238c587b9e3be60c26b26',1,'simcall_process_sleep(double duration): smx_user.c'],['../group__simix__process__management.html#ga7e5cce2d1b8238c587b9e3be60c26b26',1,'simcall_process_sleep(double duration): smx_user.c']]], ['simcall_5fprocess_5fsuspend',['simcall_process_suspend',['../group__simix__process__management.html#ga9fdb4fa34e26498e410db9794f0fe1a7',1,'simcall_process_suspend(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga9fdb4fa34e26498e410db9794f0fe1a7',1,'simcall_process_suspend(smx_process_t process): smx_user.c']]], ['simcall_5frdv_5fcomm_5fcount_5fby_5fhost',['simcall_rdv_comm_count_by_host',['../group__simix__rdv__management.html#ga3be3b0b7647b63da38063e9df674f29e',1,'simcall_rdv_comm_count_by_host(smx_rdv_t rdv, smx_host_t host): smx_user.c'],['../group__simix__rdv__management.html#ga3be3b0b7647b63da38063e9df674f29e',1,'simcall_rdv_comm_count_by_host(smx_rdv_t rdv, smx_host_t host): smx_user.c']]], ['simcall_5frdv_5fcreate',['simcall_rdv_create',['../group__simix__rdv__management.html#ga76202b8bd49aa89a5427267cb4528636',1,'simcall_rdv_create(const char *name): smx_user.c'],['../group__simix__rdv__management.html#ga76202b8bd49aa89a5427267cb4528636',1,'simcall_rdv_create(const char *name): smx_user.c']]], ['simcall_5frdv_5fdestroy',['simcall_rdv_destroy',['../group__simix__rdv__management.html#ga9e244ad91daf47c0e9b45b004dd6e3d6',1,'simcall_rdv_destroy(smx_rdv_t rvp): smx_user.c'],['../group__simix__rdv__management.html#ga9e244ad91daf47c0e9b45b004dd6e3d6',1,'simcall_rdv_destroy(smx_rdv_t rdv): smx_user.c']]], ['simcall_5frdv_5fget_5fby_5fname',['simcall_rdv_get_by_name',['../group__simix__rdv__management.html#ga417b16e55a7b5fad902bde9b9f263ead',1,'simcall_rdv_get_by_name(const char *name): smx_user.c'],['../group__simix__rdv__management.html#ga417b16e55a7b5fad902bde9b9f263ead',1,'simcall_rdv_get_by_name(const char *name): smx_user.c']]], ['simcall_5frdv_5fget_5fhead',['simcall_rdv_get_head',['../group__simix__rdv__management.html#ga79a92d3223cd9d41ba694044d3f308ac',1,'simcall_rdv_get_head(smx_rdv_t rdv): smx_user.c'],['../group__simix__rdv__management.html#ga79a92d3223cd9d41ba694044d3f308ac',1,'simcall_rdv_get_head(smx_rdv_t rdv): smx_user.c']]], ['simix',['SIMIX',['../group__SIMIX__API.html',1,'']]], ['simix_5fclean',['SIMIX_clean',['../group__SIMIX__API.html#gaf764507fe3726a890a8657d5db2eaffc',1,'smx_global.c']]], ['simix_5fget_5fclock',['SIMIX_get_clock',['../group__SIMIX__API.html#ga8298a6bf3cdb667f2aca7b1cfd9b2eb8',1,'SIMIX_get_clock(void): smx_global.c'],['../group__SIMIX__API.html#ga8298a6bf3cdb667f2aca7b1cfd9b2eb8',1,'SIMIX_get_clock(void): smx_global.c']]], ['simix_5fglobal_5finit',['SIMIX_global_init',['../group__SIMIX__API.html#ga61a5c57ccf08e71bac21571b94ec1a38',1,'SIMIX_global_init(int *argc, char **argv): smx_global.c'],['../group__SIMIX__API.html#ga61a5c57ccf08e71bac21571b94ec1a38',1,'SIMIX_global_init(int *argc, char **argv): smx_global.c']]], ['simix_5frun',['SIMIX_run',['../group__SIMIX__API.html#gaebdd718ef8f26134756d5fa6de1ff854',1,'SIMIX_run(void): smx_global.c'],['../group__SIMIX__API.html#gaebdd718ef8f26134756d5fa6de1ff854',1,'SIMIX_run(void): smx_global.c']]], ['synchronisation_20management_20functions',['Synchronisation Management Functions',['../group__simix__synchro__management.html',1,'']]], ['sleep',['sleep',['../structsurf__workstation__model__extension__public.html#a21f808bbbafa9bf838c71b5e54501465',1,'surf_workstation_model_extension_public']]], ['smpi',['SMPI',['../group__SMPI__API.html',1,'']]], ['smx_5fhost_5ft',['smx_host_t',['../group__simix__host__management.html#ga5540d4f66a2cbc953bfd0d9917ec22ee',1,'simix.h']]], ['smx_5fprocess_5ft',['smx_process_t',['../group__simix__process__management.html#ga9496f5abef32b4e9d1ef03298d7446e6',1,'simix.h']]], ['start',['start',['../structsurf__action.html#ab81d9f768089a74b58910ad81f50d5f7',1,'surf_action']]], ['states',['states',['../structsurf__model.html#a0e84008d3c39ef70dbdb98a9de1bcf48',1,'surf_model']]], ['status',['status',['../structs__xbt__parmap.html#afe6c4afdbdfecc9dc4cc141e264e1fa7',1,'s_xbt_parmap']]], ['surf_5faction',['surf_action',['../structsurf__action.html',1,'']]], ['surf_5faction_5fdone',['SURF_ACTION_DONE',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2acef3187aad961798010f295bbbd932bf',1,'surf.h']]], ['surf_5faction_5ffailed',['SURF_ACTION_FAILED',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2abf420e6385e8eeda58721c3e28bd919e',1,'surf.h']]], ['surf_5faction_5fnot_5fin_5fthe_5fsystem',['SURF_ACTION_NOT_IN_THE_SYSTEM',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a20a007bd143ea5c870c26a389ffe95e9',1,'surf.h']]], ['surf_5faction_5fready',['SURF_ACTION_READY',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a6caf5e4bd35cab4890c662fdaf8d3812',1,'surf.h']]], ['surf_5faction_5frunning',['SURF_ACTION_RUNNING',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a101d6224ad7c2a615c452c8c36d8a7e7',1,'surf.h']]], ['surf_5faction_5fstate',['surf_action_state',['../structsurf__action__state.html',1,'']]], ['surf_5faction_5ft',['surf_action_t',['../group__SURF__actions.html#ga260ee2edb62de03ee69190f03a9b7eba',1,'datatypes.h']]], ['surf_5faction_5fto_5ffree',['SURF_ACTION_TO_FREE',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2aa66f387221d049fbce374c4dc27629c8',1,'surf.h']]], ['surf_20actions',['SURF actions',['../group__SURF__actions.html',1,'']]], ['surf',['SURF',['../group__SURF__API.html',1,'']]], ['surf_5fcpu_5fmodel_5fextension_5fpublic',['surf_cpu_model_extension_public',['../structsurf__cpu__model__extension__public.html',1,'']]], ['surf_5fexit',['surf_exit',['../group__SURF__simulation.html#ga1179497a5f822209f22b5735e0fb1104',1,'surf_exit(void): surf.c'],['../group__SURF__simulation.html#ga1179497a5f822209f22b5735e0fb1104',1,'surf_exit(void): surf.c']]], ['surf_5fget_5fclock',['surf_get_clock',['../group__SURF__simulation.html#gafa85b9ba47f47d599353b872d2cb93d3',1,'surf_get_clock(void): surf.c'],['../group__SURF__simulation.html#gafa85b9ba47f47d599353b872d2cb93d3',1,'surf_get_clock(void): surf.c']]], ['surf_5finit',['surf_init',['../group__SURF__simulation.html#ga403868865b66138187c3db30521e1bbe',1,'surf_init(int *argc, char **argv): surf.c'],['../group__SURF__simulation.html#ga403868865b66138187c3db30521e1bbe',1,'surf_init(int *argc, char **argv): surf.c']]], ['surf_5fmodel',['surf_model',['../structsurf__model.html',1,'']]], ['surf_5fmodel_5fdescription',['surf_model_description',['../structsurf__model__description.html',1,'']]], ['surf_5fnetwork_5fmodel_5fextension_5fpublic',['surf_network_model_extension_public',['../structsurf__network__model__extension__public.html',1,'']]], ['surf_5fpresolve',['surf_presolve',['../group__SURF__simulation.html#ga9b7e7ceba73ff5ce637ecb58f1e2edc9',1,'surf_presolve(void): surf.c'],['../group__SURF__simulation.html#ga9b7e7ceba73ff5ce637ecb58f1e2edc9',1,'surf_presolve(void): surf.c']]], ['surf_20resources',['SURF resources',['../group__SURF__resources.html',1,'']]], ['simulation',['Simulation',['../group__SURF__simulation.html',1,'']]], ['surf_5fsolve',['surf_solve',['../group__SURF__simulation.html#gaa723e3f55eb26355d00de5bf07c6d373',1,'surf_solve(double max_date): surf.c'],['../group__SURF__simulation.html#gaa723e3f55eb26355d00de5bf07c6d373',1,'surf_solve(double max_date): surf.c']]], ['surf_5fstorage_5fmodel_5fextension_5fpublic',['surf_storage_model_extension_public',['../structsurf__storage__model__extension__public.html',1,'']]], ['surf_5fworkstation_5fmodel_5fextension_5fpublic',['surf_workstation_model_extension_public',['../structsurf__workstation__model__extension__public.html',1,'']]], ['suspend',['suspend',['../structsurf__model.html#a90af557a210c80ed385fc4a0f4b3a882',1,'surf_model']]], ['system_5ferror',['system_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a0cc55923f6bdf388d75ac17681055815',1,'ex.h']]], ['speed_20optimized_20access_20to_20dynars_20of_20scalars',['Speed optimized access to dynars of scalars',['../group__XBT__dynar__speed.html',1,'']]], ['set_3a_20generic_20set_20datatype',['Set: generic set datatype',['../group__XBT__set.html',1,'']]], ['sets_20basic_20usage',['Sets basic usage',['../group__XBT__set__basic.html',1,'']]], ['set_20and_20set_20elements_2c_20constructor_2fdestructor',['Set and set elements, constructor/destructor',['../group__XBT__set__cons.html',1,'']]], ['sets_20cursors',['Sets cursors',['../group__XBT__set__curs.html',1,'']]], ['sock',['Sock',['../group__XBT__sock.html',1,'']]], ['string_20related_20functions',['String related functions',['../group__XBT__str.html',1,'']]], ['swag_3a_20o_281_29_20set_20datatype',['Swag: O(1) set datatype',['../group__XBT__swag.html',1,'']]], ['swag_20cursor',['Swag cursor',['../group__XBT__swag__curs.html',1,'']]], ['swag_20functions',['SWAG functions',['../group__XBT__swag__func.html',1,'']]], ['swag_20types',['Swag types',['../group__XBT__swag__type.html',1,'']]], ['synchro_20stuff',['Synchro stuff',['../group__XBT__synchro.html',1,'']]] ]; SimGrid-3.10/doc/html/search/groups_66.html000640 007661 000620 00000001707 12242224150 020716 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_68.js000640 007661 000620 00000000240 12242224150 021224 0ustar00gierschand000000 000000 var searchData= [ ['host_5ferror',['host_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1486a4899ea0336633c33a77c636eea8',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/all_72.js000640 007661 000620 00000001731 12242224150 017611 0ustar00gierschand000000 000000 var searchData= [ ['ready_5faction_5fset',['ready_action_set',['../structsurf__action__state.html#a037da16821384bfb2364d03d7bc7c6b2',1,'surf_action_state']]], ['remains',['remains',['../structsurf__action.html#a524498b274bd63b350e368a57105f47f',1,'surf_action']]], ['resume',['resume',['../structsurf__model.html#a8f0b61e06575462b3c5cbf1a22f3e859',1,'surf_model']]], ['rethrow',['RETHROW',['../group__XBT__ex.html#ga241d764fad0bff69d31c12b3066c276c',1,'ex.h']]], ['rethrowf',['RETHROWF',['../group__XBT__ex.html#ga4826ac71c1c4d2ec13eeac8320898dc9',1,'ex.h']]], ['running_5faction_5fset',['running_action_set',['../structsurf__action__state.html#a25766c647f7fadf3b54cdd5f7ab81957',1,'surf_action_state']]], ['rdv_20management_20functions',['RDV Management Functions',['../group__simix__rdv__management.html',1,'']]], ['registering_20stuff',['Registering stuff',['../group__XBT__cfg__register.html',1,'']]], ['replay',['Replay',['../group__XBT__replay.html',1,'']]] ]; SimGrid-3.10/doc/html/search/enumvalues_63.js000640 007661 000620 00000000244 12242224150 021223 0ustar00gierschand000000 000000 var searchData= [ ['cancel_5ferror',['cancel_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a78725e8318a373565146a9c29698eb30',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/groups_6d.js000640 007661 000620 00000002334 12242224150 020441 0ustar00gierschand000000 000000 var searchData= [ ['msg',['MSG',['../group__MSG__API.html',1,'']]], ['msg_20deprecated',['MSG Deprecated',['../group__msg__deprecated__functions.html',1,'']]], ['msg_20examples',['MSG examples',['../group__MSG__examples.html',1,'']]], ['mailbox_20management_20functions',['Mailbox Management Functions',['../group__msg__mailbox__management.html',1,'']]], ['main_20msg_20simulation_20functions',['Main MSG simulation Functions',['../group__msg__simulation.html',1,'']]], ['msg_5fstorage_5fmanagement',['Msg_storage_management',['../group__msg__storage__management.html',1,'']]], ['misc_20fifo_20functions',['Misc fifo functions',['../group__XBT__fifo__misc.html',1,'']]], ['mallocators',['Mallocators',['../group__XBT__mallocator.html',1,'']]], ['mallocator_20constructor_20and_20destructor',['Mallocator constructor and destructor',['../group__XBT__mallocator__cons.html',1,'']]], ['mallocator_20object_20handling',['Mallocator object handling',['../group__XBT__mallocator__objects.html',1,'']]], ['misc_20general_20purposes_20library_20components',['Misc general purposes library components',['../group__XBT__misc.html',1,'']]], ['malloc_20and_20friends',['Malloc and friends',['../group__XBT__syscall.html',1,'']]] ]; SimGrid-3.10/doc/html/search/pages_75.js000640 007661 000620 00000000127 12242224150 020141 0ustar00gierschand000000 000000 var searchData= [ ['using_20simgrid',['Using SimGrid',['../use.html',1,'index']]] ]; SimGrid-3.10/doc/html/search/pages_75.html000640 007661 000620 00000001706 12242224150 020475 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_76.js000640 007661 000620 00000000167 12242224150 021017 0ustar00gierschand000000 000000 var searchData= [ ['value',['value',['../structxbt__ex__t.html#a9bb9f8aef46f7821ab7c0ccd04b52f4f',1,'xbt_ex_t']]] ]; SimGrid-3.10/doc/html/search/all_6c.js000640 007661 000620 00000001104 12242224150 017663 0ustar00gierschand000000 000000 var searchData= [ ['line',['line',['../structxbt__ex__t.html#ab5dd68c13c396302ebd7e98f76ff825d',1,'xbt_ex_t']]], ['link_5flib',['link_lib',['../group__SURF__build__api.html#gaa55c4d6b7466ca2b40deef1f47a24063',1,'link_lib(): surf_routing.c'],['../group__SURF__build__api.html#gaa55c4d6b7466ca2b40deef1f47a24063',1,'link_lib(): surf_routing.c']]], ['lua_20bindings',['Lua bindings',['../group__MSG__LUA.html',1,'']]], ['links',['Links',['../group__SD__link__management.html',1,'']]], ['logging_20support',['Logging support',['../group__XBT__log.html',1,'']]] ]; SimGrid-3.10/doc/html/search/groups_64.js000640 007661 000620 00000002431 12242224150 020357 0ustar00gierschand000000 000000 var searchData= [ ['data_20description',['Data description',['../group__XBT__dd.html',1,'']]], ['dict_3a_20generic_20dictionnary',['Dict: generic dictionnary',['../group__XBT__dict.html',1,'']]], ['dictionaries_20basic_20usage',['Dictionaries basic usage',['../group__XBT__dict__basic.html',1,'']]], ['dict_20constructor_20and_20destructor',['Dict constructor and destructor',['../group__XBT__dict__cons.html',1,'']]], ['dictionaries_20with_20non_2dnul_20terminated_20keys',['Dictionaries with non-nul terminated keys',['../group__XBT__dict__nnul.html',1,'']]], ['dynar_3a_20generic_20dynamic_20array',['Dynar: generic dynamic array',['../group__XBT__dynar.html',1,'']]], ['dynar_20as_20a_20regular_20array',['Dynar as a regular array',['../group__XBT__dynar__array.html',1,'']]], ['dynar_20constructor_20and_20destructor',['Dynar constructor and destructor',['../group__XBT__dynar__cons.html',1,'']]], ['direct_20manipulation_20to_20the_20dynars_20content',['Direct manipulation to the dynars content',['../group__XBT__dynar__ctn.html',1,'']]], ['dynar_20miscellaneous_20functions',['Dynar miscellaneous functions',['../group__XBT__dynar__misc.html',1,'']]], ['direct_20access_20to_20fifo_20elements',['Direct access to fifo elements',['../group__XBT__fifo__direct.html',1,'']]] ]; SimGrid-3.10/doc/html/search/groups_65.html000640 007661 000620 00000001707 12242224150 020715 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_74.html000640 007661 000620 00000001712 12242224150 021402 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_73.html000640 007661 000620 00000001707 12242224150 020714 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_5f.js000640 007661 000620 00000000223 12242224150 021126 0ustar00gierschand000000 000000 var searchData= [ ['_5f_5fattribute_5f_5f',['__attribute__',['../group__XBT__syscall.html#gab6d5dfd5b7461f3942dfdd1eda223237',1,'sysdep.h']]] ]; SimGrid-3.10/doc/html/search/enumvalues_61.js000640 007661 000620 00000000236 12242224150 021222 0ustar00gierschand000000 000000 var searchData= [ ['arg_5ferror',['arg_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1d6d5b33334f960325a65e5c021aca16',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/groups_76.html000640 007661 000620 00000001707 12242224150 020717 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_65.html000640 007661 000620 00000001706 12242224150 020474 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_76.html000640 007661 000620 00000001712 12242224150 021404 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_68.html000640 007661 000620 00000001707 12242224150 020720 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_72.html000640 007661 000620 00000001707 12242224150 020713 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/classes_73.html000640 007661 000620 00000001710 12242224150 021024 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/classes_73.js000640 007661 000620 00000004235 12242224150 020501 0ustar00gierschand000000 000000 var searchData= [ ['s_5fmodel_5ftype',['s_model_type',['../structs__model__type.html',1,'']]], ['s_5fsmx_5faction',['s_smx_action',['../structs__smx__action.html',1,'']]], ['s_5fsmx_5fhost_5fpriv',['s_smx_host_priv',['../structs__smx__host__priv.html',1,'']]], ['s_5fsmx_5fprocess',['s_smx_process',['../structs__smx__process.html',1,'']]], ['s_5fsmx_5frvpoint',['s_smx_rvpoint',['../structs__smx__rvpoint.html',1,'']]], ['s_5fsmx_5fsimcall',['s_smx_simcall',['../structs__smx__simcall.html',1,'']]], ['s_5fsmx_5fstorage_5fpriv',['s_smx_storage_priv',['../structs__smx__storage__priv.html',1,'']]], ['s_5fsmx_5ftimer',['s_smx_timer',['../structs__smx__timer.html',1,'']]], ['s_5fsurf_5fmetric_5ft',['s_surf_metric_t',['../structs__surf__metric__t.html',1,'']]], ['s_5fxbt_5fdict_5fcursor',['s_xbt_dict_cursor',['../structs__xbt__dict__cursor.html',1,'']]], ['s_5fxbt_5fparmap',['s_xbt_parmap',['../structs__xbt__parmap.html',1,'']]], ['s_5fxbt_5fparmap_5fthread_5fdata',['s_xbt_parmap_thread_data',['../structs__xbt__parmap__thread__data.html',1,'']]], ['s_5fxbt_5fpeer',['s_xbt_peer',['../structs__xbt__peer.html',1,'']]], ['s_5fxbt_5fstrbuff_5ft',['s_xbt_strbuff_t',['../structs__xbt__strbuff__t.html',1,'']]], ['surf_5faction',['surf_action',['../structsurf__action.html',1,'']]], ['surf_5faction_5fstate',['surf_action_state',['../structsurf__action__state.html',1,'']]], ['surf_5fcpu_5fmodel_5fextension_5fpublic',['surf_cpu_model_extension_public',['../structsurf__cpu__model__extension__public.html',1,'']]], ['surf_5fmodel',['surf_model',['../structsurf__model.html',1,'']]], ['surf_5fmodel_5fdescription',['surf_model_description',['../structsurf__model__description.html',1,'']]], ['surf_5fnetwork_5fmodel_5fextension_5fpublic',['surf_network_model_extension_public',['../structsurf__network__model__extension__public.html',1,'']]], ['surf_5fstorage_5fmodel_5fextension_5fpublic',['surf_storage_model_extension_public',['../structsurf__storage__model__extension__public.html',1,'']]], ['surf_5fworkstation_5fmodel_5fextension_5fpublic',['surf_workstation_model_extension_public',['../structsurf__workstation__model__extension__public.html',1,'']]] ]; SimGrid-3.10/doc/html/search/variables_65.js000640 007661 000620 00000000273 12242224150 021013 0ustar00gierschand000000 000000 var searchData= [ ['execute',['execute',['../structsurf__workstation__model__extension__public.html#ad44708cb6550651107c38f4cccf0262f',1,'surf_workstation_model_extension_public']]] ]; SimGrid-3.10/doc/html/search/enumvalues_75.js000640 007661 000620 00000000246 12242224150 021230 0ustar00gierschand000000 000000 var searchData= [ ['unknown_5ferror',['unknown_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a38ca7f2d055a68295cbd837470325f46',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/groups_64.html000640 007661 000620 00000001707 12242224150 020714 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/search_m.png000640 007661 000620 00000000236 12242224150 020461 0ustar00gierschand000000 000000 PNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`SimGrid-3.10/doc/html/search/nomatches.html000640 007661 000620 00000000715 12242224150 021043 0ustar00gierschand000000 000000
No Matches
SimGrid-3.10/doc/html/search/typedefs_73.html000640 007661 000620 00000001711 12242224150 021213 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_75.js000640 007661 000620 00000000505 12242224150 020361 0ustar00gierschand000000 000000 var searchData= [ ['usual_20data_20structures',['Usual data structures',['../group__XBT__adt.html',1,'']]], ['user_20interface_3a_20changing_20values',['User interface: changing values',['../group__XBT__cfg__use.html',1,'']]], ['unit_20testing_20support',['Unit testing support',['../group__XBT__cunit.html',1,'']]] ]; SimGrid-3.10/doc/html/search/pages_62.html000640 007661 000620 00000001706 12242224150 020471 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_65.js000640 007661 000620 00000000160 12242224150 020135 0ustar00gierschand000000 000000 var searchData= [ ['extending_20simgrid',['Extending SimGrid',['../inside_extending.html',1,'internals']]] ]; SimGrid-3.10/doc/html/search/all_76.html000640 007661 000620 00000001704 12242224150 020145 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_6d.html000640 007661 000620 00000001712 12242224150 021421 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_6c.js000640 007661 000620 00000000552 12242224150 021071 0ustar00gierschand000000 000000 var searchData= [ ['line',['line',['../structxbt__ex__t.html#ab5dd68c13c396302ebd7e98f76ff825d',1,'xbt_ex_t']]], ['link_5flib',['link_lib',['../group__SURF__build__api.html#gaa55c4d6b7466ca2b40deef1f47a24063',1,'link_lib(): surf_routing.c'],['../group__SURF__build__api.html#gaa55c4d6b7466ca2b40deef1f47a24063',1,'link_lib(): surf_routing.c']]] ]; SimGrid-3.10/doc/html/search/all_6d.html000640 007661 000620 00000001704 12242224150 020222 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_69.js000640 007661 000620 00000000307 12242224150 020144 0ustar00gierschand000000 000000 var searchData= [ ['installing_20simgrid',['Installing Simgrid',['../install.html',1,'index']]], ['introduction_20to_20simgrid',['Introduction to SimGrid',['../introduction.html',1,'index']]] ]; SimGrid-3.10/doc/html/search/all_64.html000640 007661 000620 00000001704 12242224150 020142 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_61.html000640 007661 000620 00000001712 12242224150 021376 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_6d.html000640 007661 000620 00000001707 12242224150 020774 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_75.html000640 007661 000620 00000001707 12242224150 020716 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_67.js000640 007661 000620 00000000511 12242224150 020357 0ustar00gierschand000000 000000 var searchData= [ ['getting_20the_20stored_20values',['Getting the stored values',['../group__XBT__cfg__get.html',1,'']]], ['general_20purpose_20graph_20library',['General purpose graph library',['../group__XBT__graph.html',1,'']]], ['grounding_20features',['Grounding features',['../group__XBT__grounding.html',1,'']]] ]; SimGrid-3.10/doc/html/search/all_75.js000640 007661 000620 00000001032 12242224150 017606 0ustar00gierschand000000 000000 var searchData= [ ['unknown_5ferror',['unknown_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a38ca7f2d055a68295cbd837470325f46',1,'ex.h']]], ['using_20simgrid',['Using SimGrid',['../use.html',1,'index']]], ['usual_20data_20structures',['Usual data structures',['../group__XBT__adt.html',1,'']]], ['user_20interface_3a_20changing_20values',['User interface: changing values',['../group__XBT__cfg__use.html',1,'']]], ['unit_20testing_20support',['Unit testing support',['../group__XBT__cunit.html',1,'']]] ]; SimGrid-3.10/doc/html/search/classes_78.js000640 007661 000620 00000000412 12242224150 020477 0ustar00gierschand000000 000000 var searchData= [ ['xbt_5fboolean_5fcouple',['xbt_boolean_couple',['../structxbt__boolean__couple.html',1,'']]], ['xbt_5fex_5ft',['xbt_ex_t',['../structxbt__ex__t.html',1,'']]], ['xbt_5fset_5felm_5f',['xbt_set_elm_',['../structxbt__set__elm__.html',1,'']]] ]; SimGrid-3.10/doc/html/search/variables_6d.js000640 007661 000620 00000001126 12242224150 021070 0ustar00gierschand000000 000000 var searchData= [ ['master_5fsignal_5ff',['master_signal_f',['../structs__xbt__parmap.html#a5cf66c7f69b8cf8e5546561d5feddfb5',1,'s_xbt_parmap']]], ['master_5fwait_5ff',['master_wait_f',['../structs__xbt__parmap.html#a675dabf4d9e2117c079aa3dcf1c82678',1,'s_xbt_parmap']]], ['max_5fduration',['max_duration',['../structsurf__action.html#ab18a20606e4b5393b305f7b0e5ca8fbf',1,'surf_action']]], ['mode',['mode',['../structs__xbt__parmap.html#ac414c60f2d3a61b47e436bfb96245969',1,'s_xbt_parmap']]], ['msg',['msg',['../structxbt__ex__t.html#ad0a0a10d1bb3838b5b205fc005693ec3',1,'xbt_ex_t']]] ]; SimGrid-3.10/doc/html/search/groups_6c.js000640 007661 000620 00000000356 12242224150 020442 0ustar00gierschand000000 000000 var searchData= [ ['lua_20bindings',['Lua bindings',['../group__MSG__LUA.html',1,'']]], ['links',['Links',['../group__SD__link__management.html',1,'']]], ['logging_20support',['Logging support',['../group__XBT__log.html',1,'']]] ]; SimGrid-3.10/doc/html/search/enumvalues_73.html000640 007661 000620 00000001713 12242224150 021556 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enums_6d.html000640 007661 000620 00000001706 12242224150 020603 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_69.html000640 007661 000620 00000001704 12242224150 020147 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_69.js000640 007661 000620 00000000533 12242224150 021016 0ustar00gierschand000000 000000 var searchData= [ ['id',['ID',['../structxbt__set__elm__.html#ad72fec45d8f1714b7465f1b951095746',1,'xbt_set_elm_']]], ['index',['index',['../structs__xbt__parmap.html#ac583971bdbd4b8d9693e6bb539da69fe',1,'s_xbt_parmap']]], ['is_5fsuspended',['is_suspended',['../structsurf__model.html#af65ddbc8ce59a3e2e7e26098b5ba6552',1,'surf_model']]] ]; SimGrid-3.10/doc/html/search/variables_68.html000640 007661 000620 00000001712 12242224150 021345 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_66.js000640 007661 000620 00000000163 12242224150 020141 0ustar00gierschand000000 000000 var searchData= [ ['frequently_20asked_20questions',['Frequently Asked Questions',['../FAQ.html',1,'index']]] ]; SimGrid-3.10/doc/html/search/all_70.html000640 007661 000620 00000001704 12242224150 020137 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_77.html000640 007661 000620 00000001712 12242224150 021345 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_5f.html000640 007661 000620 00000001704 12242224150 020223 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_63.html000640 007661 000620 00000001706 12242224150 020472 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_67.html000640 007661 000620 00000001707 12242224150 020717 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_61.html000640 007661 000620 00000001707 12242224150 020711 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_78.js000640 007661 000620 00000005507 12242224150 021240 0ustar00gierschand000000 000000 var searchData= [ ['xbt_5fcfgelm_5fboolean',['xbt_cfgelm_boolean',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cab46f486cddae583964bd0667fabb269b',1,'config.h']]], ['xbt_5fcfgelm_5fdouble',['xbt_cfgelm_double',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca35412ca92ec3591c76f5403810aed6f3',1,'config.h']]], ['xbt_5fcfgelm_5fint',['xbt_cfgelm_int',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6caf101f0c7af43525d4a07e9bcb5d3b7f2',1,'config.h']]], ['xbt_5fcfgelm_5fpeer',['xbt_cfgelm_peer',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca79bd0045369cbc55fe7191a28d31d168',1,'config.h']]], ['xbt_5fcfgelm_5fstring',['xbt_cfgelm_string',['../group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cac8df732d454a4bc85379de2c154a737e',1,'config.h']]], ['xbt_5flog_5fpriority_5fcritical',['xbt_log_priority_critical',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a8bd5d340adeae3a8e5a3182912c230f3',1,'log.h']]], ['xbt_5flog_5fpriority_5fdebug',['xbt_log_priority_debug',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82aac8ecdd32b640581940959e6f9ed1588',1,'log.h']]], ['xbt_5flog_5fpriority_5ferror',['xbt_log_priority_error',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a32afa42aab40395dbabb07cafbf84eb5',1,'log.h']]], ['xbt_5flog_5fpriority_5finfinite',['xbt_log_priority_infinite',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a875884ddb873e6613178c5b3c71b8a77',1,'log.h']]], ['xbt_5flog_5fpriority_5finfo',['xbt_log_priority_info',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82af28091fa16fda657d0768baaab6f4c27',1,'log.h']]], ['xbt_5flog_5fpriority_5ftrace',['xbt_log_priority_trace',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a1b9b706830e4aa1405157d20117aa5cd',1,'log.h']]], ['xbt_5flog_5fpriority_5fverbose',['xbt_log_priority_verbose',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82afef8e3f2e237f8de9c839a2f5c875fc7',1,'log.h']]], ['xbt_5flog_5fpriority_5fwarning',['xbt_log_priority_warning',['../group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82ac87b95b266f551288e8d9faec534baa9',1,'log.h']]], ['xbt_5fparmap_5fbusy_5fwait',['XBT_PARMAP_BUSY_WAIT',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aafd6884f2f0271777d1e8ea1db1b29229',1,'parmap.h']]], ['xbt_5fparmap_5fdefault',['XBT_PARMAP_DEFAULT',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aa0329f52f37cdb070e8d64330c7a1b395',1,'parmap.h']]], ['xbt_5fparmap_5ffutex',['XBT_PARMAP_FUTEX',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaec7bc115136c58098a826d86296d2f7d',1,'parmap.h']]], ['xbt_5fparmap_5fposix',['XBT_PARMAP_POSIX',['../group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaa076c8a9592fd4f8656a078483688700',1,'parmap.h']]] ]; SimGrid-3.10/doc/html/search/typedefs_78.html000640 007661 000620 00000001711 12242224150 021220 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_61.html000640 007661 000620 00000001706 12242224150 020470 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_6d.html000640 007661 000620 00000001713 12242224150 021636 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/search_r.png000640 007661 000620 00000001144 12242224150 020465 0ustar00gierschand000000 000000 PNG  IHDR] pHYs   cHRMms8zʴ3Dv6*IDATxڤԿAo kVi|YIR߼C+Lg,R\B$`4)BPA!UI( 檧Ïsu:‰B$|~Z,?J^ZR.F!`08 eY$I
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_71.js000640 007661 000620 00000000116 12242224150 017604 0ustar00gierschand000000 000000 var searchData= [ ['queue',['Queue',['../group__XBT__queue.html',1,'']]] ]; SimGrid-3.10/doc/html/search/all_6c.html000640 007661 000620 00000001704 12242224150 020221 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_6d.js000640 007661 000620 00000163320 12242224150 017675 0ustar00gierschand000000 000000 var searchData= [ ['modifying_20the_20cmake_20files',['Modifying the cmake files',['../inside_cmake.html',1,'internals']]], ['master_5fsignal_5ff',['master_signal_f',['../structs__xbt__parmap.html#a5cf66c7f69b8cf8e5546561d5feddfb5',1,'s_xbt_parmap']]], ['master_5fwait_5ff',['master_wait_f',['../structs__xbt__parmap.html#a675dabf4d9e2117c079aa3dcf1c82678',1,'s_xbt_parmap']]], ['max_5fduration',['max_duration',['../structsurf__action.html#ab18a20606e4b5393b305f7b0e5ca8fbf',1,'surf_action']]], ['mismatch_5ferror',['mismatch_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854aad84e78423b0ba9b3df634f564a38586',1,'ex.h']]], ['mode',['mode',['../structs__xbt__parmap.html#ac414c60f2d3a61b47e436bfb96245969',1,'s_xbt_parmap']]], ['msg',['msg',['../structxbt__ex__t.html#ad0a0a10d1bb3838b5b205fc005693ec3',1,'xbt_ex_t']]], ['msg_5faction_5ftrace_5frun',['MSG_action_trace_run',['../group__msg__trace__driven.html#gaff3ae0c6d1fc712f2162cc199086731f',1,'MSG_action_trace_run(char *path): msg_actions.c'],['../group__msg__trace__driven.html#gaff3ae0c6d1fc712f2162cc199086731f',1,'MSG_action_trace_run(char *path): msg_actions.c']]], ['msg',['MSG',['../group__MSG__API.html',1,'']]], ['msg_5fcomm_5fdestroy',['MSG_comm_destroy',['../group__msg__task__usage.html#gaa1b107438e7a295058e098a8c2c1bc4a',1,'MSG_comm_destroy(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#gaa1b107438e7a295058e098a8c2c1bc4a',1,'MSG_comm_destroy(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5fget_5fstatus',['MSG_comm_get_status',['../group__msg__task__usage.html#ga6a872b2d96bdd22d28b851f1072792f5',1,'MSG_comm_get_status(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#ga6a872b2d96bdd22d28b851f1072792f5',1,'MSG_comm_get_status(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5fget_5ftask',['MSG_comm_get_task',['../group__msg__task__usage.html#gaf4fbe7c481859674d29475a0085d7333',1,'MSG_comm_get_task(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#gaf4fbe7c481859674d29475a0085d7333',1,'MSG_comm_get_task(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5ft',['msg_comm_t',['../group__msg__task__usage.html#gafe19e97b54682048a5b2f1c79add21cf',1,'datatypes.h']]], ['msg_5fcomm_5ftest',['MSG_comm_test',['../group__msg__task__usage.html#gafd22dad001b95804f5e93aa146c84fd3',1,'MSG_comm_test(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#gafd22dad001b95804f5e93aa146c84fd3',1,'MSG_comm_test(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5ftestany',['MSG_comm_testany',['../group__msg__task__usage.html#gacd787fdda2fd925a1e4e0114cb4eb82e',1,'MSG_comm_testany(xbt_dynar_t comms): msg_gos.c'],['../group__msg__task__usage.html#gacd787fdda2fd925a1e4e0114cb4eb82e',1,'MSG_comm_testany(xbt_dynar_t comms): msg_gos.c']]], ['msg_5fcomm_5fwait',['MSG_comm_wait',['../group__msg__task__usage.html#ga2ae956f1e7a1014652d85b5f8db42aa3',1,'MSG_comm_wait(msg_comm_t comm, double timeout): msg_gos.c'],['../group__msg__task__usage.html#ga2ae956f1e7a1014652d85b5f8db42aa3',1,'MSG_comm_wait(msg_comm_t comm, double timeout): msg_gos.c']]], ['msg_5fcomm_5fwaitall',['MSG_comm_waitall',['../group__msg__task__usage.html#ga01ce9097c976b96664e6785f6ab5d4b6',1,'MSG_comm_waitall(msg_comm_t *comm, int nb_elem, double timeout): msg_gos.c'],['../group__msg__task__usage.html#ga01ce9097c976b96664e6785f6ab5d4b6',1,'MSG_comm_waitall(msg_comm_t *comm, int nb_elem, double timeout): msg_gos.c']]], ['msg_5fcomm_5fwaitany',['MSG_comm_waitany',['../group__msg__task__usage.html#ga62772e7b378bc485c114231af4b8f596',1,'MSG_comm_waitany(xbt_dynar_t comms): msg_gos.c'],['../group__msg__task__usage.html#ga62772e7b378bc485c114231af4b8f596',1,'MSG_comm_waitany(xbt_dynar_t comms): msg_gos.c']]], ['msg_5fconfig',['MSG_config',['../group__msg__simulation.html#ga35037b57281f860b92ed7704d37de78f',1,'MSG_config(const char *key, const char *value): msg_global.c'],['../group__msg__simulation.html#ga35037b57281f860b92ed7704d37de78f',1,'MSG_config(const char *key, const char *value): msg_global.c']]], ['msg_5fcreate_5fenvironment',['MSG_create_environment',['../group__msg__simulation.html#gae08e089d52a2928680e0957e7152d79d',1,'MSG_create_environment(const char *file): msg_environment.c'],['../group__msg__simulation.html#gae08e089d52a2928680e0957e7152d79d',1,'MSG_create_environment(const char *file): msg_environment.c']]], ['msg_20deprecated',['MSG Deprecated',['../group__msg__deprecated__functions.html',1,'']]], ['msg_5ferror_5ft',['msg_error_t',['../group__msg__simulation.html#gaf79b56c0bd3b78b539b0cb4c12e56425',1,'msg.h']]], ['msg_20examples',['MSG examples',['../group__MSG__examples.html',1,'']]], ['msg_5ffile_5fclose',['MSG_file_close',['../group__msg__file__management.html#ga8087da2271bceabefcc6d6636decb750',1,'MSG_file_close(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga8087da2271bceabefcc6d6636decb750',1,'MSG_file_close(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fdump',['MSG_file_dump',['../group__msg__file__management.html#ga026a21b86128403f92c3f4730c68d153',1,'MSG_file_dump(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga026a21b86128403f92c3f4730c68d153',1,'MSG_file_dump(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fget_5fdata',['MSG_file_get_data',['../group__msg__file__management.html#ga460af619ebd92cebe5d5b812f91eb73c',1,'MSG_file_get_data(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga460af619ebd92cebe5d5b812f91eb73c',1,'MSG_file_get_data(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fget_5fsize',['MSG_file_get_size',['../group__msg__file__management.html#gabb010052e11b12c6b6d8169cdff66c82',1,'MSG_file_get_size(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#gabb010052e11b12c6b6d8169cdff66c82',1,'MSG_file_get_size(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fls',['MSG_file_ls',['../group__msg__file__management.html#gad55ef25a4f6e484f4874d9cdc306c869',1,'MSG_file_ls(const char *mount, const char *path): msg_io.c'],['../group__msg__file__management.html#gad55ef25a4f6e484f4874d9cdc306c869',1,'MSG_file_ls(const char *mount, const char *path): msg_io.c']]], ['msg_5ffile_5fopen',['MSG_file_open',['../group__msg__file__management.html#gae05ac2e6382893dc94ed610408b19c95',1,'MSG_file_open(const char *mount, const char *path, void *data): msg_io.c'],['../group__msg__file__management.html#gae05ac2e6382893dc94ed610408b19c95',1,'MSG_file_open(const char *mount, const char *fullname, void *data): msg_io.c']]], ['msg_5ffile_5fread',['MSG_file_read',['../group__msg__file__management.html#ga3c6c221ab91ae0213ad967204c882882',1,'MSG_file_read(msg_file_t fd, sg_storage_size_t size): msg_io.c'],['../group__msg__file__management.html#ga3c6c221ab91ae0213ad967204c882882',1,'MSG_file_read(msg_file_t fd, sg_storage_size_t size): msg_io.c']]], ['msg_5ffile_5fset_5fdata',['MSG_file_set_data',['../group__msg__file__management.html#ga902c9e5bdda07488bdbb310303c40551',1,'MSG_file_set_data(msg_file_t fd, void *data): msg_io.c'],['../group__msg__file__management.html#ga902c9e5bdda07488bdbb310303c40551',1,'MSG_file_set_data(msg_file_t fd, void *data): msg_io.c']]], ['msg_5ffile_5ft',['msg_file_t',['../group__msg__file__management.html#ga87e0d76d9428e822d9a67e676c8a2775',1,'datatypes.h']]], ['msg_5ffile_5funlink',['MSG_file_unlink',['../group__msg__file__management.html#ga886ea23939db224929e122d363ed91cb',1,'MSG_file_unlink(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga886ea23939db224929e122d363ed91cb',1,'MSG_file_unlink(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fwrite',['MSG_file_write',['../group__msg__file__management.html#ga3b1606c3e01721f3eab49f236741f208',1,'MSG_file_write(msg_file_t fd, sg_storage_size_t size): msg_io.c'],['../group__msg__file__management.html#ga3b1606c3e01721f3eab49f236741f208',1,'MSG_file_write(msg_file_t fd, sg_storage_size_t size): msg_io.c']]], ['msg_5ffunction_5fregister',['MSG_function_register',['../group__msg__simulation.html#ga21e94a4e7b26dea140b0c71a2a4f4352',1,'MSG_function_register(const char *name, xbt_main_func_t code): msg_deployment.c'],['../group__msg__simulation.html#ga21e94a4e7b26dea140b0c71a2a4f4352',1,'MSG_function_register(const char *name, xbt_main_func_t code): msg_deployment.c']]], ['msg_5ffunction_5fregister_5fdefault',['MSG_function_register_default',['../group__msg__simulation.html#ga698d00aec4b3d7f8cf90c4d1a4595c9c',1,'MSG_function_register_default(xbt_main_func_t code): msg_deployment.c'],['../group__msg__simulation.html#ga698d00aec4b3d7f8cf90c4d1a4595c9c',1,'MSG_function_register_default(xbt_main_func_t code): msg_deployment.c']]], ['msg_5fget_5fclock',['MSG_get_clock',['../group__msg__simulation.html#gacfeb7fa281abd0ff74b0591937cbb574',1,'MSG_get_clock(void): msg_global.c'],['../group__msg__simulation.html#gacfeb7fa281abd0ff74b0591937cbb574',1,'MSG_get_clock(void): msg_global.c']]], ['msg_5fget_5ferrno',['MSG_get_errno',['../group__msg__deprecated__functions.html#ga4abdb2c7da1b9d89187ce51211db3f25',1,'MSG_get_errno(void): msg_gos.c'],['../group__msg__deprecated__functions.html#ga4abdb2c7da1b9d89187ce51211db3f25',1,'MSG_get_errno(void): msg_gos.c']]], ['msg_5fget_5fhost_5fconsumed_5fenergy',['MSG_get_host_consumed_energy',['../group__m__host__management.html#ga906e9852651be55265a7c8489470e1e9',1,'MSG_get_host_consumed_energy(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga906e9852651be55265a7c8489470e1e9',1,'MSG_get_host_consumed_energy(msg_host_t host): msg_host.c']]], ['msg_5fget_5fhost_5fcurrent_5fpower_5fpeak',['MSG_get_host_current_power_peak',['../group__m__host__management.html#ga0b6fdd80f2f66ac2fec711c712981ec5',1,'MSG_get_host_current_power_peak(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga0b6fdd80f2f66ac2fec711c712981ec5',1,'MSG_get_host_current_power_peak(msg_host_t host): msg_host.c']]], ['msg_5fget_5fhost_5fmsgload',['MSG_get_host_msgload',['../group__m__host__management.html#ga94b03ec6fe7c2bbf3c6c7bef2f89ee0b',1,'MSG_get_host_msgload(msg_host_t host): msg_host.c'],['../group__m__host__management.html#ga94b03ec6fe7c2bbf3c6c7bef2f89ee0b',1,'MSG_get_host_msgload(msg_host_t h): msg_host.c']]], ['msg_5fget_5fhost_5fnb_5fpstates',['MSG_get_host_nb_pstates',['../group__m__host__management.html#ga921573751f861dc32ded07521b63eae0',1,'MSG_get_host_nb_pstates(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga921573751f861dc32ded07521b63eae0',1,'MSG_get_host_nb_pstates(msg_host_t host): msg_host.c']]], ['msg_5fget_5fhost_5fnumber',['MSG_get_host_number',['../group__m__host__management.html#gaafceb2773bb9e39878592ff9a9a81a01',1,'MSG_get_host_number(void): msg_host.c'],['../group__m__host__management.html#gaafceb2773bb9e39878592ff9a9a81a01',1,'MSG_get_host_number(void): msg_host.c']]], ['msg_5fget_5fhost_5fpower_5fpeak_5fat',['MSG_get_host_power_peak_at',['../group__m__host__management.html#gaadeccc6816ff0e7809fb090207fa2504',1,'MSG_get_host_power_peak_at(msg_host_t h, int pstate_index): msg_host.c'],['../group__m__host__management.html#gaadeccc6816ff0e7809fb090207fa2504',1,'MSG_get_host_power_peak_at(msg_host_t host, int pstate_index): msg_host.c']]], ['msg_5fget_5fhost_5fspeed',['MSG_get_host_speed',['../group__m__host__management.html#ga6e910e3a884ebbe0b8ccae3277619374',1,'MSG_get_host_speed(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga6e910e3a884ebbe0b8ccae3277619374',1,'MSG_get_host_speed(msg_host_t h): msg_host.c']]], ['msg_5fget_5fregistered_5ffunction',['MSG_get_registered_function',['../group__msg__simulation.html#ga61b2e271c59ff50d38de7a0f9858b4b1',1,'MSG_get_registered_function(const char *name): msg_deployment.c'],['../group__msg__simulation.html#ga61b2e271c59ff50d38de7a0f9858b4b1',1,'MSG_get_registered_function(const char *name): msg_deployment.c']]], ['msg_5fgpu_5ftask_5fcreate',['MSG_gpu_task_create',['../group__m__task__management.html#ga4ed297ea1a968b31be47d45f5f908580',1,'MSG_gpu_task_create(const char *name, double compute_duration, double dispatch_latency, double collect_latency): msg_task.c'],['../group__m__task__management.html#ga4ed297ea1a968b31be47d45f5f908580',1,'MSG_gpu_task_create(const char *name, double compute_duration, double dispatch_latency, double collect_latency): msg_task.c']]], ['msg_5fgpu_5ftask_5ft',['msg_gpu_task_t',['../group__m__task__management.html#ga3ab366f5db21f52c90a265fe83c5c2dd',1,'datatypes.h']]], ['msg_5fhost_5ffailure',['MSG_HOST_FAILURE',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a69965b44e0393c3ba81482bb975c55e5',1,'msg.h']]], ['msg_5fhost_5fget_5fcore_5fnumber',['MSG_host_get_core_number',['../group__m__host__management.html#gab0df78011e11a95b3318120aa950a32f',1,'MSG_host_get_core_number(msg_host_t h): msg_host.c'],['../group__m__host__management.html#gab0df78011e11a95b3318120aa950a32f',1,'MSG_host_get_core_number(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fdata',['MSG_host_get_data',['../group__m__host__management.html#ga074e447602d8c0eab3f442c78a1dfe5f',1,'MSG_host_get_data(msg_host_t host): msg_host.c'],['../group__m__host__management.html#ga074e447602d8c0eab3f442c78a1dfe5f',1,'MSG_host_get_data(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fname',['MSG_host_get_name',['../group__m__host__management.html#gad4daf43406f4dce8caae5310cdf40bde',1,'MSG_host_get_name(msg_host_t host): msg_host.c'],['../group__m__host__management.html#gad4daf43406f4dce8caae5310cdf40bde',1,'MSG_host_get_name(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fprocess_5flist',['MSG_host_get_process_list',['../group__m__host__management.html#ga266e69ef1f9145caea0d507b84dd8044',1,'MSG_host_get_process_list(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga266e69ef1f9145caea0d507b84dd8044',1,'MSG_host_get_process_list(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fproperties',['MSG_host_get_properties',['../group__m__host__management.html#gac5d6359399bb8c8daba83cf62f47785f',1,'MSG_host_get_properties(msg_host_t host): msg_host.c'],['../group__m__host__management.html#gac5d6359399bb8c8daba83cf62f47785f',1,'MSG_host_get_properties(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fproperty_5fvalue',['MSG_host_get_property_value',['../group__m__host__management.html#gadcefcdecf27f1dfb19a5c2ac5a775402',1,'MSG_host_get_property_value(msg_host_t host, const char *name): msg_host.c'],['../group__m__host__management.html#gadcefcdecf27f1dfb19a5c2ac5a775402',1,'MSG_host_get_property_value(msg_host_t host, const char *name): msg_host.c']]], ['msg_5fhost_5fget_5fstorage_5flist',['MSG_host_get_storage_list',['../group__m__host__management.html#ga8398f7a284fd227c078e0d019819436b',1,'MSG_host_get_storage_list(msg_host_t host): msg_host.c'],['../group__m__host__management.html#ga8398f7a284fd227c078e0d019819436b',1,'MSG_host_get_storage_list(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fself',['MSG_host_self',['../group__m__host__management.html#ga8552d95b844f896978eca735cbd73e9f',1,'MSG_host_self(void): msg_host.c'],['../group__m__host__management.html#ga8552d95b844f896978eca735cbd73e9f',1,'MSG_host_self(void): msg_host.c']]], ['msg_5fhost_5fset_5fdata',['MSG_host_set_data',['../group__m__host__management.html#gab52e164f5e7710facf114234152cfe85',1,'MSG_host_set_data(msg_host_t host, void *data): msg_host.c'],['../group__m__host__management.html#gab52e164f5e7710facf114234152cfe85',1,'MSG_host_set_data(msg_host_t host, void *data): msg_host.c']]], ['msg_5fhost_5fset_5fproperty_5fvalue',['MSG_host_set_property_value',['../group__m__host__management.html#ga1b84e13e966d6ec0a2c013144d33f194',1,'MSG_host_set_property_value(msg_host_t host, const char *name, char *value, void_f_pvoid_t free_ctn): msg_host.c'],['../group__m__host__management.html#ga1b84e13e966d6ec0a2c013144d33f194',1,'MSG_host_set_property_value(msg_host_t host, const char *name, char *value, void_f_pvoid_t free_ctn): msg_host.c']]], ['msg_5fhost_5ft',['msg_host_t',['../group__m__host__management.html#ga0cc2134715cceaeea82df1c1305fbecf',1,'datatypes.h']]], ['msg_5fhosts_5fas_5fdynar',['MSG_hosts_as_dynar',['../group__m__host__management.html#gaa886b8367e635efe11211b2aca5a1d43',1,'MSG_hosts_as_dynar(void): msg_host.c'],['../group__m__host__management.html#gaa886b8367e635efe11211b2aca5a1d43',1,'MSG_hosts_as_dynar(void): msg_host.c']]], ['msg_5finit',['MSG_init',['../group__msg__simulation.html#gab394a1043a25ec62f498c097d805f0a1',1,'msg.h']]], ['msg_5finit_5fnocheck',['MSG_init_nocheck',['../group__msg__simulation.html#ga0dbc6fabf0391c4f193b33befeb8a22e',1,'MSG_init_nocheck(int *argc, char **argv): msg_global.c'],['../group__msg__simulation.html#ga0dbc6fabf0391c4f193b33befeb8a22e',1,'MSG_init_nocheck(int *argc, char **argv): msg_global.c']]], ['msg_5flaunch_5fapplication',['MSG_launch_application',['../group__msg__simulation.html#ga012d470de7974da7262d0020e00117e9',1,'MSG_launch_application(const char *file): msg_deployment.c'],['../group__msg__simulation.html#ga012d470de7974da7262d0020e00117e9',1,'MSG_launch_application(const char *file): msg_deployment.c']]], ['msg_5fmailbox_5fget_5ftask_5fext',['MSG_mailbox_get_task_ext',['../group__msg__mailbox__management.html#ga0ccdeb3f9337c9fa505ed39c74bd27a1',1,'MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga0ccdeb3f9337c9fa505ed39c74bd27a1',1,'MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout): msg_mailbox.c']]], ['msg_5fmailbox_5fget_5ftask_5fext_5fbounded',['MSG_mailbox_get_task_ext_bounded',['../group__msg__mailbox__management.html#ga073a924d91ab515e507e01399dbdd0dc',1,'MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout, double rate): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga073a924d91ab515e507e01399dbdd0dc',1,'MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout, double rate): msg_mailbox.c']]], ['mailbox_20management_20functions',['Mailbox Management Functions',['../group__msg__mailbox__management.html',1,'']]], ['msg_5fmailbox_5fset_5fasync',['MSG_mailbox_set_async',['../group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8',1,'MSG_mailbox_set_async(const char *alias): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8',1,'MSG_mailbox_set_async(const char *alias): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8',1,'MSG_mailbox_set_async(const char *alias): msg_mailbox.c']]], ['msg_5fmailbox_5ft',['msg_mailbox_t',['../group__msg__task__usage.html#gae2f7e0cd1e5707f78b4694abeef695d3',1,'datatypes.h']]], ['msg_5fmain',['MSG_main',['../group__msg__simulation.html#ga638072e92edcf9c5aed498daefed010c',1,'MSG_main(void): msg_global.c'],['../group__msg__simulation.html#ga638072e92edcf9c5aed498daefed010c',1,'MSG_main(void): msg_global.c']]], ['msg_5fok',['MSG_OK',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a7db209a18c6374183567534787dccc1b',1,'msg.h']]], ['msg_5fparallel_5ftask_5fcreate',['MSG_parallel_task_create',['../group__m__task__management.html#ga54412e440ff859933bbbcb0204aa5a75',1,'MSG_parallel_task_create(const char *name, int host_nb, const msg_host_t *host_list, double *computation_amount, double *communication_amount, void *data): msg_task.c'],['../group__m__task__management.html#ga54412e440ff859933bbbcb0204aa5a75',1,'MSG_parallel_task_create(const char *name, int host_nb, const msg_host_t *host_list, double *computation_amount, double *communication_amount, void *data): msg_task.c']]], ['msg_5fparallel_5ftask_5fexecute',['MSG_parallel_task_execute',['../group__msg__task__usage.html#ga97bd13baa799b73b12599b3d6f7b849f',1,'MSG_parallel_task_execute(msg_task_t task): msg_gos.c'],['../group__msg__task__usage.html#ga97bd13baa799b73b12599b3d6f7b849f',1,'MSG_parallel_task_execute(msg_task_t task): msg_gos.c']]], ['msg_5fprocess_5fauto_5frestart_5fset',['MSG_process_auto_restart_set',['../group__m__process__management.html#gaa8489360976ff79e94e3db2254e5b7db',1,'MSG_process_auto_restart_set(msg_process_t process, int auto_restart): msg_process.c'],['../group__m__process__management.html#gaa8489360976ff79e94e3db2254e5b7db',1,'MSG_process_auto_restart_set(msg_process_t process, int auto_restart): msg_process.c']]], ['msg_5fprocess_5fcreate',['MSG_process_create',['../group__m__process__management.html#ga943d27b38754b2af9f78e80cc29db306',1,'MSG_process_create(const char *name, xbt_main_func_t code, void *data, msg_host_t host): msg_process.c'],['../group__m__process__management.html#ga943d27b38754b2af9f78e80cc29db306',1,'MSG_process_create(const char *name, xbt_main_func_t code, void *data, msg_host_t host): msg_process.c']]], ['msg_5fprocess_5fcreate_5fwith_5farguments',['MSG_process_create_with_arguments',['../group__m__process__management.html#ga1540ef18107c4d2387a937017dcf97c5',1,'MSG_process_create_with_arguments(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv): msg_process.c'],['../group__m__process__management.html#ga1540ef18107c4d2387a937017dcf97c5',1,'MSG_process_create_with_arguments(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv): msg_process.c']]], ['msg_5fprocess_5fcreate_5fwith_5fenvironment',['MSG_process_create_with_environment',['../group__m__process__management.html#ga640b4cc9200796bc211e6d8b794ba922',1,'MSG_process_create_with_environment(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv, xbt_dict_t properties): msg_process.c'],['../group__m__process__management.html#ga640b4cc9200796bc211e6d8b794ba922',1,'MSG_process_create_with_environment(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv, xbt_dict_t properties): msg_process.c']]], ['msg_5fprocess_5ffrom_5fpid',['MSG_process_from_PID',['../group__m__process__management.html#ga842d26b5c9352aea228378d8ef12209b',1,'MSG_process_from_PID(int PID): msg_process.c'],['../group__m__process__management.html#ga842d26b5c9352aea228378d8ef12209b',1,'MSG_process_from_PID(int PID): msg_process.c']]], ['msg_5fprocess_5fget_5fdata',['MSG_process_get_data',['../group__m__process__management.html#ga2a510fa3957f963a04eaf6b483bfc6a9',1,'MSG_process_get_data(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga2a510fa3957f963a04eaf6b483bfc6a9',1,'MSG_process_get_data(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fhost',['MSG_process_get_host',['../group__m__process__management.html#ga7b74e6c2c40a8365b4bed0e37c798ea5',1,'MSG_process_get_host(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga7b74e6c2c40a8365b4bed0e37c798ea5',1,'MSG_process_get_host(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fname',['MSG_process_get_name',['../group__m__process__management.html#gaf22fa3dcf713f37e292397eea9744e7a',1,'MSG_process_get_name(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gaf22fa3dcf713f37e292397eea9744e7a',1,'MSG_process_get_name(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fpid',['MSG_process_get_PID',['../group__m__process__management.html#ga180e1dbb474bda1958a409825e2928cb',1,'MSG_process_get_PID(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga180e1dbb474bda1958a409825e2928cb',1,'MSG_process_get_PID(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fppid',['MSG_process_get_PPID',['../group__m__process__management.html#ga9f28a934b5e2e220093131c7c93d63c4',1,'MSG_process_get_PPID(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga9f28a934b5e2e220093131c7c93d63c4',1,'MSG_process_get_PPID(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fproperties',['MSG_process_get_properties',['../group__m__process__management.html#gad7570aff7510cbed3fc1dc3b97d0231b',1,'MSG_process_get_properties(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gad7570aff7510cbed3fc1dc3b97d0231b',1,'MSG_process_get_properties(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fproperty_5fvalue',['MSG_process_get_property_value',['../group__m__process__management.html#ga7894a7c080a4821b49b17d0b6abd46ae',1,'MSG_process_get_property_value(msg_process_t process, const char *name): msg_process.c'],['../group__m__process__management.html#ga7894a7c080a4821b49b17d0b6abd46ae',1,'MSG_process_get_property_value(msg_process_t process, const char *name): msg_process.c']]], ['msg_5fprocess_5fis_5fsuspended',['MSG_process_is_suspended',['../group__m__process__management.html#ga4fd646e5d31bdecfc5e93405a2c32d56',1,'MSG_process_is_suspended(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga4fd646e5d31bdecfc5e93405a2c32d56',1,'MSG_process_is_suspended(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fkill',['MSG_process_kill',['../group__m__process__management.html#gab7ed321f5bf4776d42e1d91158d67b8d',1,'MSG_process_kill(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gab7ed321f5bf4776d42e1d91158d67b8d',1,'MSG_process_kill(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fkillall',['MSG_process_killall',['../group__msg__simulation.html#ga0dedd7962cd7d916406ef45c471f6134',1,'MSG_process_killall(int reset_PIDs): msg_global.c'],['../group__msg__simulation.html#ga0dedd7962cd7d916406ef45c471f6134',1,'MSG_process_killall(int reset_PIDs): msg_global.c']]], ['msg_5fprocess_5fmigrate',['MSG_process_migrate',['../group__m__process__management.html#ga6651c72dff79c7f1aa6eff05db5b3063',1,'MSG_process_migrate(msg_process_t process, msg_host_t host): msg_process.c'],['../group__m__process__management.html#ga6651c72dff79c7f1aa6eff05db5b3063',1,'MSG_process_migrate(msg_process_t process, msg_host_t host): msg_process.c']]], ['msg_5fprocess_5fon_5fexit',['MSG_process_on_exit',['../group__m__process__management.html#ga42cde2901797dfce3db7d13e0bcc02d5',1,'MSG_process_on_exit(int_f_pvoid_t fun, void *data): msg_process.c'],['../group__m__process__management.html#ga42cde2901797dfce3db7d13e0bcc02d5',1,'MSG_process_on_exit(int_f_pvoid_t fun, void *data): msg_process.c']]], ['msg_5fprocess_5fresume',['MSG_process_resume',['../group__m__process__management.html#ga9f25a30269f39c7683d18f9d4e1fd331',1,'MSG_process_resume(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga9f25a30269f39c7683d18f9d4e1fd331',1,'MSG_process_resume(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fself',['MSG_process_self',['../group__m__process__management.html#gaf76911391b5116a7d1775e74185e64d5',1,'MSG_process_self(void): msg_process.c'],['../group__m__process__management.html#gaf76911391b5116a7d1775e74185e64d5',1,'MSG_process_self(void): msg_process.c']]], ['msg_5fprocess_5fself_5fpid',['MSG_process_self_PID',['../group__m__process__management.html#ga2eea811c91c7e85a21160b53d65ec79c',1,'MSG_process_self_PID(void): msg_process.c'],['../group__m__process__management.html#ga2eea811c91c7e85a21160b53d65ec79c',1,'MSG_process_self_PID(void): msg_process.c']]], ['msg_5fprocess_5fself_5fppid',['MSG_process_self_PPID',['../group__m__process__management.html#ga0b6f46d91ad8f9e6862e26d8a89d2047',1,'MSG_process_self_PPID(void): msg_process.c'],['../group__m__process__management.html#ga0b6f46d91ad8f9e6862e26d8a89d2047',1,'MSG_process_self_PPID(void): msg_process.c']]], ['msg_5fprocess_5fset_5fdata',['MSG_process_set_data',['../group__m__process__management.html#gad1ad359bc57b8a7008435ee29e1da681',1,'MSG_process_set_data(msg_process_t process, void *data): msg_process.c'],['../group__m__process__management.html#gad1ad359bc57b8a7008435ee29e1da681',1,'MSG_process_set_data(msg_process_t process, void *data): msg_process.c']]], ['msg_5fprocess_5fset_5fdata_5fcleanup',['MSG_process_set_data_cleanup',['../group__m__process__management.html#ga2c75b91ef5b61cad66a7fa3a72d122d0',1,'MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup): msg_process.c'],['../group__m__process__management.html#ga2c75b91ef5b61cad66a7fa3a72d122d0',1,'MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup): msg_process.c']]], ['msg_5fprocess_5fset_5fkill_5ftime',['MSG_process_set_kill_time',['../group__m__process__management.html#ga090d763945c2286f7227f1fe069efb79',1,'MSG_process_set_kill_time(msg_process_t process, double kill_time): msg_process.c'],['../group__m__process__management.html#ga090d763945c2286f7227f1fe069efb79',1,'MSG_process_set_kill_time(msg_process_t process, double kill_time): msg_process.c']]], ['msg_5fprocess_5fsleep',['MSG_process_sleep',['../group__msg__task__usage.html#gab7c18061b167e38f28886512ea73be6b',1,'MSG_process_sleep(double nb_sec): msg_gos.c'],['../group__msg__task__usage.html#gab7c18061b167e38f28886512ea73be6b',1,'MSG_process_sleep(double nb_sec): msg_gos.c']]], ['msg_5fprocess_5fsuspend',['MSG_process_suspend',['../group__m__process__management.html#gac00bbc4ebc824d14a3f6719de8190618',1,'MSG_process_suspend(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gac00bbc4ebc824d14a3f6719de8190618',1,'MSG_process_suspend(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5ft',['msg_process_t',['../group__m__process__management.html#ga49407197cb1ba4a2b1943285786eacec',1,'datatypes.h']]], ['msg_5fsem_5facquire',['MSG_sem_acquire',['../group__msg__synchro.html#ga6baf039cbe49f8d83b8d5423f463f4bc',1,'MSG_sem_acquire(msg_sem_t sem): msg_synchro.c'],['../group__msg__synchro.html#ga6baf039cbe49f8d83b8d5423f463f4bc',1,'MSG_sem_acquire(msg_sem_t sem): msg_synchro.c']]], ['msg_5fsem_5facquire_5ftimeout',['MSG_sem_acquire_timeout',['../group__msg__synchro.html#gad080078a175bc7f88618970b07dd445b',1,'MSG_sem_acquire_timeout(msg_sem_t sem, double timeout): msg_synchro.c'],['../group__msg__synchro.html#gad080078a175bc7f88618970b07dd445b',1,'MSG_sem_acquire_timeout(msg_sem_t sem, double timeout): msg_synchro.c']]], ['msg_5fsem_5finit',['MSG_sem_init',['../group__msg__synchro.html#gaa540fb0fe72d3bf3b4183ba3c6e07faa',1,'MSG_sem_init(int initial_value): msg_synchro.c'],['../group__msg__synchro.html#gaa540fb0fe72d3bf3b4183ba3c6e07faa',1,'MSG_sem_init(int initial_value): msg_synchro.c']]], ['msg_5fsem_5frelease',['MSG_sem_release',['../group__msg__synchro.html#ga47ed8c02cacfe486d3fa7d29beb56af1',1,'MSG_sem_release(msg_sem_t sem): msg_synchro.c'],['../group__msg__synchro.html#ga47ed8c02cacfe486d3fa7d29beb56af1',1,'MSG_sem_release(msg_sem_t sem): msg_synchro.c']]], ['msg_5fsem_5ft',['msg_sem_t',['../group__msg__synchro.html#gadb025f3f21a31a3140675cea7a4ef957',1,'msg.h']]], ['msg_5fsem_5fwould_5fblock',['MSG_sem_would_block',['../group__msg__synchro.html#ga46b0858501af3424a570f8d786320520',1,'MSG_sem_would_block(msg_sem_t sem): msg_synchro.c'],['../group__msg__synchro.html#ga46b0858501af3424a570f8d786320520',1,'MSG_sem_would_block(msg_sem_t sem): msg_synchro.c']]], ['msg_5fset_5fhost_5fpower_5fpeak_5fat',['MSG_set_host_power_peak_at',['../group__m__host__management.html#ga2befbe7955de345ce7e02556f21bb7b4',1,'MSG_set_host_power_peak_at(msg_host_t h, int pstate): msg_host.c'],['../group__m__host__management.html#ga2befbe7955de345ce7e02556f21bb7b4',1,'MSG_set_host_power_peak_at(msg_host_t host, int pstate_index): msg_host.c']]], ['main_20msg_20simulation_20functions',['Main MSG simulation Functions',['../group__msg__simulation.html',1,'']]], ['msg_5fstorage_5fget_5fby_5fname',['MSG_storage_get_by_name',['../group__msg__storage__management.html#ga546b28d8dcd4f9b9f9206fa49c97fb23',1,'MSG_storage_get_by_name(const char *name): msg_io.c'],['../group__msg__storage__management.html#ga546b28d8dcd4f9b9f9206fa49c97fb23',1,'MSG_storage_get_by_name(const char *name): msg_io.c']]], ['msg_5fstorage_5fget_5fcontent',['MSG_storage_get_content',['../group__msg__storage__management.html#gab542d642be87d52dd647b77ea3f44b74',1,'MSG_storage_get_content(msg_storage_t storage): msg_io.c'],['../group__msg__storage__management.html#gab542d642be87d52dd647b77ea3f44b74',1,'MSG_storage_get_content(msg_storage_t storage): msg_io.c']]], ['msg_5fstorage_5fget_5ffree_5fsize',['MSG_storage_get_free_size',['../group__msg__storage__management.html#gab65b4a69185c6e80ed1da21012c7f100',1,'MSG_storage_get_free_size(const char *name): msg_io.c'],['../group__msg__storage__management.html#gab65b4a69185c6e80ed1da21012c7f100',1,'MSG_storage_get_free_size(const char *name): msg_io.c']]], ['msg_5fstorage_5fget_5fname',['MSG_storage_get_name',['../group__msg__storage__management.html#ga4e3dbb8ae3bda7ba80df6c32c4816926',1,'MSG_storage_get_name(msg_storage_t storage): msg_io.c'],['../group__msg__storage__management.html#ga4e3dbb8ae3bda7ba80df6c32c4816926',1,'MSG_storage_get_name(msg_storage_t storage): msg_io.c']]], ['msg_5fstorage_5fget_5fproperties',['MSG_storage_get_properties',['../group__msg__storage__management.html#ga28017dad8a2c6f1fe10b52b208d4a36e',1,'MSG_storage_get_properties(msg_storage_t storage): msg_io.c'],['../group__msg__storage__management.html#ga28017dad8a2c6f1fe10b52b208d4a36e',1,'MSG_storage_get_properties(msg_storage_t storage): msg_io.c']]], ['msg_5fstorage_5fget_5fused_5fsize',['MSG_storage_get_used_size',['../group__msg__storage__management.html#gae0d57e843712319835f31fcf8c23894b',1,'MSG_storage_get_used_size(const char *name): msg_io.c'],['../group__msg__storage__management.html#gae0d57e843712319835f31fcf8c23894b',1,'MSG_storage_get_used_size(const char *name): msg_io.c']]], ['msg_5fstorage_5fmanagement',['Msg_storage_management',['../group__msg__storage__management.html',1,'']]], ['msg_5fstorage_5fset_5fdata',['MSG_storage_set_data',['../group__msg__storage__management.html#ga6355cbf57e26d99c0ba021b8ba97514f',1,'MSG_storage_set_data(msg_storage_t host, void *data): msg_io.c'],['../group__msg__storage__management.html#ga6355cbf57e26d99c0ba021b8ba97514f',1,'MSG_storage_set_data(msg_storage_t storage, void *data): msg_io.c']]], ['msg_5fstorage_5fset_5fproperty_5fvalue',['MSG_storage_set_property_value',['../group__msg__storage__management.html#gab104363d9be84030d4e301e169e8cd6b',1,'MSG_storage_set_property_value(msg_storage_t storage, const char *name, char *value, void_f_pvoid_t free_ctn): msg_io.c'],['../group__msg__storage__management.html#gab104363d9be84030d4e301e169e8cd6b',1,'MSG_storage_set_property_value(msg_storage_t storage, const char *name, char *value, void_f_pvoid_t free_ctn): msg_io.c']]], ['msg_5fstorage_5ft',['msg_storage_t',['../group__msg__storage__management.html#ga13125793869304d581f31a0beb3e143d',1,'datatypes.h']]], ['msg_5fstorages_5fas_5fdynar',['MSG_storages_as_dynar',['../group__msg__storage__management.html#ga3d0280ddcf0026cee8837d30eebb6c90',1,'MSG_storages_as_dynar(void): msg_io.c'],['../group__msg__storage__management.html#ga3d0280ddcf0026cee8837d30eebb6c90',1,'MSG_storages_as_dynar(void): msg_io.c']]], ['msg_5ftask_5fcanceled',['MSG_TASK_CANCELED',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a115b6882d73de65d775aa8c7f1abaf70',1,'msg.h']]], ['msg_5ftask_5fcreate',['MSG_task_create',['../group__m__task__management.html#gaafe2ccabd38b13d1734323f86e40706a',1,'MSG_task_create(const char *name, double compute_duration, double message_size, void *data): msg_task.c'],['../group__m__task__management.html#gaafe2ccabd38b13d1734323f86e40706a',1,'MSG_task_create(const char *name, double compute_duration, double message_size, void *data): msg_task.c']]], ['msg_5ftask_5fdestroy',['MSG_task_destroy',['../group__m__task__management.html#gaf6369e840095c428218e494bf8b6dee6',1,'MSG_task_destroy(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gaf6369e840095c428218e494bf8b6dee6',1,'MSG_task_destroy(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fdsend',['MSG_task_dsend',['../group__msg__task__usage.html#ga7e292abd2fac532430ecb51a170a004a',1,'MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup): msg_gos.c'],['../group__msg__task__usage.html#ga7e292abd2fac532430ecb51a170a004a',1,'MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup): msg_gos.c']]], ['msg_5ftask_5fdsend_5fbounded',['MSG_task_dsend_bounded',['../group__msg__task__usage.html#ga361a85b101d3de18e8b7ed0a101d2af3',1,'MSG_task_dsend_bounded(msg_task_t task, const char *alias, void_f_pvoid_t cleanup, double maxrate): msg_gos.c'],['../group__msg__task__usage.html#ga361a85b101d3de18e8b7ed0a101d2af3',1,'MSG_task_dsend_bounded(msg_task_t task, const char *alias, void_f_pvoid_t cleanup, double maxrate): msg_gos.c']]], ['msg_5ftask_5fexecute',['MSG_task_execute',['../group__msg__task__usage.html#ga6ebbb75fe9ff779eac6ca57c5ad5bfe3',1,'MSG_task_execute(msg_task_t task): msg_gos.c'],['../group__msg__task__usage.html#ga6ebbb75fe9ff779eac6ca57c5ad5bfe3',1,'MSG_task_execute(msg_task_t task): msg_gos.c']]], ['msg_5ftask_5fget',['MSG_task_get',['../group__msg__deprecated__functions.html#ga1ae6d2a80ca4f35d7a19215f409ce00f',1,'MSG_task_get(msg_task_t *task, m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#ga1ae6d2a80ca4f35d7a19215f409ce00f',1,'MSG_task_get(msg_task_t *task, m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5fget_5fcategory',['MSG_task_get_category',['../group__msg__task__usage.html#ga4d8a840bc4a7f1b28ba351069de9b9c3',1,'MSG_task_get_category(msg_task_t task): msg_gos.c'],['../group__msg__task__usage.html#ga4d8a840bc4a7f1b28ba351069de9b9c3',1,'MSG_task_get_category(msg_task_t task): msg_gos.c']]], ['msg_5ftask_5fget_5fcompute_5fduration',['MSG_task_get_compute_duration',['../group__m__task__management.html#gae6c900f519f6280a9e7a615a2e47cb96',1,'MSG_task_get_compute_duration(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gae6c900f519f6280a9e7a615a2e47cb96',1,'MSG_task_get_compute_duration(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fdata',['MSG_task_get_data',['../group__m__task__management.html#gab0ef7c694fcc69282cf4da632ae64d5b',1,'MSG_task_get_data(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gab0ef7c694fcc69282cf4da632ae64d5b',1,'MSG_task_get_data(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fdata_5fsize',['MSG_task_get_data_size',['../group__m__task__management.html#ga5d7514ea11b8a51bad0cbc7ad0636856',1,'MSG_task_get_data_size(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga5d7514ea11b8a51bad0cbc7ad0636856',1,'MSG_task_get_data_size(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5ffrom_5fhost',['MSG_task_get_from_host',['../group__msg__deprecated__functions.html#gad09e64171486db6b0004653125313971',1,'MSG_task_get_from_host(msg_task_t *task, int channel, msg_host_t host): msg_gos.c'],['../group__msg__deprecated__functions.html#gad09e64171486db6b0004653125313971',1,'MSG_task_get_from_host(msg_task_t *task, m_channel_t channel, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5fget_5fname',['MSG_task_get_name',['../group__m__task__management.html#ga2adce7c9dbe8ecab1d6db1fdc420ea80',1,'MSG_task_get_name(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga2adce7c9dbe8ecab1d6db1fdc420ea80',1,'MSG_task_get_name(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fremaining_5fcommunication',['MSG_task_get_remaining_communication',['../group__m__task__management.html#ga1f3d2d85e2a7415e26fa12f05b71fc34',1,'MSG_task_get_remaining_communication(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga1f3d2d85e2a7415e26fa12f05b71fc34',1,'MSG_task_get_remaining_communication(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fremaining_5fcomputation',['MSG_task_get_remaining_computation',['../group__m__task__management.html#gada131788294fe436d9cc1044319b111f',1,'MSG_task_get_remaining_computation(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gada131788294fe436d9cc1044319b111f',1,'MSG_task_get_remaining_computation(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fsender',['MSG_task_get_sender',['../group__m__task__management.html#ga90a38af4ae02895a5e656c6d2555a63b',1,'MSG_task_get_sender(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga90a38af4ae02895a5e656c6d2555a63b',1,'MSG_task_get_sender(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fsource',['MSG_task_get_source',['../group__m__task__management.html#gabb8f9c3289b341b68af5c789ea659c1e',1,'MSG_task_get_source(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gabb8f9c3289b341b68af5c789ea659c1e',1,'MSG_task_get_source(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fwith_5ftimeout',['MSG_task_get_with_timeout',['../group__msg__deprecated__functions.html#ga48bf7268e2f079ba1ad51a00209028cd',1,'MSG_task_get_with_timeout(msg_task_t *task, m_channel_t channel, double max_duration): msg_gos.c'],['../group__msg__deprecated__functions.html#ga48bf7268e2f079ba1ad51a00209028cd',1,'MSG_task_get_with_timeout(msg_task_t *task, m_channel_t channel, double max_duration): msg_gos.c']]], ['msg_5ftask_5fiprobe',['MSG_task_Iprobe',['../group__msg__deprecated__functions.html#gae72af17e16cda4efcfad301a4170accd',1,'MSG_task_Iprobe(m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#gae72af17e16cda4efcfad301a4170accd',1,'MSG_task_Iprobe(m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5firecv',['MSG_task_irecv',['../group__msg__task__usage.html#gadb4623d587d75ad3b078928f0f1b27a5',1,'MSG_task_irecv(msg_task_t *task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#gadb4623d587d75ad3b078928f0f1b27a5',1,'MSG_task_irecv(msg_task_t *task, const char *name): msg_gos.c']]], ['msg_5ftask_5firecv_5fbounded',['MSG_task_irecv_bounded',['../group__msg__task__usage.html#gabc1b32d1baa16ae2dea503be7b74893f',1,'MSG_task_irecv_bounded(msg_task_t *task, const char *alias, double rate): msg_gos.c'],['../group__msg__task__usage.html#gabc1b32d1baa16ae2dea503be7b74893f',1,'MSG_task_irecv_bounded(msg_task_t *task, const char *name, double rate): msg_gos.c']]], ['msg_5ftask_5fisend',['MSG_task_isend',['../group__msg__task__usage.html#gaa280111a523d70bb36061e6e52ca1b42',1,'MSG_task_isend(msg_task_t task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#gaa280111a523d70bb36061e6e52ca1b42',1,'MSG_task_isend(msg_task_t task, const char *alias): msg_gos.c']]], ['msg_5ftask_5fisend_5fbounded',['MSG_task_isend_bounded',['../group__msg__task__usage.html#gafb8d945da3bf7c7e54d8db238d5f5508',1,'MSG_task_isend_bounded(msg_task_t task, const char *alias, double maxrate): msg_gos.c'],['../group__msg__task__usage.html#gafb8d945da3bf7c7e54d8db238d5f5508',1,'MSG_task_isend_bounded(msg_task_t task, const char *alias, double maxrate): msg_gos.c']]], ['msg_5ftask_5fisend_5fwith_5fmatching',['MSG_task_isend_with_matching',['../group__msg__task__usage.html#gabab3742eeb92d3e9a03aa7068f7d5d7f',1,'MSG_task_isend_with_matching(msg_task_t task, const char *alias, int(*match_fun)(void *, void *, smx_action_t), void *match_data): msg_gos.c'],['../group__msg__task__usage.html#gabab3742eeb92d3e9a03aa7068f7d5d7f',1,'MSG_task_isend_with_matching(msg_task_t task, const char *alias, int(*match_fun)(void *, void *, smx_action_t), void *match_data): msg_gos.c']]], ['msg_5ftask_5flisten',['MSG_task_listen',['../group__msg__task__usage.html#ga297e41ae363db652f2075d7e9d164bb5',1,'MSG_task_listen(const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga297e41ae363db652f2075d7e9d164bb5',1,'MSG_task_listen(const char *alias): msg_gos.c']]], ['msg_5ftask_5flisten_5ffrom',['MSG_task_listen_from',['../group__msg__task__usage.html#ga7646951835a1ac861b6a35b41741a268',1,'MSG_task_listen_from(const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga7646951835a1ac861b6a35b41741a268',1,'MSG_task_listen_from(const char *alias): msg_gos.c']]], ['msg_5ftask_5flisten_5ffrom_5fhost',['MSG_task_listen_from_host',['../group__msg__task__usage.html#ga26ca8f6eb20767098104786a15f19fb8',1,'MSG_task_listen_from_host(const char *alias, msg_host_t host): msg_gos.c'],['../group__msg__task__usage.html#ga26ca8f6eb20767098104786a15f19fb8',1,'MSG_task_listen_from_host(const char *alias, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5fprobe_5ffrom',['MSG_task_probe_from',['../group__msg__deprecated__functions.html#ga99bfe9edc985c6d2cce3947f81780660',1,'MSG_task_probe_from(m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#ga99bfe9edc985c6d2cce3947f81780660',1,'MSG_task_probe_from(m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5fprobe_5ffrom_5fhost',['MSG_task_probe_from_host',['../group__msg__deprecated__functions.html#gaa44c47c7ed2f78243eca7379437e1cc0',1,'MSG_task_probe_from_host(int channel, msg_host_t host): msg_gos.c'],['../group__msg__deprecated__functions.html#gaa44c47c7ed2f78243eca7379437e1cc0',1,'MSG_task_probe_from_host(int channel, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5fput',['MSG_task_put',['../group__msg__deprecated__functions.html#ga3e310a2bf7efc32d3aac8dad2eacd71d',1,'MSG_task_put(msg_task_t task, msg_host_t dest, m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#ga3e310a2bf7efc32d3aac8dad2eacd71d',1,'MSG_task_put(msg_task_t task, msg_host_t dest, m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5fput_5fbounded',['MSG_task_put_bounded',['../group__msg__deprecated__functions.html#ga6e5db824a4317c3a1279eeaa79b6511d',1,'MSG_task_put_bounded(msg_task_t task, msg_host_t dest, m_channel_t channel, double max_rate): msg_gos.c'],['../group__msg__deprecated__functions.html#ga6e5db824a4317c3a1279eeaa79b6511d',1,'MSG_task_put_bounded(msg_task_t task, msg_host_t dest, m_channel_t channel, double maxrate): msg_gos.c']]], ['msg_5ftask_5fput_5fwith_5ftimeout',['MSG_task_put_with_timeout',['../group__msg__deprecated__functions.html#gac979ed68d1b602dd04169cbed23828a9',1,'MSG_task_put_with_timeout(msg_task_t task, msg_host_t dest, m_channel_t channel, double max_duration): msg_gos.c'],['../group__msg__deprecated__functions.html#gac979ed68d1b602dd04169cbed23828a9',1,'MSG_task_put_with_timeout(msg_task_t task, msg_host_t dest, m_channel_t channel, double timeout): msg_gos.c']]], ['msg_5ftask_5freceive',['MSG_task_receive',['../group__msg__task__usage.html#ga710ee9d4ea587ab6ae66014913ac91e1',1,'MSG_task_receive(msg_task_t *task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga710ee9d4ea587ab6ae66014913ac91e1',1,'MSG_task_receive(msg_task_t *task, const char *alias): msg_gos.c']]], ['msg_5ftask_5freceive_5fbounded',['MSG_task_receive_bounded',['../group__msg__task__usage.html#gad147ccce869d2be6888e123063430dd8',1,'MSG_task_receive_bounded(msg_task_t *task, const char *alias, double rate): msg_gos.c'],['../group__msg__task__usage.html#gad147ccce869d2be6888e123063430dd8',1,'MSG_task_receive_bounded(msg_task_t *task, const char *alias, double rate): msg_gos.c']]], ['msg_5ftask_5freceive_5fext',['MSG_task_receive_ext',['../group__msg__task__usage.html#ga1e2f86298cf00ea3ced4d263d31e2890',1,'MSG_task_receive_ext(msg_task_t *task, const char *alias, double timeout, msg_host_t host): msg_gos.c'],['../group__msg__task__usage.html#ga1e2f86298cf00ea3ced4d263d31e2890',1,'MSG_task_receive_ext(msg_task_t *task, const char *alias, double timeout, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5freceive_5fext_5fbounded',['MSG_task_receive_ext_bounded',['../group__msg__task__usage.html#gaa5c978ad309b34cc72accd934531f4ac',1,'MSG_task_receive_ext_bounded(msg_task_t *task, const char *alias, double timeout, msg_host_t host, double rate): msg_gos.c'],['../group__msg__task__usage.html#gaa5c978ad309b34cc72accd934531f4ac',1,'MSG_task_receive_ext_bounded(msg_task_t *task, const char *alias, double timeout, msg_host_t host, double rate): msg_gos.c']]], ['msg_5ftask_5freceive_5ffrom_5fhost',['MSG_task_receive_from_host',['../group__msg__task__usage.html#gae41e58a499fddc40b4b0de9a59894b29',1,'MSG_task_receive_from_host(msg_task_t *task, const char *alias, msg_host_t host): msg_gos.c'],['../group__msg__task__usage.html#gae41e58a499fddc40b4b0de9a59894b29',1,'MSG_task_receive_from_host(msg_task_t *task, const char *alias, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5freceive_5fwith_5ftimeout',['MSG_task_receive_with_timeout',['../group__msg__task__usage.html#ga19687ebde0e9a07cb99fc73e7dfa7a03',1,'MSG_task_receive_with_timeout(msg_task_t *task, const char *alias, double timeout): msg_gos.c'],['../group__msg__task__usage.html#ga19687ebde0e9a07cb99fc73e7dfa7a03',1,'MSG_task_receive_with_timeout(msg_task_t *task, const char *alias, double timeout): msg_gos.c']]], ['msg_5ftask_5freceive_5fwith_5ftimeout_5fbounded',['MSG_task_receive_with_timeout_bounded',['../group__msg__task__usage.html#ga4a29ded2ab96b5632e2f70dfd684783d',1,'MSG_task_receive_with_timeout_bounded(msg_task_t *task, const char *alias, double timeout, double rate): msg_gos.c'],['../group__msg__task__usage.html#ga4a29ded2ab96b5632e2f70dfd684783d',1,'MSG_task_receive_with_timeout_bounded(msg_task_t *task, const char *alias, double timeout, double rate): msg_gos.c']]], ['msg_5ftask_5fsend',['MSG_task_send',['../group__msg__task__usage.html#ga33c924177135850888f25378b8e0b3cf',1,'MSG_task_send(msg_task_t task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga33c924177135850888f25378b8e0b3cf',1,'MSG_task_send(msg_task_t task, const char *alias): msg_gos.c']]], ['msg_5ftask_5fsend_5fbounded',['MSG_task_send_bounded',['../group__msg__task__usage.html#ga77f5e9bbbdb4a478cd3479d86678b7ab',1,'MSG_task_send_bounded(msg_task_t task, const char *alias, double rate): msg_gos.c'],['../group__msg__task__usage.html#ga77f5e9bbbdb4a478cd3479d86678b7ab',1,'MSG_task_send_bounded(msg_task_t task, const char *alias, double maxrate): msg_gos.c']]], ['msg_5ftask_5fsend_5fwith_5ftimeout',['MSG_task_send_with_timeout',['../group__msg__task__usage.html#gae1fb84e33c47ad59862188845ececdf5',1,'MSG_task_send_with_timeout(msg_task_t task, const char *alias, double timeout): msg_gos.c'],['../group__msg__task__usage.html#gae1fb84e33c47ad59862188845ececdf5',1,'MSG_task_send_with_timeout(msg_task_t task, const char *alias, double timeout): msg_gos.c']]], ['msg_5ftask_5fsend_5fwith_5ftimeout_5fbounded',['MSG_task_send_with_timeout_bounded',['../group__msg__task__usage.html#ga67d9306a7940e2b32a57d4c4d2ce8523',1,'MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alias, double timeout, double maxrate): msg_gos.c'],['../group__msg__task__usage.html#ga67d9306a7940e2b32a57d4c4d2ce8523',1,'MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alias, double timeout, double maxrate): msg_gos.c']]], ['msg_5ftask_5fset_5fcategory',['MSG_task_set_category',['../group__msg__task__usage.html#gaff6a660d1f3a37ff7ee3daee0e3ae3b7',1,'MSG_task_set_category(msg_task_t task, const char *category): msg_gos.c'],['../group__msg__task__usage.html#gaff6a660d1f3a37ff7ee3daee0e3ae3b7',1,'MSG_task_set_category(msg_task_t task, const char *category): msg_gos.c']]], ['msg_5ftask_5fset_5fcompute_5fduration',['MSG_task_set_compute_duration',['../group__m__task__management.html#gab54a9cc669db50dc7229389ac3dc7f1f',1,'MSG_task_set_compute_duration(msg_task_t task, double compute_duration): msg_task.c'],['../group__m__task__management.html#gab54a9cc669db50dc7229389ac3dc7f1f',1,'MSG_task_set_compute_duration(msg_task_t task, double computation_amount): msg_task.c']]], ['msg_5ftask_5fset_5fcopy_5fcallback',['MSG_task_set_copy_callback',['../group__m__task__management.html#gab4fd7f315f6f7d9297eaad64e67fbf90',1,'msg_task.c']]], ['msg_5ftask_5fset_5fdata',['MSG_task_set_data',['../group__m__task__management.html#ga5a2984b6a34bb725b52ee31cdece56a2',1,'MSG_task_set_data(msg_task_t task, void *data): msg_task.c'],['../group__m__task__management.html#ga5a2984b6a34bb725b52ee31cdece56a2',1,'MSG_task_set_data(msg_task_t task, void *data): msg_task.c']]], ['msg_5ftask_5fset_5fdata_5fsize',['MSG_task_set_data_size',['../group__m__task__management.html#ga3c900ab457b5822c205979097765bc04',1,'MSG_task_set_data_size(msg_task_t task, double data_size): msg_task.c'],['../group__m__task__management.html#ga3c900ab457b5822c205979097765bc04',1,'MSG_task_set_data_size(msg_task_t task, double data_size): msg_task.c']]], ['msg_5ftask_5fset_5fname',['MSG_task_set_name',['../group__m__task__management.html#gaa97b99e0176424e3f0afdf239e2f3f32',1,'MSG_task_set_name(msg_task_t task, const char *name): msg_task.c'],['../group__m__task__management.html#gaa97b99e0176424e3f0afdf239e2f3f32',1,'MSG_task_set_name(msg_task_t task, const char *name): msg_task.c']]], ['msg_5ftask_5fset_5fpriority',['MSG_task_set_priority',['../group__m__task__management.html#ga22cf2562fbb9cad8c5860914c0d8d6dc',1,'MSG_task_set_priority(msg_task_t task, double priority): msg_task.c'],['../group__m__task__management.html#ga22cf2562fbb9cad8c5860914c0d8d6dc',1,'MSG_task_set_priority(msg_task_t task, double priority): msg_task.c']]], ['msg_5ftask_5ft',['msg_task_t',['../group__m__task__management.html#gaa7cd89c7f542d19fd817a614d1c1cc95',1,'datatypes.h']]], ['msg_5ftask_5funinitialized',['MSG_TASK_UNINITIALIZED',['../group__m__task__management.html#ga13f8ac858abd957f5cb2e9a54ad98d76',1,'datatypes.h']]], ['msg_5ftimeout',['MSG_TIMEOUT',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a2f90300a07b9b18285e1897b1fabfd06',1,'msg.h']]], ['msg_5ftransfer_5ffailure',['MSG_TRANSFER_FAILURE',['../group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a373b92dc6a498dea6ab408fb1670386f',1,'msg.h']]], ['msg_5fvm_5fbind',['MSG_vm_bind',['../group__msg__VMs.html#ga21d8a296f64c7190dcbcfd0c249b4275',1,'MSG_vm_bind(msg_vm_t vm, msg_process_t process): msg_vm.c'],['../group__msg__VMs.html#ga21d8a296f64c7190dcbcfd0c249b4275',1,'MSG_vm_bind(msg_vm_t vm, msg_process_t process): msg_vm.c']]], ['msg_5fvm_5fdestroy',['MSG_vm_destroy',['../group__msg__VMs.html#gae493c978235ba8efeee6d8b5a5286e5b',1,'MSG_vm_destroy(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#gae493c978235ba8efeee6d8b5a5286e5b',1,'MSG_vm_destroy(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fis_5frunning',['MSG_vm_is_running',['../group__msg__VMs.html#ga6ba8320c7a90ed67d3c8e2079460b8a9',1,'MSG_vm_is_running(msg_vm_t): msg_vm.c'],['../group__msg__VMs.html#ga6ba8320c7a90ed67d3c8e2079460b8a9',1,'MSG_vm_is_running(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fis_5fsuspended',['MSG_vm_is_suspended',['../group__msg__VMs.html#gac7919295b7c197a43717e367f9c115c5',1,'MSG_vm_is_suspended(msg_vm_t): msg_vm.c'],['../group__msg__VMs.html#gac7919295b7c197a43717e367f9c115c5',1,'MSG_vm_is_suspended(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fmigrate',['MSG_vm_migrate',['../group__msg__VMs.html#ga0b701b7e5a4b0459f1b9326e188e19b0',1,'MSG_vm_migrate(msg_vm_t vm, msg_host_t destination): msg_vm.c'],['../group__msg__VMs.html#ga0b701b7e5a4b0459f1b9326e188e19b0',1,'MSG_vm_migrate(msg_vm_t vm, msg_host_t destination): msg_vm.c']]], ['msg_5fvm_5freboot',['MSG_vm_reboot',['../group__msg__VMs.html#ga6e665c9d3b9c0a6b3e9a97a419a7861f',1,'MSG_vm_reboot(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga6e665c9d3b9c0a6b3e9a97a419a7861f',1,'MSG_vm_reboot(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fresume',['MSG_vm_resume',['../group__msg__VMs.html#ga9815e54a5e6cdf849d4847803d377e19',1,'MSG_vm_resume(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga9815e54a5e6cdf849d4847803d377e19',1,'MSG_vm_resume(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fshutdown',['MSG_vm_shutdown',['../group__msg__VMs.html#ga1a40d2652506f4576408e35346cd3cff',1,'MSG_vm_shutdown(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga1a40d2652506f4576408e35346cd3cff',1,'MSG_vm_shutdown(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fstart',['MSG_vm_start',['../group__msg__VMs.html#ga407fdb335bb6adbe52eab4055ee4676b',1,'msg_vm.c']]], ['msg_5fvm_5fsuspend',['MSG_vm_suspend',['../group__msg__VMs.html#ga32243e8be24c253c0367c81d0289e057',1,'MSG_vm_suspend(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga32243e8be24c253c0367c81d0289e057',1,'MSG_vm_suspend(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5funbind',['MSG_vm_unbind',['../group__msg__VMs.html#gaf65aa7a4497fceaa50414caff2772a05',1,'MSG_vm_unbind(msg_vm_t vm, msg_process_t process): msg_vm.c'],['../group__msg__VMs.html#gaf65aa7a4497fceaa50414caff2772a05',1,'MSG_vm_unbind(msg_vm_t vm, msg_process_t process): msg_vm.c']]], ['msg_5fvms_5fas_5fdynar',['MSG_vms_as_dynar',['../group__msg__VMs.html#ga9d66095e9599545ab4cdd787a38f6b8e',1,'MSG_vms_as_dynar(void): msg_vm.c'],['../group__msg__VMs.html#ga9d66095e9599545ab4cdd787a38f6b8e',1,'MSG_vms_as_dynar(void): msg_vm.c']]], ['misc_20fifo_20functions',['Misc fifo functions',['../group__XBT__fifo__misc.html',1,'']]], ['mallocators',['Mallocators',['../group__XBT__mallocator.html',1,'']]], ['mallocator_20constructor_20and_20destructor',['Mallocator constructor and destructor',['../group__XBT__mallocator__cons.html',1,'']]], ['mallocator_20object_20handling',['Mallocator object handling',['../group__XBT__mallocator__objects.html',1,'']]], ['misc_20general_20purposes_20library_20components',['Misc general purposes library components',['../group__XBT__misc.html',1,'']]], ['malloc_20and_20friends',['Malloc and friends',['../group__XBT__syscall.html',1,'']]] ]; SimGrid-3.10/doc/html/search/pages_70.js000640 007661 000620 00000000304 12242224150 020131 0ustar00gierschand000000 000000 var searchData= [ ['platform_20description',['Platform Description',['../platform.html',1,'use']]], ['packet_20level_20simulation',['Packet level simulation',['../pls.html',1,'advanced']]] ]; SimGrid-3.10/doc/html/search/all_65.html000640 007661 000620 00000001704 12242224150 020143 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_67.js000640 007661 000620 00000000124 12242224150 020137 0ustar00gierschand000000 000000 var searchData= [ ['getting_20help',['Getting help',['../help.html',1,'use']]] ]; SimGrid-3.10/doc/html/search/groups_74.html000640 007661 000620 00000001707 12242224150 020715 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_6c.html000640 007661 000620 00000001707 12242224150 020773 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_62.js000640 007661 000620 00000000123 12242224150 020131 0ustar00gierschand000000 000000 var searchData= [ ['bindings',['Bindings',['../bindings.html',1,'advanced']]] ]; SimGrid-3.10/doc/html/search/variables_74.js000640 007661 000620 00000000223 12242224150 021006 0ustar00gierschand000000 000000 var searchData= [ ['thread_5fcounter',['thread_counter',['../structs__xbt__parmap.html#a4cb1478d076f1df7aa59518292b9300e',1,'s_xbt_parmap']]] ]; SimGrid-3.10/doc/html/search/enumvalues_61.html000640 007661 000620 00000001713 12242224150 021553 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/mag_sel.png000640 007661 000620 00000001063 12242224150 020306 0ustar00gierschand000000 000000 PNG  IHDR- pHYs   cHRMms8zʴ3Dv6*IDATx䔻"A:/xQL@7010|173sVD6@PTmPjٝu &X?9S%|~|Ʉrf!LT**PH)9Nr0`Y'CZh NS,"JQ*d2V+fɄH$B^d۶(T*4MPH*zƶm:Ha0jSS-bMiP(ka<`ˉDq']?cǘ4M1tZ>z|)tu]F do a search { this.Search(); } } this.OnSearchSelectKey = function(evt) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==40 && this.searchIndex0) // Up { this.searchIndex--; this.OnSelectItem(this.searchIndex); } else if (e.keyCode==13 || e.keyCode==27) { this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); } return false; } // --------- Actions // Closes the results window. this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. this.Search = function() { this.keyTimeout = 0; // strip leading whitespace var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); var code = searchValue.toLowerCase().charCodeAt(0); var hexCode; if (code<16) { hexCode="0"+code.toString(16); } else { hexCode=code.toString(16); } var resultsPage; var resultsPageWithSearch; var hasResultsPage; if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') { resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else // nothing available for this search term { resultsPage = this.resultsPath + '/nomatches.html'; resultsPageWithSearch = resultsPage; hasResultsPage = false; } window.frames.MSearchResults.location = resultsPageWithSearch; var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); if (domPopupSearchResultsWindow.style.display!='block') { var domSearchBox = this.DOMSearchBox(); this.DOMSearchClose().style.display = 'inline'; if (this.insideFrame) { var domPopupSearchResults = this.DOMPopupSearchResults(); domPopupSearchResultsWindow.style.position = 'relative'; domPopupSearchResultsWindow.style.display = 'block'; var width = document.body.clientWidth - 8; // the -8 is for IE :-( domPopupSearchResultsWindow.style.width = width + 'px'; domPopupSearchResults.style.width = width + 'px'; } else { var domPopupSearchResults = this.DOMPopupSearchResults(); var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; } } this.lastSearchValue = searchValue; this.lastResultsPage = resultsPage; } // -------- Activation Functions // Activates or deactivates the search panel, resetting things to // their default values if necessary. this.Activate = function(isActive) { if (isActive || // open it this.DOMPopupSearchResultsWindow().style.display == 'block' ) { this.DOMSearchBox().className = 'MSearchBoxActive'; var searchField = this.DOMSearchField(); if (searchField.value == this.searchLabel) // clear "Search" term upon entry { searchField.value = ''; this.searchActive = true; } } else if (!isActive) // directly remove the panel { this.DOMSearchBox().className = 'MSearchBoxInactive'; this.DOMSearchField().value = this.searchLabel; this.searchActive = false; this.lastSearchValue = '' this.lastResultsPage = ''; } } } // ----------------------------------------------------------------------- // The class that handles everything on the search results page. function SearchResults(name) { // The number of matches from the last run of . this.lastMatchCount = 0; this.lastKey = 0; this.repeatOn = false; // Toggles the visibility of the passed element ID. this.FindChildElement = function(id) { var parentElement = document.getElementById(id); var element = parentElement.firstChild; while (element && element!=parentElement) { if (element.nodeName == 'DIV' && element.className == 'SRChildren') { return element; } if (element.nodeName == 'DIV' && element.hasChildNodes()) { element = element.firstChild; } else if (element.nextSibling) { element = element.nextSibling; } else { do { element = element.parentNode; } while (element && element!=parentElement && !element.nextSibling); if (element && element!=parentElement) { element = element.nextSibling; } } } } this.Toggle = function(id) { var element = this.FindChildElement(id); if (element) { if (element.style.display == 'block') { element.style.display = 'none'; } else { element.style.display = 'block'; } } } // Searches for the passed string. If there is no parameter, // it takes it from the URL query. // // Always returns true, since other documents may try to call it // and that may or may not be possible. this.Search = function(search) { if (!search) // get search word from URL { search = window.location.search; search = search.substring(1); // Remove the leading '?' search = unescape(search); } search = search.replace(/^ +/, ""); // strip leading spaces search = search.replace(/ +$/, ""); // strip trailing spaces search = search.toLowerCase(); search = convertToId(search); var resultRows = document.getElementsByTagName("div"); var matches = 0; var i = 0; while (i < resultRows.length) { var row = resultRows.item(i); if (row.className == "SRResult") { var rowMatchName = row.id.toLowerCase(); rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' if (search.length<=rowMatchName.length && rowMatchName.substr(0, search.length)==search) { row.style.display = 'block'; matches++; } else { row.style.display = 'none'; } } i++; } document.getElementById("Searching").style.display='none'; if (matches == 0) // no results { document.getElementById("NoMatches").style.display='block'; } else // at least one result { document.getElementById("NoMatches").style.display='none'; } this.lastMatchCount = matches; return true; } // return the first item with index index or higher that is visible this.NavNext = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index++; } return focusItem; } this.NavPrev = function(index) { var focusItem; while (1) { var focusName = 'Item'+index; focusItem = document.getElementById(focusName); if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { break; } else if (!focusItem) // last element { break; } focusItem=null; index--; } return focusItem; } this.ProcessKeys = function(e) { if (e.type == "keydown") { this.repeatOn = false; this.lastKey = e.keyCode; } else if (e.type == "keypress") { if (!this.repeatOn) { if (this.lastKey) this.repeatOn = true; return false; // ignore first keypress after keydown } } else if (e.type == "keyup") { this.lastKey = 0; this.repeatOn = false; } return this.lastKey!=0; } this.Nav = function(evt,itemIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { var newIndex = itemIndex-1; var focusItem = this.NavPrev(newIndex); if (focusItem) { var child = this.FindChildElement(focusItem.parentNode.parentNode.id); if (child && child.style.display == 'block') // children visible { var n=0; var tmpElem; while (1) // search for last child { tmpElem = document.getElementById('Item'+newIndex+'_c'+n); if (tmpElem) { focusItem = tmpElem; } else // found it! { break; } n++; } } } if (focusItem) { focusItem.focus(); } else // return focus to search field { parent.document.getElementById("MSearchField").focus(); } } else if (this.lastKey==40) // Down { var newIndex = itemIndex+1; var focusItem; var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem && elem.style.display == 'block') // children visible { focusItem = document.getElementById('Item'+itemIndex+'_c0'); } if (!focusItem) focusItem = this.NavNext(newIndex); if (focusItem) focusItem.focus(); } else if (this.lastKey==39) // Right { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'block'; } else if (this.lastKey==37) // Left { var item = document.getElementById('Item'+itemIndex); var elem = this.FindChildElement(item.parentNode.parentNode.id); if (elem) elem.style.display = 'none'; } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } this.NavChild = function(evt,itemIndex,childIndex) { var e = (evt) ? evt : window.event; // for IE if (e.keyCode==13) return true; if (!this.ProcessKeys(e)) return false; if (this.lastKey==38) // Up { if (childIndex>0) { var newIndex = childIndex-1; document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); } else // already at first child, jump to parent { document.getElementById('Item'+itemIndex).focus(); } } else if (this.lastKey==40) // Down { var newIndex = childIndex+1; var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); if (!elem) // last child, jump to parent next parent { elem = this.NavNext(itemIndex+1); } if (elem) { elem.focus(); } } else if (this.lastKey==27) // Escape { parent.searchBox.CloseResultsWindow(); parent.document.getElementById("MSearchField").focus(); } else if (this.lastKey==13) // Enter { return true; } return false; } } function setKeyActions(elem,action) { elem.setAttribute('onkeydown',action); elem.setAttribute('onkeypress',action); elem.setAttribute('onkeyup',action); } function setClassAttr(elem,attr) { elem.setAttribute('class',attr); elem.setAttribute('className',attr); } function createResults() { var results = document.getElementById("SRResults"); for (var e=0; e
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_73.js000640 007661 000620 00000141116 12242224150 021054 0ustar00gierschand000000 000000 var searchData= [ ['sd_5fapplication_5freinit',['SD_application_reinit',['../group__SD__simulation.html#ga8c9fdcd05effacd9b20c0ea75c5c5f7e',1,'SD_application_reinit(void): sd_global.c'],['../group__SD__simulation.html#ga8c9fdcd05effacd9b20c0ea75c5c5f7e',1,'SD_application_reinit(void): sd_global.c']]], ['sd_5fconfig',['SD_config',['../group__SD__simulation.html#ga32a2bbed292f8d4ebeafc0b6debd0af3',1,'SD_config(const char *key, const char *value): sd_global.c'],['../group__SD__simulation.html#ga32a2bbed292f8d4ebeafc0b6debd0af3',1,'SD_config(const char *key, const char *value): sd_global.c']]], ['sd_5fcreate_5fenvironment',['SD_create_environment',['../group__SD__simulation.html#gac961eff01737333623e3b5343e78a269',1,'SD_create_environment(const char *platform_file): sd_global.c'],['../group__SD__simulation.html#gac961eff01737333623e3b5343e78a269',1,'SD_create_environment(const char *platform_file): sd_global.c']]], ['sd_5fdaxload',['SD_daxload',['../group__SD__simulation.html#ga1882fd299f53829a131dd01c83ed5471',1,'SD_daxload(const char *filename): sd_daxloader.c'],['../group__SD__simulation.html#ga1882fd299f53829a131dd01c83ed5471',1,'SD_daxload(const char *filename): sd_daxloader.c']]], ['sd_5fdotload',['SD_dotload',['../group__SD__simulation.html#ga35de259bc832b4926a310d0359a36dd6',1,'SD_dotload(const char *filename): sd_dotloader.c'],['../group__SD__simulation.html#ga35de259bc832b4926a310d0359a36dd6',1,'SD_dotload(const char *filename): sd_dotloader.c']]], ['sd_5fexit',['SD_exit',['../group__SD__simulation.html#gad1a92b51e423aad6d47be2b82c6536ba',1,'SD_exit(void): sd_global.c'],['../group__SD__simulation.html#gad1a92b51e423aad6d47be2b82c6536ba',1,'SD_exit(void): sd_global.c']]], ['sd_5fget_5fclock',['SD_get_clock',['../group__SD__simulation.html#gafc34707cae382f245f7a33d1eb202392',1,'SD_get_clock(void): sd_global.c'],['../group__SD__simulation.html#gafc34707cae382f245f7a33d1eb202392',1,'SD_get_clock(void): sd_global.c']]], ['sd_5finit',['SD_init',['../group__SD__simulation.html#gaa4c19ede9d99b8925e62f30c52f1e65f',1,'SD_init(int *argc, char **argv): sd_global.c'],['../group__SD__simulation.html#gaa4c19ede9d99b8925e62f30c52f1e65f',1,'SD_init(int *argc, char **argv): sd_global.c']]], ['sd_5flink_5fget_5fcurrent_5fbandwidth',['SD_link_get_current_bandwidth',['../group__SD__link__management.html#ga4bdb09a991d2366f38c303ed2e48c885',1,'SD_link_get_current_bandwidth(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#ga4bdb09a991d2366f38c303ed2e48c885',1,'SD_link_get_current_bandwidth(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5fcurrent_5flatency',['SD_link_get_current_latency',['../group__SD__link__management.html#ga61b0106214ae990e8f4c9aaecfbc0779',1,'SD_link_get_current_latency(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#ga61b0106214ae990e8f4c9aaecfbc0779',1,'SD_link_get_current_latency(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5fdata',['SD_link_get_data',['../group__SD__link__management.html#ga4f56602832da18405e8d0e2653f0744c',1,'SD_link_get_data(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#ga4f56602832da18405e8d0e2653f0744c',1,'SD_link_get_data(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5flist',['SD_link_get_list',['../group__SD__link__management.html#gae6a4a20a3269c3595a195d24f220fb40',1,'SD_link_get_list(void): sd_link.c'],['../group__SD__link__management.html#gae6a4a20a3269c3595a195d24f220fb40',1,'SD_link_get_list(void): sd_link.c']]], ['sd_5flink_5fget_5fname',['SD_link_get_name',['../group__SD__link__management.html#gace788d7f0b4b57c5af0b8a5025929780',1,'SD_link_get_name(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#gace788d7f0b4b57c5af0b8a5025929780',1,'SD_link_get_name(SD_link_t link): sd_link.c']]], ['sd_5flink_5fget_5fnumber',['SD_link_get_number',['../group__SD__link__management.html#ga8f5ff7ea86c621aa77f44e913222613d',1,'SD_link_get_number(void): sd_link.c'],['../group__SD__link__management.html#ga8f5ff7ea86c621aa77f44e913222613d',1,'SD_link_get_number(void): sd_link.c']]], ['sd_5flink_5fget_5fsharing_5fpolicy',['SD_link_get_sharing_policy',['../group__SD__link__management.html#gaab6c4e1b06d62ed57157b508561b28c8',1,'SD_link_get_sharing_policy(SD_link_t link): sd_link.c'],['../group__SD__link__management.html#gaab6c4e1b06d62ed57157b508561b28c8',1,'SD_link_get_sharing_policy(SD_link_t link): sd_link.c']]], ['sd_5flink_5fset_5fdata',['SD_link_set_data',['../group__SD__link__management.html#ga180c8056827783104c4cecce3acc9b23',1,'SD_link_set_data(SD_link_t link, void *data): sd_link.c'],['../group__SD__link__management.html#ga180c8056827783104c4cecce3acc9b23',1,'SD_link_set_data(SD_link_t link, void *data): sd_link.c']]], ['sd_5froute_5fget_5fcommunication_5ftime',['SD_route_get_communication_time',['../group__SD__workstation__management.html#ga0983ee235addaee99467ef4c4f97966b',1,'SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t dst, double communication_amount): sd_workstation.c'],['../group__SD__workstation__management.html#ga0983ee235addaee99467ef4c4f97966b',1,'SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t dst, double communication_amount): sd_workstation.c']]], ['sd_5froute_5fget_5fcurrent_5fbandwidth',['SD_route_get_current_bandwidth',['../group__SD__workstation__management.html#gad52c195122d5cd98331a3838c52d4d81',1,'SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#gad52c195122d5cd98331a3838c52d4d81',1,'SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5froute_5fget_5fcurrent_5flatency',['SD_route_get_current_latency',['../group__SD__workstation__management.html#ga224866561ec8000a495faea7c5e25b48',1,'SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#ga224866561ec8000a495faea7c5e25b48',1,'SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5froute_5fget_5flist',['SD_route_get_list',['../group__SD__workstation__management.html#gaa9522a1e095218a426cf6c70315fdc9d',1,'SD_route_get_list(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#gaa9522a1e095218a426cf6c70315fdc9d',1,'SD_route_get_list(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5froute_5fget_5fsize',['SD_route_get_size',['../group__SD__workstation__management.html#gad28c1465fa8cc17f0d73668ed8dbca4a',1,'SD_route_get_size(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c'],['../group__SD__workstation__management.html#gad28c1465fa8cc17f0d73668ed8dbca4a',1,'SD_route_get_size(SD_workstation_t src, SD_workstation_t dst): sd_workstation.c']]], ['sd_5fsimulate',['SD_simulate',['../group__SD__simulation.html#ga5a1f4e7f674374210de13181acbd98d3',1,'SD_simulate(double how_long): sd_global.c'],['../group__SD__simulation.html#ga5a1f4e7f674374210de13181acbd98d3',1,'SD_simulate(double how_long): sd_global.c']]], ['sd_5ftask_5fcreate',['SD_task_create',['../group__SD__task__management.html#ga4ac4414bf72fd959333848d88562502f',1,'SD_task_create(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#ga4ac4414bf72fd959333848d88562502f',1,'SD_task_create(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomm_5fe2e',['SD_task_create_comm_e2e',['../group__SD__task__management.html#ga5690de45db3666e42b97c171f952df15',1,'SD_task_create_comm_e2e(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#ga5690de45db3666e42b97c171f952df15',1,'SD_task_create_comm_e2e(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomm_5fpar_5fmxn_5f1d_5fblock',['SD_task_create_comm_par_mxn_1d_block',['../group__SD__task__management.html#gaaa2a2ba19ce7315069ec4642b6aa16a2',1,'SD_task_create_comm_par_mxn_1d_block(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#gaaa2a2ba19ce7315069ec4642b6aa16a2',1,'SD_task_create_comm_par_mxn_1d_block(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomp_5fpar_5famdahl',['SD_task_create_comp_par_amdahl',['../group__SD__task__management.html#ga39c7eb7e2db73d0c022c78bf0d4a64a2',1,'SD_task_create_comp_par_amdahl(const char *name, void *data, double amount, double alpha): sd_task.c'],['../group__SD__task__management.html#ga39c7eb7e2db73d0c022c78bf0d4a64a2',1,'SD_task_create_comp_par_amdahl(const char *name, void *data, double amount, double alpha): sd_task.c']]], ['sd_5ftask_5fcreate_5fcomp_5fseq',['SD_task_create_comp_seq',['../group__SD__task__management.html#ga3f6480d75795a3309c0c026e540d86e0',1,'SD_task_create_comp_seq(const char *name, void *data, double amount): sd_task.c'],['../group__SD__task__management.html#ga3f6480d75795a3309c0c026e540d86e0',1,'SD_task_create_comp_seq(const char *name, void *data, double amount): sd_task.c']]], ['sd_5ftask_5fdependency_5fadd',['SD_task_dependency_add',['../group__SD__task__dependency__management.html#gaeaa883b0561beefb647c5c4280299138',1,'SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#gaeaa883b0561beefb647c5c4280299138',1,'SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fexists',['SD_task_dependency_exists',['../group__SD__task__dependency__management.html#gad492251b41fcd05684d88359c26656e1',1,'SD_task_dependency_exists(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#gad492251b41fcd05684d88359c26656e1',1,'SD_task_dependency_exists(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fget_5fdata',['SD_task_dependency_get_data',['../group__SD__task__dependency__management.html#gaa1bdcdfefbf9b19e03cf90376d6fbbb0',1,'SD_task_dependency_get_data(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#gaa1bdcdfefbf9b19e03cf90376d6fbbb0',1,'SD_task_dependency_get_data(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fget_5fname',['SD_task_dependency_get_name',['../group__SD__task__dependency__management.html#ga5e94f0a64b796de2fb3e7164bd4c7173',1,'SD_task_dependency_get_name(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#ga5e94f0a64b796de2fb3e7164bd4c7173',1,'SD_task_dependency_get_name(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdependency_5fremove',['SD_task_dependency_remove',['../group__SD__task__dependency__management.html#ga3a22709b38b7a4eb86317e334a8110e0',1,'SD_task_dependency_remove(SD_task_t src, SD_task_t dst): sd_task.c'],['../group__SD__task__dependency__management.html#ga3a22709b38b7a4eb86317e334a8110e0',1,'SD_task_dependency_remove(SD_task_t src, SD_task_t dst): sd_task.c']]], ['sd_5ftask_5fdestroy',['SD_task_destroy',['../group__SD__task__management.html#ga0cffb2af680086f53fb1599db6ae3c42',1,'SD_task_destroy(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga0cffb2af680086f53fb1599db6ae3c42',1,'SD_task_destroy(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fdistribute_5fcomp_5famdahl',['SD_task_distribute_comp_amdahl',['../group__SD__task__management.html#ga6ab4cb771f03089d33aca732f7f097b8',1,'SD_task_distribute_comp_amdahl(SD_task_t task, int ws_count): sd_task.c'],['../group__SD__task__management.html#ga6ab4cb771f03089d33aca732f7f097b8',1,'SD_task_distribute_comp_amdahl(SD_task_t task, int ws_count): sd_task.c']]], ['sd_5ftask_5fdotty',['SD_task_dotty',['../group__SD__task__management.html#gab29f36e954266588b46c3f2e76e4afe3',1,'SD_task_dotty(SD_task_t task, void *out_FILE): sd_task.c'],['../group__SD__task__management.html#gab29f36e954266588b46c3f2e76e4afe3',1,'SD_task_dotty(SD_task_t task, void *out): sd_task.c']]], ['sd_5ftask_5fdump',['SD_task_dump',['../group__SD__task__management.html#ga9ea8bd4d42155b26f17a875ce24a9ca0',1,'SD_task_dump(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga9ea8bd4d42155b26f17a875ce24a9ca0',1,'SD_task_dump(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5falpha',['SD_task_get_alpha',['../group__SD__task__management.html#ga43e829e6e9e93b39b765ce6e592229a4',1,'SD_task_get_alpha(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga43e829e6e9e93b39b765ce6e592229a4',1,'SD_task_get_alpha(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5famount',['SD_task_get_amount',['../group__SD__task__management.html#gaff407e0ad880fe3e34e0905bbbc1568a',1,'SD_task_get_amount(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#gaff407e0ad880fe3e34e0905bbbc1568a',1,'SD_task_get_amount(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fchildren',['SD_task_get_children',['../group__SD__task__management.html#gabcb438f55dd8fb525a6753576c8c4069',1,'SD_task_get_children(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#gabcb438f55dd8fb525a6753576c8c4069',1,'SD_task_get_children(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fdata',['SD_task_get_data',['../group__SD__task__management.html#ga766539121eadc77886003186e1b45e83',1,'SD_task_get_data(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga766539121eadc77886003186e1b45e83',1,'SD_task_get_data(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fexecution_5ftime',['SD_task_get_execution_time',['../group__SD__task__management.html#ga6c7f9b54e7f061555f07c6ade5fc1e9f',1,'SD_task_get_execution_time(SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount): sd_task.c'],['../group__SD__task__management.html#ga6c7f9b54e7f061555f07c6ade5fc1e9f',1,'SD_task_get_execution_time(SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount): sd_task.c']]], ['sd_5ftask_5fget_5ffinish_5ftime',['SD_task_get_finish_time',['../group__SD__task__management.html#ga9ed01cda917f36b4da719f0594fbe9ee',1,'SD_task_get_finish_time(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga9ed01cda917f36b4da719f0594fbe9ee',1,'SD_task_get_finish_time(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fname',['SD_task_get_name',['../group__SD__task__management.html#gaf1f33ccbe8a0568836387a46d444473d',1,'SD_task_get_name(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#gaf1f33ccbe8a0568836387a46d444473d',1,'SD_task_get_name(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fparents',['SD_task_get_parents',['../group__SD__task__management.html#ga8e6a82c3100081945a6afc650975dee3',1,'SD_task_get_parents(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga8e6a82c3100081945a6afc650975dee3',1,'SD_task_get_parents(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fremaining_5famount',['SD_task_get_remaining_amount',['../group__SD__task__management.html#ga4f8d27d92e9fc813c44b5a64adb24410',1,'SD_task_get_remaining_amount(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga4f8d27d92e9fc813c44b5a64adb24410',1,'SD_task_get_remaining_amount(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fstart_5ftime',['SD_task_get_start_time',['../group__SD__task__management.html#ga1cc17b4c7857521fc4b679bff63446b6',1,'SD_task_get_start_time(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga1cc17b4c7857521fc4b679bff63446b6',1,'SD_task_get_start_time(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fstate',['SD_task_get_state',['../group__SD__task__management.html#ga2b320214a7e5a1c74cf50b236453b288',1,'SD_task_get_state(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga2b320214a7e5a1c74cf50b236453b288',1,'SD_task_get_state(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fworkstation_5fcount',['SD_task_get_workstation_count',['../group__SD__task__management.html#ga4092ccda7d10951ffaf47b65a2da4ae3',1,'SD_task_get_workstation_count(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga4092ccda7d10951ffaf47b65a2da4ae3',1,'SD_task_get_workstation_count(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fget_5fworkstation_5flist',['SD_task_get_workstation_list',['../group__SD__task__management.html#ga773124574884bcff102efa3adc9b6120',1,'SD_task_get_workstation_list(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga773124574884bcff102efa3adc9b6120',1,'SD_task_get_workstation_list(SD_task_t task): sd_task.c']]], ['sd_5ftask_5fschedule',['SD_task_schedule',['../group__SD__task__management.html#ga30a5dbfc2983c1700375075f16c22364',1,'SD_task_schedule(SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount, double rate): sd_task.c'],['../group__SD__task__management.html#ga30a5dbfc2983c1700375075f16c22364',1,'SD_task_schedule(SD_task_t task, int workstation_count, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount, double rate): sd_task.c']]], ['sd_5ftask_5fschedulel',['SD_task_schedulel',['../group__SD__task__management.html#ga35bc9c3b6f25462bacb8f467605f87bb',1,'SD_task_schedulel(SD_task_t task, int count,...): sd_task.c'],['../group__SD__task__management.html#ga35bc9c3b6f25462bacb8f467605f87bb',1,'SD_task_schedulel(SD_task_t task, int count,...): sd_task.c']]], ['sd_5ftask_5fschedulev',['SD_task_schedulev',['../group__SD__task__management.html#gab0ec206f43cda6a8cbdb4aaa8d1a9d02',1,'SD_task_schedulev(SD_task_t task, int count, const SD_workstation_t *list): sd_task.c'],['../group__SD__task__management.html#gab0ec206f43cda6a8cbdb4aaa8d1a9d02',1,'SD_task_schedulev(SD_task_t task, int count, const SD_workstation_t *list): sd_task.c']]], ['sd_5ftask_5fset_5famount',['SD_task_set_amount',['../group__SD__task__management.html#gaebb308fda516592dcee717e657f39966',1,'SD_task_set_amount(SD_task_t task, double amount): sd_task.c'],['../group__SD__task__management.html#gaebb308fda516592dcee717e657f39966',1,'SD_task_set_amount(SD_task_t task, double amount): sd_task.c']]], ['sd_5ftask_5fset_5fdata',['SD_task_set_data',['../group__SD__task__management.html#ga8f5b24ab48696ea78998b42ace35900a',1,'SD_task_set_data(SD_task_t task, void *data): sd_task.c'],['../group__SD__task__management.html#ga8f5b24ab48696ea78998b42ace35900a',1,'SD_task_set_data(SD_task_t task, void *data): sd_task.c']]], ['sd_5ftask_5fset_5fname',['SD_task_set_name',['../group__SD__task__management.html#gaea6138e1ab09935b8a575e1ccbea045c',1,'SD_task_set_name(SD_task_t task, const char *name): sd_task.c'],['../group__SD__task__management.html#gaea6138e1ab09935b8a575e1ccbea045c',1,'SD_task_set_name(SD_task_t task, const char *name): sd_task.c']]], ['sd_5ftask_5fset_5frate',['SD_task_set_rate',['../group__SD__task__management.html#ga5763ec9afe02f381bd1ae9b0be8cb64a',1,'SD_task_set_rate(SD_task_t task, double rate): sd_task.c'],['../group__SD__task__management.html#ga5763ec9afe02f381bd1ae9b0be8cb64a',1,'SD_task_set_rate(SD_task_t task, double rate): sd_task.c']]], ['sd_5ftask_5funschedule',['SD_task_unschedule',['../group__SD__task__management.html#ga5f1619e6ed05db349d89ea12944f64ba',1,'SD_task_unschedule(SD_task_t task): sd_task.c'],['../group__SD__task__management.html#ga5f1619e6ed05db349d89ea12944f64ba',1,'SD_task_unschedule(SD_task_t task): sd_task.c']]], ['sd_5ftask_5funwatch',['SD_task_unwatch',['../group__SD__task__management.html#ga5cc2370b3d1c43b298a0d5512d8d9312',1,'SD_task_unwatch(SD_task_t task, e_SD_task_state_t state): sd_task.c'],['../group__SD__task__management.html#ga5cc2370b3d1c43b298a0d5512d8d9312',1,'SD_task_unwatch(SD_task_t task, e_SD_task_state_t state): sd_task.c']]], ['sd_5ftask_5fwatch',['SD_task_watch',['../group__SD__task__management.html#ga7853f1943b540ff9d3d7078ed46206cb',1,'SD_task_watch(SD_task_t task, e_SD_task_state_t state): sd_task.c'],['../group__SD__task__management.html#ga7853f1943b540ff9d3d7078ed46206cb',1,'SD_task_watch(SD_task_t task, e_SD_task_state_t state): sd_task.c']]], ['sd_5fworkstation_5fdump',['SD_workstation_dump',['../group__SD__workstation__management.html#ga71b72259a6d31b4445700eb1d21a087a',1,'SD_workstation_dump(SD_workstation_t ws): sd_workstation.c'],['../group__SD__workstation__management.html#ga71b72259a6d31b4445700eb1d21a087a',1,'SD_workstation_dump(SD_workstation_t ws): sd_workstation.c']]], ['sd_5fworkstation_5fget_5faccess_5fmode',['SD_workstation_get_access_mode',['../group__SD__workstation__management.html#ga68c974556d55dc2ae760fde9408a32e6',1,'SD_workstation_get_access_mode(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga68c974556d55dc2ae760fde9408a32e6',1,'SD_workstation_get_access_mode(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5favailable_5fpower',['SD_workstation_get_available_power',['../group__SD__workstation__management.html#gadfd3673bc4bc5011babfd0247d45ef28',1,'SD_workstation_get_available_power(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#gadfd3673bc4bc5011babfd0247d45ef28',1,'SD_workstation_get_available_power(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fby_5fname',['SD_workstation_get_by_name',['../group__SD__workstation__management.html#ga1c912ef7ecda05d307afefad0fc759b6',1,'SD_workstation_get_by_name(const char *name): sd_workstation.c'],['../group__SD__workstation__management.html#ga1c912ef7ecda05d307afefad0fc759b6',1,'SD_workstation_get_by_name(const char *name): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fcomputation_5ftime',['SD_workstation_get_computation_time',['../group__SD__workstation__management.html#ga9caaba45417c65427ee74da841dd14e2',1,'SD_workstation_get_computation_time(SD_workstation_t workstation, double computation_amount): sd_workstation.c'],['../group__SD__workstation__management.html#ga9caaba45417c65427ee74da841dd14e2',1,'SD_workstation_get_computation_time(SD_workstation_t workstation, double computation_amount): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fcurrent_5ftask',['SD_workstation_get_current_task',['../group__SD__workstation__management.html#ga0e4d5fa0f15423b8c1e55abfecd25164',1,'SD_workstation_get_current_task(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga0e4d5fa0f15423b8c1e55abfecd25164',1,'SD_workstation_get_current_task(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fdata',['SD_workstation_get_data',['../group__SD__workstation__management.html#gaed29af2c807f986fccf6d3ad4bf15156',1,'SD_workstation_get_data(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#gaed29af2c807f986fccf6d3ad4bf15156',1,'SD_workstation_get_data(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5flist',['SD_workstation_get_list',['../group__SD__workstation__management.html#ga2849ed01ae4dc580923fbd6782d9ccf4',1,'SD_workstation_get_list(void): sd_workstation.c'],['../group__SD__workstation__management.html#ga2849ed01ae4dc580923fbd6782d9ccf4',1,'SD_workstation_get_list(void): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fname',['SD_workstation_get_name',['../group__SD__workstation__management.html#ga229affb29b5472c8f62f054b0def9547',1,'SD_workstation_get_name(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga229affb29b5472c8f62f054b0def9547',1,'SD_workstation_get_name(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fnumber',['SD_workstation_get_number',['../group__SD__workstation__management.html#gacdc811bb1046b88da230d51c68533ba2',1,'SD_workstation_get_number(void): sd_workstation.c'],['../group__SD__workstation__management.html#gacdc811bb1046b88da230d51c68533ba2',1,'SD_workstation_get_number(void): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fpower',['SD_workstation_get_power',['../group__SD__workstation__management.html#ga324f3ae1cea2ae9e52bfb70448361f26',1,'SD_workstation_get_power(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga324f3ae1cea2ae9e52bfb70448361f26',1,'SD_workstation_get_power(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fproperties',['SD_workstation_get_properties',['../group__SD__workstation__management.html#ga24a4f207e56f070fa83c56d8bb0c35c1',1,'SD_workstation_get_properties(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga24a4f207e56f070fa83c56d8bb0c35c1',1,'SD_workstation_get_properties(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fproperty_5fvalue',['SD_workstation_get_property_value',['../group__SD__workstation__management.html#ga6977e577293bd72f9e191dd2613b650f',1,'SD_workstation_get_property_value(SD_workstation_t workstation, const char *name): sd_workstation.c'],['../group__SD__workstation__management.html#ga6977e577293bd72f9e191dd2613b650f',1,'SD_workstation_get_property_value(SD_workstation_t ws, const char *name): sd_workstation.c']]], ['sd_5fworkstation_5fget_5fstorage_5flist',['SD_workstation_get_storage_list',['../group__SD__workstation__management.html#ga5bb5798685fdcd82966f1238c620e2a0',1,'SD_workstation_get_storage_list(SD_workstation_t workstation): sd_workstation.c'],['../group__SD__workstation__management.html#ga5bb5798685fdcd82966f1238c620e2a0',1,'SD_workstation_get_storage_list(SD_workstation_t workstation): sd_workstation.c']]], ['sd_5fworkstation_5fset_5faccess_5fmode',['SD_workstation_set_access_mode',['../group__SD__workstation__management.html#gac00d8cc9c460d532aedfb9ba8fc49c66',1,'SD_workstation_set_access_mode(SD_workstation_t workstation, e_SD_workstation_access_mode_t access_mode): sd_workstation.c'],['../group__SD__workstation__management.html#gac00d8cc9c460d532aedfb9ba8fc49c66',1,'SD_workstation_set_access_mode(SD_workstation_t workstation, e_SD_workstation_access_mode_t access_mode): sd_workstation.c']]], ['sd_5fworkstation_5fset_5fdata',['SD_workstation_set_data',['../group__SD__workstation__management.html#ga63c39639777faf77a8e6c0bd41694fa1',1,'SD_workstation_set_data(SD_workstation_t workstation, void *data): sd_workstation.c'],['../group__SD__workstation__management.html#ga63c39639777faf77a8e6c0bd41694fa1',1,'SD_workstation_set_data(SD_workstation_t workstation, void *data): sd_workstation.c']]], ['simcall_5fasr_5fget_5fproperties',['simcall_asr_get_properties',['../group__simix__host__management.html#ga1a3288b39aba9f321caca13166518cc0',1,'simcall_asr_get_properties(const char *name): smx_user.c'],['../group__simix__host__management.html#ga1a3288b39aba9f321caca13166518cc0',1,'simcall_asr_get_properties(const char *name): smx_user.c']]], ['simcall_5ffile_5fget_5fdata',['simcall_file_get_data',['../group__simix__file__management.html#ga1d4bafa33327c5ce72d7db4a3f1b78d0',1,'simcall_file_get_data(smx_file_t fd): smx_user.c'],['../group__simix__file__management.html#ga1d4bafa33327c5ce72d7db4a3f1b78d0',1,'simcall_file_get_data(smx_file_t fd): smx_user.c']]], ['simcall_5ffile_5fset_5fdata',['simcall_file_set_data',['../group__simix__file__management.html#ga6a768555110db361a4e78fe04719c408',1,'simcall_file_set_data(smx_file_t fd, void *data): smx_user.c'],['../group__simix__file__management.html#ga6a768555110db361a4e78fe04719c408',1,'simcall_file_set_data(smx_file_t fd, void *data): smx_user.c']]], ['simcall_5fhost_5fexecute',['simcall_host_execute',['../group__simix__host__management.html#ga5257c159ed0002779a0d88a1e067bd20',1,'simcall_host_execute(const char *name, smx_host_t host, double computation_amount, double priority): smx_user.c'],['../group__simix__host__management.html#ga5257c159ed0002779a0d88a1e067bd20',1,'simcall_host_execute(const char *name, smx_host_t host, double computation_amount, double priority): smx_user.c']]], ['simcall_5fhost_5fexecution_5fcancel',['simcall_host_execution_cancel',['../group__simix__host__management.html#gab177e0a327bde207864adbb4abf90e57',1,'simcall_host_execution_cancel(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#gab177e0a327bde207864adbb4abf90e57',1,'simcall_host_execution_cancel(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fdestroy',['simcall_host_execution_destroy',['../group__simix__host__management.html#gaf31f9cd17e99f88b734b37a91f25d476',1,'simcall_host_execution_destroy(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#gaf31f9cd17e99f88b734b37a91f25d476',1,'simcall_host_execution_destroy(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fget_5fremains',['simcall_host_execution_get_remains',['../group__simix__host__management.html#ga23839f5acd57bb8d12620d0e1bad56c1',1,'simcall_host_execution_get_remains(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#ga23839f5acd57bb8d12620d0e1bad56c1',1,'simcall_host_execution_get_remains(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fget_5fstate',['simcall_host_execution_get_state',['../group__simix__host__management.html#ga66026abb4f24bd3a528a9bcc41200c4f',1,'simcall_host_execution_get_state(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#ga66026abb4f24bd3a528a9bcc41200c4f',1,'simcall_host_execution_get_state(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fexecution_5fset_5fpriority',['simcall_host_execution_set_priority',['../group__simix__host__management.html#ga3df7d10c87185d6c03c90cfa3b62cc43',1,'simcall_host_execution_set_priority(smx_action_t execution, double priority): smx_user.c'],['../group__simix__host__management.html#ga3df7d10c87185d6c03c90cfa3b62cc43',1,'simcall_host_execution_set_priority(smx_action_t execution, double priority): smx_user.c']]], ['simcall_5fhost_5fexecution_5fwait',['simcall_host_execution_wait',['../group__simix__host__management.html#ga8760a71314f39b57eafca4782251369f',1,'simcall_host_execution_wait(smx_action_t execution): smx_user.c'],['../group__simix__host__management.html#ga8760a71314f39b57eafca4782251369f',1,'simcall_host_execution_wait(smx_action_t execution): smx_user.c']]], ['simcall_5fhost_5fget_5favailable_5fspeed',['simcall_host_get_available_speed',['../group__simix__host__management.html#gaa93a5302ec2a513b76498b91428fefe2',1,'simcall_host_get_available_speed(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaa93a5302ec2a513b76498b91428fefe2',1,'simcall_host_get_available_speed(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fby_5fname',['simcall_host_get_by_name',['../group__simix__host__management.html#ga22bd604a7c15c1980e0ed09281141472',1,'simcall_host_get_by_name(const char *name): smx_user.c'],['../group__simix__host__management.html#ga22bd604a7c15c1980e0ed09281141472',1,'simcall_host_get_by_name(const char *name): smx_user.c']]], ['simcall_5fhost_5fget_5fconsumed_5fenergy',['simcall_host_get_consumed_energy',['../group__simix__host__management.html#ga15cc5be1060eae3638ac2c00ec5364ef',1,'simcall_host_get_consumed_energy(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga15cc5be1060eae3638ac2c00ec5364ef',1,'simcall_host_get_consumed_energy(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fcore',['simcall_host_get_core',['../group__simix__host__management.html#gada381d983887aefa0ecfa92395aead7b',1,'simcall_host_get_core(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gada381d983887aefa0ecfa92395aead7b',1,'simcall_host_get_core(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fcurrent_5fpower_5fpeak',['simcall_host_get_current_power_peak',['../group__simix__host__management.html#ga51aacd521d7590712def7fcc86367491',1,'simcall_host_get_current_power_peak(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga51aacd521d7590712def7fcc86367491',1,'simcall_host_get_current_power_peak(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fdata',['simcall_host_get_data',['../group__simix__host__management.html#ga6acb64cfef3e7284442f6e20bee9317d',1,'simcall_host_get_data(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga6acb64cfef3e7284442f6e20bee9317d',1,'simcall_host_get_data(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fname',['simcall_host_get_name',['../group__simix__host__management.html#gac627f752c965060cb592ebda7ff5e8ce',1,'simcall_host_get_name(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gac627f752c965060cb592ebda7ff5e8ce',1,'simcall_host_get_name(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fnb_5fpstates',['simcall_host_get_nb_pstates',['../group__simix__host__management.html#gaaf0a2fb59b6754184673bcc775401da1',1,'simcall_host_get_nb_pstates(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaaf0a2fb59b6754184673bcc775401da1',1,'simcall_host_get_nb_pstates(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fpower_5fpeak_5fat',['simcall_host_get_power_peak_at',['../group__simix__host__management.html#ga0656f3e6508c217106c8d760afdcb11d',1,'simcall_host_get_power_peak_at(smx_host_t host, int pstate_index): smx_user.c'],['../group__simix__host__management.html#ga0656f3e6508c217106c8d760afdcb11d',1,'simcall_host_get_power_peak_at(smx_host_t host, int pstate_index): smx_user.c']]], ['simcall_5fhost_5fget_5fprocess_5flist',['simcall_host_get_process_list',['../group__simix__host__management.html#gaefe3f6813e0791704516253577457058',1,'simcall_host_get_process_list(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaefe3f6813e0791704516253577457058',1,'simcall_host_get_process_list(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fproperties',['simcall_host_get_properties',['../group__simix__host__management.html#ga03e97c1154f4925d1fb378d68dd5a888',1,'simcall_host_get_properties(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga03e97c1154f4925d1fb378d68dd5a888',1,'simcall_host_get_properties(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fspeed',['simcall_host_get_speed',['../group__simix__host__management.html#gaa45133ec4a6376f0de1efb4e08746f2c',1,'simcall_host_get_speed(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#gaa45133ec4a6376f0de1efb4e08746f2c',1,'simcall_host_get_speed(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fget_5fstate',['simcall_host_get_state',['../group__simix__host__management.html#ga2683ae7336c84958f9fba0c2a8e502fd',1,'simcall_host_get_state(smx_host_t host): smx_user.c'],['../group__simix__host__management.html#ga2683ae7336c84958f9fba0c2a8e502fd',1,'simcall_host_get_state(smx_host_t host): smx_user.c']]], ['simcall_5fhost_5fparallel_5fexecute',['simcall_host_parallel_execute',['../group__simix__host__management.html#ga57ef6dbb3d85979561de1881d3cba1bb',1,'simcall_host_parallel_execute(const char *name, int host_nb, smx_host_t *host_list, double *computation_amount, double *communication_amount, double amount, double rate): smx_user.c'],['../group__simix__host__management.html#ga57ef6dbb3d85979561de1881d3cba1bb',1,'simcall_host_parallel_execute(const char *name, int host_nb, smx_host_t *host_list, double *computation_amount, double *communication_amount, double amount, double rate): smx_user.c']]], ['simcall_5fhost_5fset_5fdata',['simcall_host_set_data',['../group__simix__host__management.html#ga8201c0350e48d696ef915e4fe668014b',1,'simcall_host_set_data(smx_host_t host, void *data): smx_user.c'],['../group__simix__host__management.html#ga8201c0350e48d696ef915e4fe668014b',1,'simcall_host_set_data(smx_host_t host, void *data): smx_user.c']]], ['simcall_5fhost_5fset_5fpower_5fpeak_5fat',['simcall_host_set_power_peak_at',['../group__simix__host__management.html#ga0b9cc33e2ba9c59627be871c46be9892',1,'simcall_host_set_power_peak_at(smx_host_t host, int pstate_index): smx_user.c'],['../group__simix__host__management.html#ga0b9cc33e2ba9c59627be871c46be9892',1,'simcall_host_set_power_peak_at(smx_host_t host, int pstate_index): smx_user.c']]], ['simcall_5fprocess_5fauto_5frestart_5fset',['simcall_process_auto_restart_set',['../group__simix__process__management.html#ga433713db62cee73ad3006d2d3eabc702',1,'simcall_process_auto_restart_set(smx_process_t process, int auto_restart): smx_user.c'],['../group__simix__process__management.html#ga433713db62cee73ad3006d2d3eabc702',1,'simcall_process_auto_restart_set(smx_process_t process, int auto_restart): smx_user.c']]], ['simcall_5fprocess_5fchange_5fhost',['simcall_process_change_host',['../group__simix__process__management.html#gab10c8ebfd02973f5556bada2bb0a2915',1,'simcall_process_change_host(smx_process_t process, smx_host_t dest): smx_user.c'],['../group__simix__process__management.html#gab10c8ebfd02973f5556bada2bb0a2915',1,'simcall_process_change_host(smx_process_t process, smx_host_t dest): smx_user.c']]], ['simcall_5fprocess_5fcleanup',['simcall_process_cleanup',['../group__simix__process__management.html#gabbc2bb1e3346602a7e7ce8af2f9963b0',1,'simcall_process_cleanup(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gabbc2bb1e3346602a7e7ce8af2f9963b0',1,'simcall_process_cleanup(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fcount',['simcall_process_count',['../group__simix__process__management.html#gae7ec2e782070e190356478e8c88a0cc5',1,'simcall_process_count(void): smx_user.c'],['../group__simix__process__management.html#gae7ec2e782070e190356478e8c88a0cc5',1,'simcall_process_count(void): smx_user.c']]], ['simcall_5fprocess_5fcreate',['simcall_process_create',['../group__simix__process__management.html#gaf19a836d7ea387f1526fc48231726dc9',1,'simcall_process_create(smx_process_t *process, const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart): smx_user.c'],['../group__simix__process__management.html#gaf19a836d7ea387f1526fc48231726dc9',1,'simcall_process_create(smx_process_t *process, const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart): smx_user.c']]], ['simcall_5fprocess_5fget_5fdata',['simcall_process_get_data',['../group__simix__process__management.html#ga3ef2cbb5679f4f103f1d56b0e4e74f6b',1,'simcall_process_get_data(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga3ef2cbb5679f4f103f1d56b0e4e74f6b',1,'simcall_process_get_data(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fhost',['simcall_process_get_host',['../group__simix__process__management.html#gada27408ad1425a1a1f94e8d9dbab31ee',1,'simcall_process_get_host(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gada27408ad1425a1a1f94e8d9dbab31ee',1,'simcall_process_get_host(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fname',['simcall_process_get_name',['../group__simix__process__management.html#ga86836c7ddd8864c4662a384014959a76',1,'simcall_process_get_name(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga86836c7ddd8864c4662a384014959a76',1,'simcall_process_get_name(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fpid',['simcall_process_get_PID',['../group__simix__process__management.html#gab71a0ff395a1ba9075f4ca76da63b5c3',1,'simcall_process_get_PID(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gab71a0ff395a1ba9075f4ca76da63b5c3',1,'simcall_process_get_PID(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fppid',['simcall_process_get_PPID',['../group__simix__process__management.html#ga84d861a0d2125159a5f55a767f710ad6',1,'simcall_process_get_PPID(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga84d861a0d2125159a5f55a767f710ad6',1,'simcall_process_get_PPID(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fget_5fproperties',['simcall_process_get_properties',['../group__simix__process__management.html#gad0cdca75425dbbb863121e44b1462612',1,'simcall_process_get_properties(smx_process_t host): smx_user.c'],['../group__simix__process__management.html#gad0cdca75425dbbb863121e44b1462612',1,'simcall_process_get_properties(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fis_5fsuspended',['simcall_process_is_suspended',['../group__simix__process__management.html#ga5ba7792648b97d73a68a0472f756bf17',1,'simcall_process_is_suspended(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga5ba7792648b97d73a68a0472f756bf17',1,'simcall_process_is_suspended(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fkill',['simcall_process_kill',['../group__simix__process__management.html#ga2fd1c21b67cdf31506f5cd2a94d91313',1,'simcall_process_kill(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga2fd1c21b67cdf31506f5cd2a94d91313',1,'simcall_process_kill(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fkillall',['simcall_process_killall',['../group__simix__process__management.html#ga2a8d8ea34037935fcba5456884a0e886',1,'simcall_process_killall(int reset_pid): smx_user.c'],['../group__simix__process__management.html#ga2a8d8ea34037935fcba5456884a0e886',1,'simcall_process_killall(int reset_pid): smx_user.c']]], ['simcall_5fprocess_5fon_5fexit',['simcall_process_on_exit',['../group__simix__process__management.html#ga3e5f4a672ee15995a110ef2bff287b00',1,'simcall_process_on_exit(smx_process_t process, int_f_pvoid_t fun, void *data): smx_user.c'],['../group__simix__process__management.html#ga3e5f4a672ee15995a110ef2bff287b00',1,'simcall_process_on_exit(smx_process_t process, int_f_pvoid_t fun, void *data): smx_user.c']]], ['simcall_5fprocess_5frestart',['simcall_process_restart',['../group__simix__process__management.html#gaf4fd76982573c1f58d3eed172ba2d64c',1,'simcall_process_restart(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#gaf4fd76982573c1f58d3eed172ba2d64c',1,'simcall_process_restart(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fresume',['simcall_process_resume',['../group__simix__process__management.html#ga2e9bb138e7ba7f7e588cb662be3b1757',1,'simcall_process_resume(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga2e9bb138e7ba7f7e588cb662be3b1757',1,'simcall_process_resume(smx_process_t process): smx_user.c']]], ['simcall_5fprocess_5fset_5fdata',['simcall_process_set_data',['../group__simix__process__management.html#ga18c58debc643922bf68b5d8de563e4c5',1,'simcall_process_set_data(smx_process_t process, void *data): smx_user.c'],['../group__simix__process__management.html#ga18c58debc643922bf68b5d8de563e4c5',1,'simcall_process_set_data(smx_process_t process, void *data): smx_user.c']]], ['simcall_5fprocess_5fset_5fkill_5ftime',['simcall_process_set_kill_time',['../group__simix__process__management.html#gac55e617472e645926ca1cdcea8533508',1,'simcall_process_set_kill_time(smx_process_t process, double kill_time): smx_user.c'],['../group__simix__process__management.html#gac55e617472e645926ca1cdcea8533508',1,'simcall_process_set_kill_time(smx_process_t process, double kill_time): smx_user.c']]], ['simcall_5fprocess_5fsleep',['simcall_process_sleep',['../group__simix__process__management.html#ga7e5cce2d1b8238c587b9e3be60c26b26',1,'simcall_process_sleep(double duration): smx_user.c'],['../group__simix__process__management.html#ga7e5cce2d1b8238c587b9e3be60c26b26',1,'simcall_process_sleep(double duration): smx_user.c']]], ['simcall_5fprocess_5fsuspend',['simcall_process_suspend',['../group__simix__process__management.html#ga9fdb4fa34e26498e410db9794f0fe1a7',1,'simcall_process_suspend(smx_process_t process): smx_user.c'],['../group__simix__process__management.html#ga9fdb4fa34e26498e410db9794f0fe1a7',1,'simcall_process_suspend(smx_process_t process): smx_user.c']]], ['simcall_5frdv_5fcomm_5fcount_5fby_5fhost',['simcall_rdv_comm_count_by_host',['../group__simix__rdv__management.html#ga3be3b0b7647b63da38063e9df674f29e',1,'simcall_rdv_comm_count_by_host(smx_rdv_t rdv, smx_host_t host): smx_user.c'],['../group__simix__rdv__management.html#ga3be3b0b7647b63da38063e9df674f29e',1,'simcall_rdv_comm_count_by_host(smx_rdv_t rdv, smx_host_t host): smx_user.c']]], ['simcall_5frdv_5fcreate',['simcall_rdv_create',['../group__simix__rdv__management.html#ga76202b8bd49aa89a5427267cb4528636',1,'simcall_rdv_create(const char *name): smx_user.c'],['../group__simix__rdv__management.html#ga76202b8bd49aa89a5427267cb4528636',1,'simcall_rdv_create(const char *name): smx_user.c']]], ['simcall_5frdv_5fdestroy',['simcall_rdv_destroy',['../group__simix__rdv__management.html#ga9e244ad91daf47c0e9b45b004dd6e3d6',1,'simcall_rdv_destroy(smx_rdv_t rvp): smx_user.c'],['../group__simix__rdv__management.html#ga9e244ad91daf47c0e9b45b004dd6e3d6',1,'simcall_rdv_destroy(smx_rdv_t rdv): smx_user.c']]], ['simcall_5frdv_5fget_5fby_5fname',['simcall_rdv_get_by_name',['../group__simix__rdv__management.html#ga417b16e55a7b5fad902bde9b9f263ead',1,'simcall_rdv_get_by_name(const char *name): smx_user.c'],['../group__simix__rdv__management.html#ga417b16e55a7b5fad902bde9b9f263ead',1,'simcall_rdv_get_by_name(const char *name): smx_user.c']]], ['simcall_5frdv_5fget_5fhead',['simcall_rdv_get_head',['../group__simix__rdv__management.html#ga79a92d3223cd9d41ba694044d3f308ac',1,'simcall_rdv_get_head(smx_rdv_t rdv): smx_user.c'],['../group__simix__rdv__management.html#ga79a92d3223cd9d41ba694044d3f308ac',1,'simcall_rdv_get_head(smx_rdv_t rdv): smx_user.c']]], ['simix_5fclean',['SIMIX_clean',['../group__SIMIX__API.html#gaf764507fe3726a890a8657d5db2eaffc',1,'smx_global.c']]], ['simix_5fget_5fclock',['SIMIX_get_clock',['../group__SIMIX__API.html#ga8298a6bf3cdb667f2aca7b1cfd9b2eb8',1,'SIMIX_get_clock(void): smx_global.c'],['../group__SIMIX__API.html#ga8298a6bf3cdb667f2aca7b1cfd9b2eb8',1,'SIMIX_get_clock(void): smx_global.c']]], ['simix_5fglobal_5finit',['SIMIX_global_init',['../group__SIMIX__API.html#ga61a5c57ccf08e71bac21571b94ec1a38',1,'SIMIX_global_init(int *argc, char **argv): smx_global.c'],['../group__SIMIX__API.html#ga61a5c57ccf08e71bac21571b94ec1a38',1,'SIMIX_global_init(int *argc, char **argv): smx_global.c']]], ['simix_5frun',['SIMIX_run',['../group__SIMIX__API.html#gaebdd718ef8f26134756d5fa6de1ff854',1,'SIMIX_run(void): smx_global.c'],['../group__SIMIX__API.html#gaebdd718ef8f26134756d5fa6de1ff854',1,'SIMIX_run(void): smx_global.c']]], ['surf_5fexit',['surf_exit',['../group__SURF__simulation.html#ga1179497a5f822209f22b5735e0fb1104',1,'surf_exit(void): surf.c'],['../group__SURF__simulation.html#ga1179497a5f822209f22b5735e0fb1104',1,'surf_exit(void): surf.c']]], ['surf_5fget_5fclock',['surf_get_clock',['../group__SURF__simulation.html#gafa85b9ba47f47d599353b872d2cb93d3',1,'surf_get_clock(void): surf.c'],['../group__SURF__simulation.html#gafa85b9ba47f47d599353b872d2cb93d3',1,'surf_get_clock(void): surf.c']]], ['surf_5finit',['surf_init',['../group__SURF__simulation.html#ga403868865b66138187c3db30521e1bbe',1,'surf_init(int *argc, char **argv): surf.c'],['../group__SURF__simulation.html#ga403868865b66138187c3db30521e1bbe',1,'surf_init(int *argc, char **argv): surf.c']]], ['surf_5fpresolve',['surf_presolve',['../group__SURF__simulation.html#ga9b7e7ceba73ff5ce637ecb58f1e2edc9',1,'surf_presolve(void): surf.c'],['../group__SURF__simulation.html#ga9b7e7ceba73ff5ce637ecb58f1e2edc9',1,'surf_presolve(void): surf.c']]], ['surf_5fsolve',['surf_solve',['../group__SURF__simulation.html#gaa723e3f55eb26355d00de5bf07c6d373',1,'surf_solve(double max_date): surf.c'],['../group__SURF__simulation.html#gaa723e3f55eb26355d00de5bf07c6d373',1,'surf_solve(double max_date): surf.c']]] ]; SimGrid-3.10/doc/html/search/functions_6d.html000640 007661 000620 00000001712 12242224150 021461 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_6d.html000640 007661 000620 00000001706 12242224150 020553 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_63.js000640 007661 000620 00000000171 12242224150 020135 0ustar00gierschand000000 000000 var searchData= [ ['contributing_20to_20simgrid',['Contributing to SimGrid',['../contributing.html',1,'advanced']]] ]; SimGrid-3.10/doc/html/search/groups_77.js000640 007661 000620 00000000155 12242224150 020364 0ustar00gierschand000000 000000 var searchData= [ ['workstations',['Workstations',['../group__SD__workstation__management.html',1,'']]] ]; SimGrid-3.10/doc/html/search/pages_73.html000640 007661 000620 00000001706 12242224150 020473 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_6e.js000640 007661 000620 00000000476 12242224150 021314 0ustar00gierschand000000 000000 var searchData= [ ['network_5ferror',['network_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854afa15abb01e5f46363458529588f0d871',1,'ex.h']]], ['not_5ffound_5ferror',['not_found_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a2a966e9e887d3ab79628272781200439',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/close.png000640 007661 000620 00000000421 12242224150 020001 0ustar00gierschand000000 000000 PNG  IHDR w&IDATuQF@  C5Cg3(w{#*&9}Ͳ,ض y""q<ϑi8K߾6 Ce(;//BVx</ڶEUUte,"gL}ߣk2VSF1 s1 DZwA$IYQ[ ouk*AiWY(G/0{A,)eln]? yEIENDB`SimGrid-3.10/doc/html/search/variables_70.html000640 007661 000620 00000001712 12242224150 021336 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/classes_78.html000640 007661 000620 00000001710 12242224150 021031 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_63.html000640 007661 000620 00000001707 12242224150 020713 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_67.js000640 007661 000620 00000003730 12242224150 021016 0ustar00gierschand000000 000000 var searchData= [ ['get_5favailable_5fspeed',['get_available_speed',['../structsurf__workstation__model__extension__public.html#ae6ed8c858e3d713fc7f1ba8f04bd1008',1,'surf_workstation_model_extension_public']]], ['get_5fconsumed_5fenergy',['get_consumed_energy',['../structsurf__workstation__model__extension__public.html#aab3ed59f084f1e1b1f50585df5fe7b6d',1,'surf_workstation_model_extension_public']]], ['get_5fcurrent_5fpower_5fpeak',['get_current_power_peak',['../structsurf__workstation__model__extension__public.html#a1d53057051b5a38f76ada79e77f0a7a8',1,'surf_workstation_model_extension_public']]], ['get_5flink_5fbandwidth',['get_link_bandwidth',['../structsurf__workstation__model__extension__public.html#a564334f9eb1e783fa1f561bdf3a5aae0',1,'surf_workstation_model_extension_public']]], ['get_5flink_5flatency',['get_link_latency',['../structsurf__workstation__model__extension__public.html#a660cd47d3c8ef9bdd3dcb1bfd81f8e57',1,'surf_workstation_model_extension_public']]], ['get_5fnb_5fpstates',['get_nb_pstates',['../structsurf__workstation__model__extension__public.html#abfe09c2f5cb3774077c701c9c6cb62e6',1,'surf_workstation_model_extension_public']]], ['get_5fpower_5fpeak_5fat',['get_power_peak_at',['../structsurf__workstation__model__extension__public.html#aad3d20d4803ed5677f542b6f44162924',1,'surf_workstation_model_extension_public']]], ['get_5fremains',['get_remains',['../structsurf__model.html#adf9644f3b9b404f36973a25bfee0e761',1,'surf_model']]], ['get_5froute',['get_route',['../structsurf__workstation__model__extension__public.html#a84cdf3b9de17ceef028da789296fd1ae',1,'surf_workstation_model_extension_public']]], ['get_5fspeed',['get_speed',['../structsurf__workstation__model__extension__public.html#a4360bd7e469801b2adc37c56edccfeca',1,'surf_workstation_model_extension_public']]], ['get_5fstate',['get_state',['../structsurf__workstation__model__extension__public.html#a13bf38fd96228f099d5edbe6f55dafff',1,'surf_workstation_model_extension_public']]] ]; SimGrid-3.10/doc/html/search/groups_77.html000640 007661 000620 00000001707 12242224150 020720 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_66.html000640 007661 000620 00000001712 12242224150 021343 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_67.html000640 007661 000620 00000001704 12242224150 020145 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_6d.js000640 007661 000620 00000152652 12242224150 021143 0ustar00gierschand000000 000000 var searchData= [ ['msg_5faction_5ftrace_5frun',['MSG_action_trace_run',['../group__msg__trace__driven.html#gaff3ae0c6d1fc712f2162cc199086731f',1,'MSG_action_trace_run(char *path): msg_actions.c'],['../group__msg__trace__driven.html#gaff3ae0c6d1fc712f2162cc199086731f',1,'MSG_action_trace_run(char *path): msg_actions.c']]], ['msg_5fcomm_5fdestroy',['MSG_comm_destroy',['../group__msg__task__usage.html#gaa1b107438e7a295058e098a8c2c1bc4a',1,'MSG_comm_destroy(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#gaa1b107438e7a295058e098a8c2c1bc4a',1,'MSG_comm_destroy(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5fget_5fstatus',['MSG_comm_get_status',['../group__msg__task__usage.html#ga6a872b2d96bdd22d28b851f1072792f5',1,'MSG_comm_get_status(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#ga6a872b2d96bdd22d28b851f1072792f5',1,'MSG_comm_get_status(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5fget_5ftask',['MSG_comm_get_task',['../group__msg__task__usage.html#gaf4fbe7c481859674d29475a0085d7333',1,'MSG_comm_get_task(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#gaf4fbe7c481859674d29475a0085d7333',1,'MSG_comm_get_task(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5ftest',['MSG_comm_test',['../group__msg__task__usage.html#gafd22dad001b95804f5e93aa146c84fd3',1,'MSG_comm_test(msg_comm_t comm): msg_gos.c'],['../group__msg__task__usage.html#gafd22dad001b95804f5e93aa146c84fd3',1,'MSG_comm_test(msg_comm_t comm): msg_gos.c']]], ['msg_5fcomm_5ftestany',['MSG_comm_testany',['../group__msg__task__usage.html#gacd787fdda2fd925a1e4e0114cb4eb82e',1,'MSG_comm_testany(xbt_dynar_t comms): msg_gos.c'],['../group__msg__task__usage.html#gacd787fdda2fd925a1e4e0114cb4eb82e',1,'MSG_comm_testany(xbt_dynar_t comms): msg_gos.c']]], ['msg_5fcomm_5fwait',['MSG_comm_wait',['../group__msg__task__usage.html#ga2ae956f1e7a1014652d85b5f8db42aa3',1,'MSG_comm_wait(msg_comm_t comm, double timeout): msg_gos.c'],['../group__msg__task__usage.html#ga2ae956f1e7a1014652d85b5f8db42aa3',1,'MSG_comm_wait(msg_comm_t comm, double timeout): msg_gos.c']]], ['msg_5fcomm_5fwaitall',['MSG_comm_waitall',['../group__msg__task__usage.html#ga01ce9097c976b96664e6785f6ab5d4b6',1,'MSG_comm_waitall(msg_comm_t *comm, int nb_elem, double timeout): msg_gos.c'],['../group__msg__task__usage.html#ga01ce9097c976b96664e6785f6ab5d4b6',1,'MSG_comm_waitall(msg_comm_t *comm, int nb_elem, double timeout): msg_gos.c']]], ['msg_5fcomm_5fwaitany',['MSG_comm_waitany',['../group__msg__task__usage.html#ga62772e7b378bc485c114231af4b8f596',1,'MSG_comm_waitany(xbt_dynar_t comms): msg_gos.c'],['../group__msg__task__usage.html#ga62772e7b378bc485c114231af4b8f596',1,'MSG_comm_waitany(xbt_dynar_t comms): msg_gos.c']]], ['msg_5fconfig',['MSG_config',['../group__msg__simulation.html#ga35037b57281f860b92ed7704d37de78f',1,'MSG_config(const char *key, const char *value): msg_global.c'],['../group__msg__simulation.html#ga35037b57281f860b92ed7704d37de78f',1,'MSG_config(const char *key, const char *value): msg_global.c']]], ['msg_5fcreate_5fenvironment',['MSG_create_environment',['../group__msg__simulation.html#gae08e089d52a2928680e0957e7152d79d',1,'MSG_create_environment(const char *file): msg_environment.c'],['../group__msg__simulation.html#gae08e089d52a2928680e0957e7152d79d',1,'MSG_create_environment(const char *file): msg_environment.c']]], ['msg_5ffile_5fclose',['MSG_file_close',['../group__msg__file__management.html#ga8087da2271bceabefcc6d6636decb750',1,'MSG_file_close(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga8087da2271bceabefcc6d6636decb750',1,'MSG_file_close(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fdump',['MSG_file_dump',['../group__msg__file__management.html#ga026a21b86128403f92c3f4730c68d153',1,'MSG_file_dump(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga026a21b86128403f92c3f4730c68d153',1,'MSG_file_dump(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fget_5fdata',['MSG_file_get_data',['../group__msg__file__management.html#ga460af619ebd92cebe5d5b812f91eb73c',1,'MSG_file_get_data(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga460af619ebd92cebe5d5b812f91eb73c',1,'MSG_file_get_data(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fget_5fsize',['MSG_file_get_size',['../group__msg__file__management.html#gabb010052e11b12c6b6d8169cdff66c82',1,'MSG_file_get_size(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#gabb010052e11b12c6b6d8169cdff66c82',1,'MSG_file_get_size(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fls',['MSG_file_ls',['../group__msg__file__management.html#gad55ef25a4f6e484f4874d9cdc306c869',1,'MSG_file_ls(const char *mount, const char *path): msg_io.c'],['../group__msg__file__management.html#gad55ef25a4f6e484f4874d9cdc306c869',1,'MSG_file_ls(const char *mount, const char *path): msg_io.c']]], ['msg_5ffile_5fopen',['MSG_file_open',['../group__msg__file__management.html#gae05ac2e6382893dc94ed610408b19c95',1,'MSG_file_open(const char *mount, const char *path, void *data): msg_io.c'],['../group__msg__file__management.html#gae05ac2e6382893dc94ed610408b19c95',1,'MSG_file_open(const char *mount, const char *fullname, void *data): msg_io.c']]], ['msg_5ffile_5fread',['MSG_file_read',['../group__msg__file__management.html#ga3c6c221ab91ae0213ad967204c882882',1,'MSG_file_read(msg_file_t fd, sg_storage_size_t size): msg_io.c'],['../group__msg__file__management.html#ga3c6c221ab91ae0213ad967204c882882',1,'MSG_file_read(msg_file_t fd, sg_storage_size_t size): msg_io.c']]], ['msg_5ffile_5fset_5fdata',['MSG_file_set_data',['../group__msg__file__management.html#ga902c9e5bdda07488bdbb310303c40551',1,'MSG_file_set_data(msg_file_t fd, void *data): msg_io.c'],['../group__msg__file__management.html#ga902c9e5bdda07488bdbb310303c40551',1,'MSG_file_set_data(msg_file_t fd, void *data): msg_io.c']]], ['msg_5ffile_5funlink',['MSG_file_unlink',['../group__msg__file__management.html#ga886ea23939db224929e122d363ed91cb',1,'MSG_file_unlink(msg_file_t fd): msg_io.c'],['../group__msg__file__management.html#ga886ea23939db224929e122d363ed91cb',1,'MSG_file_unlink(msg_file_t fd): msg_io.c']]], ['msg_5ffile_5fwrite',['MSG_file_write',['../group__msg__file__management.html#ga3b1606c3e01721f3eab49f236741f208',1,'MSG_file_write(msg_file_t fd, sg_storage_size_t size): msg_io.c'],['../group__msg__file__management.html#ga3b1606c3e01721f3eab49f236741f208',1,'MSG_file_write(msg_file_t fd, sg_storage_size_t size): msg_io.c']]], ['msg_5ffunction_5fregister',['MSG_function_register',['../group__msg__simulation.html#ga21e94a4e7b26dea140b0c71a2a4f4352',1,'MSG_function_register(const char *name, xbt_main_func_t code): msg_deployment.c'],['../group__msg__simulation.html#ga21e94a4e7b26dea140b0c71a2a4f4352',1,'MSG_function_register(const char *name, xbt_main_func_t code): msg_deployment.c']]], ['msg_5ffunction_5fregister_5fdefault',['MSG_function_register_default',['../group__msg__simulation.html#ga698d00aec4b3d7f8cf90c4d1a4595c9c',1,'MSG_function_register_default(xbt_main_func_t code): msg_deployment.c'],['../group__msg__simulation.html#ga698d00aec4b3d7f8cf90c4d1a4595c9c',1,'MSG_function_register_default(xbt_main_func_t code): msg_deployment.c']]], ['msg_5fget_5fclock',['MSG_get_clock',['../group__msg__simulation.html#gacfeb7fa281abd0ff74b0591937cbb574',1,'MSG_get_clock(void): msg_global.c'],['../group__msg__simulation.html#gacfeb7fa281abd0ff74b0591937cbb574',1,'MSG_get_clock(void): msg_global.c']]], ['msg_5fget_5ferrno',['MSG_get_errno',['../group__msg__deprecated__functions.html#ga4abdb2c7da1b9d89187ce51211db3f25',1,'MSG_get_errno(void): msg_gos.c'],['../group__msg__deprecated__functions.html#ga4abdb2c7da1b9d89187ce51211db3f25',1,'MSG_get_errno(void): msg_gos.c']]], ['msg_5fget_5fhost_5fconsumed_5fenergy',['MSG_get_host_consumed_energy',['../group__m__host__management.html#ga906e9852651be55265a7c8489470e1e9',1,'MSG_get_host_consumed_energy(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga906e9852651be55265a7c8489470e1e9',1,'MSG_get_host_consumed_energy(msg_host_t host): msg_host.c']]], ['msg_5fget_5fhost_5fcurrent_5fpower_5fpeak',['MSG_get_host_current_power_peak',['../group__m__host__management.html#ga0b6fdd80f2f66ac2fec711c712981ec5',1,'MSG_get_host_current_power_peak(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga0b6fdd80f2f66ac2fec711c712981ec5',1,'MSG_get_host_current_power_peak(msg_host_t host): msg_host.c']]], ['msg_5fget_5fhost_5fmsgload',['MSG_get_host_msgload',['../group__m__host__management.html#ga94b03ec6fe7c2bbf3c6c7bef2f89ee0b',1,'MSG_get_host_msgload(msg_host_t host): msg_host.c'],['../group__m__host__management.html#ga94b03ec6fe7c2bbf3c6c7bef2f89ee0b',1,'MSG_get_host_msgload(msg_host_t h): msg_host.c']]], ['msg_5fget_5fhost_5fnb_5fpstates',['MSG_get_host_nb_pstates',['../group__m__host__management.html#ga921573751f861dc32ded07521b63eae0',1,'MSG_get_host_nb_pstates(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga921573751f861dc32ded07521b63eae0',1,'MSG_get_host_nb_pstates(msg_host_t host): msg_host.c']]], ['msg_5fget_5fhost_5fnumber',['MSG_get_host_number',['../group__m__host__management.html#gaafceb2773bb9e39878592ff9a9a81a01',1,'MSG_get_host_number(void): msg_host.c'],['../group__m__host__management.html#gaafceb2773bb9e39878592ff9a9a81a01',1,'MSG_get_host_number(void): msg_host.c']]], ['msg_5fget_5fhost_5fpower_5fpeak_5fat',['MSG_get_host_power_peak_at',['../group__m__host__management.html#gaadeccc6816ff0e7809fb090207fa2504',1,'MSG_get_host_power_peak_at(msg_host_t h, int pstate_index): msg_host.c'],['../group__m__host__management.html#gaadeccc6816ff0e7809fb090207fa2504',1,'MSG_get_host_power_peak_at(msg_host_t host, int pstate_index): msg_host.c']]], ['msg_5fget_5fhost_5fspeed',['MSG_get_host_speed',['../group__m__host__management.html#ga6e910e3a884ebbe0b8ccae3277619374',1,'MSG_get_host_speed(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga6e910e3a884ebbe0b8ccae3277619374',1,'MSG_get_host_speed(msg_host_t h): msg_host.c']]], ['msg_5fget_5fregistered_5ffunction',['MSG_get_registered_function',['../group__msg__simulation.html#ga61b2e271c59ff50d38de7a0f9858b4b1',1,'MSG_get_registered_function(const char *name): msg_deployment.c'],['../group__msg__simulation.html#ga61b2e271c59ff50d38de7a0f9858b4b1',1,'MSG_get_registered_function(const char *name): msg_deployment.c']]], ['msg_5fgpu_5ftask_5fcreate',['MSG_gpu_task_create',['../group__m__task__management.html#ga4ed297ea1a968b31be47d45f5f908580',1,'MSG_gpu_task_create(const char *name, double compute_duration, double dispatch_latency, double collect_latency): msg_task.c'],['../group__m__task__management.html#ga4ed297ea1a968b31be47d45f5f908580',1,'MSG_gpu_task_create(const char *name, double compute_duration, double dispatch_latency, double collect_latency): msg_task.c']]], ['msg_5fhost_5fget_5fcore_5fnumber',['MSG_host_get_core_number',['../group__m__host__management.html#gab0df78011e11a95b3318120aa950a32f',1,'MSG_host_get_core_number(msg_host_t h): msg_host.c'],['../group__m__host__management.html#gab0df78011e11a95b3318120aa950a32f',1,'MSG_host_get_core_number(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fdata',['MSG_host_get_data',['../group__m__host__management.html#ga074e447602d8c0eab3f442c78a1dfe5f',1,'MSG_host_get_data(msg_host_t host): msg_host.c'],['../group__m__host__management.html#ga074e447602d8c0eab3f442c78a1dfe5f',1,'MSG_host_get_data(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fname',['MSG_host_get_name',['../group__m__host__management.html#gad4daf43406f4dce8caae5310cdf40bde',1,'MSG_host_get_name(msg_host_t host): msg_host.c'],['../group__m__host__management.html#gad4daf43406f4dce8caae5310cdf40bde',1,'MSG_host_get_name(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fprocess_5flist',['MSG_host_get_process_list',['../group__m__host__management.html#ga266e69ef1f9145caea0d507b84dd8044',1,'MSG_host_get_process_list(msg_host_t h): msg_host.c'],['../group__m__host__management.html#ga266e69ef1f9145caea0d507b84dd8044',1,'MSG_host_get_process_list(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fproperties',['MSG_host_get_properties',['../group__m__host__management.html#gac5d6359399bb8c8daba83cf62f47785f',1,'MSG_host_get_properties(msg_host_t host): msg_host.c'],['../group__m__host__management.html#gac5d6359399bb8c8daba83cf62f47785f',1,'MSG_host_get_properties(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fget_5fproperty_5fvalue',['MSG_host_get_property_value',['../group__m__host__management.html#gadcefcdecf27f1dfb19a5c2ac5a775402',1,'MSG_host_get_property_value(msg_host_t host, const char *name): msg_host.c'],['../group__m__host__management.html#gadcefcdecf27f1dfb19a5c2ac5a775402',1,'MSG_host_get_property_value(msg_host_t host, const char *name): msg_host.c']]], ['msg_5fhost_5fget_5fstorage_5flist',['MSG_host_get_storage_list',['../group__m__host__management.html#ga8398f7a284fd227c078e0d019819436b',1,'MSG_host_get_storage_list(msg_host_t host): msg_host.c'],['../group__m__host__management.html#ga8398f7a284fd227c078e0d019819436b',1,'MSG_host_get_storage_list(msg_host_t host): msg_host.c']]], ['msg_5fhost_5fself',['MSG_host_self',['../group__m__host__management.html#ga8552d95b844f896978eca735cbd73e9f',1,'MSG_host_self(void): msg_host.c'],['../group__m__host__management.html#ga8552d95b844f896978eca735cbd73e9f',1,'MSG_host_self(void): msg_host.c']]], ['msg_5fhost_5fset_5fdata',['MSG_host_set_data',['../group__m__host__management.html#gab52e164f5e7710facf114234152cfe85',1,'MSG_host_set_data(msg_host_t host, void *data): msg_host.c'],['../group__m__host__management.html#gab52e164f5e7710facf114234152cfe85',1,'MSG_host_set_data(msg_host_t host, void *data): msg_host.c']]], ['msg_5fhost_5fset_5fproperty_5fvalue',['MSG_host_set_property_value',['../group__m__host__management.html#ga1b84e13e966d6ec0a2c013144d33f194',1,'MSG_host_set_property_value(msg_host_t host, const char *name, char *value, void_f_pvoid_t free_ctn): msg_host.c'],['../group__m__host__management.html#ga1b84e13e966d6ec0a2c013144d33f194',1,'MSG_host_set_property_value(msg_host_t host, const char *name, char *value, void_f_pvoid_t free_ctn): msg_host.c']]], ['msg_5fhosts_5fas_5fdynar',['MSG_hosts_as_dynar',['../group__m__host__management.html#gaa886b8367e635efe11211b2aca5a1d43',1,'MSG_hosts_as_dynar(void): msg_host.c'],['../group__m__host__management.html#gaa886b8367e635efe11211b2aca5a1d43',1,'MSG_hosts_as_dynar(void): msg_host.c']]], ['msg_5finit_5fnocheck',['MSG_init_nocheck',['../group__msg__simulation.html#ga0dbc6fabf0391c4f193b33befeb8a22e',1,'MSG_init_nocheck(int *argc, char **argv): msg_global.c'],['../group__msg__simulation.html#ga0dbc6fabf0391c4f193b33befeb8a22e',1,'MSG_init_nocheck(int *argc, char **argv): msg_global.c']]], ['msg_5flaunch_5fapplication',['MSG_launch_application',['../group__msg__simulation.html#ga012d470de7974da7262d0020e00117e9',1,'MSG_launch_application(const char *file): msg_deployment.c'],['../group__msg__simulation.html#ga012d470de7974da7262d0020e00117e9',1,'MSG_launch_application(const char *file): msg_deployment.c']]], ['msg_5fmailbox_5fget_5ftask_5fext',['MSG_mailbox_get_task_ext',['../group__msg__mailbox__management.html#ga0ccdeb3f9337c9fa505ed39c74bd27a1',1,'MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga0ccdeb3f9337c9fa505ed39c74bd27a1',1,'MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout): msg_mailbox.c']]], ['msg_5fmailbox_5fget_5ftask_5fext_5fbounded',['MSG_mailbox_get_task_ext_bounded',['../group__msg__mailbox__management.html#ga073a924d91ab515e507e01399dbdd0dc',1,'MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout, double rate): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga073a924d91ab515e507e01399dbdd0dc',1,'MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout, double rate): msg_mailbox.c']]], ['msg_5fmailbox_5fset_5fasync',['MSG_mailbox_set_async',['../group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8',1,'MSG_mailbox_set_async(const char *alias): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8',1,'MSG_mailbox_set_async(const char *alias): msg_mailbox.c'],['../group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8',1,'MSG_mailbox_set_async(const char *alias): msg_mailbox.c']]], ['msg_5fmain',['MSG_main',['../group__msg__simulation.html#ga638072e92edcf9c5aed498daefed010c',1,'MSG_main(void): msg_global.c'],['../group__msg__simulation.html#ga638072e92edcf9c5aed498daefed010c',1,'MSG_main(void): msg_global.c']]], ['msg_5fparallel_5ftask_5fcreate',['MSG_parallel_task_create',['../group__m__task__management.html#ga54412e440ff859933bbbcb0204aa5a75',1,'MSG_parallel_task_create(const char *name, int host_nb, const msg_host_t *host_list, double *computation_amount, double *communication_amount, void *data): msg_task.c'],['../group__m__task__management.html#ga54412e440ff859933bbbcb0204aa5a75',1,'MSG_parallel_task_create(const char *name, int host_nb, const msg_host_t *host_list, double *computation_amount, double *communication_amount, void *data): msg_task.c']]], ['msg_5fparallel_5ftask_5fexecute',['MSG_parallel_task_execute',['../group__msg__task__usage.html#ga97bd13baa799b73b12599b3d6f7b849f',1,'MSG_parallel_task_execute(msg_task_t task): msg_gos.c'],['../group__msg__task__usage.html#ga97bd13baa799b73b12599b3d6f7b849f',1,'MSG_parallel_task_execute(msg_task_t task): msg_gos.c']]], ['msg_5fprocess_5fauto_5frestart_5fset',['MSG_process_auto_restart_set',['../group__m__process__management.html#gaa8489360976ff79e94e3db2254e5b7db',1,'MSG_process_auto_restart_set(msg_process_t process, int auto_restart): msg_process.c'],['../group__m__process__management.html#gaa8489360976ff79e94e3db2254e5b7db',1,'MSG_process_auto_restart_set(msg_process_t process, int auto_restart): msg_process.c']]], ['msg_5fprocess_5fcreate',['MSG_process_create',['../group__m__process__management.html#ga943d27b38754b2af9f78e80cc29db306',1,'MSG_process_create(const char *name, xbt_main_func_t code, void *data, msg_host_t host): msg_process.c'],['../group__m__process__management.html#ga943d27b38754b2af9f78e80cc29db306',1,'MSG_process_create(const char *name, xbt_main_func_t code, void *data, msg_host_t host): msg_process.c']]], ['msg_5fprocess_5fcreate_5fwith_5farguments',['MSG_process_create_with_arguments',['../group__m__process__management.html#ga1540ef18107c4d2387a937017dcf97c5',1,'MSG_process_create_with_arguments(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv): msg_process.c'],['../group__m__process__management.html#ga1540ef18107c4d2387a937017dcf97c5',1,'MSG_process_create_with_arguments(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv): msg_process.c']]], ['msg_5fprocess_5fcreate_5fwith_5fenvironment',['MSG_process_create_with_environment',['../group__m__process__management.html#ga640b4cc9200796bc211e6d8b794ba922',1,'MSG_process_create_with_environment(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv, xbt_dict_t properties): msg_process.c'],['../group__m__process__management.html#ga640b4cc9200796bc211e6d8b794ba922',1,'MSG_process_create_with_environment(const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv, xbt_dict_t properties): msg_process.c']]], ['msg_5fprocess_5ffrom_5fpid',['MSG_process_from_PID',['../group__m__process__management.html#ga842d26b5c9352aea228378d8ef12209b',1,'MSG_process_from_PID(int PID): msg_process.c'],['../group__m__process__management.html#ga842d26b5c9352aea228378d8ef12209b',1,'MSG_process_from_PID(int PID): msg_process.c']]], ['msg_5fprocess_5fget_5fdata',['MSG_process_get_data',['../group__m__process__management.html#ga2a510fa3957f963a04eaf6b483bfc6a9',1,'MSG_process_get_data(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga2a510fa3957f963a04eaf6b483bfc6a9',1,'MSG_process_get_data(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fhost',['MSG_process_get_host',['../group__m__process__management.html#ga7b74e6c2c40a8365b4bed0e37c798ea5',1,'MSG_process_get_host(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga7b74e6c2c40a8365b4bed0e37c798ea5',1,'MSG_process_get_host(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fname',['MSG_process_get_name',['../group__m__process__management.html#gaf22fa3dcf713f37e292397eea9744e7a',1,'MSG_process_get_name(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gaf22fa3dcf713f37e292397eea9744e7a',1,'MSG_process_get_name(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fpid',['MSG_process_get_PID',['../group__m__process__management.html#ga180e1dbb474bda1958a409825e2928cb',1,'MSG_process_get_PID(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga180e1dbb474bda1958a409825e2928cb',1,'MSG_process_get_PID(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fppid',['MSG_process_get_PPID',['../group__m__process__management.html#ga9f28a934b5e2e220093131c7c93d63c4',1,'MSG_process_get_PPID(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga9f28a934b5e2e220093131c7c93d63c4',1,'MSG_process_get_PPID(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fproperties',['MSG_process_get_properties',['../group__m__process__management.html#gad7570aff7510cbed3fc1dc3b97d0231b',1,'MSG_process_get_properties(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gad7570aff7510cbed3fc1dc3b97d0231b',1,'MSG_process_get_properties(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fget_5fproperty_5fvalue',['MSG_process_get_property_value',['../group__m__process__management.html#ga7894a7c080a4821b49b17d0b6abd46ae',1,'MSG_process_get_property_value(msg_process_t process, const char *name): msg_process.c'],['../group__m__process__management.html#ga7894a7c080a4821b49b17d0b6abd46ae',1,'MSG_process_get_property_value(msg_process_t process, const char *name): msg_process.c']]], ['msg_5fprocess_5fis_5fsuspended',['MSG_process_is_suspended',['../group__m__process__management.html#ga4fd646e5d31bdecfc5e93405a2c32d56',1,'MSG_process_is_suspended(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga4fd646e5d31bdecfc5e93405a2c32d56',1,'MSG_process_is_suspended(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fkill',['MSG_process_kill',['../group__m__process__management.html#gab7ed321f5bf4776d42e1d91158d67b8d',1,'MSG_process_kill(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gab7ed321f5bf4776d42e1d91158d67b8d',1,'MSG_process_kill(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fkillall',['MSG_process_killall',['../group__msg__simulation.html#ga0dedd7962cd7d916406ef45c471f6134',1,'MSG_process_killall(int reset_PIDs): msg_global.c'],['../group__msg__simulation.html#ga0dedd7962cd7d916406ef45c471f6134',1,'MSG_process_killall(int reset_PIDs): msg_global.c']]], ['msg_5fprocess_5fmigrate',['MSG_process_migrate',['../group__m__process__management.html#ga6651c72dff79c7f1aa6eff05db5b3063',1,'MSG_process_migrate(msg_process_t process, msg_host_t host): msg_process.c'],['../group__m__process__management.html#ga6651c72dff79c7f1aa6eff05db5b3063',1,'MSG_process_migrate(msg_process_t process, msg_host_t host): msg_process.c']]], ['msg_5fprocess_5fon_5fexit',['MSG_process_on_exit',['../group__m__process__management.html#ga42cde2901797dfce3db7d13e0bcc02d5',1,'MSG_process_on_exit(int_f_pvoid_t fun, void *data): msg_process.c'],['../group__m__process__management.html#ga42cde2901797dfce3db7d13e0bcc02d5',1,'MSG_process_on_exit(int_f_pvoid_t fun, void *data): msg_process.c']]], ['msg_5fprocess_5fresume',['MSG_process_resume',['../group__m__process__management.html#ga9f25a30269f39c7683d18f9d4e1fd331',1,'MSG_process_resume(msg_process_t process): msg_process.c'],['../group__m__process__management.html#ga9f25a30269f39c7683d18f9d4e1fd331',1,'MSG_process_resume(msg_process_t process): msg_process.c']]], ['msg_5fprocess_5fself',['MSG_process_self',['../group__m__process__management.html#gaf76911391b5116a7d1775e74185e64d5',1,'MSG_process_self(void): msg_process.c'],['../group__m__process__management.html#gaf76911391b5116a7d1775e74185e64d5',1,'MSG_process_self(void): msg_process.c']]], ['msg_5fprocess_5fself_5fpid',['MSG_process_self_PID',['../group__m__process__management.html#ga2eea811c91c7e85a21160b53d65ec79c',1,'MSG_process_self_PID(void): msg_process.c'],['../group__m__process__management.html#ga2eea811c91c7e85a21160b53d65ec79c',1,'MSG_process_self_PID(void): msg_process.c']]], ['msg_5fprocess_5fself_5fppid',['MSG_process_self_PPID',['../group__m__process__management.html#ga0b6f46d91ad8f9e6862e26d8a89d2047',1,'MSG_process_self_PPID(void): msg_process.c'],['../group__m__process__management.html#ga0b6f46d91ad8f9e6862e26d8a89d2047',1,'MSG_process_self_PPID(void): msg_process.c']]], ['msg_5fprocess_5fset_5fdata',['MSG_process_set_data',['../group__m__process__management.html#gad1ad359bc57b8a7008435ee29e1da681',1,'MSG_process_set_data(msg_process_t process, void *data): msg_process.c'],['../group__m__process__management.html#gad1ad359bc57b8a7008435ee29e1da681',1,'MSG_process_set_data(msg_process_t process, void *data): msg_process.c']]], ['msg_5fprocess_5fset_5fdata_5fcleanup',['MSG_process_set_data_cleanup',['../group__m__process__management.html#ga2c75b91ef5b61cad66a7fa3a72d122d0',1,'MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup): msg_process.c'],['../group__m__process__management.html#ga2c75b91ef5b61cad66a7fa3a72d122d0',1,'MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup): msg_process.c']]], ['msg_5fprocess_5fset_5fkill_5ftime',['MSG_process_set_kill_time',['../group__m__process__management.html#ga090d763945c2286f7227f1fe069efb79',1,'MSG_process_set_kill_time(msg_process_t process, double kill_time): msg_process.c'],['../group__m__process__management.html#ga090d763945c2286f7227f1fe069efb79',1,'MSG_process_set_kill_time(msg_process_t process, double kill_time): msg_process.c']]], ['msg_5fprocess_5fsleep',['MSG_process_sleep',['../group__msg__task__usage.html#gab7c18061b167e38f28886512ea73be6b',1,'MSG_process_sleep(double nb_sec): msg_gos.c'],['../group__msg__task__usage.html#gab7c18061b167e38f28886512ea73be6b',1,'MSG_process_sleep(double nb_sec): msg_gos.c']]], ['msg_5fprocess_5fsuspend',['MSG_process_suspend',['../group__m__process__management.html#gac00bbc4ebc824d14a3f6719de8190618',1,'MSG_process_suspend(msg_process_t process): msg_process.c'],['../group__m__process__management.html#gac00bbc4ebc824d14a3f6719de8190618',1,'MSG_process_suspend(msg_process_t process): msg_process.c']]], ['msg_5fsem_5facquire',['MSG_sem_acquire',['../group__msg__synchro.html#ga6baf039cbe49f8d83b8d5423f463f4bc',1,'MSG_sem_acquire(msg_sem_t sem): msg_synchro.c'],['../group__msg__synchro.html#ga6baf039cbe49f8d83b8d5423f463f4bc',1,'MSG_sem_acquire(msg_sem_t sem): msg_synchro.c']]], ['msg_5fsem_5facquire_5ftimeout',['MSG_sem_acquire_timeout',['../group__msg__synchro.html#gad080078a175bc7f88618970b07dd445b',1,'MSG_sem_acquire_timeout(msg_sem_t sem, double timeout): msg_synchro.c'],['../group__msg__synchro.html#gad080078a175bc7f88618970b07dd445b',1,'MSG_sem_acquire_timeout(msg_sem_t sem, double timeout): msg_synchro.c']]], ['msg_5fsem_5finit',['MSG_sem_init',['../group__msg__synchro.html#gaa540fb0fe72d3bf3b4183ba3c6e07faa',1,'MSG_sem_init(int initial_value): msg_synchro.c'],['../group__msg__synchro.html#gaa540fb0fe72d3bf3b4183ba3c6e07faa',1,'MSG_sem_init(int initial_value): msg_synchro.c']]], ['msg_5fsem_5frelease',['MSG_sem_release',['../group__msg__synchro.html#ga47ed8c02cacfe486d3fa7d29beb56af1',1,'MSG_sem_release(msg_sem_t sem): msg_synchro.c'],['../group__msg__synchro.html#ga47ed8c02cacfe486d3fa7d29beb56af1',1,'MSG_sem_release(msg_sem_t sem): msg_synchro.c']]], ['msg_5fsem_5fwould_5fblock',['MSG_sem_would_block',['../group__msg__synchro.html#ga46b0858501af3424a570f8d786320520',1,'MSG_sem_would_block(msg_sem_t sem): msg_synchro.c'],['../group__msg__synchro.html#ga46b0858501af3424a570f8d786320520',1,'MSG_sem_would_block(msg_sem_t sem): msg_synchro.c']]], ['msg_5fset_5fhost_5fpower_5fpeak_5fat',['MSG_set_host_power_peak_at',['../group__m__host__management.html#ga2befbe7955de345ce7e02556f21bb7b4',1,'MSG_set_host_power_peak_at(msg_host_t h, int pstate): msg_host.c'],['../group__m__host__management.html#ga2befbe7955de345ce7e02556f21bb7b4',1,'MSG_set_host_power_peak_at(msg_host_t host, int pstate_index): msg_host.c']]], ['msg_5fstorage_5fget_5fby_5fname',['MSG_storage_get_by_name',['../group__msg__storage__management.html#ga546b28d8dcd4f9b9f9206fa49c97fb23',1,'MSG_storage_get_by_name(const char *name): msg_io.c'],['../group__msg__storage__management.html#ga546b28d8dcd4f9b9f9206fa49c97fb23',1,'MSG_storage_get_by_name(const char *name): msg_io.c']]], ['msg_5fstorage_5fget_5fcontent',['MSG_storage_get_content',['../group__msg__storage__management.html#gab542d642be87d52dd647b77ea3f44b74',1,'MSG_storage_get_content(msg_storage_t storage): msg_io.c'],['../group__msg__storage__management.html#gab542d642be87d52dd647b77ea3f44b74',1,'MSG_storage_get_content(msg_storage_t storage): msg_io.c']]], ['msg_5fstorage_5fget_5ffree_5fsize',['MSG_storage_get_free_size',['../group__msg__storage__management.html#gab65b4a69185c6e80ed1da21012c7f100',1,'MSG_storage_get_free_size(const char *name): msg_io.c'],['../group__msg__storage__management.html#gab65b4a69185c6e80ed1da21012c7f100',1,'MSG_storage_get_free_size(const char *name): msg_io.c']]], ['msg_5fstorage_5fget_5fname',['MSG_storage_get_name',['../group__msg__storage__management.html#ga4e3dbb8ae3bda7ba80df6c32c4816926',1,'MSG_storage_get_name(msg_storage_t storage): msg_io.c'],['../group__msg__storage__management.html#ga4e3dbb8ae3bda7ba80df6c32c4816926',1,'MSG_storage_get_name(msg_storage_t storage): msg_io.c']]], ['msg_5fstorage_5fget_5fproperties',['MSG_storage_get_properties',['../group__msg__storage__management.html#ga28017dad8a2c6f1fe10b52b208d4a36e',1,'MSG_storage_get_properties(msg_storage_t storage): msg_io.c'],['../group__msg__storage__management.html#ga28017dad8a2c6f1fe10b52b208d4a36e',1,'MSG_storage_get_properties(msg_storage_t storage): msg_io.c']]], ['msg_5fstorage_5fget_5fused_5fsize',['MSG_storage_get_used_size',['../group__msg__storage__management.html#gae0d57e843712319835f31fcf8c23894b',1,'MSG_storage_get_used_size(const char *name): msg_io.c'],['../group__msg__storage__management.html#gae0d57e843712319835f31fcf8c23894b',1,'MSG_storage_get_used_size(const char *name): msg_io.c']]], ['msg_5fstorage_5fset_5fdata',['MSG_storage_set_data',['../group__msg__storage__management.html#ga6355cbf57e26d99c0ba021b8ba97514f',1,'MSG_storage_set_data(msg_storage_t host, void *data): msg_io.c'],['../group__msg__storage__management.html#ga6355cbf57e26d99c0ba021b8ba97514f',1,'MSG_storage_set_data(msg_storage_t storage, void *data): msg_io.c']]], ['msg_5fstorage_5fset_5fproperty_5fvalue',['MSG_storage_set_property_value',['../group__msg__storage__management.html#gab104363d9be84030d4e301e169e8cd6b',1,'MSG_storage_set_property_value(msg_storage_t storage, const char *name, char *value, void_f_pvoid_t free_ctn): msg_io.c'],['../group__msg__storage__management.html#gab104363d9be84030d4e301e169e8cd6b',1,'MSG_storage_set_property_value(msg_storage_t storage, const char *name, char *value, void_f_pvoid_t free_ctn): msg_io.c']]], ['msg_5fstorages_5fas_5fdynar',['MSG_storages_as_dynar',['../group__msg__storage__management.html#ga3d0280ddcf0026cee8837d30eebb6c90',1,'MSG_storages_as_dynar(void): msg_io.c'],['../group__msg__storage__management.html#ga3d0280ddcf0026cee8837d30eebb6c90',1,'MSG_storages_as_dynar(void): msg_io.c']]], ['msg_5ftask_5fcreate',['MSG_task_create',['../group__m__task__management.html#gaafe2ccabd38b13d1734323f86e40706a',1,'MSG_task_create(const char *name, double compute_duration, double message_size, void *data): msg_task.c'],['../group__m__task__management.html#gaafe2ccabd38b13d1734323f86e40706a',1,'MSG_task_create(const char *name, double compute_duration, double message_size, void *data): msg_task.c']]], ['msg_5ftask_5fdestroy',['MSG_task_destroy',['../group__m__task__management.html#gaf6369e840095c428218e494bf8b6dee6',1,'MSG_task_destroy(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gaf6369e840095c428218e494bf8b6dee6',1,'MSG_task_destroy(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fdsend',['MSG_task_dsend',['../group__msg__task__usage.html#ga7e292abd2fac532430ecb51a170a004a',1,'MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup): msg_gos.c'],['../group__msg__task__usage.html#ga7e292abd2fac532430ecb51a170a004a',1,'MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup): msg_gos.c']]], ['msg_5ftask_5fdsend_5fbounded',['MSG_task_dsend_bounded',['../group__msg__task__usage.html#ga361a85b101d3de18e8b7ed0a101d2af3',1,'MSG_task_dsend_bounded(msg_task_t task, const char *alias, void_f_pvoid_t cleanup, double maxrate): msg_gos.c'],['../group__msg__task__usage.html#ga361a85b101d3de18e8b7ed0a101d2af3',1,'MSG_task_dsend_bounded(msg_task_t task, const char *alias, void_f_pvoid_t cleanup, double maxrate): msg_gos.c']]], ['msg_5ftask_5fexecute',['MSG_task_execute',['../group__msg__task__usage.html#ga6ebbb75fe9ff779eac6ca57c5ad5bfe3',1,'MSG_task_execute(msg_task_t task): msg_gos.c'],['../group__msg__task__usage.html#ga6ebbb75fe9ff779eac6ca57c5ad5bfe3',1,'MSG_task_execute(msg_task_t task): msg_gos.c']]], ['msg_5ftask_5fget',['MSG_task_get',['../group__msg__deprecated__functions.html#ga1ae6d2a80ca4f35d7a19215f409ce00f',1,'MSG_task_get(msg_task_t *task, m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#ga1ae6d2a80ca4f35d7a19215f409ce00f',1,'MSG_task_get(msg_task_t *task, m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5fget_5fcategory',['MSG_task_get_category',['../group__msg__task__usage.html#ga4d8a840bc4a7f1b28ba351069de9b9c3',1,'MSG_task_get_category(msg_task_t task): msg_gos.c'],['../group__msg__task__usage.html#ga4d8a840bc4a7f1b28ba351069de9b9c3',1,'MSG_task_get_category(msg_task_t task): msg_gos.c']]], ['msg_5ftask_5fget_5fcompute_5fduration',['MSG_task_get_compute_duration',['../group__m__task__management.html#gae6c900f519f6280a9e7a615a2e47cb96',1,'MSG_task_get_compute_duration(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gae6c900f519f6280a9e7a615a2e47cb96',1,'MSG_task_get_compute_duration(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fdata',['MSG_task_get_data',['../group__m__task__management.html#gab0ef7c694fcc69282cf4da632ae64d5b',1,'MSG_task_get_data(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gab0ef7c694fcc69282cf4da632ae64d5b',1,'MSG_task_get_data(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fdata_5fsize',['MSG_task_get_data_size',['../group__m__task__management.html#ga5d7514ea11b8a51bad0cbc7ad0636856',1,'MSG_task_get_data_size(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga5d7514ea11b8a51bad0cbc7ad0636856',1,'MSG_task_get_data_size(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5ffrom_5fhost',['MSG_task_get_from_host',['../group__msg__deprecated__functions.html#gad09e64171486db6b0004653125313971',1,'MSG_task_get_from_host(msg_task_t *task, int channel, msg_host_t host): msg_gos.c'],['../group__msg__deprecated__functions.html#gad09e64171486db6b0004653125313971',1,'MSG_task_get_from_host(msg_task_t *task, m_channel_t channel, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5fget_5fname',['MSG_task_get_name',['../group__m__task__management.html#ga2adce7c9dbe8ecab1d6db1fdc420ea80',1,'MSG_task_get_name(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga2adce7c9dbe8ecab1d6db1fdc420ea80',1,'MSG_task_get_name(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fremaining_5fcommunication',['MSG_task_get_remaining_communication',['../group__m__task__management.html#ga1f3d2d85e2a7415e26fa12f05b71fc34',1,'MSG_task_get_remaining_communication(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga1f3d2d85e2a7415e26fa12f05b71fc34',1,'MSG_task_get_remaining_communication(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fremaining_5fcomputation',['MSG_task_get_remaining_computation',['../group__m__task__management.html#gada131788294fe436d9cc1044319b111f',1,'MSG_task_get_remaining_computation(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gada131788294fe436d9cc1044319b111f',1,'MSG_task_get_remaining_computation(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fsender',['MSG_task_get_sender',['../group__m__task__management.html#ga90a38af4ae02895a5e656c6d2555a63b',1,'MSG_task_get_sender(msg_task_t task): msg_task.c'],['../group__m__task__management.html#ga90a38af4ae02895a5e656c6d2555a63b',1,'MSG_task_get_sender(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fsource',['MSG_task_get_source',['../group__m__task__management.html#gabb8f9c3289b341b68af5c789ea659c1e',1,'MSG_task_get_source(msg_task_t task): msg_task.c'],['../group__m__task__management.html#gabb8f9c3289b341b68af5c789ea659c1e',1,'MSG_task_get_source(msg_task_t task): msg_task.c']]], ['msg_5ftask_5fget_5fwith_5ftimeout',['MSG_task_get_with_timeout',['../group__msg__deprecated__functions.html#ga48bf7268e2f079ba1ad51a00209028cd',1,'MSG_task_get_with_timeout(msg_task_t *task, m_channel_t channel, double max_duration): msg_gos.c'],['../group__msg__deprecated__functions.html#ga48bf7268e2f079ba1ad51a00209028cd',1,'MSG_task_get_with_timeout(msg_task_t *task, m_channel_t channel, double max_duration): msg_gos.c']]], ['msg_5ftask_5fiprobe',['MSG_task_Iprobe',['../group__msg__deprecated__functions.html#gae72af17e16cda4efcfad301a4170accd',1,'MSG_task_Iprobe(m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#gae72af17e16cda4efcfad301a4170accd',1,'MSG_task_Iprobe(m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5firecv',['MSG_task_irecv',['../group__msg__task__usage.html#gadb4623d587d75ad3b078928f0f1b27a5',1,'MSG_task_irecv(msg_task_t *task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#gadb4623d587d75ad3b078928f0f1b27a5',1,'MSG_task_irecv(msg_task_t *task, const char *name): msg_gos.c']]], ['msg_5ftask_5firecv_5fbounded',['MSG_task_irecv_bounded',['../group__msg__task__usage.html#gabc1b32d1baa16ae2dea503be7b74893f',1,'MSG_task_irecv_bounded(msg_task_t *task, const char *alias, double rate): msg_gos.c'],['../group__msg__task__usage.html#gabc1b32d1baa16ae2dea503be7b74893f',1,'MSG_task_irecv_bounded(msg_task_t *task, const char *name, double rate): msg_gos.c']]], ['msg_5ftask_5fisend',['MSG_task_isend',['../group__msg__task__usage.html#gaa280111a523d70bb36061e6e52ca1b42',1,'MSG_task_isend(msg_task_t task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#gaa280111a523d70bb36061e6e52ca1b42',1,'MSG_task_isend(msg_task_t task, const char *alias): msg_gos.c']]], ['msg_5ftask_5fisend_5fbounded',['MSG_task_isend_bounded',['../group__msg__task__usage.html#gafb8d945da3bf7c7e54d8db238d5f5508',1,'MSG_task_isend_bounded(msg_task_t task, const char *alias, double maxrate): msg_gos.c'],['../group__msg__task__usage.html#gafb8d945da3bf7c7e54d8db238d5f5508',1,'MSG_task_isend_bounded(msg_task_t task, const char *alias, double maxrate): msg_gos.c']]], ['msg_5ftask_5fisend_5fwith_5fmatching',['MSG_task_isend_with_matching',['../group__msg__task__usage.html#gabab3742eeb92d3e9a03aa7068f7d5d7f',1,'MSG_task_isend_with_matching(msg_task_t task, const char *alias, int(*match_fun)(void *, void *, smx_action_t), void *match_data): msg_gos.c'],['../group__msg__task__usage.html#gabab3742eeb92d3e9a03aa7068f7d5d7f',1,'MSG_task_isend_with_matching(msg_task_t task, const char *alias, int(*match_fun)(void *, void *, smx_action_t), void *match_data): msg_gos.c']]], ['msg_5ftask_5flisten',['MSG_task_listen',['../group__msg__task__usage.html#ga297e41ae363db652f2075d7e9d164bb5',1,'MSG_task_listen(const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga297e41ae363db652f2075d7e9d164bb5',1,'MSG_task_listen(const char *alias): msg_gos.c']]], ['msg_5ftask_5flisten_5ffrom',['MSG_task_listen_from',['../group__msg__task__usage.html#ga7646951835a1ac861b6a35b41741a268',1,'MSG_task_listen_from(const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga7646951835a1ac861b6a35b41741a268',1,'MSG_task_listen_from(const char *alias): msg_gos.c']]], ['msg_5ftask_5flisten_5ffrom_5fhost',['MSG_task_listen_from_host',['../group__msg__task__usage.html#ga26ca8f6eb20767098104786a15f19fb8',1,'MSG_task_listen_from_host(const char *alias, msg_host_t host): msg_gos.c'],['../group__msg__task__usage.html#ga26ca8f6eb20767098104786a15f19fb8',1,'MSG_task_listen_from_host(const char *alias, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5fprobe_5ffrom',['MSG_task_probe_from',['../group__msg__deprecated__functions.html#ga99bfe9edc985c6d2cce3947f81780660',1,'MSG_task_probe_from(m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#ga99bfe9edc985c6d2cce3947f81780660',1,'MSG_task_probe_from(m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5fprobe_5ffrom_5fhost',['MSG_task_probe_from_host',['../group__msg__deprecated__functions.html#gaa44c47c7ed2f78243eca7379437e1cc0',1,'MSG_task_probe_from_host(int channel, msg_host_t host): msg_gos.c'],['../group__msg__deprecated__functions.html#gaa44c47c7ed2f78243eca7379437e1cc0',1,'MSG_task_probe_from_host(int channel, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5fput',['MSG_task_put',['../group__msg__deprecated__functions.html#ga3e310a2bf7efc32d3aac8dad2eacd71d',1,'MSG_task_put(msg_task_t task, msg_host_t dest, m_channel_t channel): msg_gos.c'],['../group__msg__deprecated__functions.html#ga3e310a2bf7efc32d3aac8dad2eacd71d',1,'MSG_task_put(msg_task_t task, msg_host_t dest, m_channel_t channel): msg_gos.c']]], ['msg_5ftask_5fput_5fbounded',['MSG_task_put_bounded',['../group__msg__deprecated__functions.html#ga6e5db824a4317c3a1279eeaa79b6511d',1,'MSG_task_put_bounded(msg_task_t task, msg_host_t dest, m_channel_t channel, double max_rate): msg_gos.c'],['../group__msg__deprecated__functions.html#ga6e5db824a4317c3a1279eeaa79b6511d',1,'MSG_task_put_bounded(msg_task_t task, msg_host_t dest, m_channel_t channel, double maxrate): msg_gos.c']]], ['msg_5ftask_5fput_5fwith_5ftimeout',['MSG_task_put_with_timeout',['../group__msg__deprecated__functions.html#gac979ed68d1b602dd04169cbed23828a9',1,'MSG_task_put_with_timeout(msg_task_t task, msg_host_t dest, m_channel_t channel, double max_duration): msg_gos.c'],['../group__msg__deprecated__functions.html#gac979ed68d1b602dd04169cbed23828a9',1,'MSG_task_put_with_timeout(msg_task_t task, msg_host_t dest, m_channel_t channel, double timeout): msg_gos.c']]], ['msg_5ftask_5freceive',['MSG_task_receive',['../group__msg__task__usage.html#ga710ee9d4ea587ab6ae66014913ac91e1',1,'MSG_task_receive(msg_task_t *task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga710ee9d4ea587ab6ae66014913ac91e1',1,'MSG_task_receive(msg_task_t *task, const char *alias): msg_gos.c']]], ['msg_5ftask_5freceive_5fbounded',['MSG_task_receive_bounded',['../group__msg__task__usage.html#gad147ccce869d2be6888e123063430dd8',1,'MSG_task_receive_bounded(msg_task_t *task, const char *alias, double rate): msg_gos.c'],['../group__msg__task__usage.html#gad147ccce869d2be6888e123063430dd8',1,'MSG_task_receive_bounded(msg_task_t *task, const char *alias, double rate): msg_gos.c']]], ['msg_5ftask_5freceive_5fext',['MSG_task_receive_ext',['../group__msg__task__usage.html#ga1e2f86298cf00ea3ced4d263d31e2890',1,'MSG_task_receive_ext(msg_task_t *task, const char *alias, double timeout, msg_host_t host): msg_gos.c'],['../group__msg__task__usage.html#ga1e2f86298cf00ea3ced4d263d31e2890',1,'MSG_task_receive_ext(msg_task_t *task, const char *alias, double timeout, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5freceive_5fext_5fbounded',['MSG_task_receive_ext_bounded',['../group__msg__task__usage.html#gaa5c978ad309b34cc72accd934531f4ac',1,'MSG_task_receive_ext_bounded(msg_task_t *task, const char *alias, double timeout, msg_host_t host, double rate): msg_gos.c'],['../group__msg__task__usage.html#gaa5c978ad309b34cc72accd934531f4ac',1,'MSG_task_receive_ext_bounded(msg_task_t *task, const char *alias, double timeout, msg_host_t host, double rate): msg_gos.c']]], ['msg_5ftask_5freceive_5ffrom_5fhost',['MSG_task_receive_from_host',['../group__msg__task__usage.html#gae41e58a499fddc40b4b0de9a59894b29',1,'MSG_task_receive_from_host(msg_task_t *task, const char *alias, msg_host_t host): msg_gos.c'],['../group__msg__task__usage.html#gae41e58a499fddc40b4b0de9a59894b29',1,'MSG_task_receive_from_host(msg_task_t *task, const char *alias, msg_host_t host): msg_gos.c']]], ['msg_5ftask_5freceive_5fwith_5ftimeout',['MSG_task_receive_with_timeout',['../group__msg__task__usage.html#ga19687ebde0e9a07cb99fc73e7dfa7a03',1,'MSG_task_receive_with_timeout(msg_task_t *task, const char *alias, double timeout): msg_gos.c'],['../group__msg__task__usage.html#ga19687ebde0e9a07cb99fc73e7dfa7a03',1,'MSG_task_receive_with_timeout(msg_task_t *task, const char *alias, double timeout): msg_gos.c']]], ['msg_5ftask_5freceive_5fwith_5ftimeout_5fbounded',['MSG_task_receive_with_timeout_bounded',['../group__msg__task__usage.html#ga4a29ded2ab96b5632e2f70dfd684783d',1,'MSG_task_receive_with_timeout_bounded(msg_task_t *task, const char *alias, double timeout, double rate): msg_gos.c'],['../group__msg__task__usage.html#ga4a29ded2ab96b5632e2f70dfd684783d',1,'MSG_task_receive_with_timeout_bounded(msg_task_t *task, const char *alias, double timeout, double rate): msg_gos.c']]], ['msg_5ftask_5fsend',['MSG_task_send',['../group__msg__task__usage.html#ga33c924177135850888f25378b8e0b3cf',1,'MSG_task_send(msg_task_t task, const char *alias): msg_gos.c'],['../group__msg__task__usage.html#ga33c924177135850888f25378b8e0b3cf',1,'MSG_task_send(msg_task_t task, const char *alias): msg_gos.c']]], ['msg_5ftask_5fsend_5fbounded',['MSG_task_send_bounded',['../group__msg__task__usage.html#ga77f5e9bbbdb4a478cd3479d86678b7ab',1,'MSG_task_send_bounded(msg_task_t task, const char *alias, double rate): msg_gos.c'],['../group__msg__task__usage.html#ga77f5e9bbbdb4a478cd3479d86678b7ab',1,'MSG_task_send_bounded(msg_task_t task, const char *alias, double maxrate): msg_gos.c']]], ['msg_5ftask_5fsend_5fwith_5ftimeout',['MSG_task_send_with_timeout',['../group__msg__task__usage.html#gae1fb84e33c47ad59862188845ececdf5',1,'MSG_task_send_with_timeout(msg_task_t task, const char *alias, double timeout): msg_gos.c'],['../group__msg__task__usage.html#gae1fb84e33c47ad59862188845ececdf5',1,'MSG_task_send_with_timeout(msg_task_t task, const char *alias, double timeout): msg_gos.c']]], ['msg_5ftask_5fsend_5fwith_5ftimeout_5fbounded',['MSG_task_send_with_timeout_bounded',['../group__msg__task__usage.html#ga67d9306a7940e2b32a57d4c4d2ce8523',1,'MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alias, double timeout, double maxrate): msg_gos.c'],['../group__msg__task__usage.html#ga67d9306a7940e2b32a57d4c4d2ce8523',1,'MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alias, double timeout, double maxrate): msg_gos.c']]], ['msg_5ftask_5fset_5fcategory',['MSG_task_set_category',['../group__msg__task__usage.html#gaff6a660d1f3a37ff7ee3daee0e3ae3b7',1,'MSG_task_set_category(msg_task_t task, const char *category): msg_gos.c'],['../group__msg__task__usage.html#gaff6a660d1f3a37ff7ee3daee0e3ae3b7',1,'MSG_task_set_category(msg_task_t task, const char *category): msg_gos.c']]], ['msg_5ftask_5fset_5fcompute_5fduration',['MSG_task_set_compute_duration',['../group__m__task__management.html#gab54a9cc669db50dc7229389ac3dc7f1f',1,'MSG_task_set_compute_duration(msg_task_t task, double compute_duration): msg_task.c'],['../group__m__task__management.html#gab54a9cc669db50dc7229389ac3dc7f1f',1,'MSG_task_set_compute_duration(msg_task_t task, double computation_amount): msg_task.c']]], ['msg_5ftask_5fset_5fcopy_5fcallback',['MSG_task_set_copy_callback',['../group__m__task__management.html#gab4fd7f315f6f7d9297eaad64e67fbf90',1,'msg_task.c']]], ['msg_5ftask_5fset_5fdata',['MSG_task_set_data',['../group__m__task__management.html#ga5a2984b6a34bb725b52ee31cdece56a2',1,'MSG_task_set_data(msg_task_t task, void *data): msg_task.c'],['../group__m__task__management.html#ga5a2984b6a34bb725b52ee31cdece56a2',1,'MSG_task_set_data(msg_task_t task, void *data): msg_task.c']]], ['msg_5ftask_5fset_5fdata_5fsize',['MSG_task_set_data_size',['../group__m__task__management.html#ga3c900ab457b5822c205979097765bc04',1,'MSG_task_set_data_size(msg_task_t task, double data_size): msg_task.c'],['../group__m__task__management.html#ga3c900ab457b5822c205979097765bc04',1,'MSG_task_set_data_size(msg_task_t task, double data_size): msg_task.c']]], ['msg_5ftask_5fset_5fname',['MSG_task_set_name',['../group__m__task__management.html#gaa97b99e0176424e3f0afdf239e2f3f32',1,'MSG_task_set_name(msg_task_t task, const char *name): msg_task.c'],['../group__m__task__management.html#gaa97b99e0176424e3f0afdf239e2f3f32',1,'MSG_task_set_name(msg_task_t task, const char *name): msg_task.c']]], ['msg_5ftask_5fset_5fpriority',['MSG_task_set_priority',['../group__m__task__management.html#ga22cf2562fbb9cad8c5860914c0d8d6dc',1,'MSG_task_set_priority(msg_task_t task, double priority): msg_task.c'],['../group__m__task__management.html#ga22cf2562fbb9cad8c5860914c0d8d6dc',1,'MSG_task_set_priority(msg_task_t task, double priority): msg_task.c']]], ['msg_5fvm_5fbind',['MSG_vm_bind',['../group__msg__VMs.html#ga21d8a296f64c7190dcbcfd0c249b4275',1,'MSG_vm_bind(msg_vm_t vm, msg_process_t process): msg_vm.c'],['../group__msg__VMs.html#ga21d8a296f64c7190dcbcfd0c249b4275',1,'MSG_vm_bind(msg_vm_t vm, msg_process_t process): msg_vm.c']]], ['msg_5fvm_5fdestroy',['MSG_vm_destroy',['../group__msg__VMs.html#gae493c978235ba8efeee6d8b5a5286e5b',1,'MSG_vm_destroy(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#gae493c978235ba8efeee6d8b5a5286e5b',1,'MSG_vm_destroy(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fis_5frunning',['MSG_vm_is_running',['../group__msg__VMs.html#ga6ba8320c7a90ed67d3c8e2079460b8a9',1,'MSG_vm_is_running(msg_vm_t): msg_vm.c'],['../group__msg__VMs.html#ga6ba8320c7a90ed67d3c8e2079460b8a9',1,'MSG_vm_is_running(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fis_5fsuspended',['MSG_vm_is_suspended',['../group__msg__VMs.html#gac7919295b7c197a43717e367f9c115c5',1,'MSG_vm_is_suspended(msg_vm_t): msg_vm.c'],['../group__msg__VMs.html#gac7919295b7c197a43717e367f9c115c5',1,'MSG_vm_is_suspended(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fmigrate',['MSG_vm_migrate',['../group__msg__VMs.html#ga0b701b7e5a4b0459f1b9326e188e19b0',1,'MSG_vm_migrate(msg_vm_t vm, msg_host_t destination): msg_vm.c'],['../group__msg__VMs.html#ga0b701b7e5a4b0459f1b9326e188e19b0',1,'MSG_vm_migrate(msg_vm_t vm, msg_host_t destination): msg_vm.c']]], ['msg_5fvm_5freboot',['MSG_vm_reboot',['../group__msg__VMs.html#ga6e665c9d3b9c0a6b3e9a97a419a7861f',1,'MSG_vm_reboot(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga6e665c9d3b9c0a6b3e9a97a419a7861f',1,'MSG_vm_reboot(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fresume',['MSG_vm_resume',['../group__msg__VMs.html#ga9815e54a5e6cdf849d4847803d377e19',1,'MSG_vm_resume(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga9815e54a5e6cdf849d4847803d377e19',1,'MSG_vm_resume(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fshutdown',['MSG_vm_shutdown',['../group__msg__VMs.html#ga1a40d2652506f4576408e35346cd3cff',1,'MSG_vm_shutdown(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga1a40d2652506f4576408e35346cd3cff',1,'MSG_vm_shutdown(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5fstart',['MSG_vm_start',['../group__msg__VMs.html#ga407fdb335bb6adbe52eab4055ee4676b',1,'msg_vm.c']]], ['msg_5fvm_5fsuspend',['MSG_vm_suspend',['../group__msg__VMs.html#ga32243e8be24c253c0367c81d0289e057',1,'MSG_vm_suspend(msg_vm_t vm): msg_vm.c'],['../group__msg__VMs.html#ga32243e8be24c253c0367c81d0289e057',1,'MSG_vm_suspend(msg_vm_t vm): msg_vm.c']]], ['msg_5fvm_5funbind',['MSG_vm_unbind',['../group__msg__VMs.html#gaf65aa7a4497fceaa50414caff2772a05',1,'MSG_vm_unbind(msg_vm_t vm, msg_process_t process): msg_vm.c'],['../group__msg__VMs.html#gaf65aa7a4497fceaa50414caff2772a05',1,'MSG_vm_unbind(msg_vm_t vm, msg_process_t process): msg_vm.c']]], ['msg_5fvms_5fas_5fdynar',['MSG_vms_as_dynar',['../group__msg__VMs.html#ga9d66095e9599545ab4cdd787a38f6b8e',1,'MSG_vms_as_dynar(void): msg_vm.c'],['../group__msg__VMs.html#ga9d66095e9599545ab4cdd787a38f6b8e',1,'MSG_vms_as_dynar(void): msg_vm.c']]] ]; SimGrid-3.10/doc/html/search/all_69.js000640 007661 000620 00000001226 12242224150 017616 0ustar00gierschand000000 000000 var searchData= [ ['id',['ID',['../structxbt__set__elm__.html#ad72fec45d8f1714b7465f1b951095746',1,'xbt_set_elm_']]], ['index',['index',['../structs__xbt__parmap.html#ac583971bdbd4b8d9693e6bb539da69fe',1,'s_xbt_parmap']]], ['installing_20simgrid',['Installing Simgrid',['../install.html',1,'index']]], ['introduction_20to_20simgrid',['Introduction to SimGrid',['../introduction.html',1,'index']]], ['io_5ferror',['io_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a7867239bb18a1f74d007fd1cc5f2202c',1,'ex.h']]], ['is_5fsuspended',['is_suspended',['../structsurf__model.html#af65ddbc8ce59a3e2e7e26098b5ba6552',1,'surf_model']]] ]; SimGrid-3.10/doc/html/search/all_76.js000640 007661 000620 00000000436 12242224150 017616 0ustar00gierschand000000 000000 var searchData= [ ['vms',['VMs',['../group__msg__VMs.html',1,'']]], ['value',['value',['../structxbt__ex__t.html#a9bb9f8aef46f7821ab7c0ccd04b52f4f',1,'xbt_ex_t']]], ['vasprintf',['vasprintf',['../group__XBT__str.html#gaf354d1d051622132c673dde7cfd63b79',1,'simgrid_config.h']]] ]; SimGrid-3.10/doc/html/search/enumvalues_75.html000640 007661 000620 00000001713 12242224150 021560 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_78.html000640 007661 000620 00000001704 12242224150 020147 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_70.js000640 007661 000620 00000002120 12242224150 017600 0ustar00gierschand000000 000000 var searchData= [ ['process_20management_20functions',['Process Management Functions',['../group__m__process__management.html',1,'']]], ['pid',['pid',['../structxbt__ex__t.html#a1d67c080063f5af389c3b23c381c240f',1,'xbt_ex_t']]], ['platform_20description',['Platform Description',['../platform.html',1,'use']]], ['packet_20level_20simulation',['Packet level simulation',['../pls.html',1,'advanced']]], ['priority',['priority',['../structsurf__action.html#ad856ef7cb77971a29ce0691b52bfd89e',1,'surf_action']]], ['procname',['procname',['../structxbt__ex__t.html#a2b10084a06349fff9725b7de494027a5',1,'xbt_ex_t']]], ['process_20management_20functions',['Process Management Functions',['../group__simix__process__management.html',1,'']]], ['portable_20context_20implementation',['Portable context implementation',['../group__XBT__context.html',1,'']]], ['perl_2dlike_20use_20of_20dynars',['Perl-like use of dynars',['../group__XBT__dynar__perl.html',1,'']]], ['parallel_20map',['Parallel map',['../group__XBT__parmap.html',1,'']]], ['peer',['Peer',['../group__XBT__peer.html',1,'']]] ]; SimGrid-3.10/doc/html/search/variables_61.html000640 007661 000620 00000001712 12242224150 021336 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_61.js000640 007661 000620 00000002024 12242224150 021003 0ustar00gierschand000000 000000 var searchData= [ ['action_5fcancel',['action_cancel',['../structsurf__model.html#aae5c7f6115a8e8f0c2c7dbd168dd8a8e',1,'surf_model']]], ['action_5fdata_5fset',['action_data_set',['../structsurf__model.html#ade0d9846b3a3e6321e87a51fc257116b',1,'surf_model']]], ['action_5fget_5ffinish_5ftime',['action_get_finish_time',['../structsurf__model.html#a9bcb1343173e301eb3e861d8cefe30c1',1,'surf_model']]], ['action_5fget_5fstart_5ftime',['action_get_start_time',['../structsurf__model.html#a2ab1dc2a56a9950a1fc5afd4b09013f9',1,'surf_model']]], ['action_5frecycle',['action_recycle',['../structsurf__model.html#afdbd4f9c98ca4af207c89ebb29c9d8bb',1,'surf_model']]], ['action_5fstate_5fget',['action_state_get',['../structsurf__model.html#ad6398c4a857042569f6943e95d4dcec4',1,'surf_model']]], ['action_5fstate_5fset',['action_state_set',['../structsurf__model.html#a969312b9fd1533e9fb8488059522d760',1,'surf_model']]], ['action_5funref',['action_unref',['../structsurf__model.html#acb6cffe534dbfcfb5c3fefc5b714e623',1,'surf_model']]] ]; SimGrid-3.10/doc/html/search/enums_65.js000640 007661 000620 00000002036 12242224150 020171 0ustar00gierschand000000 000000 var searchData= [ ['e_5fsd_5ftask_5fkind_5ft',['e_SD_task_kind_t',['../group__SD__datatypes__management.html#ga242a90ba979257e3245553f149b74880',1,'datatypes.h']]], ['e_5fsd_5ftask_5fstate_5ft',['e_SD_task_state_t',['../group__SD__datatypes__management.html#ga49c04f3f117a8a1f8f1d0bedadefcfa5',1,'datatypes.h']]], ['e_5fsd_5fworkstation_5faccess_5fmode_5ft',['e_SD_workstation_access_mode_t',['../group__SD__datatypes__management.html#ga6eb21649841a9b045552f3aa810e05f5',1,'datatypes.h']]], ['e_5fsurf_5faction_5fstate_5ft',['e_surf_action_state_t',['../group__SURF__actions.html#gab9ef4042b1b038be1b792366de0121b2',1,'surf.h']]], ['e_5fxbt_5fcfgelm_5ftype_5ft',['e_xbt_cfgelm_type_t',['../group__XBT__cfg__decl.html#gaae016e87dc6935ed51617bbea7b8aa6c',1,'config.h']]], ['e_5fxbt_5flog_5fpriority_5ft',['e_xbt_log_priority_t',['../group__XBT__log.html#ga01ff08eb23b4f14bb759c676bcf8df82',1,'log.h']]], ['e_5fxbt_5fparmap_5fmode_5ft',['e_xbt_parmap_mode_t',['../group__XBT__parmap.html#gacbdbf85f704718b8680f13e56c618e7a',1,'parmap.h']]] ]; SimGrid-3.10/doc/html/search/groups_70.html000640 007661 000620 00000001707 12242224150 020711 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_69.html000640 007661 000620 00000001706 12242224150 020500 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_6d.js000640 007661 000620 00000000200 12242224150 020207 0ustar00gierschand000000 000000 var searchData= [ ['modifying_20the_20cmake_20files',['Modifying the cmake files',['../inside_cmake.html',1,'internals']]] ]; SimGrid-3.10/doc/html/search/pages_70.html000640 007661 000620 00000001706 12242224150 020470 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_71.html000640 007661 000620 00000001707 12242224150 020712 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_74.html000640 007661 000620 00000001713 12242224150 021557 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_68.js000640 007661 000620 00000000561 12242224150 020365 0ustar00gierschand000000 000000 var searchData= [ ['host_20management_20functions',['Host Management Functions',['../group__m__host__management.html',1,'']]], ['host_20management_20functions',['Host Management Functions',['../group__simix__host__management.html',1,'']]], ['heap_3a_20generic_20heap_20data_20structure',['Heap: generic heap data structure',['../group__XBT__heap.html',1,'']]] ]; SimGrid-3.10/doc/html/search/enums_65.html000640 007661 000620 00000001706 12242224150 020524 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enums_78.js000640 007661 000620 00000000204 12242224150 020170 0ustar00gierschand000000 000000 var searchData= [ ['xbt_5ferrcat_5ft',['xbt_errcat_t',['../group__XBT__ex.html#gaa45fec59aa57056784554a7f998f0854',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/variables_68.js000640 007661 000620 00000000411 12242224150 021010 0ustar00gierschand000000 000000 var searchData= [ ['host_5flib',['host_lib',['../group__SURF__build__api.html#gac90f96dce1a69464b09a9b79b1405da5',1,'host_lib(): surf_routing.c'],['../group__SURF__build__api.html#gac90f96dce1a69464b09a9b79b1405da5',1,'host_lib(): surf_routing.c']]] ]; SimGrid-3.10/doc/html/search/variables_72.html000640 007661 000620 00000001712 12242224150 021340 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_62.html000640 007661 000620 00000001712 12242224150 021377 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_73.js000640 007661 000620 00000007477 12242224150 021243 0ustar00gierschand000000 000000 var searchData= [ ['sd_5fdone',['SD_DONE',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ae654935882dec5b2345a3128aed69632',1,'datatypes.h']]], ['sd_5ffailed',['SD_FAILED',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5adda3fbec6b0da252275f20c79044201c',1,'datatypes.h']]], ['sd_5fin_5ffifo',['SD_IN_FIFO',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ac055f0cd1ac85271cc31d0340acc8c4c',1,'datatypes.h']]], ['sd_5fnot_5fscheduled',['SD_NOT_SCHEDULED',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5aec1d4dfae04f63ec58dd8ab7941a8801',1,'datatypes.h']]], ['sd_5frunnable',['SD_RUNNABLE',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a4deae4c6080598bd869d22fa4d35328d',1,'datatypes.h']]], ['sd_5frunning',['SD_RUNNING',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a79dc5ff4b6f36bfae26b9666feb4ba78',1,'datatypes.h']]], ['sd_5fschedulable',['SD_SCHEDULABLE',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a2c3f70794cc8b27495bd2c7b6b6872af',1,'datatypes.h']]], ['sd_5fscheduled',['SD_SCHEDULED',['../group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a626549e8ac33c3142d9b3ab66abcc374',1,'datatypes.h']]], ['sd_5ftask_5fcomm_5fe2e',['SD_TASK_COMM_E2E',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a9add1089dc99e90c905ec491db980d76',1,'datatypes.h']]], ['sd_5ftask_5fcomm_5fpar_5fmxn_5f1d_5fblock',['SD_TASK_COMM_PAR_MXN_1D_BLOCK',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a6c7da099fce2770ab770c40a0d32e93d',1,'datatypes.h']]], ['sd_5ftask_5fcomp_5fpar_5famdahl',['SD_TASK_COMP_PAR_AMDAHL',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a60c8326cd59d07e45a3910594478dba9',1,'datatypes.h']]], ['sd_5ftask_5fcomp_5fseq',['SD_TASK_COMP_SEQ',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a3fb8ac37142196af9ac8e97e27f2c59c',1,'datatypes.h']]], ['sd_5ftask_5fnot_5ftyped',['SD_TASK_NOT_TYPED',['../group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a8c1896c3c033bea7ecf469a75f83d5f4',1,'datatypes.h']]], ['sd_5fworkstation_5fsequential_5faccess',['SD_WORKSTATION_SEQUENTIAL_ACCESS',['../group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a722f0fd2ff6e52a77206f879e50714df',1,'datatypes.h']]], ['sd_5fworkstation_5fshared_5faccess',['SD_WORKSTATION_SHARED_ACCESS',['../group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a6615a65c696b373eef6500a7b8f43c4e',1,'datatypes.h']]], ['surf_5faction_5fdone',['SURF_ACTION_DONE',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2acef3187aad961798010f295bbbd932bf',1,'surf.h']]], ['surf_5faction_5ffailed',['SURF_ACTION_FAILED',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2abf420e6385e8eeda58721c3e28bd919e',1,'surf.h']]], ['surf_5faction_5fnot_5fin_5fthe_5fsystem',['SURF_ACTION_NOT_IN_THE_SYSTEM',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a20a007bd143ea5c870c26a389ffe95e9',1,'surf.h']]], ['surf_5faction_5fready',['SURF_ACTION_READY',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a6caf5e4bd35cab4890c662fdaf8d3812',1,'surf.h']]], ['surf_5faction_5frunning',['SURF_ACTION_RUNNING',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a101d6224ad7c2a615c452c8c36d8a7e7',1,'surf.h']]], ['surf_5faction_5fto_5ffree',['SURF_ACTION_TO_FREE',['../group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2aa66f387221d049fbce374c4dc27629c8',1,'surf.h']]], ['system_5ferror',['system_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a0cc55923f6bdf388d75ac17681055815',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/all_67.js000640 007661 000620 00000004515 12242224150 017620 0ustar00gierschand000000 000000 var searchData= [ ['get_5favailable_5fspeed',['get_available_speed',['../structsurf__workstation__model__extension__public.html#ae6ed8c858e3d713fc7f1ba8f04bd1008',1,'surf_workstation_model_extension_public']]], ['get_5fconsumed_5fenergy',['get_consumed_energy',['../structsurf__workstation__model__extension__public.html#aab3ed59f084f1e1b1f50585df5fe7b6d',1,'surf_workstation_model_extension_public']]], ['get_5fcurrent_5fpower_5fpeak',['get_current_power_peak',['../structsurf__workstation__model__extension__public.html#a1d53057051b5a38f76ada79e77f0a7a8',1,'surf_workstation_model_extension_public']]], ['get_5flink_5fbandwidth',['get_link_bandwidth',['../structsurf__workstation__model__extension__public.html#a564334f9eb1e783fa1f561bdf3a5aae0',1,'surf_workstation_model_extension_public']]], ['get_5flink_5flatency',['get_link_latency',['../structsurf__workstation__model__extension__public.html#a660cd47d3c8ef9bdd3dcb1bfd81f8e57',1,'surf_workstation_model_extension_public']]], ['get_5fnb_5fpstates',['get_nb_pstates',['../structsurf__workstation__model__extension__public.html#abfe09c2f5cb3774077c701c9c6cb62e6',1,'surf_workstation_model_extension_public']]], ['get_5fpower_5fpeak_5fat',['get_power_peak_at',['../structsurf__workstation__model__extension__public.html#aad3d20d4803ed5677f542b6f44162924',1,'surf_workstation_model_extension_public']]], ['get_5fremains',['get_remains',['../structsurf__model.html#adf9644f3b9b404f36973a25bfee0e761',1,'surf_model']]], ['get_5froute',['get_route',['../structsurf__workstation__model__extension__public.html#a84cdf3b9de17ceef028da789296fd1ae',1,'surf_workstation_model_extension_public']]], ['get_5fspeed',['get_speed',['../structsurf__workstation__model__extension__public.html#a4360bd7e469801b2adc37c56edccfeca',1,'surf_workstation_model_extension_public']]], ['get_5fstate',['get_state',['../structsurf__workstation__model__extension__public.html#a13bf38fd96228f099d5edbe6f55dafff',1,'surf_workstation_model_extension_public']]], ['getting_20help',['Getting help',['../help.html',1,'use']]], ['getting_20the_20stored_20values',['Getting the stored values',['../group__XBT__cfg__get.html',1,'']]], ['general_20purpose_20graph_20library',['General purpose graph library',['../group__XBT__graph.html',1,'']]], ['grounding_20features',['Grounding features',['../group__XBT__grounding.html',1,'']]] ]; SimGrid-3.10/doc/html/search/search.css000640 007661 000620 00000007624 12242224150 020161 0ustar00gierschand000000 000000 /*---------------- Search Box */ #FSearchBox { float: left; } #MSearchBox { white-space : nowrap; position: absolute; float: none; display: inline; margin-top: 0px; right: 0px; width: 170px; z-index: 102; background-color: white; } #MSearchBox .left { display:block; position:absolute; left:10px; width:20px; height:19px; background:url('search_l.png') no-repeat; background-position:right; } #MSearchSelect { display:block; position:absolute; width:20px; height:19px; } .left #MSearchSelect { left:4px; } .right #MSearchSelect { right:5px; } #MSearchField { display:block; position:absolute; height:19px; background:url('search_m.png') repeat-x; border:none; width:116px; margin-left:20px; padding-left:4px; color: #909090; outline: none; font: 9pt Arial, Verdana, sans-serif; } #FSearchBox #MSearchField { margin-left:15px; } #MSearchBox .right { display:block; position:absolute; right:10px; top:0px; width:20px; height:19px; background:url('search_r.png') no-repeat; background-position:left; } #MSearchClose { display: none; position: absolute; top: 4px; background : none; border: none; margin: 0px 4px 0px 0px; padding: 0px 0px; outline: none; } .left #MSearchClose { left: 6px; } .right #MSearchClose { right: 2px; } .MSearchBoxActive #MSearchField { color: #000000; } /*---------------- Search filter selection */ #MSearchSelectWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #90A5CE; background-color: #F9FAFC; z-index: 1; padding-top: 4px; padding-bottom: 4px; -moz-border-radius: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } .SelectItem { font: 8pt Arial, Verdana, sans-serif; padding-left: 2px; padding-right: 12px; border: 0px; } span.SelectionMark { margin-right: 4px; font-family: monospace; outline-style: none; text-decoration: none; } a.SelectItem { display: block; outline-style: none; color: #000000; text-decoration: none; padding-left: 6px; padding-right: 12px; } a.SelectItem:focus, a.SelectItem:active { color: #000000; outline-style: none; text-decoration: none; } a.SelectItem:hover { color: #FFFFFF; background-color: #3D578C; outline-style: none; text-decoration: none; cursor: pointer; display: block; } /*---------------- Search results window */ iframe#MSearchResults { width: 60ex; height: 15em; } #MSearchResultsWindow { display: none; position: absolute; left: 0; top: 0; border: 1px solid #000; background-color: #EEF1F7; } /* ----------------------------------- */ #SRIndex { clear:both; padding-bottom: 15px; } .SREntry { font-size: 10pt; padding-left: 1ex; } .SRPage .SREntry { font-size: 8pt; padding: 1px 5px; } body.SRPage { margin: 5px 2px; } .SRChildren { padding-left: 3ex; padding-bottom: .5em } .SRPage .SRChildren { display: none; } .SRSymbol { font-weight: bold; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRScope { display: block; color: #425E97; font-family: Arial, Verdana, sans-serif; text-decoration: none; outline: none; } a.SRSymbol:focus, a.SRSymbol:active, a.SRScope:focus, a.SRScope:active { text-decoration: underline; } span.SRScope { padding-left: 4px; } .SRPage .SRStatus { padding: 2px 5px; font-size: 8pt; font-style: italic; } .SRResult { display: none; } DIV.searchresults { margin-left: 10px; margin-right: 10px; } SimGrid-3.10/doc/html/search/all_68.js000640 007661 000620 00000001362 12242224150 017616 0ustar00gierschand000000 000000 var searchData= [ ['host_5ferror',['host_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1486a4899ea0336633c33a77c636eea8',1,'ex.h']]], ['host_5flib',['host_lib',['../group__SURF__build__api.html#gac90f96dce1a69464b09a9b79b1405da5',1,'host_lib(): surf_routing.c'],['../group__SURF__build__api.html#gac90f96dce1a69464b09a9b79b1405da5',1,'host_lib(): surf_routing.c']]], ['host_20management_20functions',['Host Management Functions',['../group__m__host__management.html',1,'']]], ['host_20management_20functions',['Host Management Functions',['../group__simix__host__management.html',1,'']]], ['heap_3a_20generic_20heap_20data_20structure',['Heap: generic heap data structure',['../group__XBT__heap.html',1,'']]] ]; SimGrid-3.10/doc/html/search/pages_67.html000640 007661 000620 00000001706 12242224150 020476 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_71.js000640 007661 000620 00000000116 12242224150 020353 0ustar00gierschand000000 000000 var searchData= [ ['queue',['Queue',['../group__XBT__queue.html',1,'']]] ]; SimGrid-3.10/doc/html/search/groups_70.js000640 007661 000620 00000001152 12242224150 020353 0ustar00gierschand000000 000000 var searchData= [ ['process_20management_20functions',['Process Management Functions',['../group__m__process__management.html',1,'']]], ['process_20management_20functions',['Process Management Functions',['../group__simix__process__management.html',1,'']]], ['portable_20context_20implementation',['Portable context implementation',['../group__XBT__context.html',1,'']]], ['perl_2dlike_20use_20of_20dynars',['Perl-like use of dynars',['../group__XBT__dynar__perl.html',1,'']]], ['parallel_20map',['Parallel map',['../group__XBT__parmap.html',1,'']]], ['peer',['Peer',['../group__XBT__peer.html',1,'']]] ]; SimGrid-3.10/doc/html/search/all_61.js000640 007661 000620 00000003063 12242224150 017607 0ustar00gierschand000000 000000 var searchData= [ ['action_5fcancel',['action_cancel',['../structsurf__model.html#aae5c7f6115a8e8f0c2c7dbd168dd8a8e',1,'surf_model']]], ['action_5fdata_5fset',['action_data_set',['../structsurf__model.html#ade0d9846b3a3e6321e87a51fc257116b',1,'surf_model']]], ['action_5fget_5ffinish_5ftime',['action_get_finish_time',['../structsurf__model.html#a9bcb1343173e301eb3e861d8cefe30c1',1,'surf_model']]], ['action_5fget_5fstart_5ftime',['action_get_start_time',['../structsurf__model.html#a2ab1dc2a56a9950a1fc5afd4b09013f9',1,'surf_model']]], ['action_5frecycle',['action_recycle',['../structsurf__model.html#afdbd4f9c98ca4af207c89ebb29c9d8bb',1,'surf_model']]], ['action_5fstate_5fget',['action_state_get',['../structsurf__model.html#ad6398c4a857042569f6943e95d4dcec4',1,'surf_model']]], ['action_5fstate_5fset',['action_state_set',['../structsurf__model.html#a969312b9fd1533e9fb8488059522d760',1,'surf_model']]], ['action_5funref',['action_unref',['../structsurf__model.html#acb6cffe534dbfcfb5c3fefc5b714e623',1,'surf_model']]], ['advanced_20topics',['Advanced Topics',['../advanced.html',1,'index']]], ['arg_5ferror',['arg_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a1d6d5b33334f960325a65e5c021aca16',1,'ex.h']]], ['asprintf',['asprintf',['../group__XBT__str.html#ga873b085fd80ad9b0cee0f841f48eb1d1',1,'simgrid_config.h']]], ['automatic_20testing_20infrastructure',['Automatic Testing Infrastructure',['../inside_autotests.html',1,'internals']]], ['assert_20macro_20familly',['Assert macro familly',['../group__XBT__error.html',1,'']]] ]; SimGrid-3.10/doc/html/search/all_68.html000640 007661 000620 00000001704 12242224150 020146 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/functions_78.js000640 007661 000620 00000253443 12242224150 021070 0ustar00gierschand000000 000000 var searchData= [ ['xbt_5fbacktrace_5fcurrent',['xbt_backtrace_current',['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_dummy.c'],['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_dummy.c'],['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_linux.c'],['../group__XBT__ex.html#ga3f9f1d5af6de5e90e5501e105b0e593c',1,'xbt_backtrace_current(xbt_ex_t *e): backtrace_windows.c']]], ['xbt_5fbacktrace_5fdisplay',['xbt_backtrace_display',['../group__XBT__ex.html#gaea1e39d44bcaaebb91a34f6ef053c60c',1,'xbt_backtrace_display(xbt_ex_t *e): ex.c'],['../group__XBT__ex.html#gaea1e39d44bcaaebb91a34f6ef053c60c',1,'xbt_backtrace_display(xbt_ex_t *e): ex.c']]], ['xbt_5fbacktrace_5fdisplay_5fcurrent',['xbt_backtrace_display_current',['../group__XBT__ex.html#ga36813e215c49af92c8a62dd8286d6421',1,'xbt_backtrace_display_current(void): ex.c'],['../group__XBT__syscall.html#ga36813e215c49af92c8a62dd8286d6421',1,'xbt_backtrace_display_current(void): ex.c'],['../group__XBT__ex.html#ga36813e215c49af92c8a62dd8286d6421',1,'xbt_backtrace_display_current(void): ex.c']]], ['xbt_5fbacktrace_5fno_5fmalloc',['xbt_backtrace_no_malloc',['../group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f',1,'xbt_backtrace_no_malloc(void **bt, int size): backtrace_dummy.c'],['../group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f',1,'xbt_backtrace_no_malloc(void **array, int size): backtrace_dummy.c'],['../group__XBT__ex.html#gadb6f0cc90ede2c80fff99a2f3a8ea02f',1,'xbt_backtrace_no_malloc(void **array, int size): backtrace_linux.c']]], ['xbt_5fcfg_5fcheck',['xbt_cfg_check',['../group__XBT__cfg__register.html#ga6c53f538a2901ceca585e075e43e3c3e',1,'xbt_cfg_check(xbt_cfg_t cfg): config.c'],['../group__XBT__cfg__register.html#ga6c53f538a2901ceca585e075e43e3c3e',1,'xbt_cfg_check(xbt_cfg_t cfg): config.c']]], ['xbt_5fcfg_5fcpy',['xbt_cfg_cpy',['../group__XBT__cfg__decl.html#gac679f68b23823dc08aceaefaf9b372da',1,'xbt_cfg_cpy(xbt_cfg_t tocopy, xbt_cfg_t *whereto): config.c'],['../group__XBT__cfg__decl.html#gac679f68b23823dc08aceaefaf9b372da',1,'xbt_cfg_cpy(xbt_cfg_t tocopy, xbt_cfg_t *whereto): config.c']]], ['xbt_5fcfg_5fdump',['xbt_cfg_dump',['../group__XBT__cfg__decl.html#ga9ef64a88e6fa46d78938b32247a29528',1,'xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cfg): config.c'],['../group__XBT__cfg__decl.html#ga9ef64a88e6fa46d78938b32247a29528',1,'xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cfg): config.c']]], ['xbt_5fcfg_5fempty',['xbt_cfg_empty',['../group__XBT__cfg__use.html#gabefb42525b7f81c273a9e15ebc2fc401',1,'xbt_cfg_empty(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__use.html#gabefb42525b7f81c273a9e15ebc2fc401',1,'xbt_cfg_empty(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5ffree',['xbt_cfg_free',['../group__XBT__cfg__decl.html#ga67592bfbe600c89f45f40ceeb7df2c9a',1,'xbt_cfg_free(xbt_cfg_t *cfg): config.c'],['../group__XBT__cfg__decl.html#ga67592bfbe600c89f45f40ceeb7df2c9a',1,'xbt_cfg_free(xbt_cfg_t *cfg): config.c']]], ['xbt_5fcfg_5fget_5fboolean',['xbt_cfg_get_boolean',['../group__XBT__cfg__get.html#ga09f8bb0889e37d084a28c43a86adb0c8',1,'xbt_cfg_get_boolean(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#ga09f8bb0889e37d084a28c43a86adb0c8',1,'xbt_cfg_get_boolean(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fboolean_5fat',['xbt_cfg_get_boolean_at',['../group__XBT__cfg__get.html#ga0802bc4a5f9d6e418c1ff9bdefa1e782',1,'xbt_cfg_get_boolean_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#ga0802bc4a5f9d6e418c1ff9bdefa1e782',1,'xbt_cfg_get_boolean_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5fdouble',['xbt_cfg_get_double',['../group__XBT__cfg__get.html#ga31012ed478ffd718fafac27b66f653b2',1,'xbt_cfg_get_double(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#ga31012ed478ffd718fafac27b66f653b2',1,'xbt_cfg_get_double(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fdouble_5fat',['xbt_cfg_get_double_at',['../group__XBT__cfg__get.html#gab893722f0ee3b17a6fe0ae7534f60d73',1,'xbt_cfg_get_double_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#gab893722f0ee3b17a6fe0ae7534f60d73',1,'xbt_cfg_get_double_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5fdynar',['xbt_cfg_get_dynar',['../group__XBT__cfg__get.html#gab69701ad4dbc805b23573f0e4ac02a6f',1,'xbt_cfg_get_dynar(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#gab69701ad4dbc805b23573f0e4ac02a6f',1,'xbt_cfg_get_dynar(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fint',['xbt_cfg_get_int',['../group__XBT__cfg__get.html#gaf058b35acfe7f058412fece263b9bede',1,'xbt_cfg_get_int(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#gaf058b35acfe7f058412fece263b9bede',1,'xbt_cfg_get_int(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fint_5fat',['xbt_cfg_get_int_at',['../group__XBT__cfg__get.html#gae59bb89c4d59bcc7a47193444369141f',1,'xbt_cfg_get_int_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#gae59bb89c4d59bcc7a47193444369141f',1,'xbt_cfg_get_int_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5fpeer',['xbt_cfg_get_peer',['../group__XBT__cfg__get.html#gad5690b3e30986f2b43e0fd0a92b3b553',1,'xbt_cfg_get_peer(xbt_cfg_t cfg, const char *name, char **peer, int *port): config.c'],['../group__XBT__cfg__get.html#gad5690b3e30986f2b43e0fd0a92b3b553',1,'xbt_cfg_get_peer(xbt_cfg_t cfg, const char *name, char **peer, int *port): config.c']]], ['xbt_5fcfg_5fget_5fpeer_5fat',['xbt_cfg_get_peer_at',['../group__XBT__cfg__get.html#ga0555ea640404cc5214c7243e6e91b070',1,'xbt_cfg_get_peer_at(xbt_cfg_t cfg, const char *name, int pos, char **peer, int *port): config.c'],['../group__XBT__cfg__get.html#ga0555ea640404cc5214c7243e6e91b070',1,'xbt_cfg_get_peer_at(xbt_cfg_t cfg, const char *name, int pos, char **peer, int *port): config.c']]], ['xbt_5fcfg_5fget_5fstring',['xbt_cfg_get_string',['../group__XBT__cfg__get.html#ga6e8854c299ca293a8531f3ac477babdd',1,'xbt_cfg_get_string(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__get.html#ga6e8854c299ca293a8531f3ac477babdd',1,'xbt_cfg_get_string(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fget_5fstring_5fat',['xbt_cfg_get_string_at',['../group__XBT__cfg__get.html#ga436a50804f44ad8d4cb7e3b4282c3cf4',1,'xbt_cfg_get_string_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__get.html#ga436a50804f44ad8d4cb7e3b4282c3cf4',1,'xbt_cfg_get_string_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5fget_5ftype',['xbt_cfg_get_type',['../group__XBT__cfg__register.html#ga754d4928f875979d3fe3dadbb5c3d32e',1,'xbt_cfg_get_type(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__register.html#ga754d4928f875979d3fe3dadbb5c3d32e',1,'xbt_cfg_get_type(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcfg_5fhelp',['xbt_cfg_help',['../group__XBT__cfg__register.html#ga20967f829423faa8b91e35978ef46252',1,'xbt_cfg_help(xbt_cfg_t cfg): config.c'],['../group__XBT__cfg__register.html#ga20967f829423faa8b91e35978ef46252',1,'xbt_cfg_help(xbt_cfg_t cfg): config.c']]], ['xbt_5fcfg_5fnew',['xbt_cfg_new',['../group__XBT__cfg__decl.html#ga25f767ddf162fcf5cf45c2aac58f47b8',1,'xbt_cfg_new(void): config.c'],['../group__XBT__cfg__decl.html#ga25f767ddf162fcf5cf45c2aac58f47b8',1,'xbt_cfg_new(void): config.c']]], ['xbt_5fcfg_5fregister',['xbt_cfg_register',['../group__XBT__cfg__register.html#gad60c5763f9eba3371840f7eb5eaccf6d',1,'xbt_cfg_register(xbt_cfg_t *cfg, const char *name, const char *description, e_xbt_cfgelm_type_t type, int min, int max, xbt_cfg_cb_t cb_set, xbt_cfg_cb_t cb_rm): config.c'],['../group__XBT__cfg__register.html#gad60c5763f9eba3371840f7eb5eaccf6d',1,'xbt_cfg_register(xbt_cfg_t *cfg, const char *name, const char *desc, e_xbt_cfgelm_type_t type, int min, int max, xbt_cfg_cb_t cb_set, xbt_cfg_cb_t cb_rm): config.c']]], ['xbt_5fcfg_5fregister_5fstr',['xbt_cfg_register_str',['../group__XBT__cfg__register.html#ga0dd096bfc41dc388b5d82a670dfe23f7',1,'xbt_cfg_register_str(xbt_cfg_t *cfg, const char *entry): config.c'],['../group__XBT__cfg__register.html#ga0dd096bfc41dc388b5d82a670dfe23f7',1,'xbt_cfg_register_str(xbt_cfg_t *cfg, const char *entry): config.c']]], ['xbt_5fcfg_5frm_5fat',['xbt_cfg_rm_at',['../group__XBT__cfg__use.html#gaf90fa7699759834310e5fc90d4cf2594',1,'xbt_cfg_rm_at(xbt_cfg_t cfg, const char *name, int pos): config.c'],['../group__XBT__cfg__use.html#gaf90fa7699759834310e5fc90d4cf2594',1,'xbt_cfg_rm_at(xbt_cfg_t cfg, const char *name, int pos): config.c']]], ['xbt_5fcfg_5frm_5fboolean',['xbt_cfg_rm_boolean',['../group__XBT__cfg__use.html#gaf3b2d88039707c69865da363c6a91fb9',1,'xbt_cfg_rm_boolean(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#gaf3b2d88039707c69865da363c6a91fb9',1,'xbt_cfg_rm_boolean(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5frm_5fdouble',['xbt_cfg_rm_double',['../group__XBT__cfg__use.html#gaca2fa14bf75f51960538227132d696d5',1,'xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, double val): config.c'],['../group__XBT__cfg__use.html#gaca2fa14bf75f51960538227132d696d5',1,'xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, double val): config.c']]], ['xbt_5fcfg_5frm_5fint',['xbt_cfg_rm_int',['../group__XBT__cfg__use.html#ga6dd959a8fc5ea496641f329423964681',1,'xbt_cfg_rm_int(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#ga6dd959a8fc5ea496641f329423964681',1,'xbt_cfg_rm_int(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5frm_5fpeer',['xbt_cfg_rm_peer',['../group__XBT__cfg__use.html#ga495c3de5609e29eb4a5a2edaff1e9119',1,'xbt_cfg_rm_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c'],['../group__XBT__cfg__use.html#ga495c3de5609e29eb4a5a2edaff1e9119',1,'xbt_cfg_rm_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c']]], ['xbt_5fcfg_5frm_5fstring',['xbt_cfg_rm_string',['../group__XBT__cfg__use.html#ga6b96677e59c03e920f616ef8f6f03db3',1,'xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga6b96677e59c03e920f616ef8f6f03db3',1,'xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fset',['xbt_cfg_set',['../group__XBT__cfg__use.html#ga7abcc7c8e0c839f5430ccc5bb04cd29b',1,'xbt_cfg_set(xbt_cfg_t cfg, const char *name,...): config.c'],['../group__XBT__cfg__use.html#ga7abcc7c8e0c839f5430ccc5bb04cd29b',1,'xbt_cfg_set(xbt_cfg_t cfg, const char *name,...): config.c']]], ['xbt_5fcfg_5fset_5fas_5fstring',['xbt_cfg_set_as_string',['../group__XBT__cfg__use.html#ga81ecaccf6e2ae624866d9e4bd4b71927',1,'xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga81ecaccf6e2ae624866d9e4bd4b71927',1,'xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *key, const char *value): config.c']]], ['xbt_5fcfg_5fset_5fboolean',['xbt_cfg_set_boolean',['../group__XBT__cfg__use.html#ga14463cfbdbd7d19e758e443ac96b7e70',1,'xbt_cfg_set_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga14463cfbdbd7d19e758e443ac96b7e70',1,'xbt_cfg_set_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fset_5fdouble',['xbt_cfg_set_double',['../group__XBT__cfg__use.html#ga660807bb21d0d7a3a0ac9219e2330dbe',1,'xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, double val): config.c'],['../group__XBT__cfg__use.html#ga660807bb21d0d7a3a0ac9219e2330dbe',1,'xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, double val): config.c']]], ['xbt_5fcfg_5fset_5fint',['xbt_cfg_set_int',['../group__XBT__cfg__use.html#ga593f941aa66b21104ebdaa2786a0265e',1,'xbt_cfg_set_int(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#ga593f941aa66b21104ebdaa2786a0265e',1,'xbt_cfg_set_int(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5fset_5fparse',['xbt_cfg_set_parse',['../group__XBT__cfg__use.html#ga660f47d0af70382a502cee9734e32229',1,'xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options): config.c'],['../group__XBT__cfg__use.html#ga660f47d0af70382a502cee9734e32229',1,'xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options): config.c']]], ['xbt_5fcfg_5fset_5fpeer',['xbt_cfg_set_peer',['../group__XBT__cfg__use.html#ga3ec95e8fb08cc7dffdc32fd7cb05f679',1,'xbt_cfg_set_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c'],['../group__XBT__cfg__use.html#ga3ec95e8fb08cc7dffdc32fd7cb05f679',1,'xbt_cfg_set_peer(xbt_cfg_t cfg, const char *name, const char *peer, int port): config.c']]], ['xbt_5fcfg_5fset_5fstring',['xbt_cfg_set_string',['../group__XBT__cfg__use.html#gaf42b4fd31ad45646a03638ef32fc5a26',1,'xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#gaf42b4fd31ad45646a03638ef32fc5a26',1,'xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fset_5fvargs',['xbt_cfg_set_vargs',['../group__XBT__cfg__use.html#gad36ce933af452e3f74373b7a88b097bd',1,'xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa): config.c'],['../group__XBT__cfg__use.html#gad36ce933af452e3f74373b7a88b097bd',1,'xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa): config.c']]], ['xbt_5fcfg_5fsetdefault_5fboolean',['xbt_cfg_setdefault_boolean',['../group__XBT__cfg__use.html#gafbcf5ece0a77ed07d6571b940eb1bcf7',1,'xbt_cfg_setdefault_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#gafbcf5ece0a77ed07d6571b940eb1bcf7',1,'xbt_cfg_setdefault_boolean(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5fsetdefault_5fdouble',['xbt_cfg_setdefault_double',['../group__XBT__cfg__use.html#gafa60b1f2d2e1351522f977cce3b54d99',1,'xbt_cfg_setdefault_double(xbt_cfg_t cfg, const char *name, double val): config.c'],['../group__XBT__cfg__use.html#gafa60b1f2d2e1351522f977cce3b54d99',1,'xbt_cfg_setdefault_double(xbt_cfg_t cfg, const char *name, double val): config.c']]], ['xbt_5fcfg_5fsetdefault_5fint',['xbt_cfg_setdefault_int',['../group__XBT__cfg__use.html#ga56c8db370b0a3ae4c638867a0e0911c0',1,'xbt_cfg_setdefault_int(xbt_cfg_t cfg, const char *name, int val): config.c'],['../group__XBT__cfg__use.html#ga56c8db370b0a3ae4c638867a0e0911c0',1,'xbt_cfg_setdefault_int(xbt_cfg_t cfg, const char *name, int val): config.c']]], ['xbt_5fcfg_5fsetdefault_5fpeer',['xbt_cfg_setdefault_peer',['../group__XBT__cfg__use.html#ga304c927c166b217d29eee9e18cb1e969',1,'xbt_cfg_setdefault_peer(xbt_cfg_t cfg, const char *name, const char *host, int port): config.c'],['../group__XBT__cfg__use.html#ga304c927c166b217d29eee9e18cb1e969',1,'xbt_cfg_setdefault_peer(xbt_cfg_t cfg, const char *name, const char *host, int port): config.c']]], ['xbt_5fcfg_5fsetdefault_5fstring',['xbt_cfg_setdefault_string',['../group__XBT__cfg__use.html#ga10751dc480c2ea9b0c9637c68ed359e6',1,'xbt_cfg_setdefault_string(xbt_cfg_t cfg, const char *name, const char *val): config.c'],['../group__XBT__cfg__use.html#ga10751dc480c2ea9b0c9637c68ed359e6',1,'xbt_cfg_setdefault_string(xbt_cfg_t cfg, const char *name, const char *val): config.c']]], ['xbt_5fcfg_5funregister',['xbt_cfg_unregister',['../group__XBT__cfg__register.html#gaec318f1ce663340e84726e5eb88ae81b',1,'xbt_cfg_unregister(xbt_cfg_t cfg, const char *name): config.c'],['../group__XBT__cfg__register.html#gaec318f1ce663340e84726e5eb88ae81b',1,'xbt_cfg_unregister(xbt_cfg_t cfg, const char *name): config.c']]], ['xbt_5fcond_5fbroadcast',['xbt_cond_broadcast',['../group__XBT__synchro.html#ga0d3469f3d7692423b82786ffa4e30c70',1,'xbt_cond_broadcast(xbt_cond_t cond): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga0d3469f3d7692423b82786ffa4e30c70',1,'xbt_cond_broadcast(xbt_cond_t cond): xbt_sg_synchro.c']]], ['xbt_5fcond_5fdestroy',['xbt_cond_destroy',['../group__XBT__synchro.html#ga8382820073c787494cafa0634e86c96f',1,'xbt_cond_destroy(xbt_cond_t cond): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga8382820073c787494cafa0634e86c96f',1,'xbt_cond_destroy(xbt_cond_t cond): xbt_sg_synchro.c']]], ['xbt_5fcond_5finit',['xbt_cond_init',['../group__XBT__synchro.html#ga9ec2fa18ad2edb1356034fb6c488a9a3',1,'xbt_cond_init(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga9ec2fa18ad2edb1356034fb6c488a9a3',1,'xbt_cond_init(void): xbt_sg_synchro.c']]], ['xbt_5fcond_5fsignal',['xbt_cond_signal',['../group__XBT__synchro.html#ga20471db1f98e58b75d8d58ed66e48438',1,'xbt_cond_signal(xbt_cond_t cond): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga20471db1f98e58b75d8d58ed66e48438',1,'xbt_cond_signal(xbt_cond_t cond): xbt_sg_synchro.c']]], ['xbt_5fcond_5ftimedwait',['xbt_cond_timedwait',['../group__XBT__synchro.html#ga2283204fd8b68891a404c4101542a7e3',1,'xbt_cond_timedwait(xbt_cond_t cond, xbt_mutex_t mutex, double delay): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga2283204fd8b68891a404c4101542a7e3',1,'xbt_cond_timedwait(xbt_cond_t cond, xbt_mutex_t mutex, double delay): xbt_sg_synchro.c']]], ['xbt_5fcond_5fwait',['xbt_cond_wait',['../group__XBT__synchro.html#ga083997cea536a10a81ed9cbdee741ab4',1,'xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga083997cea536a10a81ed9cbdee741ab4',1,'xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fdict_5fcursor_5ffirst',['xbt_dict_cursor_first',['../group__XBT__dict__curs.html#gaed25ac933321fa3837877f2210979db7',1,'xbt_dict_cursor_first(const xbt_dict_t dict, xbt_dict_cursor_t *cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#gaed25ac933321fa3837877f2210979db7',1,'xbt_dict_cursor_first(const xbt_dict_t dict, xbt_dict_cursor_t *cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5ffree',['xbt_dict_cursor_free',['../group__XBT__dict__curs.html#ga88eb8699e8778f9d1c5821da0bab1849',1,'xbt_dict_cursor_free(xbt_dict_cursor_t *cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga88eb8699e8778f9d1c5821da0bab1849',1,'xbt_dict_cursor_free(xbt_dict_cursor_t *cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fget_5fdata',['xbt_dict_cursor_get_data',['../group__XBT__dict__curs.html#ga2ebcfc14c62baafab95b9c994a2e6012',1,'xbt_dict_cursor_get_data(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga2ebcfc14c62baafab95b9c994a2e6012',1,'xbt_dict_cursor_get_data(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fget_5fkey',['xbt_dict_cursor_get_key',['../group__XBT__dict__curs.html#ga86b45796b83225553370f1ed2298bdba',1,'xbt_dict_cursor_get_key(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga86b45796b83225553370f1ed2298bdba',1,'xbt_dict_cursor_get_key(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fget_5for_5ffree',['xbt_dict_cursor_get_or_free',['../group__XBT__dict__curs.html#gad8ef9a04e0c50a3ed9a2dfa7ca36d599',1,'xbt_dict_cursor_get_or_free(xbt_dict_cursor_t *cursor, char **key, void **data): dict_cursor.c'],['../group__XBT__dict__curs.html#gad8ef9a04e0c50a3ed9a2dfa7ca36d599',1,'xbt_dict_cursor_get_or_free(xbt_dict_cursor_t *cursor, char **key, void **data): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fnew',['xbt_dict_cursor_new',['../group__XBT__dict__curs.html#ga5c29813d0de67603640f948b2d712209',1,'xbt_dict_cursor_new(const xbt_dict_t dict): dict_cursor.c'],['../group__XBT__dict__curs.html#ga5c29813d0de67603640f948b2d712209',1,'xbt_dict_cursor_new(const xbt_dict_t dict): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5frewind',['xbt_dict_cursor_rewind',['../group__XBT__dict__curs.html#ga0f0f7f26eef7dca0f3d837bac985a0ff',1,'xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga0f0f7f26eef7dca0f3d837bac985a0ff',1,'xbt_dict_cursor_rewind(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fset_5fdata',['xbt_dict_cursor_set_data',['../group__XBT__dict__curs.html#ga714c4490d2187b042a6993c68e860fad',1,'xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn): dict_cursor.c'],['../group__XBT__dict__curs.html#ga714c4490d2187b042a6993c68e860fad',1,'xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn): dict_cursor.c']]], ['xbt_5fdict_5fcursor_5fstep',['xbt_dict_cursor_step',['../group__XBT__dict__curs.html#ga9871423165388f7637dd67116b68044a',1,'xbt_dict_cursor_step(xbt_dict_cursor_t cursor): dict_cursor.c'],['../group__XBT__dict__curs.html#ga9871423165388f7637dd67116b68044a',1,'xbt_dict_cursor_step(xbt_dict_cursor_t cursor): dict_cursor.c']]], ['xbt_5fdict_5fdump',['xbt_dict_dump',['../group__XBT__dict__basic.html#ga7d8b3282a0599ed922bbac9c0686e456',1,'xbt_dict_dump(xbt_dict_t dict, void(*output)(void *)): dict.c'],['../group__XBT__dict__basic.html#ga7d8b3282a0599ed922bbac9c0686e456',1,'xbt_dict_dump(xbt_dict_t dict, void_f_pvoid_t output): dict.c']]], ['xbt_5fdict_5fdump_5foutput_5fstring',['xbt_dict_dump_output_string',['../group__XBT__dict__basic.html#ga38d0003fc16ce9d437c9cb1c7b2e4a8e',1,'xbt_dict_dump_output_string(void *s): dict.c'],['../group__XBT__dict__basic.html#ga38d0003fc16ce9d437c9cb1c7b2e4a8e',1,'xbt_dict_dump_output_string(void *s): dict.c']]], ['xbt_5fdict_5fdump_5fsizes',['xbt_dict_dump_sizes',['../group__XBT__dict__basic.html#gaa8c1e5beb5655c030df76fbcce9c9bbc',1,'xbt_dict_dump_sizes(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#gaa8c1e5beb5655c030df76fbcce9c9bbc',1,'xbt_dict_dump_sizes(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5ffree',['xbt_dict_free',['../group__XBT__dict__cons.html#ga35d2edf4086c13f0c096621aaf421c7d',1,'xbt_dict_free(xbt_dict_t *dict): dict.c'],['../group__XBT__dict__cons.html#ga35d2edf4086c13f0c096621aaf421c7d',1,'xbt_dict_free(xbt_dict_t *dict): dict.c']]], ['xbt_5fdict_5fget',['xbt_dict_get',['../group__XBT__dict__basic.html#gadc5080181f23fa2802b17b0982d76115',1,'xbt_dict_get(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gadc5080181f23fa2802b17b0982d76115',1,'xbt_dict_get(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5felm',['xbt_dict_get_elm',['../group__XBT__dict__basic.html#gab67a60fbdab0a809e15e0db87a146584',1,'xbt_dict_get_elm(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gab67a60fbdab0a809e15e0db87a146584',1,'xbt_dict_get_elm(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5felm_5for_5fnull',['xbt_dict_get_elm_or_null',['../group__XBT__dict__basic.html#gab3a92ff52f725fd7eff99ff619643272',1,'xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gab3a92ff52f725fd7eff99ff619643272',1,'xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5fext',['xbt_dict_get_ext',['../group__XBT__dict__nnul.html#ga7e5810ce5387ee78e25bb92c206deacd',1,'xbt_dict_get_ext(xbt_dict_t dict, const char *key, int key_len): dict.c'],['../group__XBT__dict__nnul.html#ga7e5810ce5387ee78e25bb92c206deacd',1,'xbt_dict_get_ext(xbt_dict_t dict, const char *key, int key_len): dict.c']]], ['xbt_5fdict_5fget_5fkey',['xbt_dict_get_key',['../group__XBT__dict__basic.html#ga16e3ad7d2a93d89b95582ad82d1ce100',1,'xbt_dict_get_key(xbt_dict_t dict, const void *data): dict.c'],['../group__XBT__dict__basic.html#ga16e3ad7d2a93d89b95582ad82d1ce100',1,'xbt_dict_get_key(xbt_dict_t dict, const void *data): dict.c']]], ['xbt_5fdict_5fget_5for_5fnull',['xbt_dict_get_or_null',['../group__XBT__dict__basic.html#gac1398f8a025c0f22195e74f2bd5522fa',1,'xbt_dict_get_or_null(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gac1398f8a025c0f22195e74f2bd5522fa',1,'xbt_dict_get_or_null(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fget_5for_5fnull_5fext',['xbt_dict_get_or_null_ext',['../group__XBT__dict__nnul.html#gabfcc7b250b01f46a4397946a7a104fd1',1,'xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key, int key_len): dict.c'],['../group__XBT__dict__nnul.html#gabfcc7b250b01f46a4397946a7a104fd1',1,'xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key, int key_len): dict.c']]], ['xbt_5fdict_5fis_5fempty',['xbt_dict_is_empty',['../group__XBT__dict__basic.html#ga68fb97981b63d246769f4b6fbbcb3eaf',1,'xbt_dict_is_empty(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#ga68fb97981b63d246769f4b6fbbcb3eaf',1,'xbt_dict_is_empty(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5flength',['xbt_dict_length',['../group__XBT__dict__basic.html#gac0cf96e5e13da996aac831d8d10f0985',1,'xbt_dict_length(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#gac0cf96e5e13da996aac831d8d10f0985',1,'xbt_dict_length(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5fnew',['xbt_dict_new',['../group__XBT__dict__cons.html#ga3f03623cb96849ab40db9b9af25ac38c',1,'xbt_dict_new(void): dict.c'],['../group__XBT__dict__cons.html#ga3f03623cb96849ab40db9b9af25ac38c',1,'xbt_dict_new(void): dict.c']]], ['xbt_5fdict_5fnew_5fhomogeneous',['xbt_dict_new_homogeneous',['../group__XBT__dict__cons.html#ga99fe5eb49d3fa9f1f31fb6d519fb7197',1,'xbt_dict_new_homogeneous(void_f_pvoid_t free_ctn): dict.c'],['../group__XBT__dict__cons.html#ga99fe5eb49d3fa9f1f31fb6d519fb7197',1,'xbt_dict_new_homogeneous(void_f_pvoid_t free_ctn): dict.c']]], ['xbt_5fdict_5fremove',['xbt_dict_remove',['../group__XBT__dict__basic.html#gac8befeb2dc3ba97fb0ff1d3da83f21fb',1,'xbt_dict_remove(xbt_dict_t dict, const char *key): dict.c'],['../group__XBT__dict__basic.html#gac8befeb2dc3ba97fb0ff1d3da83f21fb',1,'xbt_dict_remove(xbt_dict_t dict, const char *key): dict.c']]], ['xbt_5fdict_5fremove_5fext',['xbt_dict_remove_ext',['../group__XBT__dict__nnul.html#gad36d0be75e939e85ee17a9756332b6c4',1,'xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len): dict.c'],['../group__XBT__dict__nnul.html#gad36d0be75e939e85ee17a9756332b6c4',1,'xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len): dict.c']]], ['xbt_5fdict_5freset',['xbt_dict_reset',['../group__XBT__dict__basic.html#ga0fe854e3c13798e32ebc642c00be6ad4',1,'xbt_dict_reset(xbt_dict_t dict): dict.c'],['../group__XBT__dict__basic.html#ga0fe854e3c13798e32ebc642c00be6ad4',1,'xbt_dict_reset(xbt_dict_t dict): dict.c']]], ['xbt_5fdict_5fset',['xbt_dict_set',['../group__XBT__dict__basic.html#ga5167ca9336b1c9d5e2a3dacd6b702055',1,'xbt_dict_set(xbt_dict_t dict, const char *key, void *data, void_f_pvoid_t free_ctn): dict.c'],['../group__XBT__dict__basic.html#ga5167ca9336b1c9d5e2a3dacd6b702055',1,'xbt_dict_set(xbt_dict_t dict, const char *key, void *data, void_f_pvoid_t free_ctn): dict.c']]], ['xbt_5fdict_5fset_5fext',['xbt_dict_set_ext',['../group__XBT__dict__nnul.html#gac10a4d2fd3a86576c1be1b61811317d8',1,'xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn): dict.c'],['../group__XBT__dict__nnul.html#gac10a4d2fd3a86576c1be1b61811317d8',1,'xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn): dict.c']]], ['xbt_5fdict_5fsize',['xbt_dict_size',['../group__XBT__dict__cons.html#ga79130ac36df5cbdc334a3424a92eff5d',1,'xbt_dict_size(xbt_dict_t dict): dict.c'],['../group__XBT__dict__cons.html#ga79130ac36df5cbdc334a3424a92eff5d',1,'xbt_dict_size(xbt_dict_t dict): dict.c']]], ['xbt_5fdynar_5fcursor_5frm',['xbt_dynar_cursor_rm',['../group__XBT__dynar__cursor.html#ga478b49fe9e8280b4c73b9ccd208a4f78',1,'xbt_dynar_cursor_rm(xbt_dynar_t dynar, unsigned int *const cursor): dynar.c'],['../group__XBT__dynar__cursor.html#ga478b49fe9e8280b4c73b9ccd208a4f78',1,'xbt_dynar_cursor_rm(xbt_dynar_t dynar, unsigned int *const cursor): dynar.c']]], ['xbt_5fdynar_5ffree',['xbt_dynar_free',['../group__XBT__dynar__cons.html#ga9b7808eb7a87dcf331a467f323ae16a6',1,'xbt_dynar_free(xbt_dynar_t *dynar): dynar.c'],['../group__XBT__dynar__cons.html#ga9b7808eb7a87dcf331a467f323ae16a6',1,'xbt_dynar_free(xbt_dynar_t *dynar): dynar.c']]], ['xbt_5fdynar_5ffree_5fcontainer',['xbt_dynar_free_container',['../group__XBT__dynar__cons.html#ga7bc3c4dffd7740c9c1ea129d1167c0bc',1,'xbt_dynar_free_container(xbt_dynar_t *dynar): dynar.c'],['../group__XBT__dynar__cons.html#ga7bc3c4dffd7740c9c1ea129d1167c0bc',1,'xbt_dynar_free_container(xbt_dynar_t *dynar): dynar.c']]], ['xbt_5fdynar_5ffree_5fvoidp',['xbt_dynar_free_voidp',['../group__XBT__dynar__cons.html#gacab2aaa46863a53beaa1637bd41995aa',1,'xbt_dynar_free_voidp(void *dynar): dynar.c'],['../group__XBT__dynar__cons.html#gacab2aaa46863a53beaa1637bd41995aa',1,'xbt_dynar_free_voidp(void *d): dynar.c']]], ['xbt_5fdynar_5fget_5fcpy',['xbt_dynar_get_cpy',['../group__XBT__dynar__array.html#ga21d02c5fc8289c0bfc6c7d57222bcf90',1,'xbt_dynar_get_cpy(const xbt_dynar_t dynar, const unsigned long idx, void *const dst): dynar.c'],['../group__XBT__dynar__array.html#ga21d02c5fc8289c0bfc6c7d57222bcf90',1,'xbt_dynar_get_cpy(const xbt_dynar_t dynar, const unsigned long idx, void *const dst): dynar.c']]], ['xbt_5fdynar_5fget_5fptr',['xbt_dynar_get_ptr',['../group__XBT__dynar__ctn.html#ga7cee77666f148fc987bbdeca3d10bdc2',1,'xbt_dynar_get_ptr(const xbt_dynar_t dynar, const unsigned long idx): dynar.c'],['../group__XBT__dynar__ctn.html#ga7cee77666f148fc987bbdeca3d10bdc2',1,'xbt_dynar_get_ptr(const xbt_dynar_t dynar, const unsigned long idx): dynar.c']]], ['xbt_5fdynar_5finsert_5fat',['xbt_dynar_insert_at',['../group__XBT__dynar__array.html#ga26fe1c942bfecc8261d3fd9bc4df9bab',1,'xbt_dynar_insert_at(xbt_dynar_t const dynar, const int idx, const void *src): dynar.c'],['../group__XBT__dynar__array.html#ga26fe1c942bfecc8261d3fd9bc4df9bab',1,'xbt_dynar_insert_at(xbt_dynar_t const dynar, const int idx, const void *const src): dynar.c']]], ['xbt_5fdynar_5finsert_5fat_5fptr',['xbt_dynar_insert_at_ptr',['../group__XBT__dynar__ctn.html#ga06afc0831b210b5323e61a9a217d6158',1,'xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, const int idx): dynar.c'],['../group__XBT__dynar__ctn.html#ga06afc0831b210b5323e61a9a217d6158',1,'xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, const int idx): dynar.c']]], ['xbt_5fdynar_5fis_5fempty',['xbt_dynar_is_empty',['../group__XBT__dynar__misc.html#ga57aab83ad4ff1a1df5a1c293627c41d8',1,'xbt_dynar_is_empty(const xbt_dynar_t dynar): dynar.c'],['../group__XBT__dynar__misc.html#ga57aab83ad4ff1a1df5a1c293627c41d8',1,'xbt_dynar_is_empty(const xbt_dynar_t dynar): dynar.c']]], ['xbt_5fdynar_5flength',['xbt_dynar_length',['../group__XBT__dynar__misc.html#ga3beec123eb77ceda5b750f6f2ca48e18',1,'xbt_dynar_length(const xbt_dynar_t dynar): dynar.c'],['../group__XBT__dynar__misc.html#ga3beec123eb77ceda5b750f6f2ca48e18',1,'xbt_dynar_length(const xbt_dynar_t dynar): dynar.c']]], ['xbt_5fdynar_5fmap',['xbt_dynar_map',['../group__XBT__dynar__perl.html#ga02bb7b95aaa0fe03c26222f65566e744',1,'xbt_dynar_map(const xbt_dynar_t dynar, void_f_pvoid_t const op): dynar.c'],['../group__XBT__dynar__perl.html#ga02bb7b95aaa0fe03c26222f65566e744',1,'xbt_dynar_map(const xbt_dynar_t dynar, void_f_pvoid_t const op): dynar.c']]], ['xbt_5fdynar_5fmember',['xbt_dynar_member',['../group__XBT__dynar__array.html#gaa1f2f12b574997619e36d46ac747f880',1,'xbt_dynar_member(xbt_dynar_t const dynar, void *elem): dynar.c'],['../group__XBT__dynar__array.html#gaa1f2f12b574997619e36d46ac747f880',1,'xbt_dynar_member(xbt_dynar_t const dynar, void *const elem): dynar.c']]], ['xbt_5fdynar_5fmerge',['xbt_dynar_merge',['../group__XBT__dynar__misc.html#ga92e52b3898cb02ad47244b88ab7895e4',1,'xbt_dynar_merge(xbt_dynar_t *d1, xbt_dynar_t *d2): dynar.c'],['../group__XBT__dynar__misc.html#ga92e52b3898cb02ad47244b88ab7895e4',1,'xbt_dynar_merge(xbt_dynar_t *d1, xbt_dynar_t *d2): dynar.c']]], ['xbt_5fdynar_5fnew',['xbt_dynar_new',['../group__XBT__dynar__cons.html#ga69ab371f667dfe5aa51fb612b9afaca5',1,'xbt_dynar_new(const unsigned long elm_size, void_f_pvoid_t const free_f): dynar.c'],['../group__XBT__dynar__cons.html#ga69ab371f667dfe5aa51fb612b9afaca5',1,'xbt_dynar_new(const unsigned long elmsize, void_f_pvoid_t const free_f): dynar.c']]], ['xbt_5fdynar_5fpop',['xbt_dynar_pop',['../group__XBT__dynar__perl.html#ga37d2b11c522e02ede79a12a89575ceb1',1,'xbt_dynar_pop(xbt_dynar_t const dynar, void *const dst): dynar.c'],['../group__XBT__dynar__perl.html#ga37d2b11c522e02ede79a12a89575ceb1',1,'xbt_dynar_pop(xbt_dynar_t const dynar, void *const dst): dynar.c']]], ['xbt_5fdynar_5fpop_5fptr',['xbt_dynar_pop_ptr',['../group__XBT__dynar__ctn.html#ga4f1ef94eae8a2060697a9674d46f0c2f',1,'xbt_dynar_pop_ptr(xbt_dynar_t const dynar): dynar.c'],['../group__XBT__dynar__ctn.html#ga4f1ef94eae8a2060697a9674d46f0c2f',1,'xbt_dynar_pop_ptr(xbt_dynar_t const dynar): dynar.c']]], ['xbt_5fdynar_5fpush',['xbt_dynar_push',['../group__XBT__dynar__perl.html#gac89da4c2c302218759c7fe477d8eacc0',1,'xbt_dynar_push(xbt_dynar_t const dynar, const void *src): dynar.c'],['../group__XBT__dynar__perl.html#gac89da4c2c302218759c7fe477d8eacc0',1,'xbt_dynar_push(xbt_dynar_t const dynar, const void *const src): dynar.c']]], ['xbt_5fdynar_5fpush_5fptr',['xbt_dynar_push_ptr',['../group__XBT__dynar__ctn.html#ga35272457aa299d326977767a00e01ffe',1,'xbt_dynar_push_ptr(xbt_dynar_t const dynar): dynar.c'],['../group__XBT__dynar__ctn.html#ga35272457aa299d326977767a00e01ffe',1,'xbt_dynar_push_ptr(xbt_dynar_t const dynar): dynar.c']]], ['xbt_5fdynar_5fremove_5fat',['xbt_dynar_remove_at',['../group__XBT__dynar__array.html#ga32a7eaf157e28533482cda7d84460705',1,'xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void *const dst): dynar.c'],['../group__XBT__dynar__array.html#ga32a7eaf157e28533482cda7d84460705',1,'xbt_dynar_remove_at(xbt_dynar_t const dynar, const int idx, void *const object): dynar.c']]], ['xbt_5fdynar_5fremove_5fn_5fat',['xbt_dynar_remove_n_at',['../group__XBT__dynar__array.html#ga2e5d288ac2ec53692fb0d56cbb213411',1,'xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned int n, const int idx): dynar.c'],['../group__XBT__dynar__array.html#ga2e5d288ac2ec53692fb0d56cbb213411',1,'xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned int n, const int idx): dynar.c']]], ['xbt_5fdynar_5freplace',['xbt_dynar_replace',['../group__XBT__dynar__array.html#ga22ccf4f0b47dd4a187af2e0a05abd323',1,'xbt_dynar_replace(xbt_dynar_t dynar, const unsigned long idx, const void *object): dynar.c'],['../group__XBT__dynar__array.html#ga22ccf4f0b47dd4a187af2e0a05abd323',1,'xbt_dynar_replace(xbt_dynar_t dynar, const unsigned long idx, const void *const object): dynar.c']]], ['xbt_5fdynar_5freset',['xbt_dynar_reset',['../group__XBT__dynar__misc.html#gadbe6a462084ca281bab5ac3a1585097e',1,'xbt_dynar_reset(xbt_dynar_t const dynar): dynar.c'],['../group__XBT__dynar__misc.html#gadbe6a462084ca281bab5ac3a1585097e',1,'xbt_dynar_reset(xbt_dynar_t const dynar): dynar.c']]], ['xbt_5fdynar_5fsearch',['xbt_dynar_search',['../group__XBT__dynar__array.html#ga0ec08fdba0bad2c1ef0e07269564edcd',1,'xbt_dynar_search(xbt_dynar_t const dynar, void *elem): dynar.c'],['../group__XBT__dynar__array.html#ga0ec08fdba0bad2c1ef0e07269564edcd',1,'xbt_dynar_search(xbt_dynar_t const dynar, void *const elem): dynar.c']]], ['xbt_5fdynar_5fsearch_5for_5fnegative',['xbt_dynar_search_or_negative',['../group__XBT__dynar__array.html#gafff87cf8f67e2cc57e783a7c740a476e',1,'xbt_dynar_search_or_negative(xbt_dynar_t const dynar, void *const elem): dynar.c'],['../group__XBT__dynar__array.html#gafff87cf8f67e2cc57e783a7c740a476e',1,'xbt_dynar_search_or_negative(xbt_dynar_t const dynar, void *const elem): dynar.c']]], ['xbt_5fdynar_5fset',['xbt_dynar_set',['../group__XBT__dynar__array.html#ga145c591bf6e4e58edaeeda85e639ff8e',1,'xbt_dynar_set(xbt_dynar_t dynar, const int idx, const void *src): dynar.c'],['../group__XBT__dynar__array.html#ga145c591bf6e4e58edaeeda85e639ff8e',1,'xbt_dynar_set(xbt_dynar_t dynar, const int idx, const void *const src): dynar.c']]], ['xbt_5fdynar_5fshift',['xbt_dynar_shift',['../group__XBT__dynar__perl.html#ga2966d02b350ef985447c4053c258a1a0',1,'xbt_dynar_shift(xbt_dynar_t const dynar, void *const dst): dynar.c'],['../group__XBT__dynar__perl.html#ga2966d02b350ef985447c4053c258a1a0',1,'xbt_dynar_shift(xbt_dynar_t const dynar, void *const dst): dynar.c']]], ['xbt_5fdynar_5fshrink',['xbt_dynar_shrink',['../group__XBT__dynar__cons.html#ga8c1a192e8119147d92eaf873a2861fc0',1,'xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots): dynar.c'],['../group__XBT__dynar__cons.html#ga8c1a192e8119147d92eaf873a2861fc0',1,'xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots_wanted): dynar.c']]], ['xbt_5fdynar_5fsort',['xbt_dynar_sort',['../group__XBT__dynar__array.html#ga666d4ca5510ffa9f2cc9a1463c19e935',1,'xbt_dynar_sort(xbt_dynar_t const dynar, int_f_cpvoid_cpvoid_t compar_fn): dynar.c'],['../group__XBT__dynar__array.html#ga666d4ca5510ffa9f2cc9a1463c19e935',1,'xbt_dynar_sort(xbt_dynar_t dynar, int_f_cpvoid_cpvoid_t compar_fn): dynar.c']]], ['xbt_5fdynar_5fthree_5fway_5fpartition',['xbt_dynar_three_way_partition',['../group__XBT__dynar__array.html#ga136826efe107769033d82e9d162ff65d',1,'xbt_dynar_three_way_partition(xbt_dynar_t const dynar, int_f_pvoid_t color): dynar.c'],['../group__XBT__dynar__array.html#ga136826efe107769033d82e9d162ff65d',1,'xbt_dynar_three_way_partition(xbt_dynar_t const dynar, int_f_pvoid_t color): dynar.c']]], ['xbt_5fdynar_5fto_5farray',['xbt_dynar_to_array',['../group__XBT__dynar__array.html#ga8fb5745b688cae53556f69b8e728ef70',1,'xbt_dynar_to_array(xbt_dynar_t dynar): dynar.c'],['../group__XBT__dynar__array.html#ga8fb5745b688cae53556f69b8e728ef70',1,'xbt_dynar_to_array(xbt_dynar_t dynar): dynar.c']]], ['xbt_5fdynar_5funshift',['xbt_dynar_unshift',['../group__XBT__dynar__perl.html#ga3499315d48944f3bfaf6aeea1e2c75e8',1,'xbt_dynar_unshift(xbt_dynar_t const dynar, const void *src): dynar.c'],['../group__XBT__dynar__perl.html#ga3499315d48944f3bfaf6aeea1e2c75e8',1,'xbt_dynar_unshift(xbt_dynar_t const dynar, const void *const src): dynar.c']]], ['xbt_5fex_5fcatname',['xbt_ex_catname',['../group__XBT__ex.html#gad584839e617fbfe728225fc7bcfcda9f',1,'xbt_ex_catname(xbt_errcat_t cat): ex.c'],['../group__XBT__ex.html#gad584839e617fbfe728225fc7bcfcda9f',1,'xbt_ex_catname(xbt_errcat_t cat): ex.c']]], ['xbt_5fex_5ffree',['xbt_ex_free',['../group__XBT__ex.html#ga9a7c9f33be5ab51ff734142b07178553',1,'ex.h']]], ['xbt_5ffifo_5fcopy',['xbt_fifo_copy',['../group__XBT__fifo__misc.html#ga9fc2652fb4c1d80adbf4f8e7267846fd',1,'xbt_fifo_copy(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__misc.html#ga9fc2652fb4c1d80adbf4f8e7267846fd',1,'xbt_fifo_copy(xbt_fifo_t f): fifo.c']]], ['xbt_5ffifo_5ffree',['xbt_fifo_free',['../group__XBT__fifo__cons.html#ga7e4e0a12b0bb5a0cc761e926a6ec8ea7',1,'xbt_fifo_free(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__cons.html#ga7e4e0a12b0bb5a0cc761e926a6ec8ea7',1,'xbt_fifo_free(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5ffree_5fitem',['xbt_fifo_free_item',['../group__XBT__fifo__direct.html#ga4bfc376902e2e15da4acb31c2ac77d84',1,'xbt_fifo_free_item(xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#ga4bfc376902e2e15da4acb31c2ac77d84',1,'xbt_fifo_free_item(xbt_fifo_item_t b): fifo.c']]], ['xbt_5ffifo_5fget_5ffirst_5fitem',['xbt_fifo_get_first_item',['../group__XBT__fifo__direct.html#gadde4755e50e84bf3235182227cdc1580',1,'xbt_fifo_get_first_item(xbt_fifo_t l): fifo.c'],['../group__XBT__fifo__direct.html#gadde4755e50e84bf3235182227cdc1580',1,'xbt_fifo_get_first_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fget_5fitem_5fcontent',['xbt_fifo_get_item_content',['../group__XBT__fifo__direct.html#ga601af16f78f6f1753477ce8e91eece01',1,'xbt_fifo_get_item_content(xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#ga601af16f78f6f1753477ce8e91eece01',1,'xbt_fifo_get_item_content(xbt_fifo_item_t i): fifo.c']]], ['xbt_5ffifo_5fget_5flast_5fitem',['xbt_fifo_get_last_item',['../group__XBT__fifo__direct.html#ga8cbb245158703f78cab3d076804eaa61',1,'xbt_fifo_get_last_item(xbt_fifo_t l): fifo.c'],['../group__XBT__fifo__direct.html#ga8cbb245158703f78cab3d076804eaa61',1,'xbt_fifo_get_last_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fget_5fnext_5fitem',['xbt_fifo_get_next_item',['../group__XBT__fifo__direct.html#ga6fde465c7d19469ee07e28d7ae5f611b',1,'xbt_fifo_get_next_item(xbt_fifo_item_t i): fifo.c'],['../group__XBT__fifo__direct.html#ga6fde465c7d19469ee07e28d7ae5f611b',1,'xbt_fifo_get_next_item(xbt_fifo_item_t i): fifo.c']]], ['xbt_5ffifo_5fget_5fprev_5fitem',['xbt_fifo_get_prev_item',['../group__XBT__fifo__direct.html#gac47a383a08e9c08cc4dd5bf29cd50994',1,'xbt_fifo_get_prev_item(xbt_fifo_item_t i): fifo.c'],['../group__XBT__fifo__direct.html#gac47a383a08e9c08cc4dd5bf29cd50994',1,'xbt_fifo_get_prev_item(xbt_fifo_item_t i): fifo.c']]], ['xbt_5ffifo_5fis_5fin',['xbt_fifo_is_in',['../group__XBT__fifo__perl.html#ga29753ca3f59d8e810bcee69304cd8b42',1,'xbt_fifo_is_in(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__perl.html#ga29753ca3f59d8e810bcee69304cd8b42',1,'xbt_fifo_is_in(xbt_fifo_t f, void *content): fifo.c']]], ['xbt_5ffifo_5fnew',['xbt_fifo_new',['../group__XBT__fifo__cons.html#ga2797ae0ae47b096ffdd99fbd60d8402d',1,'xbt_fifo_new(void): fifo.c'],['../group__XBT__fifo__cons.html#ga2797ae0ae47b096ffdd99fbd60d8402d',1,'xbt_fifo_new(void): fifo.c']]], ['xbt_5ffifo_5fnew_5fitem',['xbt_fifo_new_item',['../group__XBT__fifo__direct.html#gad9f577f95ac147ed876083d60166a662',1,'xbt_fifo_new_item(void): fifo.c'],['../group__XBT__fifo__direct.html#gad9f577f95ac147ed876083d60166a662',1,'xbt_fifo_new_item(void): fifo.c']]], ['xbt_5ffifo_5fpop',['xbt_fifo_pop',['../group__XBT__fifo__perl.html#gaa8ae3369665727b54c3c3d0f5c1e91be',1,'xbt_fifo_pop(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__perl.html#gaa8ae3369665727b54c3c3d0f5c1e91be',1,'xbt_fifo_pop(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fpop_5fitem',['xbt_fifo_pop_item',['../group__XBT__fifo__direct.html#ga32cfb8161a224dafafbf3f667d8257aa',1,'xbt_fifo_pop_item(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__direct.html#ga32cfb8161a224dafafbf3f667d8257aa',1,'xbt_fifo_pop_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fpush',['xbt_fifo_push',['../group__XBT__fifo__perl.html#ga62606f494627c7be494082bb2a239f7a',1,'xbt_fifo_push(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__perl.html#ga62606f494627c7be494082bb2a239f7a',1,'xbt_fifo_push(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5fpush_5fitem',['xbt_fifo_push_item',['../group__XBT__fifo__direct.html#gae1266d2dc81fc9d46334500682756b93',1,'xbt_fifo_push_item(xbt_fifo_t, xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#gae1266d2dc81fc9d46334500682756b93',1,'xbt_fifo_push_item(xbt_fifo_t l, xbt_fifo_item_t new): fifo.c']]], ['xbt_5ffifo_5fremove',['xbt_fifo_remove',['../group__XBT__fifo__direct.html#gafae46252cee20c382f9ce4f2e2573135',1,'xbt_fifo_remove(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__direct.html#gafae46252cee20c382f9ce4f2e2573135',1,'xbt_fifo_remove(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5fremove_5fall',['xbt_fifo_remove_all',['../group__XBT__fifo__direct.html#ga0662ae632f8f72753074f0cf234f8c46',1,'xbt_fifo_remove_all(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__direct.html#ga0662ae632f8f72753074f0cf234f8c46',1,'xbt_fifo_remove_all(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5fremove_5fitem',['xbt_fifo_remove_item',['../group__XBT__fifo__direct.html#gabd68f9b13a5e4984224760e9e5afed3b',1,'xbt_fifo_remove_item(xbt_fifo_t, xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#gabd68f9b13a5e4984224760e9e5afed3b',1,'xbt_fifo_remove_item(xbt_fifo_t l, xbt_fifo_item_t current): fifo.c']]], ['xbt_5ffifo_5freset',['xbt_fifo_reset',['../group__XBT__fifo__cons.html#ga028b8b135de99c5526269b5c124093cf',1,'xbt_fifo_reset(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__cons.html#ga028b8b135de99c5526269b5c124093cf',1,'xbt_fifo_reset(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fsearch_5fitem',['xbt_fifo_search_item',['../group__XBT__fifo__perl.html#ga1010933a447b08cbc125304c66587da7',1,'xbt_fifo_search_item(xbt_fifo_t f, int_f_pvoid_pvoid_t cmp_fun, void *closure): fifo.c'],['../group__XBT__fifo__perl.html#ga1010933a447b08cbc125304c66587da7',1,'xbt_fifo_search_item(xbt_fifo_t f, int_f_pvoid_pvoid_t cmp_fun, void *closure): fifo.c']]], ['xbt_5ffifo_5fset_5fitem_5fcontent',['xbt_fifo_set_item_content',['../group__XBT__fifo__direct.html#ga3a95882cc4858a10fa29216c939eb1b4',1,'xbt_fifo_set_item_content(xbt_fifo_item_t, void *): fifo.c'],['../group__XBT__fifo__direct.html#ga3a95882cc4858a10fa29216c939eb1b4',1,'xbt_fifo_set_item_content(xbt_fifo_item_t i, void *v): fifo.c']]], ['xbt_5ffifo_5fshift',['xbt_fifo_shift',['../group__XBT__fifo__perl.html#ga79a99aa3de3fb2d15836fffca5e28c83',1,'xbt_fifo_shift(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__perl.html#ga79a99aa3de3fb2d15836fffca5e28c83',1,'xbt_fifo_shift(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fshift_5fitem',['xbt_fifo_shift_item',['../group__XBT__fifo__direct.html#ga46dbde2e3359af8a79f2d4da7582d18c',1,'xbt_fifo_shift_item(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__direct.html#ga46dbde2e3359af8a79f2d4da7582d18c',1,'xbt_fifo_shift_item(xbt_fifo_t l): fifo.c']]], ['xbt_5ffifo_5fsize',['xbt_fifo_size',['../group__XBT__fifo__perl.html#gad7fdf56ec51e0c1ec442225b3e3ccc07',1,'xbt_fifo_size(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__perl.html#gad7fdf56ec51e0c1ec442225b3e3ccc07',1,'xbt_fifo_size(xbt_fifo_t f): fifo.c']]], ['xbt_5ffifo_5fto_5farray',['xbt_fifo_to_array',['../group__XBT__fifo__misc.html#ga0a85e5e8e1e0774885f73614f3a40770',1,'xbt_fifo_to_array(xbt_fifo_t): fifo.c'],['../group__XBT__fifo__misc.html#ga0a85e5e8e1e0774885f73614f3a40770',1,'xbt_fifo_to_array(xbt_fifo_t f): fifo.c']]], ['xbt_5ffifo_5funshift',['xbt_fifo_unshift',['../group__XBT__fifo__perl.html#gad165b0eb7ea833480776eb02062da45f',1,'xbt_fifo_unshift(xbt_fifo_t, void *): fifo.c'],['../group__XBT__fifo__perl.html#gad165b0eb7ea833480776eb02062da45f',1,'xbt_fifo_unshift(xbt_fifo_t l, void *t): fifo.c']]], ['xbt_5ffifo_5funshift_5fitem',['xbt_fifo_unshift_item',['../group__XBT__fifo__direct.html#gab5d6b760390ffc095f35f50e5bfd890a',1,'xbt_fifo_unshift_item(xbt_fifo_t, xbt_fifo_item_t): fifo.c'],['../group__XBT__fifo__direct.html#gab5d6b760390ffc095f35f50e5bfd890a',1,'xbt_fifo_unshift_item(xbt_fifo_t l, xbt_fifo_item_t new): fifo.c']]], ['xbt_5ffree_5fref',['xbt_free_ref',['../group__XBT__syscall.html#gadc6cc4c3185be3635bb1ef2d9528f67a',1,'xbt_free_ref(void *d): xbt_main.c'],['../group__XBT__syscall.html#gadc6cc4c3185be3635bb1ef2d9528f67a',1,'xbt_free_ref(void *d): xbt_main.c']]], ['xbt_5fgetline',['xbt_getline',['../group__XBT__str.html#ga7e85b04b6111d11c26329b4b6d2bfb89',1,'xbt_getline(char **lineptr, size_t *n, FILE *stream): xbt_str.c'],['../group__XBT__str.html#ga7e85b04b6111d11c26329b4b6d2bfb89',1,'xbt_getline(char **buf, size_t *n, FILE *stream): xbt_str.c']]], ['xbt_5fgraph_5fedge_5fget_5fdata',['xbt_graph_edge_get_data',['../group__XBT__graph.html#ga7105c211e327da8f90b432224451cfb3',1,'xbt_graph_edge_get_data(xbt_edge_t edge): graph.c'],['../group__XBT__graph.html#ga7105c211e327da8f90b432224451cfb3',1,'xbt_graph_edge_get_data(xbt_edge_t edge): graph.c']]], ['xbt_5fgraph_5fedge_5fget_5flength',['xbt_graph_edge_get_length',['../group__XBT__graph.html#gac906c4328b3d910457c960cd64d70784',1,'xbt_graph_edge_get_length(xbt_edge_t e): graph.c'],['../group__XBT__graph.html#gac906c4328b3d910457c960cd64d70784',1,'xbt_graph_edge_get_length(xbt_edge_t edge): graph.c']]], ['xbt_5fgraph_5fedge_5fget_5fsource',['xbt_graph_edge_get_source',['../group__XBT__graph.html#ga8946bd8838820677e2e44e793be2c9e6',1,'xbt_graph_edge_get_source(xbt_edge_t e): graph.c'],['../group__XBT__graph.html#ga8946bd8838820677e2e44e793be2c9e6',1,'xbt_graph_edge_get_source(xbt_edge_t e): graph.c']]], ['xbt_5fgraph_5fedge_5fget_5ftarget',['xbt_graph_edge_get_target',['../group__XBT__graph.html#ga137cf4ffadf401a1080795664d99834a',1,'xbt_graph_edge_get_target(xbt_edge_t e): graph.c'],['../group__XBT__graph.html#ga137cf4ffadf401a1080795664d99834a',1,'xbt_graph_edge_get_target(xbt_edge_t e): graph.c']]], ['xbt_5fgraph_5fedge_5fset_5fdata',['xbt_graph_edge_set_data',['../group__XBT__graph.html#ga9cbe4fe591cf0d6746909db9ae2cd2aa',1,'xbt_graph_edge_set_data(xbt_edge_t edge, void *data): graph.c'],['../group__XBT__graph.html#ga9cbe4fe591cf0d6746909db9ae2cd2aa',1,'xbt_graph_edge_set_data(xbt_edge_t edge, void *data): graph.c']]], ['xbt_5fgraph_5fedge_5fset_5flength',['xbt_graph_edge_set_length',['../group__XBT__graph.html#ga68339a976c82e67edf79fa59d4619396',1,'xbt_graph_edge_set_length(xbt_edge_t e, double length): graph.c'],['../group__XBT__graph.html#ga68339a976c82e67edf79fa59d4619396',1,'xbt_graph_edge_set_length(xbt_edge_t e, double length): graph.c']]], ['xbt_5fgraph_5fexport_5fgraphviz',['xbt_graph_export_graphviz',['../group__XBT__graph.html#gacbbb619bcd7032ba6c0f8e932126d26b',1,'xbt_graph_export_graphviz(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t)): graph.c'],['../group__XBT__graph.html#gacbbb619bcd7032ba6c0f8e932126d26b',1,'xbt_graph_export_graphviz(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t)): graph.c']]], ['xbt_5fgraph_5fexport_5fgraphxml',['xbt_graph_export_graphxml',['../group__XBT__graph.html#ga59db9ffe13c1c4e4012e61fe38525363',1,'xbt_graph_export_graphxml(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t), const char *(node_data_print)(void *), const char *(edge_data_print)(void *)): graph.c'],['../group__XBT__graph.html#ga59db9ffe13c1c4e4012e61fe38525363',1,'xbt_graph_export_graphxml(xbt_graph_t g, const char *filename, const char *(node_name)(xbt_node_t), const char *(edge_name)(xbt_edge_t), const char *(node_data_print)(void *), const char *(edge_data_print)(void *)): graph.c']]], ['xbt_5fgraph_5ffree_5fedge',['xbt_graph_free_edge',['../group__XBT__graph.html#ga6b9895d6065b7e122bc55c71e32da821',1,'xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e, void_f_pvoid_t free_function): graph.c'],['../group__XBT__graph.html#ga6b9895d6065b7e122bc55c71e32da821',1,'xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e, void_f_pvoid_t free_function): graph.c']]], ['xbt_5fgraph_5ffree_5fgraph',['xbt_graph_free_graph',['../group__XBT__graph.html#gad290d4c3fa3f0c82f7f6cc18a3506546',1,'xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function): graph.c'],['../group__XBT__graph.html#gad290d4c3fa3f0c82f7f6cc18a3506546',1,'xbt_graph_free_graph(xbt_graph_t g, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function): graph.c']]], ['xbt_5fgraph_5ffree_5fnode',['xbt_graph_free_node',['../group__XBT__graph.html#ga966d2089b5392e5f556a6d149bdc112c',1,'xbt_graph_free_node(xbt_graph_t g, xbt_node_t n, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function): graph.c'],['../group__XBT__graph.html#ga966d2089b5392e5f556a6d149bdc112c',1,'xbt_graph_free_node(xbt_graph_t g, xbt_node_t n, void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function): graph.c']]], ['xbt_5fgraph_5fget_5fedge',['xbt_graph_get_edge',['../group__XBT__graph.html#ga4a037e91f75ccee400b51b5564720693',1,'xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst): graph.c'],['../group__XBT__graph.html#ga4a037e91f75ccee400b51b5564720693',1,'xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst): graph.c']]], ['xbt_5fgraph_5fget_5fedges',['xbt_graph_get_edges',['../group__XBT__graph.html#ga1c292fb71d5119d59496a89d90a8ba30',1,'xbt_graph_get_edges(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#ga1c292fb71d5119d59496a89d90a8ba30',1,'xbt_graph_get_edges(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fget_5flength_5fmatrix',['xbt_graph_get_length_matrix',['../group__XBT__graph.html#ga3c4697edd9ee89142ec85ed882aad249',1,'xbt_graph_get_length_matrix(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#ga3c4697edd9ee89142ec85ed882aad249',1,'xbt_graph_get_length_matrix(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fget_5fnodes',['xbt_graph_get_nodes',['../group__XBT__graph.html#gada4b1109afba1fe3a8f046a45694c707',1,'xbt_graph_get_nodes(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#gada4b1109afba1fe3a8f046a45694c707',1,'xbt_graph_get_nodes(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fload',['xbt_graph_load',['../group__XBT__graph.html#ga11cca6af16cef8e4ea7f5f340da517dd',1,'xbt_graph_load(const char *filename): graph.c'],['../group__XBT__graph.html#ga11cca6af16cef8e4ea7f5f340da517dd',1,'xbt_graph_load(const char *filename): graph.c']]], ['xbt_5fgraph_5fnew_5fedge',['xbt_graph_new_edge',['../group__XBT__graph.html#gaec90776579173b58de9b89868abbda0f',1,'xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data): graph.c'],['../group__XBT__graph.html#gaec90776579173b58de9b89868abbda0f',1,'xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data): graph.c']]], ['xbt_5fgraph_5fnew_5fgraph',['xbt_graph_new_graph',['../group__XBT__graph.html#ga782dba2130eee76b8bd4e6934098fd8f',1,'xbt_graph_new_graph(unsigned short int directed, void *data): graph.c'],['../group__XBT__graph.html#ga782dba2130eee76b8bd4e6934098fd8f',1,'xbt_graph_new_graph(unsigned short int directed, void *data): graph.c']]], ['xbt_5fgraph_5fnew_5fnode',['xbt_graph_new_node',['../group__XBT__graph.html#ga95d8d120c9be3efbed1880700458d8ca',1,'xbt_graph_new_node(xbt_graph_t g, void *data): graph.c'],['../group__XBT__graph.html#ga95d8d120c9be3efbed1880700458d8ca',1,'xbt_graph_new_node(xbt_graph_t g, void *data): graph.c']]], ['xbt_5fgraph_5fnode_5fget_5fdata',['xbt_graph_node_get_data',['../group__XBT__graph.html#gaed845d52f5432f7940e1bceb336d3c38',1,'xbt_graph_node_get_data(xbt_node_t node): graph.c'],['../group__XBT__graph.html#gaed845d52f5432f7940e1bceb336d3c38',1,'xbt_graph_node_get_data(xbt_node_t node): graph.c']]], ['xbt_5fgraph_5fnode_5fget_5foutedges',['xbt_graph_node_get_outedges',['../group__XBT__graph.html#gac8dd5691103f6c69b8f773a5937c2a8a',1,'xbt_graph_node_get_outedges(xbt_node_t n): graph.c'],['../group__XBT__graph.html#gac8dd5691103f6c69b8f773a5937c2a8a',1,'xbt_graph_node_get_outedges(xbt_node_t n): graph.c']]], ['xbt_5fgraph_5fnode_5fset_5fdata',['xbt_graph_node_set_data',['../group__XBT__graph.html#gaa100e0fe6d317aa185dffe89b3a9deae',1,'xbt_graph_node_set_data(xbt_node_t node, void *data): graph.c'],['../group__XBT__graph.html#gaa100e0fe6d317aa185dffe89b3a9deae',1,'xbt_graph_node_set_data(xbt_node_t node, void *data): graph.c']]], ['xbt_5fgraph_5fsave',['xbt_graph_save',['../group__XBT__graph.html#ga2b6d7cfdc45b1df905eba88fdc1d8c18',1,'xbt_graph_save(xbt_graph_t span, const char *filename, const char *(nname)(xbt_node_t), const char *(ename)(xbt_edge_t)): graph.c'],['../group__XBT__graph.html#ga2b6d7cfdc45b1df905eba88fdc1d8c18',1,'xbt_graph_save(xbt_graph_t span, const char *filename, const char *(nname)(xbt_node_t), const char *(ename)(xbt_edge_t)): graph.c']]], ['xbt_5fgraph_5fshortest_5fpaths',['xbt_graph_shortest_paths',['../group__XBT__graph.html#gaa5d7e658935aa26a17acaa1cdcd575a4',1,'xbt_graph_shortest_paths(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#gaa5d7e658935aa26a17acaa1cdcd575a4',1,'xbt_graph_shortest_paths(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5fspanning_5ftree_5fprim',['xbt_graph_spanning_tree_prim',['../group__XBT__graph.html#gac305eb0dfe08abbe849f2a74dfa3a3a4',1,'xbt_graph_spanning_tree_prim(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#gac305eb0dfe08abbe849f2a74dfa3a3a4',1,'xbt_graph_spanning_tree_prim(xbt_graph_t g): graph.c']]], ['xbt_5fgraph_5ftopo_5fsort',['xbt_graph_topo_sort',['../group__XBT__graph.html#ga80c9aa63aac343d7b3ba246a6e4f6297',1,'xbt_graph_topo_sort(xbt_graph_t g): graph.c'],['../group__XBT__graph.html#ga80c9aa63aac343d7b3ba246a6e4f6297',1,'xbt_graph_topo_sort(xbt_graph_t g): graph.c']]], ['xbt_5fheap_5ffree',['xbt_heap_free',['../group__XBT__heap.html#gace5e6cc225d3698de6af159229c94587',1,'xbt_heap_free(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#gace5e6cc225d3698de6af159229c94587',1,'xbt_heap_free(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fmaxcontent',['xbt_heap_maxcontent',['../group__XBT__heap.html#ga804cb0f43208ddf228b515ec14f13965',1,'xbt_heap_maxcontent(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#ga804cb0f43208ddf228b515ec14f13965',1,'xbt_heap_maxcontent(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fmaxkey',['xbt_heap_maxkey',['../group__XBT__heap.html#gaecf9ff064287ee533e166d631aced6df',1,'xbt_heap_maxkey(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#gaecf9ff064287ee533e166d631aced6df',1,'xbt_heap_maxkey(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fnew',['xbt_heap_new',['../group__XBT__heap.html#gaa4b5f8cfee32bb2df3cb2b5d6649b114',1,'xbt_heap_new(int init_size, void_f_pvoid_t const free_func): heap.c'],['../group__XBT__heap.html#gaa4b5f8cfee32bb2df3cb2b5d6649b114',1,'xbt_heap_new(int init_size, void_f_pvoid_t const free_func): heap.c']]], ['xbt_5fheap_5fpop',['xbt_heap_pop',['../group__XBT__heap.html#ga61f5e2665882b14b15a48bf66e9631a4',1,'xbt_heap_pop(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#ga61f5e2665882b14b15a48bf66e9631a4',1,'xbt_heap_pop(xbt_heap_t H): heap.c']]], ['xbt_5fheap_5fpush',['xbt_heap_push',['../group__XBT__heap.html#ga5e44b85be2d2ba1d7ed9d400546f43dd',1,'xbt_heap_push(xbt_heap_t H, void *content, double key): heap.c'],['../group__XBT__heap.html#ga5e44b85be2d2ba1d7ed9d400546f43dd',1,'xbt_heap_push(xbt_heap_t H, void *content, double key): heap.c']]], ['xbt_5fheap_5fremove',['xbt_heap_remove',['../group__XBT__heap.html#ga2035074b0de4d7a74fc5f9a22c148437',1,'xbt_heap_remove(xbt_heap_t H, int i): heap.c'],['../group__XBT__heap.html#ga2035074b0de4d7a74fc5f9a22c148437',1,'xbt_heap_remove(xbt_heap_t H, int i): heap.c']]], ['xbt_5fheap_5fset_5fupdate_5fcallback',['xbt_heap_set_update_callback',['../group__XBT__heap.html#ga0617a1f1c3f63f951f17698e783bc24d',1,'xbt_heap_set_update_callback(xbt_heap_t H, void(*update_callback)(void *, int)): heap.c'],['../group__XBT__heap.html#ga0617a1f1c3f63f951f17698e783bc24d',1,'xbt_heap_set_update_callback(xbt_heap_t H, void(*update_callback)(void *, int)): heap.c']]], ['xbt_5fheap_5fsize',['xbt_heap_size',['../group__XBT__heap.html#ga21ef0cccfab2e937012f1286cc3ecb66',1,'xbt_heap_size(xbt_heap_t H): heap.c'],['../group__XBT__heap.html#ga21ef0cccfab2e937012f1286cc3ecb66',1,'xbt_heap_size(xbt_heap_t H): heap.c']]], ['xbt_5flibunwind_5fbacktrace',['xbt_libunwind_backtrace',['../group__XBT__ex.html#ga6752f914268fb60019f9cf94a34ad28a',1,'ex.h']]], ['xbt_5flog_5fcontrol_5fset',['xbt_log_control_set',['../group__XBT__log.html#ga2289997893363b1ad5f7ff32cbfbf432',1,'xbt_log_control_set(const char *cs): log.c'],['../group__XBT__log.html#ga2289997893363b1ad5f7ff32cbfbf432',1,'xbt_log_control_set(const char *control_string): log.c']]], ['xbt_5fmallocator_5ffree',['xbt_mallocator_free',['../group__XBT__mallocator__cons.html#gaa884a3ef269f0709b9b2e025708f2e95',1,'xbt_mallocator_free(xbt_mallocator_t mallocator): mallocator.c'],['../group__XBT__mallocator__cons.html#gaa884a3ef269f0709b9b2e025708f2e95',1,'xbt_mallocator_free(xbt_mallocator_t m): mallocator.c']]], ['xbt_5fmallocator_5fget',['xbt_mallocator_get',['../group__XBT__mallocator__objects.html#ga3e52409c5b24294ef98367b56cad4c7b',1,'xbt_mallocator_get(xbt_mallocator_t mallocator): mallocator.c'],['../group__XBT__mallocator__objects.html#ga3e52409c5b24294ef98367b56cad4c7b',1,'xbt_mallocator_get(xbt_mallocator_t m): mallocator.c']]], ['xbt_5fmallocator_5finitialization_5fis_5fdone',['xbt_mallocator_initialization_is_done',['../group__XBT__mallocator__objects.html#ga98bad11b395593e2681d1bc8daebfc5f',1,'xbt_mallocator_initialization_is_done(int protect): mallocator.c'],['../group__XBT__mallocator__objects.html#ga98bad11b395593e2681d1bc8daebfc5f',1,'xbt_mallocator_initialization_is_done(int protect): mallocator.c']]], ['xbt_5fmallocator_5fnew',['xbt_mallocator_new',['../group__XBT__mallocator__cons.html#ga31b8b348c6b44d730c915c5442a64637',1,'xbt_mallocator_new(int size, pvoid_f_void_t new_f, void_f_pvoid_t free_f, void_f_pvoid_t reset_f): mallocator.c'],['../group__XBT__mallocator__cons.html#ga31b8b348c6b44d730c915c5442a64637',1,'xbt_mallocator_new(int size, pvoid_f_void_t new_f, void_f_pvoid_t free_f, void_f_pvoid_t reset_f): mallocator.c']]], ['xbt_5fmallocator_5frelease',['xbt_mallocator_release',['../group__XBT__mallocator__objects.html#gaf33e29b8ca5ab081c3ab323cf42fd244',1,'xbt_mallocator_release(xbt_mallocator_t mallocator, void *object): mallocator.c'],['../group__XBT__mallocator__objects.html#gaf33e29b8ca5ab081c3ab323cf42fd244',1,'xbt_mallocator_release(xbt_mallocator_t m, void *object): mallocator.c']]], ['xbt_5fmutex_5facquire',['xbt_mutex_acquire',['../group__XBT__synchro.html#gaa6e5de3feee929f5212a988cc67159b5',1,'xbt_mutex_acquire(xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gaa6e5de3feee929f5212a988cc67159b5',1,'xbt_mutex_acquire(xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fmutex_5fdestroy',['xbt_mutex_destroy',['../group__XBT__synchro.html#ga4deb9869591b5673738ae97a7d12dd10',1,'xbt_mutex_destroy(xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga4deb9869591b5673738ae97a7d12dd10',1,'xbt_mutex_destroy(xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fmutex_5finit',['xbt_mutex_init',['../group__XBT__synchro.html#ga2b5f21533b44d2dd61c9335d0db48e93',1,'xbt_mutex_init(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga2b5f21533b44d2dd61c9335d0db48e93',1,'xbt_mutex_init(void): xbt_sg_synchro.c']]], ['xbt_5fmutex_5frelease',['xbt_mutex_release',['../group__XBT__synchro.html#ga90c18013e0a7a19ee22cb668b6082b39',1,'xbt_mutex_release(xbt_mutex_t mutex): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga90c18013e0a7a19ee22cb668b6082b39',1,'xbt_mutex_release(xbt_mutex_t mutex): xbt_sg_synchro.c']]], ['xbt_5fos_5fget_5fnumcores',['xbt_os_get_numcores',['../group__XBT__thread.html#ga737321f05368f70c51d5d4c939b3aa11',1,'xbt_os_get_numcores(void): xbt_os_thread.c'],['../group__XBT__thread.html#ga737321f05368f70c51d5d4c939b3aa11',1,'xbt_os_get_numcores(void): xbt_os_thread.c']]], ['xbt_5fos_5fthread_5fatfork',['xbt_os_thread_atfork',['../group__XBT__thread.html#gad4f77b979102bcbb4dc49538481146ac',1,'xbt_os_thread.h']]], ['xbt_5fparmap_5fapply',['xbt_parmap_apply',['../group__XBT__parmap.html#ga7d2b99167edbcbccb7a514451042f09f',1,'xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data): parmap.c'],['../group__XBT__parmap.html#ga7d2b99167edbcbccb7a514451042f09f',1,'xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data): parmap.c']]], ['xbt_5fparmap_5fdestroy',['xbt_parmap_destroy',['../group__XBT__parmap.html#ga3e1c75bd9e1a502350a2d2098dc316bb',1,'xbt_parmap_destroy(xbt_parmap_t parmap): parmap.c'],['../group__XBT__parmap.html#ga3e1c75bd9e1a502350a2d2098dc316bb',1,'xbt_parmap_destroy(xbt_parmap_t parmap): parmap.c']]], ['xbt_5fparmap_5fnew',['xbt_parmap_new',['../group__XBT__parmap.html#ga939a0ab549af87ff1df13642396d5087',1,'xbt_parmap_new(unsigned int num_workers, e_xbt_parmap_mode_t mode): parmap.c'],['../group__XBT__parmap.html#ga939a0ab549af87ff1df13642396d5087',1,'xbt_parmap_new(unsigned int num_workers, e_xbt_parmap_mode_t mode): parmap.c']]], ['xbt_5fparmap_5fnext',['xbt_parmap_next',['../group__XBT__parmap.html#gac667744f002bbf8d1d8dc32e36d0d308',1,'xbt_parmap_next(xbt_parmap_t parmap): parmap.c'],['../group__XBT__parmap.html#gac667744f002bbf8d1d8dc32e36d0d308',1,'xbt_parmap_next(xbt_parmap_t parmap): parmap.c']]], ['xbt_5fpeer_5fcopy',['xbt_peer_copy',['../group__XBT__peer.html#ga9bc5b54374abccaff888cd3852c85702',1,'xbt_peer_copy(xbt_peer_t h): xbt_peer.c'],['../group__XBT__peer.html#ga9bc5b54374abccaff888cd3852c85702',1,'xbt_peer_copy(xbt_peer_t h): xbt_peer.c']]], ['xbt_5fpeer_5ffree',['xbt_peer_free',['../group__XBT__peer.html#ga251d6140c311d7c04e503e3d463adba4',1,'xbt_peer_free(xbt_peer_t peer): xbt_peer.c'],['../group__XBT__peer.html#ga251d6140c311d7c04e503e3d463adba4',1,'xbt_peer_free(xbt_peer_t peer): xbt_peer.c']]], ['xbt_5fpeer_5ffree_5fvoidp',['xbt_peer_free_voidp',['../group__XBT__peer.html#ga793bb9b0c2ee6221c8e9b7d3c886dbb9',1,'xbt_peer_free_voidp(void *d): xbt_peer.c'],['../group__XBT__peer.html#ga793bb9b0c2ee6221c8e9b7d3c886dbb9',1,'xbt_peer_free_voidp(void *d): xbt_peer.c']]], ['xbt_5fpeer_5ffrom_5fstring',['xbt_peer_from_string',['../group__XBT__peer.html#ga0d8d75aed70cb99a925b8974ce8ce4e4',1,'xbt_peer_from_string(const char *peerport): xbt_peer.c'],['../group__XBT__peer.html#ga0d8d75aed70cb99a925b8974ce8ce4e4',1,'xbt_peer_from_string(const char *peerport): xbt_peer.c']]], ['xbt_5fpeer_5fnew',['xbt_peer_new',['../group__XBT__peer.html#ga2d87fccb2ac0c6f71db29ed857b01eb2',1,'xbt_peer_new(const char *name, int port): xbt_peer.c'],['../group__XBT__peer.html#ga2d87fccb2ac0c6f71db29ed857b01eb2',1,'xbt_peer_new(const char *name, int port): xbt_peer.c']]], ['xbt_5fpublic_5fdata',['XBT_PUBLIC_DATA',['../group__SURF__simulation.html#ga35bd1d3b1139b2f6990002f4aaeac759',1,'surf.h']]], ['xbt_5fqueue_5ffree',['xbt_queue_free',['../group__XBT__queue.html#gae4509298241a6179e0b61667faebe613',1,'xbt_queue_free(xbt_queue_t *queue): xbt_queue.c'],['../group__XBT__queue.html#gae4509298241a6179e0b61667faebe613',1,'xbt_queue_free(xbt_queue_t *queue): xbt_queue.c']]], ['xbt_5fqueue_5flength',['xbt_queue_length',['../group__XBT__queue.html#ga49cfb91b2f730487bd31f2f9ffb974fa',1,'xbt_queue_length(const xbt_queue_t queue): xbt_queue.c'],['../group__XBT__queue.html#ga49cfb91b2f730487bd31f2f9ffb974fa',1,'xbt_queue_length(const xbt_queue_t queue): xbt_queue.c']]], ['xbt_5fqueue_5fnew',['xbt_queue_new',['../group__XBT__queue.html#ga04f81fdbf3a660617deb9f6f48234161',1,'xbt_queue_new(int capacity, unsigned long elm_size): xbt_queue.c'],['../group__XBT__queue.html#ga04f81fdbf3a660617deb9f6f48234161',1,'xbt_queue_new(int capacity, unsigned long elm_size): xbt_queue.c']]], ['xbt_5fqueue_5fpop',['xbt_queue_pop',['../group__XBT__queue.html#ga368e7ef82906e1c5baefa8083879c215',1,'xbt_queue_pop(xbt_queue_t queue, void *const dst): xbt_queue.c'],['../group__XBT__queue.html#ga368e7ef82906e1c5baefa8083879c215',1,'xbt_queue_pop(xbt_queue_t queue, void *const dst): xbt_queue.c']]], ['xbt_5fqueue_5fpop_5ftimed',['xbt_queue_pop_timed',['../group__XBT__queue.html#ga99d1d70f1a59f3f45bcd4e5d35b77f51',1,'xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c'],['../group__XBT__queue.html#ga99d1d70f1a59f3f45bcd4e5d35b77f51',1,'xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c']]], ['xbt_5fqueue_5fpush',['xbt_queue_push',['../group__XBT__queue.html#ga687d865601b586f65162cde66b944163',1,'xbt_queue_push(xbt_queue_t queue, const void *src): xbt_queue.c'],['../group__XBT__queue.html#ga687d865601b586f65162cde66b944163',1,'xbt_queue_push(xbt_queue_t queue, const void *src): xbt_queue.c']]], ['xbt_5fqueue_5fpush_5ftimed',['xbt_queue_push_timed',['../group__XBT__queue.html#gab68bab7ad2af3afc35130971d668c2b3',1,'xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c'],['../group__XBT__queue.html#gab68bab7ad2af3afc35130971d668c2b3',1,'xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c']]], ['xbt_5fqueue_5fshift',['xbt_queue_shift',['../group__XBT__queue.html#ga60a1272bb4a1463b8254cf857b8d7441',1,'xbt_queue_shift(xbt_queue_t queue, void *const dst): xbt_queue.c'],['../group__XBT__queue.html#ga60a1272bb4a1463b8254cf857b8d7441',1,'xbt_queue_shift(xbt_queue_t queue, void *const dst): xbt_queue.c']]], ['xbt_5fqueue_5fshift_5ftimed',['xbt_queue_shift_timed',['../group__XBT__queue.html#ga48988a7bf6134fc397147b16408c0778',1,'xbt_queue_shift_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c'],['../group__XBT__queue.html#ga48988a7bf6134fc397147b16408c0778',1,'xbt_queue_shift_timed(xbt_queue_t queue, void *const dst, double delay): xbt_queue.c']]], ['xbt_5fqueue_5funshift',['xbt_queue_unshift',['../group__XBT__queue.html#gaba17464ddde9dec336376a2e4e9f3a4e',1,'xbt_queue_unshift(xbt_queue_t queue, const void *src): xbt_queue.c'],['../group__XBT__queue.html#gaba17464ddde9dec336376a2e4e9f3a4e',1,'xbt_queue_unshift(xbt_queue_t queue, const void *src): xbt_queue.c']]], ['xbt_5fqueue_5funshift_5ftimed',['xbt_queue_unshift_timed',['../group__XBT__queue.html#ga9a868b5c72f70f207999b8a0beefed84',1,'xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c'],['../group__XBT__queue.html#ga9a868b5c72f70f207999b8a0beefed84',1,'xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay): xbt_queue.c']]], ['xbt_5freplay_5faction_5fregister',['xbt_replay_action_register',['../group__XBT__replay.html#ga994ddcd8aa680aabc58762d8965f93ef',1,'xbt_replay_action_register(const char *action_name, action_fun function): xbt_replay.c'],['../group__XBT__replay.html#ga994ddcd8aa680aabc58762d8965f93ef',1,'xbt_replay_action_register(const char *action_name, action_fun function): xbt_replay.c']]], ['xbt_5freplay_5faction_5frunner',['xbt_replay_action_runner',['../group__XBT__replay.html#ga1a034387ae8f039bca99f6fc44518da0',1,'xbt_replay_action_runner(int argc, char *argv[]): xbt_replay.c'],['../group__XBT__replay.html#ga1a034387ae8f039bca99f6fc44518da0',1,'xbt_replay_action_runner(int argc, char *argv[]): xbt_replay.c']]], ['xbt_5freplay_5faction_5funregister',['xbt_replay_action_unregister',['../group__XBT__replay.html#ga83842574c19fdf7d056cdfeacd64dae7',1,'xbt_replay_action_unregister(const char *action_name): xbt_replay.c'],['../group__XBT__replay.html#ga83842574c19fdf7d056cdfeacd64dae7',1,'xbt_replay_action_unregister(const char *action_name): xbt_replay.c']]], ['xbt_5fset_5fadd',['xbt_set_add',['../group__XBT__set__basic.html#ga1db2802704edc8b5d404ca204fc5b34d',1,'xbt_set_add(xbt_set_t set, xbt_set_elm_t elm, void_f_pvoid_t free_func): set.c'],['../group__XBT__set__basic.html#ga1db2802704edc8b5d404ca204fc5b34d',1,'xbt_set_add(xbt_set_t set, xbt_set_elm_t elm, void_f_pvoid_t free_func): set.c']]], ['xbt_5fset_5fcursor_5ffirst',['xbt_set_cursor_first',['../group__XBT__set__curs.html#ga0ae677ad09fbf19fc8f9343dcc647dc2',1,'xbt_set_cursor_first(xbt_set_t set, xbt_set_cursor_t *cursor): set.c'],['../group__XBT__set__curs.html#ga0ae677ad09fbf19fc8f9343dcc647dc2',1,'xbt_set_cursor_first(xbt_set_t set, xbt_set_cursor_t *cursor): set.c']]], ['xbt_5fset_5fcursor_5fget_5for_5ffree',['xbt_set_cursor_get_or_free',['../group__XBT__set__curs.html#gac4c1fa14c3207e4ad1c9973db97147d5',1,'xbt_set_cursor_get_or_free(xbt_set_cursor_t *cursor, xbt_set_elm_t *elm): set.c'],['../group__XBT__set__curs.html#gac4c1fa14c3207e4ad1c9973db97147d5',1,'xbt_set_cursor_get_or_free(xbt_set_cursor_t *curs, xbt_set_elm_t *elm): set.c']]], ['xbt_5fset_5fcursor_5fstep',['xbt_set_cursor_step',['../group__XBT__set__curs.html#ga1e42bd77295716cac5d3a38f4b7419b1',1,'xbt_set_cursor_step(xbt_set_cursor_t cursor): set.c'],['../group__XBT__set__curs.html#ga1e42bd77295716cac5d3a38f4b7419b1',1,'xbt_set_cursor_step(xbt_set_cursor_t cursor): set.c']]], ['xbt_5fset_5ffree',['xbt_set_free',['../group__XBT__set__cons.html#ga268b2b486920b5f0a580b3d1bed6875a',1,'xbt_set_free(xbt_set_t *set): set.c'],['../group__XBT__set__cons.html#ga268b2b486920b5f0a580b3d1bed6875a',1,'xbt_set_free(xbt_set_t *set): set.c']]], ['xbt_5fset_5fget_5fby_5fid',['xbt_set_get_by_id',['../group__XBT__set__basic.html#ga19df8b5e26799112d5aba9f677739138',1,'xbt_set_get_by_id(xbt_set_t set, int id): set.c'],['../group__XBT__set__basic.html#ga19df8b5e26799112d5aba9f677739138',1,'xbt_set_get_by_id(xbt_set_t set, int id): set.c']]], ['xbt_5fset_5fget_5fby_5fname',['xbt_set_get_by_name',['../group__XBT__set__basic.html#gaa5ebcac05554bc6c20129b437851b12e',1,'xbt_set_get_by_name(xbt_set_t set, const char *key): set.c'],['../group__XBT__set__basic.html#gaa5ebcac05554bc6c20129b437851b12e',1,'xbt_set_get_by_name(xbt_set_t set, const char *name): set.c']]], ['xbt_5fset_5fget_5fby_5fname_5fext',['xbt_set_get_by_name_ext',['../group__XBT__set__basic.html#ga6a7bc28b3bedbcb05e2a60297c9df8f0',1,'xbt_set_get_by_name_ext(xbt_set_t set, const char *key, int key_len): set.c'],['../group__XBT__set__basic.html#ga6a7bc28b3bedbcb05e2a60297c9df8f0',1,'xbt_set_get_by_name_ext(xbt_set_t set, const char *name, int name_len): set.c']]], ['xbt_5fset_5fget_5fby_5fname_5for_5fnull',['xbt_set_get_by_name_or_null',['../group__XBT__set__basic.html#ga02fb94d3aa9fcfaae688f61a0ca9cdc2',1,'xbt_set_get_by_name_or_null(xbt_set_t set, const char *key): set.c'],['../group__XBT__set__basic.html#ga02fb94d3aa9fcfaae688f61a0ca9cdc2',1,'xbt_set_get_by_name_or_null(xbt_set_t set, const char *name): set.c']]], ['xbt_5fset_5flength',['xbt_set_length',['../group__XBT__set__basic.html#ga5a1935dab5ad9e2f3c9820e6db7889a7',1,'xbt_set_length(const xbt_set_t set): set.c'],['../group__XBT__set__basic.html#ga5a1935dab5ad9e2f3c9820e6db7889a7',1,'xbt_set_length(const xbt_set_t set): set.c']]], ['xbt_5fset_5fnew',['xbt_set_new',['../group__XBT__set__cons.html#ga2cb4e125f22594bb8f7a2726464fed3d',1,'xbt_set_new(void): set.c'],['../group__XBT__set__cons.html#ga2cb4e125f22594bb8f7a2726464fed3d',1,'xbt_set_new(void): set.c']]], ['xbt_5fset_5fremove',['xbt_set_remove',['../group__XBT__set__basic.html#gadd31f4f1a5a5fdce54f3a8bfbc37de8a',1,'xbt_set_remove(xbt_set_t set, xbt_set_elm_t elm): set.c'],['../group__XBT__set__basic.html#gadd31f4f1a5a5fdce54f3a8bfbc37de8a',1,'xbt_set_remove(xbt_set_t set, xbt_set_elm_t elm): set.c']]], ['xbt_5fset_5fremove_5fby_5fid',['xbt_set_remove_by_id',['../group__XBT__set__basic.html#ga917c20ea5adb57ca287dd1d48ca12ec7',1,'xbt_set_remove_by_id(xbt_set_t set, int id): set.c'],['../group__XBT__set__basic.html#ga917c20ea5adb57ca287dd1d48ca12ec7',1,'xbt_set_remove_by_id(xbt_set_t set, int id): set.c']]], ['xbt_5fset_5fremove_5fby_5fname',['xbt_set_remove_by_name',['../group__XBT__set__basic.html#gac5ac26bcb50f5a22c1b2af1f8a1f49c4',1,'xbt_set_remove_by_name(xbt_set_t set, const char *key): set.c'],['../group__XBT__set__basic.html#gac5ac26bcb50f5a22c1b2af1f8a1f49c4',1,'xbt_set_remove_by_name(xbt_set_t set, const char *key): set.c']]], ['xbt_5fset_5fremove_5fby_5fname_5fext',['xbt_set_remove_by_name_ext',['../group__XBT__set__basic.html#gabda240bc3fa5bc0ac6983b19f4caa5f8',1,'xbt_set_remove_by_name_ext(xbt_set_t set, const char *key, int key_len): set.c'],['../group__XBT__set__basic.html#gabda240bc3fa5bc0ac6983b19f4caa5f8',1,'xbt_set_remove_by_name_ext(xbt_set_t set, const char *key, int key_len): set.c']]], ['xbt_5fstr_5fdiff',['xbt_str_diff',['../group__XBT__str.html#gadfd8938aaade2e991b8b51bed5aea886',1,'xbt_str_diff(const char *a, const char *b): xbt_str.c'],['../group__XBT__str.html#gadfd8938aaade2e991b8b51bed5aea886',1,'xbt_str_diff(const char *a, const char *b): xbt_str.c']]], ['xbt_5fstr_5ffrom_5ffile',['xbt_str_from_file',['../group__XBT__str.html#ga3d0726833fdc157351600358cc67097c',1,'xbt_str_from_file(FILE *file): xbt_str.c'],['../group__XBT__str.html#ga3d0726833fdc157351600358cc67097c',1,'xbt_str_from_file(FILE *file): xbt_str.c']]], ['xbt_5fstr_5fhash',['xbt_str_hash',['../group__XBT__str.html#ga7b484f038534879efb07619091341977',1,'str.h']]], ['xbt_5fstr_5fhash_5fext',['xbt_str_hash_ext',['../group__XBT__str.html#ga10c19e31b7f944a5f426a7d436a44e6d',1,'str.h']]], ['xbt_5fstr_5fjoin',['xbt_str_join',['../group__XBT__str.html#ga1271575a77363ce72fbdf65298a49622',1,'xbt_str_join(xbt_dynar_t dynar, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga1271575a77363ce72fbdf65298a49622',1,'xbt_str_join(xbt_dynar_t dyn, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fjoin_5farray',['xbt_str_join_array',['../group__XBT__str.html#ga17585fd9f6432df9f84db21059486900',1,'xbt_str_join_array(const char *const *strs, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga17585fd9f6432df9f84db21059486900',1,'xbt_str_join_array(const char *const *strs, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fltrim',['xbt_str_ltrim',['../group__XBT__str.html#gaeb745f202229799d900aa3a20953186f',1,'xbt_str_ltrim(char *s, const char *char_list): xbt_str.c'],['../group__XBT__str.html#gaeb745f202229799d900aa3a20953186f',1,'xbt_str_ltrim(char *s, const char *char_list): xbt_str.c']]], ['xbt_5fstr_5frtrim',['xbt_str_rtrim',['../group__XBT__str.html#ga9d7c43274b5a6339adfc724e2efd0ead',1,'xbt_str_rtrim(char *s, const char *char_list): xbt_str.c'],['../group__XBT__str.html#ga9d7c43274b5a6339adfc724e2efd0ead',1,'xbt_str_rtrim(char *s, const char *char_list): xbt_str.c']]], ['xbt_5fstr_5fsplit',['xbt_str_split',['../group__XBT__str.html#ga91672ded3b13340f1dfa6fb5ce64fb42',1,'xbt_str_split(const char *s, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga91672ded3b13340f1dfa6fb5ce64fb42',1,'xbt_str_split(const char *s, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fsplit_5fquoted',['xbt_str_split_quoted',['../group__XBT__str.html#gaa6839f81f1789acf3865eeade8c23c77',1,'xbt_str_split_quoted(const char *s): xbt_str.c'],['../group__XBT__str.html#gaa6839f81f1789acf3865eeade8c23c77',1,'xbt_str_split_quoted(const char *s): xbt_str.c']]], ['xbt_5fstr_5fsplit_5fquoted_5fin_5fplace',['xbt_str_split_quoted_in_place',['../group__XBT__str.html#ga2454f448cda4a1ba94409196a2f31d78',1,'xbt_str_split_quoted_in_place(char *s): xbt_str.c'],['../group__XBT__str.html#ga2454f448cda4a1ba94409196a2f31d78',1,'xbt_str_split_quoted_in_place(char *s): xbt_str.c']]], ['xbt_5fstr_5fsplit_5fstr',['xbt_str_split_str',['../group__XBT__str.html#ga84523a36aef41594015c8c2a22256385',1,'xbt_str_split_str(const char *s, const char *sep): xbt_str.c'],['../group__XBT__str.html#ga84523a36aef41594015c8c2a22256385',1,'xbt_str_split_str(const char *s, const char *sep): xbt_str.c']]], ['xbt_5fstr_5fstrip_5fspaces',['xbt_str_strip_spaces',['../group__XBT__str.html#ga5b8c3f04c5bd47a54c6700c634c48d40',1,'xbt_str_strip_spaces(char *): xbt_str.c'],['../group__XBT__str.html#ga5b8c3f04c5bd47a54c6700c634c48d40',1,'xbt_str_strip_spaces(char *s): xbt_str.c']]], ['xbt_5fstr_5fsubst',['xbt_str_subst',['../group__XBT__str.html#ga2aaaa9b7cdc3e30d0a2b85c7561ad0e6',1,'xbt_str_subst(char *str, char from, char to, int amount): xbt_str.c'],['../group__XBT__str.html#ga2aaaa9b7cdc3e30d0a2b85c7561ad0e6',1,'xbt_str_subst(char *str, char from, char to, int occurence): xbt_str.c']]], ['xbt_5fstr_5ftrim',['xbt_str_trim',['../group__XBT__str.html#ga5259c70a74df4d63f39e68cc5fe8f1b3',1,'xbt_str_trim(char *s, const char *char_list): xbt_str.c'],['../group__XBT__str.html#ga5259c70a74df4d63f39e68cc5fe8f1b3',1,'xbt_str_trim(char *s, const char *char_list): xbt_str.c']]], ['xbt_5fstr_5fvarsubst',['xbt_str_varsubst',['../group__XBT__str.html#ga42a82b549ada759cfc7ec4e0999dde1e',1,'xbt_str_varsubst(const char *str, xbt_dict_t patterns): xbt_str.c'],['../group__XBT__str.html#ga42a82b549ada759cfc7ec4e0999dde1e',1,'xbt_str_varsubst(const char *str, xbt_dict_t patterns): xbt_str.c']]], ['xbt_5fswag_5fextract',['xbt_swag_extract',['../group__XBT__swag__func.html#ga008f75ad3c220b326121e44a6cadb6d3',1,'xbt_swag_extract(xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#ga008f75ad3c220b326121e44a6cadb6d3',1,'xbt_swag_extract(xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5ffree',['xbt_swag_free',['../group__XBT__swag__func.html#ga936859aae1ee95f8cfb9f32047dc482d',1,'xbt_swag_free(xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#ga936859aae1ee95f8cfb9f32047dc482d',1,'xbt_swag_free(xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5finit',['xbt_swag_init',['../group__XBT__swag__func.html#ga08da2ee0936e19da57695b5d99007c64',1,'xbt_swag_init(xbt_swag_t swag, size_t offset): swag.c'],['../group__XBT__swag__func.html#ga08da2ee0936e19da57695b5d99007c64',1,'xbt_swag_init(xbt_swag_t swag, size_t offset): swag.c']]], ['xbt_5fswag_5finsert_5fat_5fhead',['xbt_swag_insert_at_head',['../group__XBT__swag__func.html#ga19c8dc8c1637bb0fce94c4bc38b7d088',1,'xbt_swag_insert_at_head(void *obj, xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#ga19c8dc8c1637bb0fce94c4bc38b7d088',1,'xbt_swag_insert_at_head(void *obj, xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5finsert_5fat_5ftail',['xbt_swag_insert_at_tail',['../group__XBT__swag__func.html#gae5919f7e25c402ac3079d792e033a1fb',1,'xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#gae5919f7e25c402ac3079d792e033a1fb',1,'xbt_swag_insert_at_tail(void *obj, xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5fnew',['xbt_swag_new',['../group__XBT__swag__func.html#ga11b0c605fb84243e1c399831c9efbf6c',1,'xbt_swag_new(size_t offset): swag.c'],['../group__XBT__swag__func.html#ga11b0c605fb84243e1c399831c9efbf6c',1,'xbt_swag_new(size_t offset): swag.c']]], ['xbt_5fswag_5fremove',['xbt_swag_remove',['../group__XBT__swag__func.html#gabce3d24a60fbd2e2cbd31df6612418a3',1,'xbt_swag_remove(void *obj, xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#gabce3d24a60fbd2e2cbd31df6612418a3',1,'xbt_swag_remove(void *obj, xbt_swag_t swag): swag.c']]], ['xbt_5fswag_5fsize',['xbt_swag_size',['../group__XBT__swag__func.html#gaef55e706dcbabb605cf71e522caa82e6',1,'xbt_swag_size(xbt_swag_t swag): swag.c'],['../group__XBT__swag__func.html#gaef55e706dcbabb605cf71e522caa82e6',1,'xbt_swag_size(xbt_swag_t swag): swag.c']]], ['xbt_5ftest_5fexception',['xbt_test_exception',['../group__XBT__cunit.html#ga7b2f459569efbe7862537a2223374f24',1,'xbt_test_exception(xbt_ex_t e): cunit.c'],['../group__XBT__cunit.html#ga7b2f459569efbe7862537a2223374f24',1,'xbt_test_exception(xbt_ex_t e): cunit.c']]], ['xbt_5ftest_5fexpect_5ffailure',['xbt_test_expect_failure',['../group__XBT__cunit.html#gab6fa2a7525ea09e047ebc849a36afac4',1,'xbt_test_expect_failure(void): cunit.c'],['../group__XBT__cunit.html#gab6fa2a7525ea09e047ebc849a36afac4',1,'xbt_test_expect_failure(void): cunit.c']]], ['xbt_5ftest_5fskip',['xbt_test_skip',['../group__XBT__cunit.html#gab1fe95862df7198fb9fc71f1fd031f5d',1,'xbt_test_skip(void): cunit.c'],['../group__XBT__cunit.html#gab1fe95862df7198fb9fc71f1fd031f5d',1,'xbt_test_skip(void): cunit.c']]], ['xbt_5fthread_5fcancel',['xbt_thread_cancel',['../group__XBT__synchro.html#gaeaeb76bcf1386f57104957ffe50dd913',1,'xbt_thread_cancel(xbt_thread_t thread): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gaeaeb76bcf1386f57104957ffe50dd913',1,'xbt_thread_cancel(xbt_thread_t thread): xbt_sg_synchro.c']]], ['xbt_5fthread_5fcreate',['xbt_thread_create',['../group__XBT__synchro.html#ga7faf7010fd7bc47cd1487fe7bfba2214',1,'xbt_thread_create(const char *name, void_f_pvoid_t start_routine, void *param, int joinable): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga7faf7010fd7bc47cd1487fe7bfba2214',1,'xbt_thread_create(const char *name, void_f_pvoid_t code, void *param, int joinable): xbt_sg_synchro.c']]], ['xbt_5fthread_5fexit',['xbt_thread_exit',['../group__XBT__synchro.html#ga2c8ac4c62ee9788b889dd135db67871f',1,'xbt_thread_exit(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga2c8ac4c62ee9788b889dd135db67871f',1,'xbt_thread_exit(): xbt_sg_synchro.c']]], ['xbt_5fthread_5fjoin',['xbt_thread_join',['../group__XBT__synchro.html#ga4633b9357c418a88723d3a11f02b9280',1,'xbt_thread_join(xbt_thread_t thread): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga4633b9357c418a88723d3a11f02b9280',1,'xbt_thread_join(xbt_thread_t thread): xbt_sg_synchro.c']]], ['xbt_5fthread_5fname',['xbt_thread_name',['../group__XBT__synchro.html#ga3b74bd7c7a6fbdf1ef7e4a9c9f6035c0',1,'xbt_thread_name(xbt_thread_t t): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga3b74bd7c7a6fbdf1ef7e4a9c9f6035c0',1,'xbt_thread_name(xbt_thread_t t): xbt_sg_synchro.c']]], ['xbt_5fthread_5fself',['xbt_thread_self',['../group__XBT__synchro.html#gab781e679c968c3a7ae12d32ffa3dd63e',1,'xbt_thread_self(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gab781e679c968c3a7ae12d32ffa3dd63e',1,'xbt_thread_self(void): xbt_sg_synchro.c']]], ['xbt_5fthread_5fself_5fname',['xbt_thread_self_name',['../group__XBT__synchro.html#ga44f3eaa106769bb7bd269b95e4dc46e8',1,'xbt_thread_self_name(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#ga44f3eaa106769bb7bd269b95e4dc46e8',1,'xbt_thread_self_name(void): xbt_sg_synchro.c']]], ['xbt_5fthread_5fyield',['xbt_thread_yield',['../group__XBT__synchro.html#gad94ddaafcea741ad2cce5b97184ccb1f',1,'xbt_thread_yield(void): xbt_sg_synchro.c'],['../group__XBT__synchro.html#gad94ddaafcea741ad2cce5b97184ccb1f',1,'xbt_thread_yield(void): xbt_sg_synchro.c']]] ]; SimGrid-3.10/doc/html/search/groups_63.js000640 007661 000620 00000001273 12242224150 020361 0ustar00gierschand000000 000000 var searchData= [ ['communication_20management_20functions',['Communication Management Functions',['../group__simix__comm__management.html',1,'']]], ['create_20a_20new_20api',['Create a new API',['../group__SURF__build__api.html',1,'']]], ['configuration_20type_20declaration_20and_20memory_20management',['Configuration type declaration and memory management',['../group__XBT__cfg__decl.html',1,'']]], ['configuration_20support',['Configuration support',['../group__XBT__config.html',1,'']]], ['cursors_20on_20dictionaries',['Cursors on dictionaries',['../group__XBT__dict__curs.html',1,'']]], ['cursors_20on_20dynar',['Cursors on dynar',['../group__XBT__dynar__cursor.html',1,'']]] ]; SimGrid-3.10/doc/html/search/all_71.html000640 007661 000620 00000001704 12242224150 020140 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_74.js000640 007661 000620 00000025175 12242224150 017623 0ustar00gierschand000000 000000 var searchData= [ ['task_20management_20functions',['Task Management Functions',['../group__m__task__management.html',1,'']]], ['task_20actions',['Task Actions',['../group__msg__task__usage.html',1,'']]], ['trace_2ddriven_20simulations',['Trace-driven simulations',['../group__msg__trace__driven.html',1,'']]], ['tasks_20dependencies',['Tasks dependencies',['../group__SD__task__dependency__management.html',1,'']]], ['tasks',['Tasks',['../group__SD__task__management.html',1,'']]], ['thread_5fcounter',['thread_counter',['../structs__xbt__parmap.html#a4cb1478d076f1df7aa59518292b9300e',1,'s_xbt_parmap']]], ['thread_5ferror',['thread_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a2d90a8bed8343426b9732511aa2cb34c',1,'ex.h']]], ['throw',['THROW',['../group__XBT__ex.html#gae18641b6be3a88a74eb003978399fe90',1,'ex.h']]], ['throw_5fprepare',['THROW_PREPARE',['../group__XBT__ex.html#ga26394bf7f63640059e73dc55b5911a9b',1,'ex.h']]], ['throwf',['THROWF',['../group__XBT__ex.html#gaf104c05a68884bf85630ef40ca8ae774',1,'ex.h']]], ['timeout_5ferror',['timeout_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854acbb4310f650e6fddbbad783293eff676',1,'ex.h']]], ['trace',['TRACE',['../group__TRACE__API.html',1,'']]], ['trace_5fcategory',['TRACE_category',['../group__TRACE__category.html#ga2c341df9553b432c507d4ab2a87e8685',1,'TRACE_category(const char *category): instr_interface.c'],['../group__TRACE__category.html',1,'(Global Namespace)']]], ['trace_5fcategory_5fwith_5fcolor',['TRACE_category_with_color',['../group__TRACE__category.html#ga5abe9661fe1a1382c9be63984fea6931',1,'instr_interface.c']]], ['trace_5fdeclare_5fmark',['TRACE_declare_mark',['../group__TRACE__mark.html#gacd215a0072a5d4ec7c5b11610b7bef20',1,'instr_interface.c']]], ['trace_5fdeclare_5fmark_5fvalue',['TRACE_declare_mark_value',['../group__TRACE__mark.html#ga01bdd85d46330578010dd77cf0e9df88',1,'instr_interface.c']]], ['trace_5fdeclare_5fmark_5fvalue_5fwith_5fcolor',['TRACE_declare_mark_value_with_color',['../group__TRACE__mark.html#gae5b5c2eab1fdca9122a8902f1f106649',1,'instr_interface.c']]], ['trace_5fget_5fcategories',['TRACE_get_categories',['../group__TRACE__category.html#ga87115c4173e0a6451fd7161fa4545572',1,'instr_interface.c']]], ['trace_5fget_5fedge_5ftypes',['TRACE_get_edge_types',['../group__TRACE__API.html#gaf5542d615046120aa8a3526268b9fa7f',1,'instr_interface.c']]], ['trace_5fget_5fhost_5fvariables',['TRACE_get_host_variables',['../group__TRACE__user__variables.html#ga421836b9a1d435300ff777cd04b68f4c',1,'instr_interface.c']]], ['trace_5fget_5flink_5fvariables',['TRACE_get_link_variables',['../group__TRACE__user__variables.html#ga4b07c188420bbc143deea8dcdce06642',1,'instr_interface.c']]], ['trace_5fget_5fmarks',['TRACE_get_marks',['../group__TRACE__mark.html#ga6012125dd57ddf958895a8007280bbf5',1,'instr_interface.c']]], ['trace_5fget_5fnode_5ftypes',['TRACE_get_node_types',['../group__TRACE__API.html#ga845e0cfbd8042ac70adf394df024e350',1,'instr_interface.c']]], ['trace_5fget_5fvm_5fvariables',['TRACE_get_vm_variables',['../group__TRACE__user__variables.html#ga21d00d19c12055de18047e7973508e91',1,'instr_interface.c']]], ['trace_5fhost_5fpop_5fstate',['TRACE_host_pop_state',['../group__TRACE__user__variables.html#ga111dc1b94c7f69e999f98163922332a6',1,'instr_interface.c']]], ['trace_5fhost_5fpush_5fstate',['TRACE_host_push_state',['../group__TRACE__user__variables.html#gab74f50cb9ed31f4436663acd34ed044a',1,'instr_interface.c']]], ['trace_5fhost_5freset_5fstate',['TRACE_host_reset_state',['../group__TRACE__user__variables.html#ga995ecd02343b09fd5ecdce8b8b1cd0d7',1,'instr_interface.c']]], ['trace_5fhost_5fset_5fstate',['TRACE_host_set_state',['../group__TRACE__user__variables.html#gacc421a6483570671a916a1d402add564',1,'instr_interface.c']]], ['trace_5fhost_5fstate_5fdeclare',['TRACE_host_state_declare',['../group__TRACE__user__variables.html#ga65a9ce22195518352da785b36527864d',1,'instr_interface.c']]], ['trace_5fhost_5fstate_5fdeclare_5fvalue',['TRACE_host_state_declare_value',['../group__TRACE__user__variables.html#gae5c66eb6918e75c5f38e06727d43e7bc',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fadd',['TRACE_host_variable_add',['../group__TRACE__user__variables.html#gae0a8625485d9cffc5c12676b65cd959c',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fadd_5fwith_5ftime',['TRACE_host_variable_add_with_time',['../group__TRACE__user__variables.html#gab6e7856a8181341e524cb4c9920c24ba',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fdeclare',['TRACE_host_variable_declare',['../group__TRACE__user__variables.html#ga1672865b1bc48cff5bdb759edf0a7c90',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fdeclare_5fwith_5fcolor',['TRACE_host_variable_declare_with_color',['../group__TRACE__user__variables.html#gaacaaa40fa93265cc87dc804edb6a61b3',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fset',['TRACE_host_variable_set',['../group__TRACE__user__variables.html#ga650d08f8e0547ffe3d3c5a6a6ceebcdf',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fset_5fwith_5ftime',['TRACE_host_variable_set_with_time',['../group__TRACE__user__variables.html#ga3adacb71a4ab331c93efdf250f73cbfc',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fsub',['TRACE_host_variable_sub',['../group__TRACE__user__variables.html#ga287fcd04c563ff2f795460850e4fc5d6',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fsub_5fwith_5ftime',['TRACE_host_variable_sub_with_time',['../group__TRACE__user__variables.html#gae9ab3b84945d21bd06529d6705471d65',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fadd',['TRACE_link_srcdst_variable_add',['../group__TRACE__user__variables.html#gae19a0f01ea6240ceaba534dab0f15919',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fadd_5fwith_5ftime',['TRACE_link_srcdst_variable_add_with_time',['../group__TRACE__user__variables.html#ga0fec5f8d16e8d8ba4c82b2dba1ba6234',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fset',['TRACE_link_srcdst_variable_set',['../group__TRACE__user__variables.html#gab93d0d4ffb907c4d4b43cdc53cbe4f8c',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fset_5fwith_5ftime',['TRACE_link_srcdst_variable_set_with_time',['../group__TRACE__user__variables.html#ga1abd4aeafd36e40fd2aa8f15566df013',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fsub',['TRACE_link_srcdst_variable_sub',['../group__TRACE__user__variables.html#gaa0af1adaf2ee2e0ea3b045e8ef5c4edf',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fsub_5fwith_5ftime',['TRACE_link_srcdst_variable_sub_with_time',['../group__TRACE__user__variables.html#ga37278937e06f41f0a0b06b6b91bbdfa6',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fadd',['TRACE_link_variable_add',['../group__TRACE__user__variables.html#gabbc55f2a3e25e49248be7d9b71f15cb8',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fadd_5fwith_5ftime',['TRACE_link_variable_add_with_time',['../group__TRACE__user__variables.html#ga139bde27fec64c468d16b5231fc41118',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fdeclare',['TRACE_link_variable_declare',['../group__TRACE__user__variables.html#ga0b79340b330704fc7f30596988ce937c',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fdeclare_5fwith_5fcolor',['TRACE_link_variable_declare_with_color',['../group__TRACE__user__variables.html#ga1c3d1a22e56a7a9a2fa6e5e6feb7978e',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fset',['TRACE_link_variable_set',['../group__TRACE__user__variables.html#ga5a521dffa1a5705e9e65d77053ef0cfa',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fset_5fwith_5ftime',['TRACE_link_variable_set_with_time',['../group__TRACE__user__variables.html#gaccafa87e0e58f2f3e282a7d23e56d792',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fsub',['TRACE_link_variable_sub',['../group__TRACE__user__variables.html#ga009ecbc92025f7f2106386e5c8822e0b',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fsub_5fwith_5ftime',['TRACE_link_variable_sub_with_time',['../group__TRACE__user__variables.html#gae6b2b2b1f2ad80588d5b4eccb7d5ab6c',1,'instr_interface.c']]], ['trace_5fmark',['TRACE_mark',['../group__TRACE__mark.html#gac8f263e9033090c2e73c7a2e2a98088a',1,'TRACE_mark(const char *mark_type, const char *mark_value): instr_interface.c'],['../group__TRACE__mark.html',1,'(Global Namespace)']]], ['trace_5fpause',['TRACE_pause',['../group__TRACE__API.html#ga61801e88fcc9c8963c3ec77d78522f74',1,'instr_interface.c']]], ['trace_5fplatform_5fgraph_5fexport_5fgraphviz',['TRACE_platform_graph_export_graphviz',['../group__TRACE__API.html#ga77e1127c6602edd4f233ca62d6de36e0',1,'instr_interface.c']]], ['trace_5fresume',['TRACE_resume',['../group__TRACE__API.html#ga636015c91ac56d3942f83321708d9105',1,'instr_interface.c']]], ['tracing_20user_20variables',['Tracing user variables',['../group__TRACE__user__variables.html',1,'']]], ['trace_5fvm_5fvariable_5fadd',['TRACE_vm_variable_add',['../group__TRACE__user__variables.html#gafc3f5b621994a050372b53996fed3557',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fadd_5fwith_5ftime',['TRACE_vm_variable_add_with_time',['../group__TRACE__user__variables.html#ga8c4126bc2a48fe3fa811b9c0fc035914',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fdeclare',['TRACE_vm_variable_declare',['../group__TRACE__user__variables.html#ga3aa9e4ecfa5e9f22cd4742bab032156d',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fdeclare_5fwith_5fcolor',['TRACE_vm_variable_declare_with_color',['../group__TRACE__user__variables.html#gaba9508562b4cbfbdc27904df5b913324',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fset',['TRACE_vm_variable_set',['../group__TRACE__user__variables.html#ga8f2371c0b41d2e462a2b94d81be4e148',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fset_5fwith_5ftime',['TRACE_vm_variable_set_with_time',['../group__TRACE__user__variables.html#ga35222cf7a7c43583b550c3a5ac12bda2',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fsub',['TRACE_vm_variable_sub',['../group__TRACE__user__variables.html#ga20ce487069e27bb3d2eca34295a3c20c',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fsub_5fwith_5ftime',['TRACE_vm_variable_sub_with_time',['../group__TRACE__user__variables.html#ga6de804cf8760ca23a2c787850150e42c',1,'instr_interface.c']]], ['tracing_20simulations',['Tracing Simulations',['../tracing.html',1,'use']]], ['tracing_5ferror',['tracing_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a288db5d5a882653cc5466f62369ab676',1,'ex.h']]], ['try',['TRY',['../group__XBT__ex.html#gad2746371528bdf15c3910b7bf217dac0',1,'ex.h']]], ['try_5fcleanup',['TRY_CLEANUP',['../group__XBT__ex.html#ga24540d57ce6a4e72e2c2150327972fc6',1,'ex.h']]], ['thread_20stuff',['Thread stuff',['../group__XBT__thread.html',1,'']]] ]; SimGrid-3.10/doc/html/search/variables_73.js000640 007661 000620 00000002213 12242224150 021006 0ustar00gierschand000000 000000 var searchData= [ ['set_5fcategory',['set_category',['../structsurf__model.html#a2fe3155ae5dfb3782e1e7b01dc90a988',1,'surf_model']]], ['set_5fmax_5fduration',['set_max_duration',['../structsurf__model.html#a4702f5e90dc62742ec188695e0ff1c72',1,'surf_model']]], ['set_5fpower_5fpeak_5fat',['set_power_peak_at',['../structsurf__workstation__model__extension__public.html#ae83fe4298008ce08652906ccf51ad66e',1,'surf_workstation_model_extension_public']]], ['set_5fpriority',['set_priority',['../structsurf__model.html#a34f89ec266f457c37000f52cdd354a08',1,'surf_model']]], ['sleep',['sleep',['../structsurf__workstation__model__extension__public.html#a21f808bbbafa9bf838c71b5e54501465',1,'surf_workstation_model_extension_public']]], ['start',['start',['../structsurf__action.html#ab81d9f768089a74b58910ad81f50d5f7',1,'surf_action']]], ['states',['states',['../structsurf__model.html#a0e84008d3c39ef70dbdb98a9de1bcf48',1,'surf_model']]], ['status',['status',['../structs__xbt__parmap.html#afe6c4afdbdfecc9dc4cc141e264e1fa7',1,'s_xbt_parmap']]], ['suspend',['suspend',['../structsurf__model.html#a90af557a210c80ed385fc4a0f4b3a882',1,'surf_model']]] ]; SimGrid-3.10/doc/html/search/functions_74.js000640 007661 000620 00000021136 12242224150 021054 0ustar00gierschand000000 000000 var searchData= [ ['trace_5fcategory',['TRACE_category',['../group__TRACE__category.html#ga2c341df9553b432c507d4ab2a87e8685',1,'instr_interface.c']]], ['trace_5fcategory_5fwith_5fcolor',['TRACE_category_with_color',['../group__TRACE__category.html#ga5abe9661fe1a1382c9be63984fea6931',1,'instr_interface.c']]], ['trace_5fdeclare_5fmark',['TRACE_declare_mark',['../group__TRACE__mark.html#gacd215a0072a5d4ec7c5b11610b7bef20',1,'instr_interface.c']]], ['trace_5fdeclare_5fmark_5fvalue',['TRACE_declare_mark_value',['../group__TRACE__mark.html#ga01bdd85d46330578010dd77cf0e9df88',1,'instr_interface.c']]], ['trace_5fdeclare_5fmark_5fvalue_5fwith_5fcolor',['TRACE_declare_mark_value_with_color',['../group__TRACE__mark.html#gae5b5c2eab1fdca9122a8902f1f106649',1,'instr_interface.c']]], ['trace_5fget_5fcategories',['TRACE_get_categories',['../group__TRACE__category.html#ga87115c4173e0a6451fd7161fa4545572',1,'instr_interface.c']]], ['trace_5fget_5fedge_5ftypes',['TRACE_get_edge_types',['../group__TRACE__API.html#gaf5542d615046120aa8a3526268b9fa7f',1,'instr_interface.c']]], ['trace_5fget_5fhost_5fvariables',['TRACE_get_host_variables',['../group__TRACE__user__variables.html#ga421836b9a1d435300ff777cd04b68f4c',1,'instr_interface.c']]], ['trace_5fget_5flink_5fvariables',['TRACE_get_link_variables',['../group__TRACE__user__variables.html#ga4b07c188420bbc143deea8dcdce06642',1,'instr_interface.c']]], ['trace_5fget_5fmarks',['TRACE_get_marks',['../group__TRACE__mark.html#ga6012125dd57ddf958895a8007280bbf5',1,'instr_interface.c']]], ['trace_5fget_5fnode_5ftypes',['TRACE_get_node_types',['../group__TRACE__API.html#ga845e0cfbd8042ac70adf394df024e350',1,'instr_interface.c']]], ['trace_5fget_5fvm_5fvariables',['TRACE_get_vm_variables',['../group__TRACE__user__variables.html#ga21d00d19c12055de18047e7973508e91',1,'instr_interface.c']]], ['trace_5fhost_5fpop_5fstate',['TRACE_host_pop_state',['../group__TRACE__user__variables.html#ga111dc1b94c7f69e999f98163922332a6',1,'instr_interface.c']]], ['trace_5fhost_5fpush_5fstate',['TRACE_host_push_state',['../group__TRACE__user__variables.html#gab74f50cb9ed31f4436663acd34ed044a',1,'instr_interface.c']]], ['trace_5fhost_5freset_5fstate',['TRACE_host_reset_state',['../group__TRACE__user__variables.html#ga995ecd02343b09fd5ecdce8b8b1cd0d7',1,'instr_interface.c']]], ['trace_5fhost_5fset_5fstate',['TRACE_host_set_state',['../group__TRACE__user__variables.html#gacc421a6483570671a916a1d402add564',1,'instr_interface.c']]], ['trace_5fhost_5fstate_5fdeclare',['TRACE_host_state_declare',['../group__TRACE__user__variables.html#ga65a9ce22195518352da785b36527864d',1,'instr_interface.c']]], ['trace_5fhost_5fstate_5fdeclare_5fvalue',['TRACE_host_state_declare_value',['../group__TRACE__user__variables.html#gae5c66eb6918e75c5f38e06727d43e7bc',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fadd',['TRACE_host_variable_add',['../group__TRACE__user__variables.html#gae0a8625485d9cffc5c12676b65cd959c',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fadd_5fwith_5ftime',['TRACE_host_variable_add_with_time',['../group__TRACE__user__variables.html#gab6e7856a8181341e524cb4c9920c24ba',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fdeclare',['TRACE_host_variable_declare',['../group__TRACE__user__variables.html#ga1672865b1bc48cff5bdb759edf0a7c90',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fdeclare_5fwith_5fcolor',['TRACE_host_variable_declare_with_color',['../group__TRACE__user__variables.html#gaacaaa40fa93265cc87dc804edb6a61b3',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fset',['TRACE_host_variable_set',['../group__TRACE__user__variables.html#ga650d08f8e0547ffe3d3c5a6a6ceebcdf',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fset_5fwith_5ftime',['TRACE_host_variable_set_with_time',['../group__TRACE__user__variables.html#ga3adacb71a4ab331c93efdf250f73cbfc',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fsub',['TRACE_host_variable_sub',['../group__TRACE__user__variables.html#ga287fcd04c563ff2f795460850e4fc5d6',1,'instr_interface.c']]], ['trace_5fhost_5fvariable_5fsub_5fwith_5ftime',['TRACE_host_variable_sub_with_time',['../group__TRACE__user__variables.html#gae9ab3b84945d21bd06529d6705471d65',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fadd',['TRACE_link_srcdst_variable_add',['../group__TRACE__user__variables.html#gae19a0f01ea6240ceaba534dab0f15919',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fadd_5fwith_5ftime',['TRACE_link_srcdst_variable_add_with_time',['../group__TRACE__user__variables.html#ga0fec5f8d16e8d8ba4c82b2dba1ba6234',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fset',['TRACE_link_srcdst_variable_set',['../group__TRACE__user__variables.html#gab93d0d4ffb907c4d4b43cdc53cbe4f8c',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fset_5fwith_5ftime',['TRACE_link_srcdst_variable_set_with_time',['../group__TRACE__user__variables.html#ga1abd4aeafd36e40fd2aa8f15566df013',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fsub',['TRACE_link_srcdst_variable_sub',['../group__TRACE__user__variables.html#gaa0af1adaf2ee2e0ea3b045e8ef5c4edf',1,'instr_interface.c']]], ['trace_5flink_5fsrcdst_5fvariable_5fsub_5fwith_5ftime',['TRACE_link_srcdst_variable_sub_with_time',['../group__TRACE__user__variables.html#ga37278937e06f41f0a0b06b6b91bbdfa6',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fadd',['TRACE_link_variable_add',['../group__TRACE__user__variables.html#gabbc55f2a3e25e49248be7d9b71f15cb8',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fadd_5fwith_5ftime',['TRACE_link_variable_add_with_time',['../group__TRACE__user__variables.html#ga139bde27fec64c468d16b5231fc41118',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fdeclare',['TRACE_link_variable_declare',['../group__TRACE__user__variables.html#ga0b79340b330704fc7f30596988ce937c',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fdeclare_5fwith_5fcolor',['TRACE_link_variable_declare_with_color',['../group__TRACE__user__variables.html#ga1c3d1a22e56a7a9a2fa6e5e6feb7978e',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fset',['TRACE_link_variable_set',['../group__TRACE__user__variables.html#ga5a521dffa1a5705e9e65d77053ef0cfa',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fset_5fwith_5ftime',['TRACE_link_variable_set_with_time',['../group__TRACE__user__variables.html#gaccafa87e0e58f2f3e282a7d23e56d792',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fsub',['TRACE_link_variable_sub',['../group__TRACE__user__variables.html#ga009ecbc92025f7f2106386e5c8822e0b',1,'instr_interface.c']]], ['trace_5flink_5fvariable_5fsub_5fwith_5ftime',['TRACE_link_variable_sub_with_time',['../group__TRACE__user__variables.html#gae6b2b2b1f2ad80588d5b4eccb7d5ab6c',1,'instr_interface.c']]], ['trace_5fmark',['TRACE_mark',['../group__TRACE__mark.html#gac8f263e9033090c2e73c7a2e2a98088a',1,'instr_interface.c']]], ['trace_5fpause',['TRACE_pause',['../group__TRACE__API.html#ga61801e88fcc9c8963c3ec77d78522f74',1,'instr_interface.c']]], ['trace_5fplatform_5fgraph_5fexport_5fgraphviz',['TRACE_platform_graph_export_graphviz',['../group__TRACE__API.html#ga77e1127c6602edd4f233ca62d6de36e0',1,'instr_interface.c']]], ['trace_5fresume',['TRACE_resume',['../group__TRACE__API.html#ga636015c91ac56d3942f83321708d9105',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fadd',['TRACE_vm_variable_add',['../group__TRACE__user__variables.html#gafc3f5b621994a050372b53996fed3557',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fadd_5fwith_5ftime',['TRACE_vm_variable_add_with_time',['../group__TRACE__user__variables.html#ga8c4126bc2a48fe3fa811b9c0fc035914',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fdeclare',['TRACE_vm_variable_declare',['../group__TRACE__user__variables.html#ga3aa9e4ecfa5e9f22cd4742bab032156d',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fdeclare_5fwith_5fcolor',['TRACE_vm_variable_declare_with_color',['../group__TRACE__user__variables.html#gaba9508562b4cbfbdc27904df5b913324',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fset',['TRACE_vm_variable_set',['../group__TRACE__user__variables.html#ga8f2371c0b41d2e462a2b94d81be4e148',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fset_5fwith_5ftime',['TRACE_vm_variable_set_with_time',['../group__TRACE__user__variables.html#ga35222cf7a7c43583b550c3a5ac12bda2',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fsub',['TRACE_vm_variable_sub',['../group__TRACE__user__variables.html#ga20ce487069e27bb3d2eca34295a3c20c',1,'instr_interface.c']]], ['trace_5fvm_5fvariable_5fsub_5fwith_5ftime',['TRACE_vm_variable_sub_with_time',['../group__TRACE__user__variables.html#ga6de804cf8760ca23a2c787850150e42c',1,'instr_interface.c']]] ]; SimGrid-3.10/doc/html/search/enumvalues_78.html000640 007661 000620 00000001713 12242224150 021563 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/typedefs_78.js000640 007661 000620 00000005117 12242224150 020674 0ustar00gierschand000000 000000 var searchData= [ ['xbt_5fcfg_5fcb_5ft',['xbt_cfg_cb_t',['../group__XBT__cfg__decl.html#ga4080887ffe36fb58611ee70094c003be',1,'config.h']]], ['xbt_5fcfg_5ft',['xbt_cfg_t',['../group__XBT__cfg__use.html#gac5894d3947cb042db07d729ebfe064ca',1,'config.h']]], ['xbt_5fcond_5ft',['xbt_cond_t',['../group__XBT__synchro.html#gace9e6b68048d41411b38765f614c1301',1,'synchro_core.h']]], ['xbt_5fdict_5ft',['xbt_dict_t',['../group__XBT__dict__cons.html#gac60ea15fce6ea593be308de876712f04',1,'dict.h']]], ['xbt_5fdynar_5ft',['xbt_dynar_t',['../group__XBT__dynar__cons.html#gac826571988d2b63ae225e5c62ecdbc79',1,'dynar.h']]], ['xbt_5ffifo_5fitem_5ft',['xbt_fifo_item_t',['../group__XBT__fifo__cons.html#ga58e96f4a3637f7ff6bb1a9f53e7865c8',1,'fifo.h']]], ['xbt_5ffifo_5ft',['xbt_fifo_t',['../group__XBT__fifo__cons.html#ga24efbdc1db204e1a628958ce7509a312',1,'fifo.h']]], ['xbt_5fmallocator_5ft',['xbt_mallocator_t',['../group__XBT__mallocator__cons.html#gab949b93743d06b31bbdf3828d34a72ac',1,'mallocator.h']]], ['xbt_5fmutex_5ft',['xbt_mutex_t',['../group__XBT__synchro.html#ga6e01b815cfcb1b932c9ad5c334ee82cd',1,'synchro_core.h']]], ['xbt_5fos_5fcond_5ft',['xbt_os_cond_t',['../group__XBT__thread.html#ga2c6224cb25614dc8b972aca6288ebe60',1,'xbt_os_thread.h']]], ['xbt_5fos_5fmutex_5ft',['xbt_os_mutex_t',['../group__XBT__thread.html#ga51b6d74f9dcfa8d7563ddf6386f9bd89',1,'xbt_os_thread.h']]], ['xbt_5fos_5frmutex_5ft',['xbt_os_rmutex_t',['../group__XBT__thread.html#gaac45eea7caeae848b86cf78d989d9aee',1,'xbt_os_thread.h']]], ['xbt_5fos_5fsem_5ft',['xbt_os_sem_t',['../group__XBT__thread.html#gab48cac979eebc8c1e26ca7adc7cec0ac',1,'xbt_os_thread.h']]], ['xbt_5fos_5fthread_5ft',['xbt_os_thread_t',['../group__XBT__thread.html#ga7994e3241b60f854c77043c49a83873c',1,'xbt_os_thread.h']]], ['xbt_5fparmap_5ft',['xbt_parmap_t',['../group__XBT__parmap.html#gaebe875868080812c5e303884551ced62',1,'parmap.h']]], ['xbt_5fpeer_5ft',['xbt_peer_t',['../group__XBT__peer.html#gad2304165af1ed80fe6d82eb14343eca7',1,'peer.h']]], ['xbt_5fqueue_5ft',['xbt_queue_t',['../group__XBT__queue.html#gae44d114ab24c5175b9500f0a80058f4f',1,'queue.h']]], ['xbt_5fset_5fcursor_5ft',['xbt_set_cursor_t',['../group__XBT__set__curs.html#ga07bc36055121d6d2b49a483608033827',1,'set.h']]], ['xbt_5fset_5ft',['xbt_set_t',['../group__XBT__set__cons.html#ga5a56bcacbc9efbb918abb6be2f7c8b7d',1,'set.h']]], ['xbt_5fswag_5ft',['xbt_swag_t',['../group__XBT__swag__type.html#gae08645c9a236bae019fb12ab374dc17f',1,'swag.h']]], ['xbt_5fthread_5ft',['xbt_thread_t',['../group__XBT__synchro.html#gabe2e83a69fdb54e7513cfde241a8b6e9',1,'synchro_core.h']]] ]; SimGrid-3.10/doc/html/search/variables_63.html000640 007661 000620 00000001712 12242224150 021340 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_65.js000640 007661 000620 00000003122 12242224150 017607 0ustar00gierschand000000 000000 var searchData= [ ['e_5fsd_5ftask_5fkind_5ft',['e_SD_task_kind_t',['../group__SD__datatypes__management.html#ga242a90ba979257e3245553f149b74880',1,'datatypes.h']]], ['e_5fsd_5ftask_5fstate_5ft',['e_SD_task_state_t',['../group__SD__datatypes__management.html#ga49c04f3f117a8a1f8f1d0bedadefcfa5',1,'datatypes.h']]], ['e_5fsd_5fworkstation_5faccess_5fmode_5ft',['e_SD_workstation_access_mode_t',['../group__SD__datatypes__management.html#ga6eb21649841a9b045552f3aa810e05f5',1,'datatypes.h']]], ['e_5fsurf_5faction_5fstate_5ft',['e_surf_action_state_t',['../group__SURF__actions.html#gab9ef4042b1b038be1b792366de0121b2',1,'surf.h']]], ['e_5fxbt_5fcfgelm_5ftype_5ft',['e_xbt_cfgelm_type_t',['../group__XBT__cfg__decl.html#gaae016e87dc6935ed51617bbea7b8aa6c',1,'config.h']]], ['e_5fxbt_5flog_5fpriority_5ft',['e_xbt_log_priority_t',['../group__XBT__log.html#ga01ff08eb23b4f14bb759c676bcf8df82',1,'log.h']]], ['e_5fxbt_5fparmap_5fmode_5ft',['e_xbt_parmap_mode_t',['../group__XBT__parmap.html#gacbdbf85f704718b8680f13e56c618e7a',1,'parmap.h']]], ['execute',['execute',['../structsurf__workstation__model__extension__public.html#ad44708cb6550651107c38f4cccf0262f',1,'surf_workstation_model_extension_public']]], ['extending_20simgrid',['Extending SimGrid',['../inside_extending.html',1,'internals']]], ['explicit_20synchronization_20functions',['Explicit Synchronization Functions',['../group__msg__synchro.html',1,'']]], ['exception_20support',['Exception support',['../group__XBT__ex.html',1,'']]], ['existing_20log_20categories',['Existing log categories',['../group__XBT__log__cats.html',1,'']]] ]; SimGrid-3.10/doc/html/search/pages_74.html000640 007661 000620 00000001706 12242224150 020474 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_72.html000640 007661 000620 00000001704 12242224150 020141 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_73.js000640 007661 000620 00000004034 12242224150 020360 0ustar00gierschand000000 000000 var searchData= [ ['simix_20datatypes_20management_20details',['SIMIX datatypes management details',['../group__m__datatypes__management__details.html',1,'']]], ['simdag',['SimDag',['../group__SD__API.html',1,'']]], ['sd_20data_20types',['SD Data Types',['../group__SD__datatypes__management.html',1,'']]], ['simulation',['Simulation',['../group__SD__simulation.html',1,'']]], ['simix',['SIMIX',['../group__SIMIX__API.html',1,'']]], ['synchronisation_20management_20functions',['Synchronisation Management Functions',['../group__simix__synchro__management.html',1,'']]], ['smpi',['SMPI',['../group__SMPI__API.html',1,'']]], ['surf_20actions',['SURF actions',['../group__SURF__actions.html',1,'']]], ['surf',['SURF',['../group__SURF__API.html',1,'']]], ['surf_20resources',['SURF resources',['../group__SURF__resources.html',1,'']]], ['simulation',['Simulation',['../group__SURF__simulation.html',1,'']]], ['speed_20optimized_20access_20to_20dynars_20of_20scalars',['Speed optimized access to dynars of scalars',['../group__XBT__dynar__speed.html',1,'']]], ['set_3a_20generic_20set_20datatype',['Set: generic set datatype',['../group__XBT__set.html',1,'']]], ['sets_20basic_20usage',['Sets basic usage',['../group__XBT__set__basic.html',1,'']]], ['set_20and_20set_20elements_2c_20constructor_2fdestructor',['Set and set elements, constructor/destructor',['../group__XBT__set__cons.html',1,'']]], ['sets_20cursors',['Sets cursors',['../group__XBT__set__curs.html',1,'']]], ['sock',['Sock',['../group__XBT__sock.html',1,'']]], ['string_20related_20functions',['String related functions',['../group__XBT__str.html',1,'']]], ['swag_3a_20o_281_29_20set_20datatype',['Swag: O(1) set datatype',['../group__XBT__swag.html',1,'']]], ['swag_20cursor',['Swag cursor',['../group__XBT__swag__curs.html',1,'']]], ['swag_20functions',['SWAG functions',['../group__XBT__swag__func.html',1,'']]], ['swag_20types',['Swag types',['../group__XBT__swag__type.html',1,'']]], ['synchro_20stuff',['Synchro stuff',['../group__XBT__synchro.html',1,'']]] ]; SimGrid-3.10/doc/html/search/functions_78.html000640 007661 000620 00000001712 12242224150 021406 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_73.js000640 007661 000620 00000001006 12242224150 020134 0ustar00gierschand000000 000000 var searchData= [ ['simgrid_20in_2030mn',['SimGrid in 30mn',['../getting_started.html',1,'index']]], ['simgrid_20documentation',['SimGrid Documentation',['../index.html',1,'']]], ['simgrid_20developer_20guide_20_2d_20releasing',['SimGrid Developer Guide - Releasing',['../inside_release.html',1,'internals']]], ['simgrid_20internals',['SimGrid internals',['../internals.html',1,'advanced']]], ['simgrid_20options_20and_20configurations',['Simgrid options and configurations',['../options.html',1,'use']]] ]; SimGrid-3.10/doc/html/search/all_62.html000640 007661 000620 00000001704 12242224150 020140 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_62.html000640 007661 000620 00000001713 12242224150 021554 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/variables_63.js000640 007661 000620 00000000514 12242224150 021007 0ustar00gierschand000000 000000 var searchData= [ ['category',['category',['../structxbt__ex__t.html#a2fdd312ae1d96663701d743283404924',1,'xbt_ex_t::category()'],['../structsurf__action.html#ad4acecd52a2d4699e5f2145225fc890d',1,'surf_action::category()']]], ['cost',['cost',['../structsurf__action.html#a240981003cb7b2ef07b822b07a3e9973',1,'surf_action']]] ]; SimGrid-3.10/doc/html/search/variables_77.js000640 007661 000620 00000001721 12242224150 021015 0ustar00gierschand000000 000000 var searchData= [ ['watched_5fhosts_5flib',['watched_hosts_lib',['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.h'],['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.c'],['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.h'],['../group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6',1,'watched_hosts_lib(): surf.h']]], ['work',['work',['../structs__xbt__parmap.html#acbf2e11c9c8d053907e5bc6f8e4d396d',1,'s_xbt_parmap']]], ['worker_5fsignal_5ff',['worker_signal_f',['../structs__xbt__parmap.html#a9ba6b2ab3c8e1f943d9308c77c4f13ec',1,'s_xbt_parmap']]], ['worker_5fwait_5ff',['worker_wait_f',['../structs__xbt__parmap.html#a5524248ea1a35b7094e3c898e293bf0d',1,'s_xbt_parmap']]], ['workers',['workers',['../structs__xbt__parmap.html#a8c93b6fa9e0bdfaf8322245e731bc2af',1,'s_xbt_parmap']]] ]; SimGrid-3.10/doc/html/search/typedefs_6d.js000640 007661 000620 00000002234 12242224150 020744 0ustar00gierschand000000 000000 var searchData= [ ['msg_5fcomm_5ft',['msg_comm_t',['../group__msg__task__usage.html#gafe19e97b54682048a5b2f1c79add21cf',1,'datatypes.h']]], ['msg_5ffile_5ft',['msg_file_t',['../group__msg__file__management.html#ga87e0d76d9428e822d9a67e676c8a2775',1,'datatypes.h']]], ['msg_5fgpu_5ftask_5ft',['msg_gpu_task_t',['../group__m__task__management.html#ga3ab366f5db21f52c90a265fe83c5c2dd',1,'datatypes.h']]], ['msg_5fhost_5ft',['msg_host_t',['../group__m__host__management.html#ga0cc2134715cceaeea82df1c1305fbecf',1,'datatypes.h']]], ['msg_5fmailbox_5ft',['msg_mailbox_t',['../group__msg__task__usage.html#gae2f7e0cd1e5707f78b4694abeef695d3',1,'datatypes.h']]], ['msg_5fprocess_5ft',['msg_process_t',['../group__m__process__management.html#ga49407197cb1ba4a2b1943285786eacec',1,'datatypes.h']]], ['msg_5fsem_5ft',['msg_sem_t',['../group__msg__synchro.html#gadb025f3f21a31a3140675cea7a4ef957',1,'msg.h']]], ['msg_5fstorage_5ft',['msg_storage_t',['../group__msg__storage__management.html#ga13125793869304d581f31a0beb3e143d',1,'datatypes.h']]], ['msg_5ftask_5ft',['msg_task_t',['../group__m__task__management.html#gaa7cd89c7f542d19fd817a614d1c1cc95',1,'datatypes.h']]] ]; SimGrid-3.10/doc/html/search/functions_76.js000640 007661 000620 00000000207 12242224150 021052 0ustar00gierschand000000 000000 var searchData= [ ['vasprintf',['vasprintf',['../group__XBT__str.html#gaf354d1d051622132c673dde7cfd63b79',1,'simgrid_config.h']]] ]; SimGrid-3.10/doc/html/search/pages_64.js000640 007661 000620 00000000314 12242224150 020135 0ustar00gierschand000000 000000 var searchData= [ ['deployment_20description',['Deployment Description',['../deployment.html',1,'use']]], ['documenting_20simgrid',['Documenting SimGrid',['../inside_doxygen.html',1,'internals']]] ]; SimGrid-3.10/doc/html/search/all_63.html000640 007661 000620 00000001704 12242224150 020141 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_76.js000640 007661 000620 00000000110 12242224150 020352 0ustar00gierschand000000 000000 var searchData= [ ['vms',['VMs',['../group__msg__VMs.html',1,'']]] ]; SimGrid-3.10/doc/html/search/enumvalues_69.js000640 007661 000620 00000000234 12242224150 021230 0ustar00gierschand000000 000000 var searchData= [ ['io_5ferror',['io_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a7867239bb18a1f74d007fd1cc5f2202c',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/variables_6e.html000640 007661 000620 00000001712 12242224150 021422 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_66.html000640 007661 000620 00000001706 12242224150 020475 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_65.js000640 007661 000620 00000000505 12242224150 020360 0ustar00gierschand000000 000000 var searchData= [ ['explicit_20synchronization_20functions',['Explicit Synchronization Functions',['../group__msg__synchro.html',1,'']]], ['exception_20support',['Exception support',['../group__XBT__ex.html',1,'']]], ['existing_20log_20categories',['Existing log categories',['../group__XBT__log__cats.html',1,'']]] ]; SimGrid-3.10/doc/html/search/groups_61.js000640 007661 000620 00000000160 12242224150 020351 0ustar00gierschand000000 000000 var searchData= [ ['assert_20macro_20familly',['Assert macro familly',['../group__XBT__error.html',1,'']]] ]; SimGrid-3.10/doc/html/search/enums_78.html000640 007661 000620 00000001706 12242224150 020530 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_5f.js000640 007661 000620 00000000223 12242224150 017666 0ustar00gierschand000000 000000 var searchData= [ ['_5f_5fattribute_5f_5f',['__attribute__',['../group__XBT__syscall.html#gab6d5dfd5b7461f3942dfdd1eda223237',1,'sysdep.h']]] ]; SimGrid-3.10/doc/html/search/all_77.html000640 007661 000620 00000001704 12242224150 020146 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/groups_78.html000640 007661 000620 00000001707 12242224150 020721 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/pages_64.html000640 007661 000620 00000001706 12242224150 020473 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/enumvalues_74.js000640 007661 000620 00000000710 12242224150 021223 0ustar00gierschand000000 000000 var searchData= [ ['thread_5ferror',['thread_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a2d90a8bed8343426b9732511aa2cb34c',1,'ex.h']]], ['timeout_5ferror',['timeout_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854acbb4310f650e6fddbbad783293eff676',1,'ex.h']]], ['tracing_5ferror',['tracing_error',['../group__XBT__ex.html#ggaa45fec59aa57056784554a7f998f0854a288db5d5a882653cc5466f62369ab676',1,'ex.h']]] ]; SimGrid-3.10/doc/html/search/variables_67.html000640 007661 000620 00000001712 12242224150 021344 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_66.js000640 007661 000620 00000002551 12242224150 017615 0ustar00gierschand000000 000000 var searchData= [ ['full_20index',['Full Index',['../group__API__index.html',1,'']]], ['failed_5faction_5fset',['failed_action_set',['../structsurf__action__state.html#afd75fc8c3f9c0427127d33cf6c0514d8',1,'surf_action_state']]], ['frequently_20asked_20questions',['Frequently Asked Questions',['../FAQ.html',1,'index']]], ['file',['file',['../structxbt__ex__t.html#a699c25f08a1720fd3d669706e0765782',1,'xbt_ex_t::file()'],['../structsurf__action.html#aa9ca06fd7e5854befa6036abda2365b4',1,'surf_action::file()']]], ['finish',['finish',['../structsurf__action.html#a4999b0d857d5e2e56431de7308909fbb',1,'surf_action']]], ['fun',['fun',['../structs__xbt__parmap.html#ab41017148fff9bfd45f1e4562cd8881f',1,'s_xbt_parmap']]], ['func',['func',['../structxbt__ex__t.html#a83dc86da4901fc1589688824301eb929',1,'xbt_ex_t']]], ['file_20management_20functions',['File Management Functions',['../group__msg__file__management.html',1,'']]], ['file_20management_20functions',['File Management Functions',['../group__simix__file__management.html',1,'']]], ['fifo_3a_20generic_20workqueue',['Fifo: generic workqueue',['../group__XBT__fifo.html',1,'']]], ['fifo_20constructor_20and_20destructor',['Fifo constructor and destructor',['../group__XBT__fifo__cons.html',1,'']]], ['fifo_20perl_2dlike_20functions',['Fifo perl-like functions',['../group__XBT__fifo__perl.html',1,'']]] ]; SimGrid-3.10/doc/html/search/variables_66.js000640 007661 000620 00000001231 12242224150 021007 0ustar00gierschand000000 000000 var searchData= [ ['failed_5faction_5fset',['failed_action_set',['../structsurf__action__state.html#afd75fc8c3f9c0427127d33cf6c0514d8',1,'surf_action_state']]], ['file',['file',['../structxbt__ex__t.html#a699c25f08a1720fd3d669706e0765782',1,'xbt_ex_t::file()'],['../structsurf__action.html#aa9ca06fd7e5854befa6036abda2365b4',1,'surf_action::file()']]], ['finish',['finish',['../structsurf__action.html#a4999b0d857d5e2e56431de7308909fbb',1,'surf_action']]], ['fun',['fun',['../structs__xbt__parmap.html#ab41017148fff9bfd45f1e4562cd8881f',1,'s_xbt_parmap']]], ['func',['func',['../structxbt__ex__t.html#a83dc86da4901fc1589688824301eb929',1,'xbt_ex_t']]] ]; SimGrid-3.10/doc/html/search/functions_73.html000640 007661 000620 00000001712 12242224150 021401 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/search/all_75.html000640 007661 000620 00000001704 12242224150 020144 0ustar00gierschand000000 000000
Loading...
Searching...
No Matches
SimGrid-3.10/doc/html/navtree.js000640 007661 000620 00000051024 12242224150 016730 0ustar00gierschand000000 000000 var NAVTREE = [ [ "SimGrid", "index.html", [ [ "SimGrid Documentation", "index.html", null ], [ "SimGrid in 30mn", "getting_started.html", null ], [ "Introduction to SimGrid", "introduction.html", null ], [ "Installing Simgrid", "install.html", [ [ "Installing a binary package", "install.html#install_binary", [ [ "Binary packages for linux", "install.html#install_binary_linux", null ], [ "Installation wizard for Windows", "install.html#install_binary_win", null ], [ "Using the binary jar file", "install.html#install_binary_java", null ] ] ], [ "Installing from source", "install.html#install_src", [ [ "Resolving the dependencies", "install.html#install_src_deps", null ], [ "Retrieving the source", "install.html#install_src_fetch", null ], [ "Configuring the build", "install.html#install_src_config", [ [ "Setting compilation options", "install.html#install_cmake_howto", null ], [ "SimGrid compilation options", "install.html#install_cmake_list", null ], [ "Resetting the compilation configuration", "install.html#install_cmake_reset", null ], [ "Compiling into a separate directory", "install.html#install_cmake_outsrc", null ], [ "Cmake on Windows (with MinGW)", "install.html#install_cmake_win", null ], [ "Cmake on Mac OSX", "install.html#install_cmake_mac", null ] ] ], [ "Compiling SimGrid", "install.html#install_src_compil", null ], [ "Testing SimGrid", "install.html#install_src_test", null ] ] ], [ "Setting up your own code", "install.html#install_setting_own", [ [ "MSG code on Unix (Linux or Mac OSX)", "install.html#install_setting_MSG", null ], [ "Compile the \"HelloWorld\" project on Windows", "install.html#install_setting_win_provided", null ], [ "Adding and Compiling a new example on Windows", "install.html#install_setting_win_new", null ], [ "Setup a virtualbox to use SimGrid-Ruby on windows", "install.html#install_Win_ruby", null ] ] ] ] ], [ "Using SimGrid", "use.html", "use" ], [ "Advanced Topics", "advanced.html", "advanced" ], [ "Frequently Asked Questions", "FAQ.html", [ [ "I'm new to SimGrid. I have some questions. Where should I start?", "FAQ.html#faq_simgrid", [ [ "What is the difference between MSG and SimDag? Do they serve the same purpose?", "FAQ.html#faq_interfaces", null ], [ "Visualizing and analyzing the results", "FAQ.html#faq_visualization", null ], [ "Argh! Do I really have to code in C?", "FAQ.html#faq_C", null ] ] ], [ "Feature related questions", "FAQ.html#faq_howto", [ [ "\"Could you please add (your favorite feature here) to SimGrid?\"", "FAQ.html#faq_MIA", null ], [ "MSG features", "FAQ.html#faq_MIA_MSG", [ [ "I want some more complex MSG examples!", "FAQ.html#faq_MIA_examples", null ], [ "Missing in action: MSG Task duplication/replication", "FAQ.html#faq_MIA_taskdup", null ], [ "I want to do asynchronous communications in MSG", "FAQ.html#faq_MIA_asynchronous", null ], [ "I need to synchronize my MSG processes", "FAQ.html#faq_MIA_thread_synchronization", null ], [ "Where is the get_host_load function hidden in MSG?", "FAQ.html#faq_MIA_host_load", null ], [ "How can I get the *real* communication time?", "FAQ.html#faq_MIA_communication_time", null ] ] ], [ "SimDag related questions", "FAQ.html#faq_MIA_SimDag", [ [ "Implementing communication delays between tasks.", "FAQ.html#faq_SG_comm", null ], [ "How to implement a distributed dynamic scheduler of DAGs.", "FAQ.html#faq_SG_DAG", null ] ] ], [ "Generic features", "FAQ.html#faq_MIA_generic", [ [ "Increasing the amount of simulated processes", "FAQ.html#faq_more_processes", null ], [ "Is there a native support for batch schedulers in SimGrid?", "FAQ.html#faq_MIA_batch_scheduler", null ], [ "I need a checkpointing thing", "FAQ.html#faq_MIA_checkpointing", null ] ] ], [ "Platform building and Dynamic resources", "FAQ.html#faq_platform", [ [ "Where can I find SimGrid platform files?", "FAQ.html#faq_platform_example", null ], [ "How can I automatically map an existing platform?", "FAQ.html#faq_platform_alnem", null ], [ "Generating synthetic but realistic platforms", "FAQ.html#faq_platform_synthetic", null ], [ "Using random variable for the resource power or availability", "FAQ.html#faq_platform_random", null ] ] ] ] ], [ "Troubleshooting", "FAQ.html#faq_troubleshooting", [ [ "The feature X stopped to work after my last update", "FAQ.html#faq_trouble_changelog", null ], [ "SimGrid compilation and installation problems", "FAQ.html#faq_trouble_lib_compil", [ [ "cmake fails!", "FAQ.html#faq_trouble_lib_config", null ], [ "Dude! \"ctest\" fails on my machine!", "FAQ.html#faq_trouble_distcheck", null ] ] ], [ "User code compilation problems", "FAQ.html#faq_trouble_compil", [ [ "\"gcc: _simgrid_this_log_category_does_not_exist__??? undeclared (first use in this function)\"", "FAQ.html#faq_trouble_err_logcat", null ], [ "\"gcc: undefined reference to pthread_key_create\"", "FAQ.html#faq_trouble_pthreadstatic", null ], [ "\"gcc: undefined reference to MSG_*\"", "FAQ.html#faq_trouble_lib_msg_deprecated", null ] ] ], [ "Runtime error messages", "FAQ.html#faq_trouble_errors", [ [ "\"surf_parse_lex: Assertion `next limit' failed.\"", "FAQ.html#faq_flexml_limit", null ], [ "I'm told that my XML files are too old.", "FAQ.html#faq_trouble_errors_big_fat_warning", null ] ] ], [ "Valgrind-related and other debugger issues", "FAQ.html#faq_trouble_valgrind", [ [ "longjmp madness in valgrind", "FAQ.html#faq_trouble_vg_longjmp", null ], [ "Valgrind spits tons of errors about backtraces!", "FAQ.html#faq_trouble_vg_libc", null ], [ "Truncated backtraces", "FAQ.html#faq_trouble_backtraces", null ] ] ], [ "There is a deadlock in my code!!!", "FAQ.html#faq_deadlock", null ], [ "I get weird timings when I play with the latencies.", "FAQ.html#faq_surf_network_latency", null ], [ "So I've found a bug in SimGrid. How to report it?", "FAQ.html#faq_bugrepport", null ] ] ] ] ], [ "Data Structures", "annotated.html", "annotated" ], [ "Data Fields", "functions.html", [ [ "All", "functions.html", null ], [ "Variables", "functions_vars.html", null ] ] ], [ "APIs Reference", "modules.html", "modules" ] ] ] ]; var NAVTREEINDEX = [ "FAQ.html", "group__TRACE__user__variables.html#ga35222cf7a7c43583b550c3a5ac12bda2", "group__XBT__fifo__perl.html#gad7fdf56ec51e0c1ec442225b3e3ccc07", "group__m__process__management.html#ga2c75b91ef5b61cad66a7fa3a72d122d0", "inside_doxygen.html#inside_doxygen_regen", "structs__xbt__peer.html#a45e2bc83b39c767a0eb30f0424afcaaf" ]; var navTreeSubIndices = new Array(); function getData(varName) { var i = varName.lastIndexOf('/'); var n = i>=0 ? varName.substring(i+1) : varName; return eval(n.replace(/\-/g,'_')); } function stripPath(uri) { return uri.substring(uri.lastIndexOf('/')+1); } function stripPath2(uri) { var i = uri.lastIndexOf('/'); var s = uri.substring(i+1); var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); return m ? uri.substring(i-6) : s; } function localStorageSupported() { return 'localStorage' in window && window['localStorage'] !== null; } function storeLink(link) { if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { window.localStorage.setItem('navpath',link); } } function deleteLink() { if (localStorageSupported()) { window.localStorage.setItem('navpath',''); } } function cachedLink() { if (localStorageSupported()) { return window.localStorage.getItem('navpath'); } else { return ''; } } function getScript(scriptName,func,show) { var head = document.getElementsByTagName("head")[0]; var script = document.createElement('script'); script.id = scriptName; script.type = 'text/javascript'; script.onload = func; script.src = scriptName+'.js'; if ($.browser.msie && $.browser.version<=8) { // script.onload does work with older versions of IE script.onreadystatechange = function() { if (script.readyState=='complete' || script.readyState=='loaded') { func(); if (show) showRoot(); } } } head.appendChild(script); } function createIndent(o,domNode,node,level) { if (node.parentNode && node.parentNode.parentNode) { createIndent(o,domNode,node.parentNode,level+1); } var imgNode = document.createElement("img"); imgNode.width = 16; imgNode.height = 22; if (level==0 && node.childrenData) { node.plus_img = imgNode; node.expandToggle = document.createElement("a"); node.expandToggle.href = "javascript:void(0)"; node.expandToggle.onclick = function() { if (node.expanded) { $(node.getChildrenUL()).slideUp("fast"); if (node.isLast) { node.plus_img.src = node.relpath+"ftv2plastnode.png"; } else { node.plus_img.src = node.relpath+"ftv2pnode.png"; } node.expanded = false; } else { expandNode(o, node, false, false); } } node.expandToggle.appendChild(imgNode); domNode.appendChild(node.expandToggle); } else { domNode.appendChild(imgNode); } if (level==0) { if (node.isLast) { if (node.childrenData) { imgNode.src = node.relpath+"ftv2plastnode.png"; } else { imgNode.src = node.relpath+"ftv2lastnode.png"; domNode.appendChild(imgNode); } } else { if (node.childrenData) { imgNode.src = node.relpath+"ftv2pnode.png"; } else { imgNode.src = node.relpath+"ftv2node.png"; domNode.appendChild(imgNode); } } } else { if (node.isLast) { imgNode.src = node.relpath+"ftv2blank.png"; } else { imgNode.src = node.relpath+"ftv2vertline.png"; } } imgNode.border = "0"; } function newNode(o, po, text, link, childrenData, lastNode) { var node = new Object(); node.children = Array(); node.childrenData = childrenData; node.depth = po.depth + 1; node.relpath = po.relpath; node.isLast = lastNode; node.li = document.createElement("li"); po.getChildrenUL().appendChild(node.li); node.parentNode = po; node.itemDiv = document.createElement("div"); node.itemDiv.className = "item"; node.labelSpan = document.createElement("span"); node.labelSpan.className = "label"; createIndent(o,node.itemDiv,node,0); node.itemDiv.appendChild(node.labelSpan); node.li.appendChild(node.itemDiv); var a = document.createElement("a"); node.labelSpan.appendChild(a); node.label = document.createTextNode(text); node.expanded = false; a.appendChild(node.label); if (link) { var url; if (link.substring(0,1)=='^') { url = link.substring(1); link = url; } else { url = node.relpath+link; } a.className = stripPath(link.replace('#',':')); if (link.indexOf('#')!=-1) { var aname = '#'+link.split('#')[1]; var srcPage = stripPath($(location).attr('pathname')); var targetPage = stripPath(link.split('#')[0]); a.href = srcPage!=targetPage ? url : '#'; a.onclick = function(){ storeLink(link); if (!$(a).parent().parent().hasClass('selected')) { $('.item').removeClass('selected'); $('.item').removeAttr('id'); $(a).parent().parent().addClass('selected'); $(a).parent().parent().attr('id','selected'); } var pos, anchor = $(aname), docContent = $('#doc-content'); if (anchor.parent().attr('class')=='memItemLeft') { pos = anchor.parent().position().top; } else if (anchor.position()) { pos = anchor.position().top; } if (pos) { var dist = Math.abs(Math.min( pos-docContent.offset().top, docContent[0].scrollHeight- docContent.height()-docContent.scrollTop())); docContent.animate({ scrollTop: pos + docContent.scrollTop() - docContent.offset().top },Math.max(50,Math.min(500,dist)),function(){ window.location.replace(aname); }); } }; } else { a.href = url; a.onclick = function() { storeLink(link); } } } else { if (childrenData != null) { a.className = "nolink"; a.href = "javascript:void(0)"; a.onclick = node.expandToggle.onclick; } } node.childrenUL = null; node.getChildrenUL = function() { if (!node.childrenUL) { node.childrenUL = document.createElement("ul"); node.childrenUL.className = "children_ul"; node.childrenUL.style.display = "none"; node.li.appendChild(node.childrenUL); } return node.childrenUL; }; return node; } function showRoot() { var headerHeight = $("#top").height(); var footerHeight = $("#nav-path").height(); var windowHeight = $(window).height() - headerHeight - footerHeight; (function (){ // retry until we can scroll to the selected item try { var navtree=$('#nav-tree'); navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); } catch (err) { setTimeout(arguments.callee, 0); } })(); } function expandNode(o, node, imm, showRoot) { if (node.childrenData && !node.expanded) { if (typeof(node.childrenData)==='string') { var varName = node.childrenData; getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); expandNode(o, node, imm, showRoot); }, showRoot); } else { if (!node.childrenVisited) { getNode(o, node); } if (imm || ($.browser.msie && $.browser.version>8)) { // somehow slideDown jumps to the start of tree for IE9 :-( $(node.getChildrenUL()).show(); } else { $(node.getChildrenUL()).slideDown("fast"); } if (node.isLast) { node.plus_img.src = node.relpath+"ftv2mlastnode.png"; } else { node.plus_img.src = node.relpath+"ftv2mnode.png"; } node.expanded = true; } } } function glowEffect(n,duration) { n.addClass('glow').delay(duration).queue(function(next){ $(this).removeClass('glow');next(); }); } function highlightAnchor() { var anchor = $($(location).attr('hash')); if (anchor.parent().attr('class')=='memItemLeft'){ var rows = $('.memberdecls tr[class$="'+ window.location.hash.substring(1)+'"]'); glowEffect(rows.children(),300); // member without details } else if (anchor.parents().slice(2).prop('tagName')=='TR') { glowEffect(anchor.parents('div.memitem'),1000); // enum value } else if (anchor.parent().attr('class')=='fieldtype'){ glowEffect(anchor.parent().parent(),1000); // struct field } else if (anchor.parent().is(":header")) { glowEffect(anchor.parent(),1000); // section header } else { glowEffect(anchor.next(),1000); // normal member } } function selectAndHighlight(hash,n) { var a; if (hash) { var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1); a=$('.item a[class$="'+link+'"]'); } if (a && a.length) { a.parent().parent().addClass('selected'); a.parent().parent().attr('id','selected'); highlightAnchor(); } else if (n) { $(n.itemDiv).addClass('selected'); $(n.itemDiv).attr('id','selected'); } showRoot(); } function showNode(o, node, index, hash) { if (node && node.childrenData) { if (typeof(node.childrenData)==='string') { var varName = node.childrenData; getScript(node.relpath+varName,function(){ node.childrenData = getData(varName); showNode(o,node,index,hash); },true); } else { if (!node.childrenVisited) { getNode(o, node); } $(node.getChildrenUL()).show(); if (node.isLast) { node.plus_img.src = node.relpath+"ftv2mlastnode.png"; } else { node.plus_img.src = node.relpath+"ftv2mnode.png"; } node.expanded = true; var n = node.children[o.breadcrumbs[index]]; if (index+11) hash = '#'+parts[1]; else hash=''; } if (root==NAVTREE[0][1]) { $('#nav-sync').css('top','30px'); } else { $('#nav-sync').css('top','5px'); } if (hash.match(/^#l\d+$/)) { var anchor=$('a[name='+hash.substring(1)+']'); glowEffect(anchor.parent(),1000); // line number hash=''; // strip line number anchors //root=root.replace(/_source\./,'.'); // source link to doc link } var url=root+hash; var i=-1; while (NAVTREEINDEX[i+1]<=url) i++; if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath) } else { getScript(relpath+'navtreeindex'+i,function(){ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); if (navTreeSubIndices[i]) { gotoNode(o,i,root,hash,relpath); } },true); } } function toggleSyncButton(relpath) { var navSync = $('#nav-sync'); if (navSync.hasClass('sync')) { navSync.removeClass('sync'); navSync.html(''); storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash')); } else { navSync.addClass('sync'); navSync.html(''); deleteLink(); } } function initNavTree(toroot,relpath) { var o = new Object(); o.toroot = toroot; o.node = new Object(); o.node.li = document.getElementById("nav-tree-contents"); o.node.childrenData = NAVTREE; o.node.children = new Array(); o.node.childrenUL = document.createElement("ul"); o.node.getChildrenUL = function() { return o.node.childrenUL; }; o.node.li.appendChild(o.node.childrenUL); o.node.depth = 0; o.node.relpath = relpath; o.node.expanded = false; o.node.isLast = true; o.node.plus_img = document.createElement("img"); o.node.plus_img.src = relpath+"ftv2pnode.png"; o.node.plus_img.width = 16; o.node.plus_img.height = 22; if (localStorageSupported()) { var navSync = $('#nav-sync'); if (cachedLink()) { navSync.html(''); navSync.removeClass('sync'); } else { navSync.html(''); } navSync.click(function(){ toggleSyncButton(relpath); }); } navTo(o,toroot,window.location.hash,relpath); $(window).bind('hashchange', function(){ if (window.location.hash && window.location.hash.length>1){ var a; if ($(location).attr('hash')){ var clslink=stripPath($(location).attr('pathname'))+':'+ $(location).attr('hash').substring(1); a=$('.item a[class$="'+clslink+'"]'); } if (a==null || !$(a).parent().parent().hasClass('selected')){ $('.item').removeClass('selected'); $('.item').removeAttr('id'); } var link=stripPath2($(location).attr('pathname')); navTo(o,link,$(location).attr('hash'),relpath); } }) $(window).load(showRoot); } SimGrid-3.10/doc/html/group__XBT__dict__cons.html000640 007661 000620 00000030227 12242224150 022151 0ustar00gierschand000000 000000 SimGrid: Dict constructor and destructor
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dict constructor and destructor

Typedefs

typedef struct s_xbt_dict * xbt_dict_t
 Dictionary data type (opaque structure)

Functions

xbt_dict_t xbt_dict_new (void)
 Constructor.
xbt_dict_t xbt_dict_new_homogeneous (void_f_pvoid_t free_ctn)
 Constructor.
void xbt_dict_free (xbt_dict_t *dict)
 Destructor.
unsigned int xbt_dict_size (xbt_dict_t dict)

Detailed Description

Function Documentation

xbt_dict_t xbt_dict_new ( void  )

Constructor.

Returns
pointer to the destination
See Also
xbt_dict_free()

Creates and initialize a new dictionary with a default hashtable size. The dictionary is heterogeneous: each element can have a different free function.

xbt_dict_t xbt_dict_new_homogeneous ( void_f_pvoid_t  free_ctn)

Constructor.

Parameters
free_ctnfunction to call with (data as argument) when data is removed from the dictionary
Returns
pointer to the destination
See Also
xbt_dict_new(), xbt_dict_free()

Creates and initialize a new dictionary with a default hashtable size. The dictionary is homogeneous: each element share the same free function.

void xbt_dict_free ( xbt_dict_t dict)

Destructor.

Parameters
dictthe dictionary to be freed

Frees a dictionary with all the data

unsigned int xbt_dict_size ( xbt_dict_t  dict)

Returns the amount of elements in the dict

SimGrid-3.10/doc/html/group__TRACE__mark.html000640 007661 000620 00000037672 12242224150 021213 0ustar00gierschand000000 000000 SimGrid: Tracing marks
SimGrid  3.10
Versatile Simulation of Distributed Systems
Tracing marks

Functions to declare and create tracing marks. More...

Functions

void TRACE_declare_mark (const char *mark_type)
 Declare a new type for tracing mark.
void TRACE_declare_mark_value_with_color (const char *mark_type, const char *mark_value, const char *mark_color)
 Declare a new colored value for a previously declared mark type.
void TRACE_declare_mark_value (const char *mark_type, const char *mark_value)
 Declare a new value for a previously declared mark type.
void TRACE_mark (const char *mark_type, const char *mark_value)
 Create a new instance of a tracing mark type.
xbt_dynar_t TRACE_get_marks (void)
 Get declared marks.

Detailed Description

Functions to declare and create tracing marks.

Function Documentation

void TRACE_declare_mark ( const char *  mark_type)

Declare a new type for tracing mark.

This function declares a new Paje event type in the trace file that can be used by simulators to declare application-level marks. This function is independent of which API is used in SimGrid.

Parameters
mark_typeThe name of the new type.
See Also
TRACE_mark
void TRACE_declare_mark_value_with_color ( const char *  mark_type,
const char *  mark_value,
const char *  mark_color 
)

Declare a new colored value for a previously declared mark type.

This function declares a new colored value for a Paje event type in the trace file that can be used by simulators to declare application-level marks. This function is independent of which API is used in SimGrid. The color needs to be a string with three numbers separated by spaces in the range [0,1]. A light-gray color can be specified using "0.7 0.7 0.7" as color. If a NULL color is provided, the color used will be white ("1 1 1").

Parameters
mark_typeThe name of the new type.
mark_valueThe name of the new value for this type.
mark_colorThe color of the new value for this type.
See Also
TRACE_mark
void TRACE_declare_mark_value ( const char *  mark_type,
const char *  mark_value 
)

Declare a new value for a previously declared mark type.

This function declares a new value for a Paje event type in the trace file that can be used by simulators to declare application-level marks. This function is independent of which API is used in SimGrid. Calling this function is the same as calling TRACE_declare_mark_value_with_color with a NULL color.

Parameters
mark_typeThe name of the new type.
mark_valueThe name of the new value for this type.
See Also
TRACE_mark
void TRACE_mark ( const char *  mark_type,
const char *  mark_value 
)

Create a new instance of a tracing mark type.

This function creates a mark in the trace file. The first parameter had to be previously declared using TRACE_declare_mark, the second is the identifier for this mark instance. We recommend that the mark_value is a unique value for the whole simulation. Nevertheless, this is not a strong requirement: the trace will be valid even if there are multiple mark identifiers for the same trace.

Parameters
mark_typeThe name of the type for which the new instance will belong.
mark_valueThe name of the new instance mark.
See Also
TRACE_declare_mark
xbt_dynar_t TRACE_get_marks ( void  )

Get declared marks.

This function should be used to get marks that were already declared with TRACE_declare_mark.

Returns
A dynar with the declared marks, must be freed with xbt_dynar_free.
SimGrid-3.10/doc/html/group__XBT__cfg__decl.html000640 007661 000620 00000036751 12242224150 021742 0ustar00gierschand000000 000000 SimGrid: Configuration type declaration and memory management
SimGrid  3.10
Versatile Simulation of Distributed Systems
Configuration type declaration and memory management

Data Structures

struct  xbt_boolean_couple

Typedefs

typedef void(* xbt_cfg_cb_t )(const char *, int)
 Callback types. They get the name of the modified entry, and the position of the changed value.

Enumerations

enum  e_xbt_cfgelm_type_t {
  xbt_cfgelm_int = 0, xbt_cfgelm_double, xbt_cfgelm_string, xbt_cfgelm_boolean,
  xbt_cfgelm_peer
}
 possible content of each configuration cell More...

Functions

xbt_cfg_t xbt_cfg_new (void)
 Constructor.
void xbt_cfg_cpy (xbt_cfg_t tocopy, xbt_cfg_t *whereto)
 Copy an existing configuration set.
void xbt_cfg_free (xbt_cfg_t *cfg)
 Destructor.
void xbt_cfg_dump (const char *name, const char *indent, xbt_cfg_t cfg)
 Dump a config set for debuging purpose.

Detailed Description

Enumeration Type Documentation

possible content of each configuration cell

Enumerator:
xbt_cfgelm_int 

int

xbt_cfgelm_double 

double

xbt_cfgelm_string 

char*

xbt_cfgelm_boolean 

int

xbt_cfgelm_peer 

both a char* (representing the peername) and an integer (representing the port)

Function Documentation

xbt_cfg_t xbt_cfg_new ( void  )

Constructor.

Initialise a config set

void xbt_cfg_cpy ( xbt_cfg_t  tocopy,
xbt_cfg_t whereto 
)

Copy an existing configuration set.

Parameters
wheretothe config set to be created
tocopythe source data

This only copy the registrations, not the actual content

void xbt_cfg_dump ( const char *  name,
const char *  indent,
xbt_cfg_t  cfg 
)

Dump a config set for debuging purpose.

Parameters
nameThe name to give to this config set
indentwhat to write at the begining of each line (right number of spaces)
cfgthe config set
SimGrid-3.10/doc/html/simgrid_modules2.png000640 007661 000620 00000102344 12242224150 020706 0ustar00gierschand000000 000000 PNG  IHDRe5 6iCCPdefault_rgb.iccxgP} tXz*eIK,K!b"4ER$VDY$(1ETP;}~=;眙@@ERR|?{NHh!n ( V}](1<X|^:_f ]VTR9 ,~HhrXq_}XQ_}X?@}Q( 1XAN$?bqspbc9*AL!-}?!.^F/{ ؾj]RT0 _3(H&%؂7@(lC !aA 샃P-.yxK:DED A.b8!D qH*#;Ar # db( e:rQ; @ףqh{*=vW(*D_ `T)as0,c[bkڱ^l 9#c88]%2p[q \w7}rx f|'~?O  JH$l&: ÄIH&HXD&$^"HT"ɈL # HVEiD%-h&rKC"/Q(+J%REi\SRTe9՗@NޠNP?i4Z8-vvNmat}/~A)'&-MVKdD5Pc1603;9QhVZsc bL1C1oRVb3Dquq'hBcW'S1w2טS,KJd~f %%%$r%j%.H[NfO?IKIHl\*$͑vN/-T'-+#sD̜,KR'[,{Z*-'Yܠ܂||U9BBEYEbb%ŗ 'S+)*e)5( )-)k(*(w(?UpUbU*TTUUTUTոjj5ԃwwhHiiiik5m4345kZIZj&ڵwtPS:ëWj\5KӵmӝcyuW߯? ٠aaFF¾}?Q.VW>y@WoVW:$VW\_3Zk_Q'Wnp#GK?M8QXMAM?qjii.i|<߉Vֲ6-mdɻ?;Ӯ(9N%=Ni?vY܅tm s?kޯ+ q"bŕKy._weocߓ!W]vvnX8[[ݷMow vf[P;=w8b3r];: ñ13yxqxSѧ5{Txaqb'Wd 5U{l׉lש !iۗw)Zhz(!7Si:`Ԟ"ۺayΣ+C6$ 6p0p`CVb"dCOҾ;!wh;-QҶGFy?Xm+),hnڶ*!cQ/i>3;Wb(&X3zٮSX0GA0Ԟ}dl09mȠG{t$& Ga2"i:WQj_m[' %hzىlvzs|+[ѶmLTg,d롔9\ dNVQq"dm+)η)A@K`錅6$QL89Vi"s38_2W8& c+e6dІ =M/O<:cm뉈O+DD茁6dPLԏ:-JItnB J2G6Ngji:"MÝg=&*GPy?,QҼIg,3s y@X0 IsG~T,yR7B0Y[&XJ)4gTydž " D1/̷T{.XKVҙoi"t;Ͻv>j/՝Ɏp θ&p1o8&( ӼG)QJIFԞ&";%_"GiZ{g%&b4-YDZ{ >ġC;)^΁HLx9<\ՂwX 0YD!|K+ѼG&-3&x$(A*z(ltT'warPBZt^Z{@I׳xba`B c8sI,[fm~7$ wOJbHᥕenS?^{NƖ;Ů0jsw eIETh_yCar*ԍQ;fw+?^}dSJ",|`xE+alH!FNx?)X?,|BhcLٖp]hwNg DDar$bS48m} p݋HPahw'10= S*w8p!C~;w8pMٖcF8`XۭNWV^-NZ'\NKHvڨBp0 ~PWW'P B-ΪXV_ɤRFT`[LU V0̪t%8吚L&N/%"jmF+ Qn:"Z:N~o4ʎ t!!!C )8`YV1?TPU⬊Z6M 8%XiVXcR0jutLݻŘjVVV&yJBB?tuuuק؇)4ҋ/)f+zzzz9CgUV+۷L&iCPH=?ܹSV['kpqr8p!C~ғZG?5^d@ 1LO8?8E&̯~?޽[zE{RVVVYYYVV!gCAAeee\||޶F*G!#cW^};w+SY9}0Tj5XVVf2BBBӣV^ *++{zz ˝ ,_<$$bņġ>j9mNǩH\nx=?zj.P(zzz/_v҄iܞLKD440>YӓP(xC` :::===$$', uuunOqSSL瘆 t:9poqW"jz{83N\Qw ꢣ֝;w V(b"-p`u=!!!:^V.uuuj^8 V{ju2E @ԋ4}ppI$5)E,NxjJBa2\Å[˹⬊N[z4Qc{!a8n:NXƵZ&1N3vޭP(j/ r8`zΝl AGGGEOk:tjNd2{9`k``s].$QVxQDGGKS(/_9<&QYY+ M61|nhu^F8jB$}߄c ۽M¬5poJӹ/Z㭋o-r{korF?0IG{noU|\ hHHQ]xp-{nZvjZ萐P(|Oc^_O1!nq׻FOONŕ41`5,pH=3֭[#0Ңo]a0Q d29m"2!U/]= A<bсxayB73ţUF{/ /V^}IH9;tQDzf=gyiM8=/>ǺJtNJQS>{jtZ;a`tݥ[mmR74 53SO]?% 8j V3+'7<̔g>iy##RQt鿨"/^}ū/#U`ts=F/&9Cꝸ=uzg!r6Ewwv;u YW2R]:3UhHnxnK_rij>~>F'p(ulk;bԙByQGWyD-)SNuFD"ڀth;ߟ h(yNWVV!c8P(/_.]w:г}>F'p&J͵ԙr_/(VSY"G:35uFX@L "iinx.8;O';;VzۋN&$$z>JjP&ţgj1n7n9&I{%N}Kuۨ є:#YR"MP ־֚k5zʋҬ)1¨VcBWyN<^xy׋jH"Zno)K6AD<'‹8:C/\')?N>嶡Ih Ye'}b~hd@utR1 )Gz| w{?^Jv{H)|ܵ{OSx];r8FϪ|4i_ؠa T\c warxO &wv8FYԚRgJ''/^}Q9ZZw95q0%L~uNO'݇TFUHAَ;:RL)QӢ-aYȲgwF|G}dޝn͵w`t\XpAcsbpx+60 N .K'Spuw]>p!_aca d2zYYpU58[ 1 _EGGovSFŨ6&$L^|*h|rM oiZ/_jj!!!uuu|<[YYo^]x zzzxt>D+˗'$$1޳U(W q[tNg2ħ7G00IDGG޽۩NC"7x u:XkC~߇pCĨc===\!W.pKS' oƐ&pL^/( ׉>?t:~֝;wU留xoHlxDQk_jh}KXZ!\Z\|?˹3 I*$$VǵI颣V+@Tð4L&jq"Z&N 1*} <w}x`Xn'aZZ&ILSCbs0t)JR}0IhL' :NpL& YҐ===6lZ {Z+4Lf~P-pLR OJ|^ K3T_nZV(!wtt_z%(UtLV'$$dʺToGKM¬5poJӹ/Z㭋o-r{korF?o IH+>dA772Iő}[WoCBd2DGGޑN$:: k}o,AįXozZ"r(6( CamZ鱮2 +( ~+P9v |ohCaǪ+L 8:ޝ.+~剚k5˂<8]UlP@{[Y; oۅ[ol,',G>Une?uTbpbk_dʅrTYάC!* *7+Gcpj5DD=]g9Mm[+EDg[UW_TV\G6^CQG&8Z~߂vjm%zJԲe/^y01aʅSOQӢRgJ u}z"&ZsqjזxSO9 9QQTVDBybp"w/* [w?]255uε#hٯ>`>x17"606S´"6(%S4l',O G9mccVQO?ay"* 26>l}Դ'-O>!M NLg4u0882噙L~y;&'vX,&:HKޝaħrs?q$Ed@-P _'}0LO8$q)A#8q[VDMxwK,A0 } d*2^LF8Al`n+VF V!C~o۝6_%CikX 0p aXۺvd*J[w}<1X 0F u-šk5B9oO]?z)=r\6U3+k u9E^CIg=* *S%7_ IDAT˭u=%*2 V= ϕMI[ѝZ;,AKi^`\nl6LxsPd?+V[izc|ܕsf9~n|-=ageSe9a9mk-}- ݚk5|k1z ) ȣZZ:N_?Βk5b=~l 5wū/QlP,- ^&Gfm+Kl%B9΀o4ٜ?>3wdT@#oDģ2bW 6m_7Cfv/^T2ef/ɮFW]vr/Ϟd/N_]vU~[y̡yeӰ+W6'm!iC>;kwh0DbpRgFD\Q[ZRgdSe\+LZsfwK,[,SI}3 @6U&^bfpEDDz  aÛc?t/Jw&Z]qJXoShkք 7'm>f8j5]m""Oѵ˽;kw{re$y^p99fy@8?3SQOq2µ">hkwxe<}k혽cnjDB2N<XEfת]ҏܷr[ 7|J%7'mN_(={I*Lk.Mfs]Ox1%%hMccDTm+ʳ?36wIZ]ïjm{־V"JZ]Ss)S^*(zZd@dLyt> lPSOr߶ez zNվ7 #px#Z,]cciVH>9_zX,ZX_oMWc ͔g0 mkɔg@d@$+sLpa#38 D~vUbpbT@ԓ'Np<EDmׇw$'L}DT@ax}z08ND29PcR8F]bpsnxSx5t9Jq-&Dy2$UrO NS.+?iXG?\`APhkkGfyO27[SkҚmEV/nȃZvO"ɥnEdfctZFN.OR ͦAΘ8 f_}}5q;y y rp%)/7k0;lF%.ҦYJX;I.7X%)Q⳼s~xMųg)C?vQ]!q/HfD%gU4W_zt{ӘH_}r5q'"/Wa9wZz}#Hx"uZ+MNڣN _inxűE

}EbBץMKbXN[pV\W-(XKRyZ}(\1?I35tZ,Y*y9픈"f~ \Wi |.6_OuZYJ/='7-ݯK.7sX@;$\]Y܆g%X<"<){RvxR7W)`{ܮYkϔm/m,̊_y J>}/E;޺V"fK.gDqd{_֑_՞fGWG8O|+ӝy!%̟(RɝaaU A򠈸gʼnu:`/uNt!vJ6V(KV8GH%/`ltI=O.mtMK-p}եÛwZ3/J6 r$" ibnN HS}qcnz9\ DqgtCɻ H讕8^} f/c:mf_QM8Sy+ZÔrUjkj_[z_M3=q Y/nCIDAc|AL<4Nknںk.Ι鎟TtqCăiAD?S90~n'T[*xI*u|t " U!W Hto.667fpxWogUo+y8Dp ZhQrLd8}7]m7x63'*uq6VZ,QyKu}ů4fz(UyI"rO ut $t9! f.7X\78^~_in26#nd/>tϏh/z͉^;!nNf)Dx;kw)b֤/J_o*LtJryf9޲Cܝrǀ#?hgK|t{N^>;yN[1ćYk6-\ByI5f},eݮfwks_ȃbVk)CzT6!H8a8Ui8&"Ddō6?=Y#M60wMKj*L)W-)-~0y0&":Qd7k`՗pI]yig)m|sERI|"8-0Y]Y܆g%I }?/ W6W_܇:mA}qR|q=&c 8d2<ޑ-"7sF6aC-D?x/6Ķ6~#Ui ”܆I/ W,BEcXRHP-5szpm铝a24H\^{uܮidiu}եA7*ߔJƟ3vӰgK喟֪Nmܒ ޭK/X= {4AakV>m5xt)ދI K5]mYsG%)o<[KR:%L)Nsv-AO957컴]inc 8(?%<\ⶋNLKOXEo|Fⶋ'68t搧IЙC)cp``OÞXJ!:]nh~#X6TA򒌒-ݜ~~~XDڼ^6q0p(HN. gC#"bbV x`_hjkkh _::߿bL_|F}Qwhnk gu89S)~ K/zJ,=LFc FF`uw[x!+͜cP}xvB~#Μ|MZm9tX{]vt:mimĬ2ח.cU?W8{xZpOysh x­Iygk4T+;>ܼ)hyǏgiy~S`:M{ƪHMLLZo6c,'7W)䓴U ?0bb%6׿6MDD$56ĤyvGGncbڴb7Č"$$}C"&jW',궶_=X)_?Z (w8_^a4yGGnCvKGGP6jk7r^AIK;4o ^!6]#>~Xv9 [h4I|v~, LvX{RRolTJLL Dd4VVDU3kp Ĭ:8plLr-~c""nH _:v |Ip4&fUuuVBi7o G&՞&z{麘LwHAJN.%?UVd4VZ,<|k mm yhy.OݴiKt2M:~~S`vn>6y?\pd""B+Ub \{+?nR_7d,1!m%bs2jʔ)~[ݢi8ĩS==5ҋ}}uup\qJbvUڮko7OwG\ #-t`ddbpK\,88dj?pmm`}ܹ3fH,8}1#1s߯?e,iӮ=Ԋ]+U߾:st0C6u겐rAp 8j]s2Fq_jw3ftw$3g: ?Rofܼ[K$<|1`"AA-}}ΝZ{G]]QӦܼ)wΕ.;p9,?K2RgH1+Y\WɎ8Ʒg~;w8p!C~7 ;_Jz#'EE}ӊC33Rh45[*gSSl+_=q>U, 8bXE~"Xqg"?oz+:͇-L&kT !/mcGtUx _ 3UJ<. /ܟj+X+V646Fos ̜z롇&_omv¼+_MYg=7:JSNܸ=zGޫR~}ͦlf+Zӓ.^Ll۟ Dd2ǁ_+Xx$}, 8!JJ**WٞGɷJK+-[*=`ӢE?lӢEZmvYr+RY,]k"UҠ彺xu6* -OpyZZ?oyZ#55?X跂*{thffuj4(bE * }QiZy37=]q0pXBj=)͗9 qG){8r8r8r8r8r8r8r8r8r8r8r-yppϩTB$.zoiK_h^y^sX;/Tlc.zoq ~s*x@s&sk2! ^Ch̡!l-cŠy]-R\¨_%V6 5vxqo󶛿^ݵTPڒRi+O^}GΞS>wȵ?ŖJhɄ8jX 3VTRCo,Ȳ way ׶ u ؘWڳ"p!2¿=##OtJ<~χzrq=Y?@pZq J!d|L;ȇf|UGJ%6F /c)dqV6{oURdCSc>mkhw dht|⏜? ,!%6pQǾn)(1W&EE,8 9UsV$E4#%8qԤӥ%O) @m⏜ q2!>⶿F_u ?\)&<\yp)3V\c+]o#"!Uټq/2BJJC59y#b*C0?X5,{ ppppppp}gjRi8夵Gaen@z78[ݟrM)oہCc^0_ ۍp@gk/4X QTp;NbpQ [;Oû{/epؘSA+$~g^O^Ỏbi^Ջ h3bӸ'O.T֊q~c1m).a}Ο #^^3!#ҵy[dBTL&SZƎ ƭf8G wߙ@tx k\Ԥw&$e)&7_s;+] |6f[M;tY6J7_sK 24 [bcߥl^^ޮ6aBoakKȇoy]bc6"#bAhv6lC ꮐlԤp 뽻ҿj䓿CeފWti2Ai~&=$Hf+]=]Z鄚e܎NZ+Em'bߘ }GF20tRa|yszNʹ8GLt +V{!+_q 34 8ePJ|!c_Z #<նĦۊ'<}gB[qq1lN{?ȇ##|? :м6'$ &*dꛅ(~>-tbc|L荒 OƥI4'poj33!GdH?.ag^YOOFdFxBԤs*(}7_H;&D#\[hh.-cW{SRRw$es a}txL0p9k{WJ]kB^s[O]>.gTZFFi]f! }~kq=Bh ~##|{4b58uW(5hNv[w_hya~ 4/g!]HMMa+]tC3iı{:W5 W]eM%+7'LGt/:;jj~<3܇+ MZ\HS'NY8iaLsj5٤5Vpa,,,,,,,,,,,,7?;/܇|:43YeOW,xf^-)ǟ}6U_ XXXXXXXX/Ym^$&y^kyѲsջ;V?BpKrXXXXXXXXXXX_?v{k=k }G1i۸u0k%y|#P\U匭-&t4pU-Havu0O.`nkl8rL4;:,|ƢeZg`@εZ1 ~8YS9pB1ǹ:'?/E{yV/1&0< 5վ'rUk& =2hI8@۸9w8v; =gg쑿/E;ϥ}'v==܅8qmU&!%Hj: ^7̸LJAh<~-J%RTɏް&!Ȅ;O{Zi}o_ v .`׮wK ZvuUb~ ͽ Ѹ-F(ovcf^-9!c- Q1plīߛܷ}faABO3BT =+DEc+ 4eZu016zTBXY'#\Lq"9'Ш(;:BGn-h2);`]U4۸Wyb".6;HqU\`׀:+@ IDATPw^i=Y=.SEt!*G϶Ao ;SWzGJs/!(˻Tpє7\i9`HW%Icd+?\u*z=ziɴbHv1LRA7)]ZLQ1;HqPMP c+TUb(2Ѓ#%s7 v]6֊d햃{:'DA)#ip۸s6Bqص۲2B4nEL$,#)nBhq֍w D쌭R,,4H<{?" N'&Ϯِ0ЃEX3<&Khj NAfa!>tjH3ruN.4x\K/Oqw}w᪛yVhGD_nc_lqM_YsXj"3[3bB4.EKB4_yTkN QQf]& ڟ%\ޚ1uKw@:RQ󷮥!7pxje_iclfJ8F JЫNӔf9f,1Yfp o>ĉkz=Ez5Qޯc+pա ;jT7T(L;R'3sJ8Aʣi@N3"f9:YcB!NA( 1{jz5 rY^Ӎhwƒ\z;UMpdeZ=wBhsFC\Un9:hukFDB49iIӭ rorg~:J{n9Hg釒s-+ {ߴ9+oP,),,/EՏ#ruN~8*uy ցu{aU4Bzó:+/IGM]fgUULqsȚC(QKWCf .jvWs3 :\^WՇR%gw5xS[aoz8}zj٨߼$65LWUԂrWmjJoxӻ*R^͞O@mZN}%51R,B4:}Lc{4˂?u^ub =+tK GBycE9ˠɚzR-pu[AfݬN땯L;K8RMVGٸp*Š&ϞWW5A %,G?%AC OAH} n`4k"^ԥ1׏suK"k:q+pT>; CBT[ozxXKz0#XQ>gfdݡzf 8Hƒ֏_` 8ܷwe ; {(<X]w]32Hٺtsf>-Vˇ`&Yw(Y'&_ϿտɴFyy !*6f8BtOppppppppppppppp[c:gIENDB`PNG  IHDRe5 6iCCPdefault_rgb.iccxgP} tXz*eIK,K!b"4ER$VDY$(1ETP;}~=;眙@@ERR|?{NHh!n ( V}](1<X|^:_f ]VTR9 ,~HhrXq_}XQ_}X?@}Q( 1XAN$?bqspbc9*AL!-}?!.^F/{ ؾj]RT0 _3(H&%؂7@(lC !aA 샃P-.yxK:DED A.b8!D qH*#;Ar # db( e:rQ; @ףqh{*=vW(*D_ `T)as0,c[bkڱ^l 9#c88]%2p[q \w7}rx f|'~?O  JH$l&: ÄIH&HXD&$^"HT"ɈL # HVEiD%-h&rKC"/Q(+J%REi\SRTe9՗@NޠNP?i4Z8-vvNmat}/~A)'&-MVKdD5Pc1603;9QhVZsc bL1C1oRVb3Dquq'hBcW'S1w2טS,KJd~f %%%$r%j%.H[NfO?IKIHl\*$͑vN/-T'-+#sD̜,KR'[,{Z*-'Yܠ܂||U9BBEYEbb%ŗ 'S+)*e)5( )-)k(*(w(?UpUbU*TTUUTUTոjj5ԃwwhHiiiik5m4345kZIZj&ڵwtPS:ëWj\5KӵmӝcyuW߯? ٠aaFF¾}?Q.VW>y@WoVW:$VW\_3Zk_Q'Wnp#GK?M8QXMAM?qjii.i|<߉Vֲ6-mdɻ?;Ӯ(9N%=Ni?vY܅tm s?kޯ+ q"bŕKy._weocߓ!W]vvnX8[[ݷMow vf[P;=w8b3r];: ñ13yxqxSѧ5{Txaqb'Wd$#ߴ8/z/>2[giU,/~\ 9ٸIENDB`SimGrid-3.10/doc/html/group__SURF__build__api.html000640 007661 000620 00000025267 12242224150 022266 0ustar00gierschand000000 000000 SimGrid: Create a new API

SimGrid  3.10
Versatile Simulation of Distributed Systems
Create a new API

How to build a new API on top of SURF. More...

Variables

xbt_lib_t host_lib
 A library containing all known workstations.
xbt_lib_t link_lib
 A library containing all known links.

Detailed Description

How to build a new API on top of SURF.

SURF provides the functionnalities to simulate the platform. There are two main datatypes in SURF: the actions and the resources. Several types of resources exist:

  • the workstation resource,
  • the network resource,
  • the CPU resource,
  • the timer resource.

The implentation of these resources depends on the platform model you choose. There are several platform models. You can select your model by calling surf_workstation_resource_init_CLM03() or surf_workstation_resource_init_KCCFLN05(). See the documentation of these functions to have more details about the models. Remember that the model KCCFLN05 is an implementation of both the workstation resource and the network.

Typically, your functions should call the SURF functions provided by the structures surf_workstation_resource->common_public and surf_workstation_resource->extension_public. See surf_resource_public and surf_workstation_resource_extension_public to know the available functions.

To initialize SURF, call surf_init(). Then call surf_timer_resource_init() and surf_workstation_resource_init_CLM03() or surf_workstation_resource_init_KCCFLN05() to create the platform.

Then you can access the workstations and the network links with the global variables host_lib and link_lib. Some functions in surf_workstation_resource->extension_public can give you some information about:

  • a workstation: get_speed(), get_available_speed();
  • a network link: get_link_name(), get_link_latency(), get_link_bandwith();
  • a route: get_route(), get_route_size().

During the simulation, call surf_workstation_resource->extension_public->execute() to schedule a computation task on a workstation, or surf_workstation_resource->extension_public->communicate() to schedule a communication task between two workstations. You can also create parallel task with surf_workstation_resource->extension_public->execute_parallel_task(). These functions return a new action that represents the task you have just created.

To execute the actions created with execute(), communicate() or execute_parallel_task(), call surf_solve(). The function surf_solve() is where the simulation takes place. It returns the time elapsed to execute the actions. You can know what actions have changed their state thanks to the states sets. For example, if your want to know what actions are finished, extract them from surf_workstation_resource->common_public->states.done_action_set. Depending on these results, you can schedule other tasks and call surf_solve() again.

When the simulation is over, just call surf_exit() to clean the memory.

Have a look at the implementation of MSG and Simdag to see how these module interact with SURF. But if you want to create a new API on top of SURF, we strongly recommand you to contact us before anyway.

SimGrid-3.10/doc/html/inside_autotests.html000640 007661 000620 00000035604 12242224150 021210 0ustar00gierschand000000 000000 SimGrid: Automatic Testing Infrastructure
SimGrid  3.10
Versatile Simulation of Distributed Systems
Automatic Testing Infrastructure

How to run test in pipol?

In order to use PIPOL you have to create your account here: http://pipol.inria.fr/

What is PIPOL?

The PIPOL platform is a porting, testing and compilation cluster. It hosts several hardware and software architectures to perform its work. An user can reserve a resource (a specific hardware, an operating system...) to be used interactively or automatically (with a "Nightly Builds" system) for software testing.

From PIPOL frontend

You first need to be connected into pipol ssh.

user@caraja:~$ ssh pipol.inria.fr
Linux pipol-server 2.6.26-2-amd64 #1 SMP Thu Nov 5 02:23:12 UTC 2009 x86_64
***************************************************************************
*           You are just logged-on the PIPOL platform server              *
*   You can find some documentation about porting works on the platform   *
*         on the PIPOL's web site: http://pipol.inria.fr/docs/            *
*   To report bugs you can write to: pipol-sysadm@lists.gforge.inria.fr   *
***************************************************************************


user@pipol:~$

Then you can see pipol images availables for deployment

user@pipol:~$ pipol-sub si
    amd64_2010-linux-centos-5.dd.gz
    amd64_2010-linux-debian-squeeze.dd.gz
    amd64_2010-linux-debian-testing.dd.gz
    amd64_2010-linux-fedora-core13.dd.gz
    amd64_2010-linux-fedora-core14.dd.gz
    amd64_2010-linux-fedora-core16.dd.gz
    amd64_2010-linux-ubuntu-lucid.dd.gz
    amd64_2010-linux-ubuntu-maverick.dd.gz
    amd64_2010-linux-ubuntu-natty.dd.gz
    amd64_kvm-linux-debian-lenny
    amd64_kvm-linux-debian-testing
    amd64_kvm-windows-7
    amd64-linux-centos-5.dd.gz
    amd64-linux-debian-etch.dd.gz
    amd64-linux-debian-lenny.dd.gz
....
    i386-linux-ubuntu-lucid.dd.gz
    i386-linux-ubuntu-maverick.dd.gz
    i386-linux-ubuntu-natty.dd.gz
    i386-linux-ubuntu-precise.dd.gz
    i386_mac-mac-osx-server-leopard.dd.gz
    i386-unix-freebsd-7.dd.gz
    i386-unix-opensolaris-10.dd.gz
    i386-unix-opensolaris-11.dd.gz
    i386-unix-solaris-10.dd.gz
    ia64-linux-debian-lenny.dd
    ia64-linux-debian-squeeze.dd
    ia64-linux-fedora-core9.dd
    ia64-linux-redhatEL-5.0.dd
    x86_64_mac-mac-osx-server-snow-leopard.dd.gz
    x86_mac-mac-osx-server-snow-leopard.dd.gz

You can also see available architectures on host name:

navarro@pipol:~$ pipol-sub sa    
=================================================================
                    Availables architectures:         
=================================================================

pipol18
:i386_2010:amd64_2010:
pipol19
:i386_2010:amd64_2010:
pipol20
:i386_2010:amd64_2010:
pipol1
:i386:amd64:
pipol2
:i386:amd64:
pipol3
:i386:amd64:
pipol4
:i386:amd64:
pipol5
:i386:amd64:
pipol6
:i386:amd64:
pipol7
:i386:amd64:
pipol8
:i386:amd64:
pipol14
:i386_kvm:amd64_kvm:
pipol15
:i386_kvm:amd64_kvm:
pipol16
:i386_kvm:amd64_kvm:
pipol17
:i386_kvm:amd64_kvm:
pipol11
:i386_mac:x86_mac:
pipol10
:ia64:
pipol9
:ia64:
pipol12
:x86_64_mac:

When you have choose your image and host (not necessary) you deploy with command line:

pipol-sub esn <image name> <host-name> <deployment-time>

user@pipol:~$pipol-sub esn amd64_2010-linux-ubuntu-maverick.dd.gz pipol20 02:00
user@pipol:~$ssh pipol20

You can now make all your tests.

From a computer

You have to renseign to simgrid configuration your pipol login.

$ cmake -Dpipol_user=user .

Then you have two kind of command:

  • make <image-name>
    $ make amd64_2010-linux-ubuntu-maverick
    
    This command copy your local simgrid directory to pipol and execute a configure, make and ctest.
  • make <image_name>_experimental
    $ make amd64_2010-linux-ubuntu-maverick_experimental
    
    Same as previous but report into cdash

You can also see all available images from pipol

$ make pipol_test_list_images

How to use nightly builds?

All the pipol scripts are located in "<project/directory>/buildtools/pipol/". If you modify them you have to update the pipol home directory by using this command: make sync-pipol.

It will copy those files:

simgrid@caraja:~/workspace/simgrid/build$ make sync-pipol 
Update pipol script for user: simgrid
rc.debian                                       100% 1338     1.3KB/s   00:00    
rc.fedora                                       100% 1433     1.4KB/s   00:00    
rc.mac                                          100% 1129     1.1KB/s   00:00    
rc.ubuntu                                       100% 1875     1.8KB/s   00:00    
rc.windows                                      100%  494     0.5KB/s   00:00    
Nightly_simgrid.sh                              100% 4004     3.9KB/s   00:00    
Experimental_bindings.sh                        100% 1794     1.8KB/s   00:00

How to report tests in cdash?

Reporting experiment in cdash is very easy because it is done by ctest.

The easier way is to execute command line "ctest -D Experiemntal" in build directory. More option is available by ctest:

  ctest -D Continuous
  ctest -D Continuous(Start|Update|Configure|Build)
  ctest -D Continuous(Test|Coverage|MemCheck|Submit)
  ctest -D Experimental
  ctest -D Experimental(Start|Update|Configure|Build)
  ctest -D Experimental(Test|Coverage|MemCheck|Submit)
  ctest -D Nightly
  ctest -D Nightly(Start|Update|Configure|Build)
  ctest -D Nightly(Test|Coverage|MemCheck|Submit)
  ctest -D NightlyMemoryCheck

If you want to have a code coverage, please add option on simgrid.

$ cmake -Denable_coverage=ON .
$ ctest -D ExperimentalStart
$ ctest -D ExperimentalConfigure
$ ctest -D ExperimentalBuild
$ ctest -D ExperimentalTest
$ ctest -D ExperimentalCoverage
$ ctest -D ExperimentalSubmit

Infrastructure of the SimGrid Performance Regresion tests

The goal of these tests is to detect the impact on simulation performance of the commited changes. It is not quite effective right now but at the end, it should be similar to Phoromatic.

How to execute g5k campaign?

Quick steps deployment for rennes:

  • 1/ Create a G5K account
  • 2/ SSH to a frontend (must be rennes, nancy or toulouse for git protocol)
  • 3/ Install g5k-campaign
    $ gem install g5k-campaign --source http://g5k-campaign.gforge.inria.fr/pkg -p http://proxy:3128 --no-ri --no-rdoc --user-install
    
  • 4/ Configure the API
    $  mkdir ~/.restfully
    $  echo 'base_uri: https://api.grid5000.fr/stable/grid5000' > ~/.restfully/api.grid5000.fr.yml
    $  chmod 0600 ~/.restfully/api.grid5000.fr.yml
    
  • 5/ Git clone the SimGrid Scalability project
    $  git clone git@github.com:mquinson/simgrid-scalability-XPs.git
    
    An alternative URL is git://scm.gforge.inria.fr/simgrid/simgrid-scalability-XPs.git, but the repository on github is believed to be more uptodate. You may want to double-check by pulling both:
    $ git remote add g5k git://scm.gforge.inria.fr/simgrid/simgrid-scalability-XPs.git
    $ git pull g5k master
    
  • 6/ Copy the run script into your home
    $  cp simgrid-scalability-XPs/script-sh/run-g5k-scalab.sh ~/
    
  • 7/ Create the result log directory (must be ~/log/)
    $  mkdir ~/log
    
  • 8/ Execute the g5k campaign on a revision "rev"
    $  sh run-g5k-scalab.sh "rev"
    

You can also have more parameters

  • 1/ -> 5/ Same as before
  • 6/ Open simgrid-scalability-XPs
  • 7/ Execute SGXP.pl to see parameters
    $  perl SGXP.pl --help
    
  • 8/ Execute SGXP.pl with your parameters like
    $  ./SGXP.pl --site=nancy --cluster=graphene --test=chord,goal --rev="09bbc8de,3ca7b9a13"
    

How to analyze logs?

To analyze log from g5k-campaign you must install R tool.

  • 0/ You can copy logs from g5k to your computer (recommanded)
  • 1/ Open ~/log/
  • 2/ Execute the perl analyzer for goal log
    $  ~/simgrid-scalability-XPs/libperl/analyzer.pl goal.log.* > goal.csv
    
  • 3/ Execute the R analyer for goal log
    $  ~/simgrid-scalability-XPs/script-R/goal.R goal.csv output.goal.pdf
    

Example of generated pdf here.

SimGrid-3.10/doc/html/group__XBT__grounding.html000640 007661 000620 00000021731 12242224150 022041 0ustar00gierschand000000 000000 SimGrid: Grounding features
SimGrid  3.10
Versatile Simulation of Distributed Systems
Grounding features

Modules

 Malloc and friends
 Malloc and associated functions, killing the program on error (with Exception support)
 String related functions
 String manipulation functions.
 Exception support
 A set of macros providing exception a la C++ in ANSI C (grounding feature)
 Logging support
 A generic logging facility in the spirit of log4j (grounding feature)
 Assert macro familly
 Those are the SimGrid version of the good ol' assert macro.
 Configuration support
 Changing the configuration of SimGrid components (grounding feature)
 Mallocators
 The mallocator system.
 Unit testing support
 Unit test mechanism (to test a set of functions)

Detailed Description

Grounding features are the basement of SimGrid. You'll find portable (and secure) wrappers to the malloc-like functions, logging support, error reporting features, etc.

SimGrid-3.10/doc/html/dir_e4627dd4e1973fdf9f4e2b34f6210e6e.html000640 007661 000620 00000017374 12242224150 023142 0ustar00gierschand000000 000000 SimGrid: src/instr/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
instr Directory Reference

Files

file  instr_config.c
file  instr_interface.c
file  instr_paje_containers.c
file  instr_paje_header.c
file  instr_paje_trace.c
file  instr_paje_types.c
file  instr_paje_values.c
file  instr_private.h
file  instr_resource_utilization.c
file  instr_TI_trace.c
file  instr_trace.c
SimGrid-3.10/doc/html/bindings.html000640 007661 000620 00000130623 12242224150 017414 0ustar00gierschand000000 000000 SimGrid: Bindings
SimGrid  3.10
Versatile Simulation of Distributed Systems
Bindings

Ruby Binding

Check online for our specific Simgrid-Ruby documentation.

Java Binding

Simgrid-java is a java API that let you use Simgrid MSG API in your favorite language (java). Without it, you would be forced to use C or one of the other bindings provided.

MSG was the first distributed programming environment provided within SimGrid. While almost realistic, it remains quite simple. This describes the Java bindings to this interface.

The javadoc is accessible here

Who should use this (and who shouldn't)

You should use MSG if you want to study some heuristics for a given problem you don't really want to implement. SimGrid-java let you use MSG while coding in Java. So if your need is MSG + Java, you're in the right section!

Usage overview

To make a long story short, it's a JNI binding, so it implies that:

  • Most of the MSG and SimGrid documentation about behavioral aspects applies directly to what you are programming.
  • MSG data structures are mapped to Java objects. So it means that from the syntax point of view, you have to know how those objects are. Fortunately, we have generated the Javadoc for those objects. So take a look at it

Finally, it implies also that your program can crash for 3 main reasons:

  • Your Java part is not good: you'll have a good old java exception thrown, and hence you should be able to correct it by yourself.
  • Our java part is not good: you'll also have a java exception thrown, but we have real doubts this can happen, since the java part is only a JNI binding. The other option is that it crashed because you used incorrectly the MSG API, so this means also you should have an MSGException. It means you should read carefully MSG samples and/or documentation.
  • Something has crashed in the C part. Okay, here comes the tricky thing.

C crashes mainly for 2 reasons:

  • When something goes wrong in your simulation, sometimes the C part stops because you used SimGrid incorrectly, and JNI bindings are not fond of that. It means that you'll have something that looks ugly, but you should be able to identify what's going wrong in your code by carefully reading the whole error message
  • It may happen that the problem comes directly from SimGrid: in this case, the error should be uglier. In that case, you may submit a bug directly to SimGrid.

How to install Simgrid-java

To use java with Simgrid you have to install some dependencies:

  • Java JDK packages, such as openjdk7 or sun-java6-jdk (with libgcj10-dev or another version of gcj). For maximal performance and scalability, use a coroutine-enabled JVM (see How to use the coroutines context factory).

Then build Simgrid with the Java bindings enabled:

cmake -Denable_java=ON .

If cmake complains that jni could not be found, you need to tell it where JNI header files are located. the following command should tell you:

$ locate jni.h
/usr/lib/jvm/java-6-openjdk-amd64/include/jni.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h

If you have several version of jni installed (as in the example above), you need to check the version of java that is used by default on your machine (using javac -version), and pick the right one. Then set the JAVA_INCLUDE_PATH environment variable to the right path (note that we remove the filename jni.h from that path), and relaunch cmake.

$ export JAVA_INCLUDE_PATH=/usr/lib/jvm/java-6-openjdk-amd64/include/
$ cmake .

How to use Simgrid-java

To execute the examples you need to add the path where you installed the generated libsimgrid-java and libsimgrid libraries into the LD_LIBRARY_PATH.

Be careful on Mac, this variable is called DYLD_LIBRARY_PATH and not LD_LIBRARY_PATH.

$ export SIMGRID_ROOT="$HOME/Install/simgrid/" # change it to the path where you installed the SimGrid library
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$SIMGRID_ROOT/lib
$ cd examples
$ java -classpath .:../simgrid.jar basic/BasicTest platform.xml basic/basicDeployment.xml

If you want to make these settings permanent even after a reboot, you need to add the export lines into your ~/.bashrc file, or equivalent.

How to use the coroutines context factory

There is two main motivations to use the coroutine variant of SimGrid Java bindings: it's about 5 times faster than the default thread-based context factory, and the amount of runnable processes is then only limited by the amount of RAM that you have. The drawbacks are that it requires a specific and rather experimental JVM to run, and that this context factory itself remains a bit experimental so far.

Getting a mlvm JVM

You need to get a patched JVM from here (many thanks to Lukas Stadler for this work!).

You can either get a prebuilt binary, or recompile your own JVM. Make sure to get a coro-simple version, as we don't need to serialize nor migrate stacks in SimGrid. You should be able to follow the README.txt that you'll get in the repository, but here is how we did it, just in case. The instructions are given for a debian or Ubuntu box, but I think you should manage to convert it to your system quite easily. Finally, if you're really stuck, you can get the version compiled by Jonathan Rouzaud-Cornabas from his web page. This version is known to work with SimGrid for sure! http://graal.ens-lyon.fr/~jrouzaud/files/corosimple-linux-amd64-20120914.tgz

  1. Install mercurial and some dependencies
    sudo apt-get install mercurial ksh libfreetype6-dev libcups2-dev libasound2-dev gawk openjdk-7-jdk libxext-dev libxrender-dev libxtst-dev
    # Grab the forest extension: we need to source-install it
    hg clone https://bitbucket.org/gxti/hgforest hgforest \endverbatim
  2. Configure the mercurial extensions: Edit ~/.hgrc and paste the following lines. Don't forget to change the /path/to/forest.py to point to where you just downloaded the source.

    Forest extension is needed to download the openjdk source code and patches while the mq line is needed to apply the patches. The username is needed at the step "preparing the sources", not sure why.

    [ui]
    username = YouUserameWithoutSpaces
    [extensions]
    forest=/path/to/forest.py
    mq=
    
  3. Prepare the source code
    # create a working directory, and enter it
    mkdir davinci; cd davinci
    # Grab the sources
    hg fclone http://hg.openjdk.java.net/hsx/hotspot-comp sources
    # Grab the patches
    hg fclone http://hg.openjdk.java.net/mlvm/mlvm patches
    # Link the patch directories into the sources
    bash patches/make/link-patch-dirs.sh sources patches
    # Test wether the previous command worked with
    ls -i patches/hotspot/series sources/hotspot/.hg/patches/series
    # It should display something like the following.
    # (note that both file share the same inode number)
    # 9707849 patches/hotspot/series
    # 9707849 sources/hotspot/.hg/patches/series
    # Specify what to compile.
    export davinci=$(pwd) guards="buildable testable coro-simple"
    # Apply the patches
    sh patches/make/each-patch-repo.sh hg qselect --reapply $guards '$(sh $davinci/patches/make/current-release.sh)'
    # Check that it understood that you want the patch applied:
    grep GLOBAL_GUARDS patches/make/* -r
    # this should display something like the following (maybe amonst other unrelated lines)
    # GLOBAL_GUARDS=buildable testable coro-simple
    # If this does not work, edit patches/make/Makefile,
    # manually coro-simple to GLOBAL_GUARDS and then
    # rerun the patches/make/each-patch-repo.sh script as earlier
    # Finish the setup
    (cd patches/make; make setup && make force && make && make FORCE_VERSIONS=1 && echo "Sources are properly setup")
    # If this last command failed, check your mercurial config within ~/.hgrc (see above)
  4. Compile it all
    unset LD_LIBRARY_PATH
    export ALT_BOOTDIR=/usr/lib/jvm/java-7-openjdk-amd64/
    cd sources
    # Check that everything is fine
    make sanity
    # Go for it (it takes about half an hour on my machine)
    make all
    # Check that the coroutine library got compiled in
    ls sources/build/linux-amd64/classes/java/dyn/
    # This should display a bunch of class files. If not, something went wrong, you need to investigate further

Using coroutine contexts

SimGrid Java will automatically switch to the coroutine context factory if your JVM support it, so you will just need to execute your simulation with the correct JVM. The selected context factory gets displayed automatically.

export LD_LIBRARY_PATH=/path/to/simgrid.so:/path/to/libsimgrid-java.so
cd examples
$PATH_TO_COROUTINE_JVM/java -classpath .:../simgrid.jar masterslave.Masterslave masterslave/ masterslaveDeployment.xml platform.xml

Note that you may have to adjust the "coro.stacksPerThread" configuration option to run large simulations. The default is 100 and you want to increase it to run more processes.

$ $PATH_TO_COROUTINE_JVM/java -Dcoro.stacksPerThread=$STACKS_NUMBER -classpath .:../simgrid.jar basic/BasicTest platform.xml basic/basicDeployment.xml

If you reach the point where the creation of new simulated processes fail with the message "Can't create coroutine object", you may need to increase the relevant system limit with the following command.

sysctl -w vm.max_map_count = 131072

The full story is that each coroutine requires two memory maps, and that Linux puts a limit on the total amount of memory maps that each process can manage (by default, this limit is often at 65535). Since the JVM needs a few dozen of such maps on its own (three maps per dynamic library – check /proc/the_pid/maps if you don't believe it), this is enough to create over 30,000 simulated processes. But to go futher, that limit must be modified.

If you want to make this change permanent on your machine, edit your /etc/sysctl.conf file. Otherwise, you have to redo it by calling sysctl after each reboot.

Lua Binding

Most of Simgrid modules require a good level in C programming, since simgrid is used to be as standard C library. Sometime users prefer using some kind of “easy scripts” or a language easier to code with, for their works, which avoid dealing with C errors, and sometime an important gain of time. Besides Java Binding, Lua and Ruby bindings are available since version 3.4 of Simgrid for MSG Module, and we are currenlty working on bindings for other modules.

What is lua ?

Lua is a lightweight, reflective, imperative and functional programming language, designed as a scripting language with extensible semantics as a primary goal (see official web site here).

Why lua ?

Lua is a fast, portable and powerful script language, quite simple to use for developpers. it combines procedural features with powerful data description facilities, by using a simple, yet powerful, mechanism of tables. Lua has a relatively simple C API compared to other scripting languages, and accordingly it provides a robust, easy to use it.

How to use lua in Simgrid ?

Actually, the use of lua in Simgrid is quite simple, you have just to follow the same steps as coding with C in Simgird :

  • Coding functions coresponding to each process
  • loading the platforme/deployment XML file that describe the environment of simulation
  • and … Running the Simulation.

Master/Slave Example

  • Master Code
    function Master(...)
    if #arg ~= 4 then
    error("Wrong number of arguments (got " .. #arg ..
    ", expected 4: nb_tasks comp_size comm_size slave_count)")
    end
    simgrid.info("Hello from lua, I'm the master")
    local nb_task, comp_size, comm_size, slave_count = unpack(arg)
    -- Dispatch the tasks
    for i = 1, nb_task do
    local task = simgrid.task.new("Task " .. i, comp_size, comm_size)
    local task_name = task:get_name()
    local alias = "slave " .. (i % slave_count)
    simgrid.info("Sending '" .. task_name .. "' to '" .. alias .."'")
    task:send(alias) -- C user data set to NULL
    simgrid.info("Done sending '".. task_name .. "' to '" .. alias .."'")
    end
    -- Sending Finalize Message To Others
    simgrid.info("All tasks have been dispatched. Let's tell everybody the computation is over.")
    for i = 0, slave_count - 1 do
    local alias = "slave " .. i
    simgrid.info("Sending finalize to '" .. alias .. "'")
    local finalize = simgrid.task.new("finalize", comp_size, comm_size)
    finalize:send(alias)
    end
    simgrid.info("Everything's done.")
    end -- end_of_master
    we mainly use simgrid.Task.new(task_name,computation_size,communication_size) to create our MSG Task, then simgrid.Task.send(task,alias) to send it. we use also simgrid.Task.name(task), to get the task's name.
  • Slave Code
    function Slave(...)
    if #arg ~= 1 then
    error("Wrong number of arguments (got " .. #arg .. ", expected 1: slave_id)")
    end
    local my_mailbox = "slave " .. arg[1]
    simgrid.info("Hello from lua, I'm a poor slave with mailbox: " .. my_mailbox)
    while true do
    local task = simgrid.task.recv(my_mailbox)
    local task_name = task:get_name()
    if (task_name == "finalize") then
    simgrid.info("Got finalize message")
    break
    end
    simgrid.info("Received task '" .. task_name .. "' on mailbox '" .. my_mailbox .. "'")
    task:execute()
    simgrid.info("Task '" .. task_name .. "' is done")
    end
    simgrid.info("I'm done. See you!")
    end -- end_of_slave
    Here, we see the use of simgrid.Task.recv(alias) to receive a task with a specific alias, this function return directly the task recevied.
  • Set Environmenet and run application
    dofile 'master.lua'
    dofile 'slave.lua'
    -- Simulation Code ----------------------------------------------------------
    require "simgrid"
    simgrid.platform(arg[1])
    simgrid.application(arg[2])
    simgrid.run()
    simgrid.info("Simulation's over. See you.")
    -- end-of-master-slave

Exchanging Data

You can also exchange data between Process using lua. for that, you have to deal with lua task as a table, since lua is based itself on a mechanism of tables, so you can exchange any kind of data (tables, matrix, strings,…) between process via tasks.

  • Sender process
      task = simgrid.Task.new("data_task",task_comp,task_comm);
      task['matrix'] = my_matrix;
      task['table'] = my_table;
      task['message'] = "Hello from (Lua || Simgrid ) !! "
      …
      simgrid.Task.send(task,alias)
    
    After creating task, we associate to it various kind of data with a specific key (string in this case) to distinguish between data variables. The receiver will use this key to access easily to datas.
  • Receiver processe
      task = simgrid.Task.recv(alias);
      sender_matrix = task['matrix'];
      sender_table = task['table'];
      sender_message = task['message']
      ...
    
    Note that in lua, both sender and receiver share the same lua task. So that the receiver could joint data directly on the received task without sending it back. You can find a complet example (matrix multiplication case) in the file example/lua/mult_matrix.lua.

Bypass XML

maybe you wonder if there is a way to bypass the XML files, and describe your platform directly from the code, with lua bindings it's Possible !! how ? We provide some additional (tricky?) functions in lua that allows you to set up your own platform without using the XML files ( this can be useful for large platforms, so a simple for loop will avoid you to deal with an annoying XML File ;) )

  • set Routing mode
       simgrid.AS.new{id="AS0",mode="Full"};
    
  • set Hosts
      simgrid.Host.new{id="Tremblay",power=98095000};
      simgrid.Host.new{id="Jupiter",power=76296000};
      simgrid.Host.new{id="Fafard",power=76296000};
      simgrid.Host.new{id="Ginette",power=48492000};
      simgrid.Host.new{id="Bourassa",power=48492000};
    
    we use simgrid.Host.new{id=id_host,power=power_host} to instanciate our hosts.
  • set Links
      for i=0,11 do
        simgrid.Link.new{id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087};    --  some crazy values ;)
      end
    
    we used simgrid.Link.new{id=link_id,bandwidth=bw,latency=lat} with a simple for loop to create all links we need (much easier than XML hein ?)
  • set Routes
    -- simgrid.Route.new(src_id,des_id,links_nb,links_list)
       simgrid.Route.new("Tremblay","Jupiter",1,{"1"});
       simgrid.Route.new("Tremblay","Fafard",6,{"0","1","2","3","4","8"});
       simgrid.Route.new("Tremblay","Ginette",3,{"3","4","5"});
       simgrid.Route.new("Tremblay","Bourassa",7,{"0","1","3","2","4","6","7"});
    
       simgrid.Route.new("Jupiter","Tremblay",1,{"1"});
       simgrid.Route.new("Jupiter","Fafard",7,{"0","1","2","3","4","8","9"});
       simgrid.Route.new("Jupiter","Ginette",4,{"3","4","5","9"});
       simgrid.Route.new("Jupiter","Bourassa",8,{"0","1","2","3","4","6","7","9"});
       ...
    
    for each host you have to specify which route to choose to access to the rest of hosts connected in the grid.
  • Save platform
      simgrid.register_platform();
    
    Don't forget to register your platform, that SURF callbacks starts their work ;)
  • set application
       simgrid.Host.setFunction("Tremblay","Master",4,{"20","550000000","1000000","4"});
       simgrid.Host.setFunction("Bourassa","Slave",1,{"0"});
       simgrid.Host.setFunction("Jupiter","Slave",1,{"1"});
       simgrid.Host.setFunction("Fafard","Slave",1,{"2"});
       simgrid.Host.setFunction("Ginette","Slave",1,{"3"});
    
    you don't need to use a deployment XML file, thanks to simgrid.Host.setFunction(host_id,function,args_number,args_list) you can associate functions for each host with arguments if needed .
  •    simgrid.register_application();
    
    Yes, Here too you have to register your application before running the simulation.

the full example is distributed in the file examples/lua/master_slave_bypass.lua

Master/slave Lua application

Simulation of a master-slave application using lua bindings

Master code

as described in the C native master/Slave example, this function has to be assigned to a msg_process_t that will behave as the master.

Lua style arguments (...) in for the master are interpreted as:

  • the number of tasks to distribute
  • the computation size of each task
  • the size of the files associated to each task
  • a list of host that will accept those tasks.

Tasks are dumbly sent in a round-robin style.

-- Dispatch the tasks
for i = 1, nb_task do
local task = simgrid.task.new("Task " .. i, comp_size, comm_size)
local task_name = task:get_name()
local alias = "slave " .. (i % slave_count)
simgrid.info("Sending '" .. task_name .. "' to '" .. alias .."'")
task:send(alias) -- C user data set to NULL
simgrid.info("Done sending '".. task_name .. "' to '" .. alias .."'")
end

Slave code

This function has to be assigned to a msg_process_t that has to behave as a slave. This function keeps waiting for tasks and executes them as it receives them.

function Slave(...)
if #arg ~= 1 then
error("Wrong number of arguments (got " .. #arg .. ", expected 1: slave_id)")
end
local my_mailbox = "slave " .. arg[1]
simgrid.info("Hello from lua, I'm a poor slave with mailbox: " .. my_mailbox)
while true do
local task = simgrid.task.recv(my_mailbox)
local task_name = task:get_name()
if (task_name == "finalize") then
simgrid.info("Got finalize message")
break
end
simgrid.info("Received task '" .. task_name .. "' on mailbox '" .. my_mailbox .. "'")
task:execute()
simgrid.info("Task '" .. task_name .. "' is done")
end
simgrid.info("I'm done. See you!")
end -- end_of_slave

Simulation core

in this section the core of the simulation which start by including the simgrid lib for bindings : require "simgrid"

  1. Simulation settings : simgrid.platform creates a realistic environment
  2. Application deployment : create the processes on the right locations with simgrid.application
  3. The simulation is run with simgrid.run

Its arguments are:

  • platform_file: the name of a file containing an valid surfxml platform description.( first command line argument)
  • application_file: the name of a file containing a valid surfxml application description ( second commande line argument )
    simgrid.platform(arg[1])
    simgrid.application(arg[2])
    simgrid.run()

Master/slave Bypass Lua application

Simulation of a master-slave application using lua bindings, Bypassing the XML parser

Master code

as described in the C native master/Slave example, this function has to be assigned to a msg_process_t that will behave as the master.

Lua style arguments (...) in for the master are interpreted as:

  • the number of tasks to distribute
  • the computation size of each task
  • the size of the files associated to each task
  • a list of host that will accept those tasks.

Tasks are dumbly sent in a round-robin style.

--Master Function
function Master(...)
if #arg ~= 4 then
error("Wrong number of arguments (got " .. #arg ..
", expected 4: nb_tasks comp_size comm_size slave_count)")
end
simgrid.info("Hello from lua, I'm the master")
for i,v in ipairs(arg) do
simgrid.info("Got " .. v)
end
local nb_task, comp_size, comm_size, slave_count = unpack(arg)
simgrid.info("Argc=" .. (#arg) .. " (should be 4)")
-- Dispatch the tasks
for i = 1, nb_task do
task = simgrid.task.new("Task " .. i, comp_size, comm_size);
local task_name = simgrid.task.get_name(task)
alias = "slave " .. (i%slave_count);
simgrid.info("Master sending '" .. task_name .. "' To '" .. alias .. "'");
simgrid.task.send(task, alias); -- C user data set to NULL
simgrid.info("Master done sending '" .. task_name .. "' To '" .. alias .. "'");
end
-- Sending Finalize Message To Others
simgrid.info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.");
for i = 0, slave_count-1 do
alias = "slave " .. i;
simgrid.info("Master: sending finalize to " .. alias);
finalize = simgrid.task.new("finalize", comp_size, comm_size);
simgrid.task.send(finalize, alias)
end
simgrid.info("Master: Everything's done.");
end
--end_of_master

Slave code

This function has to be assigned to a msg_process_t that has to behave as a slave. This function keeps waiting for tasks and executes them as it receives them.

-- Slave Function ---------------------------------------------------------
function Slave(...)
if #arg ~= 1 then
error("Wrong number of arguments (got " .. #arg .. ", expected 1: slave_id)")
end
local my_mailbox = "slave " .. arg[1]
simgrid.info("Hello from lua, I'm a poor slave with mbox: " .. my_mailbox)
while true do
local task = simgrid.task.recv(my_mailbox);
--print(task)
local task_name = task:get_name()
if (task:get_name() == "finalize") then
simgrid.info("Slave '" .. my_mailbox .. "' got finalize msg");
break
end
--local tk_name = simgrid.task.get_name(tk)
simgrid.info("Slave '" .. my_mailbox .. "' processing " .. task:get_name())
simgrid.task.execute(task)
simgrid.info("Slave '" .. my_mailbox .. "': task " .. task:get_name() .. " done")
end -- while
simgrid.info("Slave '" .. my_mailbox .. "': I'm Done . See You !!");
end
-- end_of_slave

Simulation core

in this section the core of the simulation which start by including the simgrid lib for bindings, then create the resources we need to set up our environment bypassing the XML parser. : require "simgrid"

  1. Hosts : simgrid.Host.new instanciate a new host with an id, and power.
  2. Links : simgrid.Link.new instanictae a new link that will require an id, bandwith and latency values.
  3. Route : simgrid.Route.new define a route between two hosts specifying the links to use.
  4. Simulation settings : simgrid.register_platform(); register own platform without using the XML SURF parser.

we can also bypass the XML deployment file, and associate functions for each of defined hosts.

  • simgrid.Host.setFunction: associate a function to a host, specifying arguments if needed.
  • simgrid.register_application(): saving the deployment settings before running the simualtion.
require "simgrid"
dofile 'platform.lua'
dofile 'deploy.lua'
--Rutform.lua'
dofile 'master.lua'
dofile 'slave.lua'
simgrid.run()
simgrid.info("Simulation's over.See you.")
SimGrid-3.10/doc/html/options.html000640 007661 000620 00000121104 12242224150 017304 0ustar00gierschand000000 000000 SimGrid: Simgrid options and configurations
SimGrid  3.10
Versatile Simulation of Distributed Systems
Simgrid options and configurations

A number of options can be given at runtime to change the default SimGrid behavior. For a complete list of all configuration options accepted by the SimGrid version used in your simulator, simply pass the –help configuration flag to your program. If some of the options are not documented on this page, this is a bug that you should please report so that we can fix it. Note that some of the options presented here may not be available in your simulators, depending on the compile-time options that you used.

Passing configuration options to the simulators

There is several way to pass configuration options to the simulators. The most common way is to use the –cfg command line argument. For example, to set the item Item to the value Value, simply type the following:

my_simulator --cfg=Item:Value (other arguments)

Several –cfg command line arguments can naturally be used. If you need to include spaces in the argument, don't forget to quote the argument. You can even escape the included quotes (write \' for ' if you have your argument between ').

Another solution is to use the <config> tag in the platform file. The only restriction is that this tag must occure before the first platform element (be it <AS>, <cluster>, <peer> or whatever). The <config> tag takes an id attribute, but it is currently ignored so you don't really need to pass it. The important par is that within that tag, you can pass one or several <prop> tags to specify the configuration to use. For example, setting Item to Value can be done by adding the following to the beginning of your platform file:

<config>
  <prop id="Item" value="Value"/>
</config>

A last solution is to pass your configuration directly using the C interface. If you happen to use the MSG interface, this is very easy with the MSG_config() function. If you do not use MSG, that's a bit more complex, as you have to mess with the internal configuration set directly as follows. Check the relevant page for details on all the functions you can use in this context, _sg_cfg_set being the only configuration set currently used in SimGrid.

#include <xbt/config.h>
extern xbt_cfg_t _sg_cfg_set;
int main(int argc, char *argv[]) {
SD_init(&argc, argv);
/* Prefer MSG_config() if you use MSG!! */
xbt_cfg_set_parse(_sg_cfg_set,"Item:Value");
// Rest of your code
}

Configuring the platform models

Selecting the platform models

SimGrid comes with several network and CPU models built in, and you can change the used model at runtime by changing the passed configuration. The three main configuration items are given below. For each of these items, passing the special help value gives you a short description of all possible values. Also, –help-models should provide information about all models for all existing resources.

  • network/model: specify the used network model
  • cpu/model: specify the used CPU model
  • workstation/model: specify the used workstation model

As of writting, the accepted network models are the following. Over the time new models can be added, and some experimental models can be removed; check the values on your simulators for an uptodate information. Note that the CM02 model is described in the research report A Network Model for Simulation of Grid Application while LV08 is described in Accuracy Study and Improvement of Network Simulation in the SimGrid Framework.

  • LV08 (default one): Realistic network analytic model (slow-start modeled by multiplying latency by 10.4, bandwidth by .92; bottleneck sharing uses a payload of S=8775 for evaluating RTT)
  • Constant: Simplistic network model where all communication take a constant time (one second). This model provides the lowest realism, but is (marginally) faster.
  • SMPI: Realistic network model specifically tailored for HPC settings (accurate modeling of slow start with correction factors on three intervals: < 1KiB, < 64 KiB, >= 64 KiB). See also this section for more info.
  • CM02: Legacy network analytic model (Very similar to LV08, but without corrective factors. The timings of small messages are thus poorly modeled)
  • Reno: Model from Steven H. Low using lagrange_solve instead of lmm_solve (experts only; check the code for more info).
  • Reno2: Model from Steven H. Low using lagrange_solve instead of lmm_solve (experts only; check the code for more info).
  • Vegas: Model from Steven H. Low using lagrange_solve instead of lmm_solve (experts only; check the code for more info).

If you compiled SimGrid accordingly, you can use packet-level network simulators as network models (see Packet level simulation). In that case, you have two extra models, described below, and some specificadditional configuration flags".

  • GTNets: Network pseudo-model using the GTNets simulator instead of an analytic model
  • NS3: Network pseudo-model using the NS3 tcp model instead of an analytic model

Concerning the CPU, we have only one model for now:

  • Cas01: Simplistic CPU model (time=size/power)

The workstation concept is the aggregation of a CPU with a network card. Three models exists, but actually, only 2 of them are interesting. The "compound" one is simply due to the way our internal code is organized, and can easily be ignored. So at the end, you have two workstation models: The default one allows to aggregate an existing CPU model with an existing network model, but does not allow parallel tasks because these beasts need some collaboration between the network and CPU model. That is why, ptask_07 is used by default when using SimDag.

  • default: Default workstation model. Currently, CPU:Cas01 and network:LV08 (with cross traffic enabled)
  • compound: Workstation model that is automatically chosen if you change the network and CPU models
  • ptask_L07: Workstation model somehow similar to Cas01+CM02 but allowing parallel tasks

Optimization level of the platform models

The network and CPU models that are based on lmm_solve (that is, all our analytical models) accept specific optimization configurations.

  • items network/optim and CPU/optim (both default to 'Lazy'):
    • Lazy: Lazy action management (partial invalidation in lmm + heap in action remaining).
    • TI: Trace integration. Highly optimized mode when using availability traces (only available for the Cas01 CPU model for now).
    • Full: Full update of remaining and variables. Slow but may be useful when debugging.
  • items network/maxmin_selective_update and cpu/maxmin_selective_update: configure whether the underlying should be lazily updated or not. It should have no impact on the computed timings, but should speed up the computation.

It is still possible to disable the maxmin_selective_update feature because it can reveal counter-productive in very specific scenarios where the interaction level is high. In particular, if all your communication share a given backbone link, you should disable it: without maxmin_selective_update, every communications are updated at each step through a simple loop over them. With that feature enabled, every communications will still get updated in this case (because of the dependency induced by the backbone), but through a complicated pattern aiming at following the actual dependencies.

Numerical precision of the platform models

The analytical models handle a lot of floating point values. It is possible to change the epsilon used to update and compare them through the maxmin/precision item (default value: 0.00001). Changing it may speedup the simulation by discarding very small actions, at the price of a reduced numerical precision.

Parallel threads for model updates

By default, Surf computes the analytical models sequentially to share their resources and update their actions. It is possible to run them in parallel, using the surf/nthreads item (default value: 1). If you use a negative or null value, the amount of available cores is automatically detected and used instead.

Depending on the workload of the models and their complexity, you may get a speedup or a slowdown because of the synchronization costs of threads.

Configuring the Network model

Maximal TCP window size

The analytical models need to know the maximal TCP window size to take the TCP congestion mechanism into account. This is set to 20000 by default, but can be changed using the network/TCP_gamma item.

On linux, this value can be retrieved using the following commands. Both give a set of values, and you should use the last one, which is the maximal size.

cat /proc/sys/net/ipv4/tcp_rmem # gives the sender window
cat /proc/sys/net/ipv4/tcp_wmem # gives the receiver window

Corrective simulation factors

These factors allow to betterly take the slow start into account. The corresponding values were computed through data fitting one the timings of packet-level simulators. You should not change these values unless you are really certain of what you are doing. See Accuracy Study and Improvement of Network Simulation in the SimGrid Framework for more informations about these coeficients.

If you are using the SMPI model, these correction coeficients are themselves corrected by constant values depending on the size of the exchange. Again, only hardcore experts should bother about this fact.

Simulating cross-traffic

As of SimGrid v3.7, cross-traffic effects can be taken into account in analytical simulations. It means that ongoing and incoming communication flows are treated independently. In addition, the LV08 model adds 0.05 of usage on the opposite direction for each new created flow. This can be useful to simulate some important TCP phenomena such as ack compression.

For that to work, your platform must have two links for each pair of interconnected hosts. An example of usable platform is available in examples/msg/gtnets/crosstraffic-p.xml.

This is activated through the network/crosstraffic item, that can be set to 0 (disable this feature) or 1 (enable it).

Note that with the default workstation model this option is activated by default.

Coordinated-based network models

When you want to use network coordinates, as it happens when you use an <AS> in your platform file with Vivaldi as a routing, you must set the network/coordinates to yes so that all mandatory initialization are done in the simulator.

Simulating sender gap

(this configuration item is experimental and may change or disapear)

It is possible to specify a timing gap between consecutive emission on the same network card through the network/sender_gap item. This is still under investigation as of writting, and the default value is to wait 10 microseconds (1e-5 seconds) between emissions.

Simulating asyncronous send

(this configuration item is experimental and may change or disapear)

It is possible to specify that messages below a certain size will be sent as soon as the call to MPI_Send is issued, without waiting for the correspondant receive. This threshold can be configured through the smpi/async_small_thres item. The default value is 0. This behavior can also be manually set for MSG mailboxes, by setting the receiving mode of the mailbox with a call to MSG_mailbox_set_async . For MSG, all messages sent to this mailbox will have this behavior, so consider using two mailboxes if needed.

This value needs to be smaller than or equals to the threshold set at Simulating MPI detached send , because asynchronous messages are meant to be detached as well.

Configuring packet-level pseudo-models

When using the packet-level pseudo-models, several specific configuration flags are provided to configure the associated tools. There is by far not enough such SimGrid flags to cover every aspects of the associated tools, since we only added the items that we needed ourselves. Feel free to request more items (or even better: provide patches adding more items).

When using NS3, the only existing item is ns3/TcpModel, corresponding to the ns3::TcpL4Protocol::SocketType configuration item in NS3. The only valid values (enforced on the SimGrid side) are 'NewReno' or 'Reno' or 'Tahoe'.

When using GTNeTS, two items exist:

  • gtnets/jitter, that is a double value to oscillate the link latency, uniformly in random interval [-latency*gtnets_jitter,latency*gtnets_jitter). It defaults to 0.
  • gtnets/jitter_seed, the positive seed used to reproduce jitted results. Its value must be in [1,1e8] and defaults to 10.

Configuring the Model-Checking

To enable the experimental SimGrid model-checking support the program should be executed with the command line argument

--cfg=model-check:1

Safety properties are expressed as assertions using the function

void MC_assert(int prop);

Specifying a liveness property

If you want to specify liveness properties (beware, that's experimental), you have to pass them on the command line, specifying the name of the file containing the property, as formated by the ltl2ba program.

--cfg=model-check/property:<filename>

Of course, specifying a liveness property enables the model-checking so that you don't have to give –cfg=model-check:1 in addition.

Going for stateful verification

By default, the system is backtracked to its initial state to explore another path instead of backtracking to the exact step before the fork that we want to explore (this is called stateless verification). This is done this way because saving intermediate states can rapidly exhaust the available memory. If you want, you can change the value of the model-check/checkpoint variable. For example, the following configuration will ask to take a checkpoint every step. Beware, this will certainly explode your memory. Larger values are probably better, make sure to experiment a bit to find the right setting for your specific system.

--cfg=model-check/checkpoint:1

Of course, specifying this option enables the model-checking so that you don't have to give –cfg=model-check:1 in addition.

Specifying the kind of reduction

The main issue when using the model-checking is the state space explosion. To counter that problem, several exploration reduction techniques can be used. There is unfortunately no silver bullet here, and the most efficient reduction techniques cannot be applied to any properties. In particular, the DPOR method cannot be applied on liveness properties since it may break some cycles in the exploration that are important to the property validity.

--cfg=model-check/reduction:<technique>

For now, this configuration variable can take 2 values: none: Do not apply any kind of reduction (mandatory for now for liveness properties) dpor: Apply Dynamic Partial Ordering Reduction. Only valid if you verify local safety properties.

Of course, specifying a reduction technique enables the model-checking so that you don't have to give –cfg=model-check:1 in addition.

Configuring the User Process Virtualization

Selecting the virtualization factory

In SimGrid, the user code is virtualized in a specific mecanism allowing the simulation kernel to control its execution: when a user process requires a blocking action (such as sending a message), it is interrupted, and only gets released when the simulated clock reaches the point where the blocking operation is done.

In SimGrid, the containers in which user processes are virtualized are called contexts. Several context factory are provided, and you can select the one you want to use with the contexts/factory configuration item. Some of the following may not exist on your machine because of portability issues. In any case, the default one should be the most effcient one (please report bugs if the auto-detection fails for you). They are sorted here from the slowest to the most effient:

  • thread: very slow factory using full featured threads (either pthreads or windows native threads)
  • ucontext: fast factory using System V contexts (or a portability layer of our own on top of Windows fibers)
  • raw: amazingly fast factory using a context switching mecanism of our own, directly implemented in assembly (only available for x86 and amd64 platforms for now)

The only reason to change this setting is when the debugging tools get fooled by the optimized context factories. Threads are the most debugging-friendly contextes.

Adapting the used stack size

Each virtualized used process is executed using a specific system stack. The size of this stack has a huge impact on the simulation scalability, but its default value is rather large. This is because the error messages that you get when the stack size is too small are rather disturbing: this leads to stack overflow (overwriting other stacks), leading to segfaults with corrupted stack traces.

If you want to push the scalability limits of your code, you really want to reduce the contexts/stack_size item. Its default value is 128 (in Kib), while our Chord simulation works with stacks as small as 16 Kib, for example. For the thread factory, the default value is the one of the system, if it is too large/small, it has to be set with this parameter.

Running user code in parallel

Parallel execution of the user code is only considered stable in SimGrid v3.7 and higher. It is described in INRIA RR-7653.

If you are using the ucontext or raw context factories, you can request to execute the user code in parallel. Several threads are launched, each of them handling as much user contexts at each run. To actiave this, set the contexts/nthreads item to the amount of cores that you have in your computer (or lower than 1 to have the amount of cores auto-detected).

Even if you asked several worker threads using the previous option, you can request to start the parallel execution (and pay the associated synchronization costs) only if the potential parallelism is large enough. For that, set the contexts/parallel_threshold item to the minimal amount of user contexts needed to start the parallel execution. In any given simulation round, if that amount is not reached, the contexts will be run sequentially directly by the main thread (thus saving the synchronization costs). Note that this option is mainly useful when the grain of the user code is very fine, because our synchronization is now very efficient.

When parallel execution is activated, you can choose the synchronization schema used with the contexts/synchro item, which value is either:

  • futex: ultra optimized synchronisation schema, based on futexes (fast user-mode mutexes), and thus only available on Linux systems. This is the default mode when available.
  • posix: slow but portable synchronisation using only POSIX primitives.
  • busy_wait: not really a synchronisation: the worker threads constantly request new contexts to execute. It should be the most efficient synchronisation schema, but it loads all the cores of your machine for no good reason. You probably prefer the other less eager schemas.

Configuring the tracing subsystem

The tracing subsystem can be configured in several different ways depending on the nature of the simulator (MSG, SimDag, SMPI) and the kind of traces that need to be obtained. See the Tracing Configuration Options subsection to get a detailed description of each configuration option.

We detail here a simple way to get the traces working for you, even if you never used the tracing API.

  • Any SimGrid-based simulator (MSG, SimDag, SMPI, ...) and raw traces:
    --cfg=tracing:yes --cfg=tracing/uncategorized:yes --cfg=triva/uncategorized:uncat.plist
    
    The first parameter activates the tracing subsystem, the second tells it to trace host and link utilization (without any categorization) and the third creates a graph configuration file to configure Triva when analysing the resulting trace file.
  • MSG or SimDag-based simulator and categorized traces (you need to declare categories and classify your tasks according to them)
    --cfg=tracing:yes --cfg=tracing/categorized:yes --cfg=triva/categorized:cat.plist
    
    The first parameter activates the tracing subsystem, the second tells it to trace host and link categorized utilization and the third creates a graph configuration file to configure Triva when analysing the resulting trace file.
  • SMPI simulator and traces for a space/time view:
    smpirun -trace ...
    
    The -trace parameter for the smpirun script runs the simulation with –cfg=tracing:yes and –cfg=tracing/smpi:yes. Check the smpirun's -help parameter for additional tracing options.

Sometimes you might want to put additional information on the trace to correctly identify them later, or to provide data that can be used to reproduce an experiment. You have two ways to do that:

  • Add a string on top of the trace file as comment:
    --cfg=tracing/comment:my_simulation_identifier
    
  • Add the contents of a textual file on top of the trace file as comment:
    --cfg=tracing/comment_file:my_file_with_additional_information.txt
    

Please, use these two parameters (for comments) to make reproducible simulations. For additional details about this and all tracing options, check See the Tracing configuration Options.

Configuring SMPI

The SMPI interface provides several specific configuration items. These are uneasy to see since the code is usually launched through the smiprun script directly.

Automatic benchmarking of SMPI code

In SMPI, the sequential code is automatically benchmarked, and these computations are automatically reported to the simulator. That is to say that if you have a large computation between a MPI_Recv() and a MPI_Send(), SMPI will automatically benchmark the duration of this code, and create an execution task within the simulator to take this into account. For that, the actual duration is measured on the host machine and then scaled to the power of the corresponding simulated machine. The variable smpi/running_power allows to specify the computational power of the host machine (in flop/s) to use when scaling the execution times. It defaults to 20000, but you really want to update it to get accurate simulation results.

When the code is constituted of numerous consecutive MPI calls, the previous mechanism feeds the simulation kernel with numerous tiny computations. The smpi/cpu_threshold item becomes handy when this impacts badly the simulation performance. It specify a threshold (in second) under which the execution chunks are not reported to the simulation kernel (default value: 1e-6). Please note that in some circonstances, this optimization can hinder the simulation accuracy.

Reporting simulation time

Most of the time, you run MPI code through SMPI to compute the time it would take to run it on a platform that you don't have. But since the code is run through the smpirun script, you don't have any control on the launcher code, making difficult to report the simulated time when the simulation ends. If you set the smpi/display_timing item to 1, smpirun will display this information when the simulation ends.

Simulation time: 1e3 seconds.

Simulating MPI detached send

(this configuration item is experimental and may change or disapear)

This threshold specifies the size in bytes under which the send will return immediately. This is different from the threshold detailed in Simulating asyncronous send because the message is not effectively sent when the send is posted. SMPI still waits for the correspondant receive to be posted to perform the communication operation. This threshold can be set by changing the smpi/send_is_detached item. The default value is 65536.

Simulating MPI collective algorithms

SMPI implements more than 100 different algorithms for MPI collective communication, to accurately simulate the behavior of most of the existing MPI libraries. The smpi/coll_selector item can be used to use the decision logic of either OpenMPI or MPICH libraries (values: ompi or mpich, by default SMPI uses naive version of collective operations). Each collective operation can be manually selected with a smpi/collective_name:algo_name. Available algorithms are listed in Simulating collective operations .

Configuring other aspects of SimGrid

XML file inclusion path

It is possible to specify a list of directories to search into for the <include> tag in XML files by using the path configuration item. To add several directory to the path, set the configuration item several times, as in

--cfg=path:toto --cfg=path:tutu

Behavior on Ctrl-C

By default, when Ctrl-C is pressed, the status of all existing simulated processes is displayed. This is very useful to debug your code, but it can reveal troublesome in some cases (such as when the amount of processes becomes really big). This behavior is disabled when verbose-exit is set to 0 (it is to 1 by default).

Logging Configuration

It can be done by using XBT. Go to Logging support for more details.

Index of all existing configuration items

SimGrid-3.10/doc/html/structs__xbt__dict__cursor.html000640 007661 000620 00000014057 12242224150 023242 0ustar00gierschand000000 000000 SimGrid: s_xbt_dict_cursor Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_xbt_dict_cursor Struct Reference

Cursor on dictionaries (opaque type) More...

#include <dict.h>

Detailed Description

Cursor on dictionaries (opaque type)


The documentation for this struct was generated from the following file:
  • include/xbt/dict.h
SimGrid-3.10/doc/html/group__XBT__set__basic.js000640 007661 000620 00000002051 12242224150 021602 0ustar00gierschand000000 000000 var group__XBT__set__basic = [ [ "xbt_set_add", "group__XBT__set__basic.html#ga1db2802704edc8b5d404ca204fc5b34d", null ], [ "xbt_set_remove", "group__XBT__set__basic.html#gadd31f4f1a5a5fdce54f3a8bfbc37de8a", null ], [ "xbt_set_remove_by_name", "group__XBT__set__basic.html#gac5ac26bcb50f5a22c1b2af1f8a1f49c4", null ], [ "xbt_set_get_by_name_or_null", "group__XBT__set__basic.html#ga02fb94d3aa9fcfaae688f61a0ca9cdc2", null ], [ "xbt_set_remove_by_name_ext", "group__XBT__set__basic.html#gabda240bc3fa5bc0ac6983b19f4caa5f8", null ], [ "xbt_set_remove_by_id", "group__XBT__set__basic.html#ga917c20ea5adb57ca287dd1d48ca12ec7", null ], [ "xbt_set_get_by_name", "group__XBT__set__basic.html#gaa5ebcac05554bc6c20129b437851b12e", null ], [ "xbt_set_get_by_name_ext", "group__XBT__set__basic.html#ga6a7bc28b3bedbcb05e2a60297c9df8f0", null ], [ "xbt_set_get_by_id", "group__XBT__set__basic.html#ga19df8b5e26799112d5aba9f677739138", null ], [ "xbt_set_length", "group__XBT__set__basic.html#ga5a1935dab5ad9e2f3c9820e6db7889a7", null ] ];SimGrid-3.10/doc/html/group__XBT__context.html000640 007661 000620 00000014144 12242224150 021531 0ustar00gierschand000000 000000 SimGrid: Portable context implementation
SimGrid  3.10
Versatile Simulation of Distributed Systems
Portable context implementation

Contexts are a higher level system than setjump/longjmp for non-preemptible threads. More...

Contexts are a higher level system than setjump/longjmp for non-preemptible threads.

You shouldn't use it directly since it is merely intended to ease the implementation of the several programmation environment of the SimGrid toolkit (namely, MSG and SMPI).

You should use those environments instead.

SimGrid-3.10/doc/html/group__SD__task__management.html000640 007661 000620 00000222620 12242224150 023213 0ustar00gierschand000000 000000 SimGrid: Tasks
SimGrid  3.10
Versatile Simulation of Distributed Systems

Functions for managing the tasks. More...

Macros

#define SD_SCHED_NO_COST   NULL
 A constant to use in SD_task_schedule to mean that there is no cost.

Functions

SD_task_t SD_task_create (const char *name, void *data, double amount)
 Creates a new task.
void * SD_task_get_data (SD_task_t task)
 Returns the user data of a task.
void SD_task_set_data (SD_task_t task, void *data)
 Sets the user data of a task.
e_SD_task_state_t SD_task_get_state (SD_task_t task)
 Returns the state of a task.
const char * SD_task_get_name (SD_task_t task)
 Returns the name of a task.
void SD_task_set_name (SD_task_t task, const char *name)
 Allows to change the name of a task.
void SD_task_set_rate (SD_task_t task, double rate)
 Sets the rate of a task.
void SD_task_watch (SD_task_t task, e_SD_task_state_t state)
 Adds a watch point to a task.
void SD_task_unwatch (SD_task_t task, e_SD_task_state_t state)
 Removes a watch point from a task.
double SD_task_get_amount (SD_task_t task)
 Returns the total amount of work contained in a task.
void SD_task_set_amount (SD_task_t task, double amount)
 Sets the total amount of work of a task For sequential typed tasks (COMP_SEQ and COMM_E2E), it also sets the appropriate values in the computation_amount and communication_amount arrays respectively. Nothing more than modifying task->amount is done for paralle typed tasks (COMP_PAR_AMDAHL and COMM_PAR_MXN_1D_BLOCK) as the distribution of the amount of work is done at scheduling time.
double SD_task_get_alpha (SD_task_t task)
 Returns the alpha parameter of a SD_TASK_COMP_PAR_AMDAHL task.
double SD_task_get_remaining_amount (SD_task_t task)
 Returns the remaining amount work to do till the completion of a task.
double SD_task_get_execution_time (SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount)
 Returns an approximative estimation of the execution time of a task.
void SD_task_schedule (SD_task_t task, int workstation_nb, const SD_workstation_t *workstation_list, const double *computation_amount, const double *communication_amount, double rate)
 Schedules a task.
void SD_task_unschedule (SD_task_t task)
 Unschedules a task.
double SD_task_get_start_time (SD_task_t task)
 Returns the start time of a task.
double SD_task_get_finish_time (SD_task_t task)
 Returns the finish time of a task.
xbt_dynar_t SD_task_get_parents (SD_task_t task)
 Returns the dynar of the parents of a task.
xbt_dynar_t SD_task_get_children (SD_task_t task)
 Returns the dynar of the parents of a task.
int SD_task_get_workstation_count (SD_task_t task)
 Returns the amount of workstations involved in a task.
SD_workstation_tSD_task_get_workstation_list (SD_task_t task)
 Returns the list of workstations involved in a task.
void SD_task_destroy (SD_task_t task)
 Destroys a task.
void SD_task_dump (SD_task_t task)
 Displays debugging informations about a task.
void SD_task_dotty (SD_task_t task, void *out_FILE)
 Dumps the task in dotty formalism into the FILE* passed as second argument.
SD_task_t SD_task_create_comp_seq (const char *name, void *data, double amount)
 create a sequential computation task that can then be auto-scheduled
SD_task_t SD_task_create_comp_par_amdahl (const char *name, void *data, double amount, double alpha)
 create a parallel computation task that can then be auto-scheduled
SD_task_t SD_task_create_comm_e2e (const char *name, void *data, double amount)
 create a end-to-end communication task that can then be auto-scheduled
SD_task_t SD_task_create_comm_par_mxn_1d_block (const char *name, void *data, double amount)
 create a complex data redistribution task that can then be auto-scheduled
void SD_task_distribute_comp_amdahl (SD_task_t task, int ws_count)
 Blah.
void SD_task_schedulev (SD_task_t task, int count, const SD_workstation_t *list)
 Auto-schedules a task.
void SD_task_schedulel (SD_task_t task, int count,...)
 autoschedule a task on a list of workstations

Detailed Description

Functions for managing the tasks.

This section describes the functions for managing the tasks.

A task is some working amount that can be executed in parallel on several workstations. A task may depend on other tasks, this means that the task cannot start until the other tasks are done. Each task has a state indicating whether the task is scheduled, running, done, etc.

See Also
SD_task_t, Tasks dependencies

Macro Definition Documentation

#define SD_SCHED_NO_COST   NULL

A constant to use in SD_task_schedule to mean that there is no cost.

For example, create a pure computation task (no comm) like this:

SD_task_schedule(task, my_workstation_nb, my_workstation_list, my_computation_amount, SD_TASK_SCHED_NO_COST, my_rate);

Function Documentation

SD_task_t SD_task_create ( const char *  name,
void *  data,
double  amount 
)

Creates a new task.

Parameters
namethe name of the task (can be NULL)
datathe user data you want to associate with the task (can be NULL)
amountamount of the task
Returns
the new task
See Also
SD_task_destroy()
void* SD_task_get_data ( SD_task_t  task)

Returns the user data of a task.

Parameters
taska task
Returns
the user data associated with this task (can be NULL)
See Also
SD_task_set_data()
void SD_task_set_data ( SD_task_t  task,
void *  data 
)

Sets the user data of a task.

The new data can be NULL. The old data should have been freed first if it was not NULL.

Parameters
taska task
datathe new data you want to associate with this task
See Also
SD_task_get_data()
e_SD_task_state_t SD_task_get_state ( SD_task_t  task)

Returns the state of a task.

Parameters
taska task
Returns
the current state of this task: SD_NOT_SCHEDULED, SD_SCHEDULED, SD_RUNNABLE, SD_RUNNING, SD_DONE or SD_FAILED
See Also
e_SD_task_state_t
const char* SD_task_get_name ( SD_task_t  task)

Returns the name of a task.

Parameters
taska task
Returns
the name of this task (can be NULL)
void SD_task_set_rate ( SD_task_t  task,
double  rate 
)

Sets the rate of a task.

This will change the network bandwidth a task can use. This rate depends on both the nominal bandwidth on the route onto which the task is scheduled (

See Also
SD_task_get_current_bandwidth) and the amount of data to transfer.

To divide the nominal bandwidth by 2, the rate then has to be : rate = bandwidth/(2*amount)

Parameters
taska
See Also
SD_TASK_COMM_E2E task (end-to-end communication)
Parameters
ratethe new rate you want to associate with this task.
void SD_task_watch ( SD_task_t  task,
e_SD_task_state_t  state 
)

Adds a watch point to a task.

SD_simulate() will stop as soon as the state of this task becomes the one given in argument. The watch point is then automatically removed.

Parameters
taska task
statethe state you want to watch (cannot be SD_NOT_SCHEDULED)
See Also
SD_task_unwatch()
void SD_task_unwatch ( SD_task_t  task,
e_SD_task_state_t  state 
)

Removes a watch point from a task.

Parameters
taska task
statethe state you no longer want to watch
See Also
SD_task_watch()
double SD_task_get_amount ( SD_task_t  task)

Returns the total amount of work contained in a task.

Parameters
taska task
Returns
the total amount of work (computation or data transfer) for this task
See Also
SD_task_get_remaining_amount()
void SD_task_set_amount ( SD_task_t  task,
double  amount 
)

Sets the total amount of work of a task For sequential typed tasks (COMP_SEQ and COMM_E2E), it also sets the appropriate values in the computation_amount and communication_amount arrays respectively. Nothing more than modifying task->amount is done for paralle typed tasks (COMP_PAR_AMDAHL and COMM_PAR_MXN_1D_BLOCK) as the distribution of the amount of work is done at scheduling time.

Parameters
taska task
amountthe new amount of work to execute
double SD_task_get_alpha ( SD_task_t  task)

Returns the alpha parameter of a SD_TASK_COMP_PAR_AMDAHL task.

Parameters
taska parallel task assuming Amdahl's law as speedup model
Returns
the alpha parameter (serial part of a task in percent) for this task
double SD_task_get_remaining_amount ( SD_task_t  task)

Returns the remaining amount work to do till the completion of a task.

Parameters
taska task
Returns
the remaining amount of work (computation or data transfer) of this task
See Also
SD_task_get_amount()
double SD_task_get_execution_time ( SD_task_t  task,
int  workstation_nb,
const SD_workstation_t workstation_list,
const double *  computation_amount,
const double *  communication_amount 
)

Returns an approximative estimation of the execution time of a task.

The estimation is very approximative because the value returned is the time the task would take if it was executed now and if it was the only task.

Parameters
taskthe task to evaluate
workstation_nbnumber of workstations on which the task would be executed
workstation_listthe workstations on which the task would be executed
computation_amountcomputation amount for each workstation
communication_amountcommunication amount between each pair of workstations
See Also
SD_schedule()
void SD_task_schedule ( SD_task_t  task,
int  workstation_count,
const SD_workstation_t workstation_list,
const double *  computation_amount,
const double *  communication_amount,
double  rate 
)

Schedules a task.

The task state must be SD_NOT_SCHEDULED. Once scheduled, a task will be executed as soon as possible in SD_simulate(), i.e. when its dependencies are satisfied.

Parameters
taskthe task you want to schedule
workstation_countnumber of workstations on which the task will be executed
workstation_listthe workstations on which the task will be executed
computation_amountcomputation amount for each workstation
communication_amountcommunication amount between each pair of workstations
ratetask execution speed rate
See Also
SD_task_unschedule()
void SD_task_unschedule ( SD_task_t  task)

Unschedules a task.

The task state must be SD_SCHEDULED, SD_RUNNABLE, SD_RUNNING or SD_FAILED. If you call this function, the task state becomes SD_NOT_SCHEDULED. Call SD_task_schedule() to schedule it again.

Parameters
taskthe task you want to unschedule
See Also
SD_task_schedule()
double SD_task_get_start_time ( SD_task_t  task)

Returns the start time of a task.

The task state must be SD_RUNNING, SD_DONE or SD_FAILED.

Parameters
task,:a task
Returns
the start time of this task
double SD_task_get_finish_time ( SD_task_t  task)

Returns the finish time of a task.

The task state must be SD_RUNNING, SD_DONE or SD_FAILED. If the state is not completed yet, the returned value is an estimation of the task finish time. This value can fluctuate until the task is completed.

Parameters
task,:a task
Returns
the start time of this task
xbt_dynar_t SD_task_get_parents ( SD_task_t  task)

Returns the dynar of the parents of a task.

Parameters
taska task
Returns
a newly allocated dynar comprising the parents of this task
xbt_dynar_t SD_task_get_children ( SD_task_t  task)

Returns the dynar of the parents of a task.

Parameters
taska task
Returns
a newly allocated dynar comprising the parents of this task
int SD_task_get_workstation_count ( SD_task_t  task)

Returns the amount of workstations involved in a task.

Only call this on already scheduled tasks!

Parameters
taska task
SD_workstation_t* SD_task_get_workstation_list ( SD_task_t  task)

Returns the list of workstations involved in a task.

Only call this on already scheduled tasks!

Parameters
taska task
void SD_task_destroy ( SD_task_t  task)

Destroys a task.

The user data (if any) should have been destroyed first.

Parameters
taskthe task you want to destroy
See Also
SD_task_create()
SD_task_t SD_task_create_comp_seq ( const char *  name,
void *  data,
double  amount 
)

create a sequential computation task that can then be auto-scheduled

Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.

A sequential computation must be scheduled on 1 host, and the amount specified at creation to be run on hosts[0].

Parameters
namethe name of the task (can be NULL)
datathe user data you want to associate with the task (can be NULL)
amountamount of compute work to be done by the task
Returns
the new SD_TASK_COMP_SEQ typed task
SD_task_t SD_task_create_comp_par_amdahl ( const char *  name,
void *  data,
double  amount,
double  alpha 
)

create a parallel computation task that can then be auto-scheduled

Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.

A parallel computation can be scheduled on any number of host. The underlying speedup model is Amdahl's law. To be auto-scheduled,

See Also
SD_task_distribute_comp_amdahl has to be called first.
Parameters
namethe name of the task (can be NULL)
datathe user data you want to associate with the task (can be NULL)
amountamount of compute work to be done by the task
alphapurely serial fraction of the work to be done (in [0.;1.[)
Returns
the new task
SD_task_t SD_task_create_comm_e2e ( const char *  name,
void *  data,
double  amount 
)

create a end-to-end communication task that can then be auto-scheduled

Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.

A end-to-end communication must be scheduled on 2 hosts, and the amount specified at creation is sent from hosts[0] to hosts[1].

SD_task_t SD_task_create_comm_par_mxn_1d_block ( const char *  name,
void *  data,
double  amount 
)

create a complex data redistribution task that can then be auto-scheduled

Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should communicate.

A data redistribution can be scheduled on any number of host. The assumed distribution is a 1D block distribution. Each host owns the same share of the

See Also
amount. To be auto-scheduled,
SD_task_distribute_comm_mxn_1d_block has to be called first.
Parameters
namethe name of the task (can be NULL)
datathe user data you want to associate with the task (can be NULL)
amountamount of data to redistribute by the task
Returns
the new task
void SD_task_distribute_comp_amdahl ( SD_task_t  task,
int  ws_count 
)

Blah.

void SD_task_schedulev ( SD_task_t  task,
int  count,
const SD_workstation_t list 
)

Auto-schedules a task.

Auto-scheduling mean that the task can be used with SD_task_schedulev(). This allows to specify the task costs at creation, and decouple them from the scheduling process where you just specify which resource should deliver the mandatory power.

To be auto-schedulable, a task must be created with SD_task_create_comm_e2e() or SD_task_create_comp_seq(). Check their definitions for the exact semantic of each of them.

void SD_task_schedulel ( SD_task_t  task,
int  count,
  ... 
)

autoschedule a task on a list of workstations

This function is very similar to SD_task_schedulev(), but takes the list of workstations to schedule onto as separate parameters. It builds a proper vector of workstations and then call SD_task_schedulev()

SimGrid-3.10/doc/html/dir_2d36c29c0e5df201a1970c73557793ca.html000640 007661 000620 00000014100 12242224150 022661 0ustar00gierschand000000 000000 SimGrid: examples/msg/masterslave/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
masterslave Directory Reference

Files

file  masterslave_forwarder.c
SimGrid-3.10/doc/html/dir_cd33b2476d3b92443dce18b288c7f600.html000640 007661 000620 00000014034 12242224150 022751 0ustar00gierschand000000 000000 SimGrid: examples/msg/priority/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__XBT__cfg__get.html000640 007661 000620 00000055210 12242224150 021601 0ustar00gierschand000000 000000 SimGrid: Getting the stored values
SimGrid  3.10
Versatile Simulation of Distributed Systems
Getting the stored values

Functions

int xbt_cfg_get_int (xbt_cfg_t cfg, const char *name)
 Retrieve an integer value of a variable (get a warning if not uniq)
double xbt_cfg_get_double (xbt_cfg_t cfg, const char *name)
 Retrieve a double value of a variable (get a warning if not uniq)
char * xbt_cfg_get_string (xbt_cfg_t cfg, const char *name)
 Retrieve a string value of a variable (get a warning if not uniq)
int xbt_cfg_get_boolean (xbt_cfg_t cfg, const char *name)
 Retrieve a boolean value of a variable (get a warning if not uniq)
void xbt_cfg_get_peer (xbt_cfg_t cfg, const char *name, char **peer, int *port)
 Retrieve an peer value of a variable (get a warning if not uniq)
xbt_dynar_t xbt_cfg_get_dynar (xbt_cfg_t cfg, const char *name)
 Retrieve the dynar of all the values stored in a variable.
int xbt_cfg_get_int_at (xbt_cfg_t cfg, const char *name, int pos)
 Retrieve one of the integer value of a variable.
double xbt_cfg_get_double_at (xbt_cfg_t cfg, const char *name, int pos)
 Retrieve one of the double value of a variable.
char * xbt_cfg_get_string_at (xbt_cfg_t cfg, const char *name, int pos)
 Retrieve one of the string value of a variable.
int xbt_cfg_get_boolean_at (xbt_cfg_t cfg, const char *name, int pos)
 Retrieve one of the boolean value of a variable.
void xbt_cfg_get_peer_at (xbt_cfg_t cfg, const char *name, int pos, char **peer, int *port)
 Retrieve one of the peer value of a variable.

Detailed Description

This is how to retrieve the values stored in the configuration set. This is only intended to configurable code, naturally.

Note that those function return a pointer to the values actually stored in the set. Do not modify them unless you really know what you're doing. Likewise, do not free the strings after use, they are not copy of the data, but the data themselves.

Function Documentation

int xbt_cfg_get_int ( xbt_cfg_t  cfg,
const char *  name 
)

Retrieve an integer value of a variable (get a warning if not uniq)

Parameters
cfgthe config set
namethe name of the variable

Returns the first value from the config set under the given name. If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead.

Warning
the returned value is the actual content of the config set
double xbt_cfg_get_double ( xbt_cfg_t  cfg,
const char *  name 
)

Retrieve a double value of a variable (get a warning if not uniq)

Parameters
cfgthe config set
namethe name of the variable

Returns the first value from the config set under the given name. If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead.

Warning
the returned value is the actual content of the config set
char* xbt_cfg_get_string ( xbt_cfg_t  cfg,
const char *  name 
)

Retrieve a string value of a variable (get a warning if not uniq)

Parameters
cfgthe config set
namethe name of the variable

Returns the first value from the config set under the given name. If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead. Returns NULL if there is no value.

Warning
the returned value is the actual content of the config set
int xbt_cfg_get_boolean ( xbt_cfg_t  cfg,
const char *  name 
)

Retrieve a boolean value of a variable (get a warning if not uniq)

Parameters
cfgthe config set
namethe name of the variable

Returns the first value from the config set under the given name. If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead.

Warning
the returned value is the actual content of the config set
void xbt_cfg_get_peer ( xbt_cfg_t  cfg,
const char *  name,
char **  peer,
int *  port 
)

Retrieve an peer value of a variable (get a warning if not uniq)

Parameters
cfgthe config set
namethe name of the variable
peerthe peer
portthe port number

Returns the first value from the config set under the given name. If there is more than one value, it will issue a warning. Consider using xbt_cfg_get_dynar() instead.

Warning
the returned value is the actual content of the config set
xbt_dynar_t xbt_cfg_get_dynar ( xbt_cfg_t  cfg,
const char *  name 
)

Retrieve the dynar of all the values stored in a variable.

Parameters
cfgwhere to search in
namewhat to search for

Get the data stored in the config set.

Warning
the returned value is the actual content of the config set
SimGrid-3.10/doc/html/ftv2pnode.png000640 007661 000620 00000000345 12242224150 017343 0ustar00gierschand000000 000000 PNG  IHDRɪ|IDATx=QFDk:FPK؃=V@ճ 8SHx0bnrr{򽿾$ TP XOd6"SOB(Q)+YĈ ҪR>Vtsm9(k-@ȧ-$ b [he Kp-l|CApRG'rͭaIENDB`SimGrid-3.10/doc/html/group__XBT__cunit.html000640 007661 000620 00000036151 12242224150 021171 0ustar00gierschand000000 000000 SimGrid: Unit testing support
SimGrid  3.10
Versatile Simulation of Distributed Systems
Unit testing support

Unit test mechanism (to test a set of functions) More...

Macros

#define XBT_TEST_SUITE(suite_name, suite_title)
 Provide informations about the suite declared in this file.
#define XBT_TEST_UNIT(name, func, title)
 Declare a new test units (containing individual tests)
#define xbt_test_add(...)
 Declare that a new test begins (printf-like parameters, describing the test)
#define xbt_test_fail(...)
 Declare that the lastly started test failed (printf-like parameters, describing failure cause)
#define xbt_test_assert(...)
 The lastly started test is actually an assert.

Functions

void xbt_test_exception (xbt_ex_t e)
 Declare that the lastly started test failed because of the provided exception.
void xbt_test_expect_failure (void)
 Declare that the lastly started test was expected to fail (and actually failed)
void xbt_test_skip (void)
 Declare that the lastly started test should be skiped today.

Detailed Description

Unit test mechanism (to test a set of functions)

This module is mainly intended to allow the tests of SimGrid itself and may lack the level of genericity that you would expect as a user. Only use it in external projects at your own risk (but it work rather well for us). We play with the idea of migrating to an external solution for our unit tests, possibly offering more features, but having absolutely no dependencies is a nice feature of SimGrid (and this code is sufficient to cover our needs, actually, so why should we bother switching?)

Note that if you want to test a full binary (such as an example), you want to use our integration testing mechanism, not our unit testing one. Please refer to Section Integration testing in SimGrid

Some more information on our unit testing is available in Section Unit testing in SimGrid.

All code intended to be executed as a unit test will be extracted by a script (tools/sg_unit_extract.pl), and must thus be protected between preprocessor definitions, as follows. Note that SIMGRID_TEST string must appear on the endif line too for the script to work, and that this script does not allow to have more than one suite per file. For now, but patches are naturally welcome.

#ifdef SIMGRID_TEST

<your code>

#endif  // SIMGRID_TEST

Macro Definition Documentation

#define XBT_TEST_SUITE (   suite_name,
  suite_title 
)

Provide informations about the suite declared in this file.

Actually, this macro is not used by C, but by the script extracting the test units, but that should be transparent for you.

Parameters
suite_namethe short name of this suite, to be used in the –tests argument of testall afterward. Avoid spaces and any other strange chars
suite_titleinstructive title that testall should display when your suite is run
#define XBT_TEST_UNIT (   name,
  func,
  title 
)

Declare a new test units (containing individual tests)

Parameters
namethe short name that will be used in test all to enable/disable this test
funca valid function name that will be used to contain all code of this unit
titlehuman informative description of your test (displayed in testall)
#define xbt_test_assert (   ...)

The lastly started test is actually an assert.

  • If provided a uniq parameter, this is assumed to be a condition that is expected to be true
  • If provided more parameters, the first one is a condition, and the other ones are printf-like arguments that are to be displayed when the condition fails.
SimGrid-3.10/doc/html/group__msg__trace__driven.js000640 007661 000620 00000000216 12242224150 022445 0ustar00gierschand000000 000000 var group__msg__trace__driven = [ [ "MSG_action_trace_run", "group__msg__trace__driven.html#gaff3ae0c6d1fc712f2162cc199086731f", null ] ];SimGrid-3.10/doc/html/group__XBT__swag__func.js000640 007661 000620 00000002150 12242224150 021622 0ustar00gierschand000000 000000 var group__XBT__swag__func = [ [ "xbt_swag_reset", "group__XBT__swag__func.html#ga178b8841e1a3e2561f5b73fbfdecdfa1", null ], [ "xbt_swag_insert", "group__XBT__swag__func.html#ga1bb1fb6d0e53c58a6d5c9ceac94339b6", null ], [ "xbt_swag_offset", "group__XBT__swag__func.html#ga96193348bca3b2b0840cbc122d8516f7", null ], [ "xbt_swag_new", "group__XBT__swag__func.html#ga11b0c605fb84243e1c399831c9efbf6c", null ], [ "xbt_swag_free", "group__XBT__swag__func.html#ga936859aae1ee95f8cfb9f32047dc482d", null ], [ "xbt_swag_init", "group__XBT__swag__func.html#ga08da2ee0936e19da57695b5d99007c64", null ], [ "xbt_swag_insert_at_head", "group__XBT__swag__func.html#ga19c8dc8c1637bb0fce94c4bc38b7d088", null ], [ "xbt_swag_insert_at_tail", "group__XBT__swag__func.html#gae5919f7e25c402ac3079d792e033a1fb", null ], [ "xbt_swag_remove", "group__XBT__swag__func.html#gabce3d24a60fbd2e2cbd31df6612418a3", null ], [ "xbt_swag_extract", "group__XBT__swag__func.html#ga008f75ad3c220b326121e44a6cadb6d3", null ], [ "xbt_swag_size", "group__XBT__swag__func.html#gaef55e706dcbabb605cf71e522caa82e6", null ] ];SimGrid-3.10/doc/html/group__XBT__swag__curs.html000640 007661 000620 00000022310 12242224150 022173 0ustar00gierschand000000 000000 SimGrid: Swag cursor
SimGrid  3.10
Versatile Simulation of Distributed Systems

Macros

#define xbt_swag_foreach(obj, swag)
 A simple swag iterator.
#define xbt_swag_foreach_safe(obj, obj_next, swag)
 A safe swag iterator.

Detailed Description

Iterates over the whole swag.

Macro Definition Documentation

#define xbt_swag_foreach (   obj,
  swag 
)

A simple swag iterator.

Parameters
objthe indice of the loop
swagwhat to iterate over
Warning
you cannot modify the swag while using this loop
#define xbt_swag_foreach_safe (   obj,
  obj_next,
  swag 
)

A safe swag iterator.

Parameters
objthe indice of the loop
obj_nextthe object that is right after (if any) obj in the swag
swagwhat to iterate over

You can safely modify the swag while using this loop. Well, safely... Err. You can remove obj without having any trouble at least.

SimGrid-3.10/doc/html/group__XBT__fifo__misc.html000640 007661 000620 00000020330 12242224150 022134 0ustar00gierschand000000 000000 SimGrid: Misc fifo functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Misc fifo functions

Functions

void ** xbt_fifo_to_array (xbt_fifo_t)
xbt_fifo_t xbt_fifo_copy (xbt_fifo_t)

Detailed Description

Function Documentation

void** xbt_fifo_to_array ( xbt_fifo_t  f)
Parameters
fa list
Returns
a table with the objects stored in f.
xbt_fifo_t xbt_fifo_copy ( xbt_fifo_t  f)
Parameters
fa list
Returns
a copy of f.
SimGrid-3.10/doc/html/structs__xbt__parmap__thread__data.js000640 007661 000620 00000000371 12242224150 024323 0ustar00gierschand000000 000000 var structs__xbt__parmap__thread__data = [ [ "parmap", "structs__xbt__parmap__thread__data.html#ae1ffd860183ce274286e6895f91a7d98", null ], [ "worker_id", "structs__xbt__parmap__thread__data.html#a1b6e07b976fb9e4f73d14287f18a2270", null ] ];SimGrid-3.10/doc/html/group__XBT__queue.html000640 007661 000620 00000062507 12242224150 021177 0ustar00gierschand000000 000000 SimGrid: Queue
SimGrid  3.10
Versatile Simulation of Distributed Systems

Synchronized message exchanging queue. More...

Typedefs

typedef struct s_xbt_queue_ * xbt_queue_t
 Queue data type (opaque type)

Functions

xbt_queue_t xbt_queue_new (int capacity, unsigned long elm_size)
 Create a new message exchange queue.
void xbt_queue_free (xbt_queue_t *queue)
 Destroy a message exchange queue.
unsigned long xbt_queue_length (const xbt_queue_t queue)
 Get the queue size.
void xbt_queue_push (xbt_queue_t queue, const void *src)
 Push something to the message exchange queue.
void xbt_queue_pop (xbt_queue_t queue, void *const dst)
 Pop something from the message exchange queue.
void xbt_queue_unshift (xbt_queue_t queue, const void *src)
 Unshift something to the message exchange queue.
void xbt_queue_shift (xbt_queue_t queue, void *const dst)
 Shift something from the message exchange queue.
void xbt_queue_push_timed (xbt_queue_t queue, const void *src, double delay)
 Push something to the message exchange queue, with a timeout.
void xbt_queue_unshift_timed (xbt_queue_t queue, const void *src, double delay)
 Unshift something to the message exchange queue, with a timeout.
void xbt_queue_shift_timed (xbt_queue_t queue, void *const dst, double delay)
 Shift something from the message exchange queue, with a timeout.
void xbt_queue_pop_timed (xbt_queue_t queue, void *const dst, double delay)
 Pop something from the message exchange queue, with a timeout.

Detailed Description

Synchronized message exchanging queue.

These is the classical producer/consumer synchronization scheme, which all concurrent programmer recode one day or another.

The good thing of this implementation is that it works seamlessly in your universe. When using one of the classical simulation interface (such as MSG), it achieves the synchronization on top of the simulator. If you use instead the real life implementation comming with GRAS, it uses the synchronization of your OS (whatever could it be). The choice is done at link time.

For performance concerns, the content of queue must be homogeneous, just like dynars (see the Dynar: generic dynamic array section). Actually, queues use a dynar to store the data, and add the synchronization on top of it.

Function Documentation

xbt_queue_t xbt_queue_new ( int  capacity,
unsigned long  elm_size 
)

Create a new message exchange queue.

Parameters
capacitythe capacity of the queue. If non-nul, any attempt to push an item which would let the size of the queue over this number will be blocking until someone else pop some data
elm_sizesize of each element stored in it (see xbt_dynar_new)
void xbt_queue_free ( xbt_queue_t queue)

Destroy a message exchange queue.

Any remaining content is leaked.

void xbt_queue_push ( xbt_queue_t  queue,
const void *  src 
)

Push something to the message exchange queue.

This is blocking if the declared capacity is non-nul, and if this amount is reached.

See Also
xbt_dynar_push
void xbt_queue_pop ( xbt_queue_t  queue,
void *const  dst 
)

Pop something from the message exchange queue.

This is blocking if the queue is empty.

See Also
xbt_dynar_pop
void xbt_queue_unshift ( xbt_queue_t  queue,
const void *  src 
)

Unshift something to the message exchange queue.

This is blocking if the declared capacity is non-nul, and if this amount is reached.

See Also
xbt_dynar_unshift
void xbt_queue_shift ( xbt_queue_t  queue,
void *const  dst 
)

Shift something from the message exchange queue.

This is blocking if the queue is empty.

See Also
xbt_dynar_shift
void xbt_queue_push_timed ( xbt_queue_t  queue,
const void *  src,
double  delay 
)

Push something to the message exchange queue, with a timeout.

See Also
xbt_queue_push
void xbt_queue_unshift_timed ( xbt_queue_t  queue,
const void *  src,
double  delay 
)

Unshift something to the message exchange queue, with a timeout.

See Also
xbt_queue_unshift
void xbt_queue_shift_timed ( xbt_queue_t  queue,
void *const  dst,
double  delay 
)

Shift something from the message exchange queue, with a timeout.

See Also
xbt_queue_shift
void xbt_queue_pop_timed ( xbt_queue_t  queue,
void *const  dst,
double  delay 
)

Pop something from the message exchange queue, with a timeout.

See Also
xbt_queue_pop
SimGrid-3.10/doc/html/group__XBT__dynar__ctn.html000640 007661 000620 00000031242 12242224150 022163 0ustar00gierschand000000 000000 SimGrid: Direct manipulation to the dynars content
SimGrid  3.10
Versatile Simulation of Distributed Systems
Direct manipulation to the dynars content

Functions

void * xbt_dynar_get_ptr (const xbt_dynar_t dynar, const unsigned long idx)
 Retrieve a pointer to the Nth element of a dynar.
void * xbt_dynar_insert_at_ptr (xbt_dynar_t const dynar, const int idx)
 Make room for a new element, and return a pointer to it.
void * xbt_dynar_push_ptr (xbt_dynar_t const dynar)
 Make room at the end of the dynar for a new element, and return a pointer to it.
void * xbt_dynar_pop_ptr (xbt_dynar_t const dynar)
 Mark the last dynar's element as unused and return a pointer to it.

Detailed Description

Those functions do not retrieve the content, but only their address.

Function Documentation

void* xbt_dynar_get_ptr ( const xbt_dynar_t  dynar,
const unsigned long  idx 
)

Retrieve a pointer to the Nth element of a dynar.

Parameters
dynarinformation dealer
idxindex of the slot we want to retrieve
Returns
the idx-th element of dynar.
Warning
The returned value is the actual content of the dynar. Make a copy before fooling with it.
void* xbt_dynar_insert_at_ptr ( xbt_dynar_t const  dynar,
const int  idx 
)

Make room for a new element, and return a pointer to it.

You can then use regular affectation to set its value instead of relying on the slow memcpy. This is what xbt_dynar_insert_at_as() does.

void* xbt_dynar_push_ptr ( xbt_dynar_t const  dynar)

Make room at the end of the dynar for a new element, and return a pointer to it.

You can then use regular affectation to set its value instead of relying on the slow memcpy. This is what xbt_dynar_push_as() does.

void* xbt_dynar_pop_ptr ( xbt_dynar_t const  dynar)

Mark the last dynar's element as unused and return a pointer to it.

You can then use regular affectation to set its value instead of relying on the slow memcpy. This is what xbt_dynar_pop_as() does.

SimGrid-3.10/doc/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html000640 007661 000620 00000014010 12242224150 023022 0ustar00gierschand000000 000000 SimGrid: src/include/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/SGicon.gif000664 007661 000620 00000001641 12242224150 016605 0ustar00gierschand000000 000000 GIF89a9\~! ,;ڋ/mH ɶ ǞKהͿ3'"RXìD'Ψ5Ui Vp.3 9mWr_u>ߧhAHxՁ&LjhHgyٖI)8:WZXwjJ ZK{;[+Lk,<,m{ Mm >NNR/^5\NҞO"/^@ ol Dàv!N7 ;q?rq!;a Z,Gf VYLN`PCpy`| QqZ4Ҙ0eUF[i4,VQR -Up-KCyl۷F%0ĊSul1dN('Slʮl9Т1e0pӨ-\4c˶) {n}!8_E^o蓝/a\9ޔf'TzЧWO<믑kc M[=(2p`Ug` n0R3fTxͅfRn!"ަ!%z;6i4z:ް(kv%dcyH&C 2P$6?:ÕX4ft%$Z=d0晉ִYp%i')u ˞y&n* Y(7p(7~的Уj5P,Ue*:(=N~y*"x)\qK(R+*FO"u2 *|寚R Jn!K=,^ k<.l+e͜{ c. 27|M+'dC8Do;ݡ19HPB;SimGrid-3.10/doc/html/simgrid_modules.png000640 007661 000620 00000062706 12242224150 020633 0ustar00gierschand000000 000000 PNG  IHDR?qGx 6iCCPdefault_rgb.iccxgP} tXz*eIK,K!b"4ER$VDY$(1ETP;}~=;眙@@ERR|?{NHh!n ( V}](1<X|^:_f ]VTR9 ,~HhrXq_}XQ_}X?@}Q( 1XAN$?bqspbc9*AL!-}?!.^F/{ ؾj]RT0 _3(H&%؂7@(lC !aA 샃P-.yxK:DED A.b8!D qH*#;Ar # db( e:rQ; @ףqh{*=vW(*D_ `T)as0,c[bkڱ^l 9#c88]%2p[q \w7}rx f|'~?O  JH$l&: ÄIH&HXD&$^"HT"ɈL # HVEiD%-h&rKC"/Q(+J%REi\SRTe9՗@NޠNP?i4Z8-vvNmat}/~A)'&-MVKdD5Pc1603;9QhVZsc bL1C1oRVb3Dquq'hBcW'S1w2טS,KJd~f %%%$r%j%.H[NfO?IKIHl\*$͑vN/-T'-+#sD̜,KR'[,{Z*-'Yܠ܂||U9BBEYEbb%ŗ 'S+)*e)5( )-)k(*(w(?UpUbU*TTUUTUTոjj5ԃwwhHiiiik5m4345kZIZj&ڵwtPS:ëWj\5KӵmӝcyuW߯? ٠aaFF¾}?Q.VW>y@WoVW:$VW\_3Zk_Q'Wnp#GK?M8QXMAM?qjii.i|<߉Vֲ6-mdɻ?;Ӯ(9N%=Ni?vY܅tm s?kޯ+ q"bŕKy._weocߓ!W]vvnX8[[ݷMow vf[P;=w8b3r];: ñ13yxqxSѧ5{Txaqb'Wd׼c⿑3Y<.B螊XO$OcXz0K jy3軵-N EyX>Ծ=˓-,m`$1%'E^7Tc+p)x%xrZBы2T R~a?떑T7[ooQ,߼+Uݱ _=zzݓ{&^dޓhCz^k3|vd^ pGR |0&7>Mp9j;P[),!`x/h&Gc͒! jߘ/텊,[`RG 췀 -lKx`m:XPud+h`wO֜Cݲ^qP,/X&e|je0umtۡm,<@eP부_`v C6M9Wq?_=c|^j[-{ha#QF -{nWb;`h-0IuH`}z,`,*^}0X߆L']_ƛ)Y+~~ p<"! X߆w'S6,rWy n?2bkf) 9ҝ*]Xp(z `~LnCSq8(>{{6oM4C7,`R9X+pǤvr&' w @ zLs#h@{#%j n H윱߾]5⽠o~{rC%0K-9o~FETs|jr ֣UY s1`ݖ۝D0r$>2 ']-;:LJnƏKDἣY}#4t*k ߆x~~}2ًb䠽oC0<fǓqTv~}|GMucJ߾cv{i(';d%Tz̝`E䃮^7nA^x/>w;㿀ڷo(j/OP\XpWގ=O瓓jQ3<L'2[nݨCCgπhg@S߄^!0@u${?%خCS7X/7u5~Kb>Yhpa o dXz{r!zd党N>yJ __]z*^hO{?4zj a&.COoC%t&?b Q29cB._hE~%/`r.TK*ZVaA$a&ԛYX̥pGw U1k C\u"@Ͻ!^BE/B!!CыBHE!$P"(zB?!ğ)XN<.o?We>twvLx}&elF)9t(@~g[[8T+سgĥ]~{*i8rT*Z G͹:\1X\STL.TZ_O/;5;z乄3 EB\'~kcpcy3F~11_vn%I)ݚްroS+?L&k5)kRx73!|˵o߾G?wNmmmNt\[\.Wuum⻣FЩS &\S)k%ϥ17ε{}5.y. k֮M[HPsywԬDc@ށNrMMq/n7kt ;ٰ(WR" nc$ C(xoiC d W:c>q 1JT,7mmmg\s]-Y,q)99YR ~rju:].8ybS֦z{B(T>8F۹vEk۹Ccc vg0{?;5[yecر`w1oۏ1\kʋآ WH-Cp{yz )ֵԴ;_mbBYް2K9Oi hЯOF۷744tuu555%&&ݸ1hڱ_dÎ3;p>E<Ep`bntsτ盞$VT?\?__J&kSxy@`&0[y*sKhϻNCO ??aK4&&&T*|OHLq=>ka!~&q/|(̮ҋ%/vkǍaG[$T(> bqP^-t w>Ζgߺz] uBɼg+67Lz+W!>Yo~#y=>z_+]j,o]p:Bץ1X[$Yl[, n ⰡyuQoh= 7em ,Y,ϽV/ۛugMպo'e(&1_fa:|-PiUk`-'<6}qZ}ppttoB#8k#_2 ;61Vᓰ(\\24k-Zvy}1b~>b٠9KuNY,5cNV~YI.+֚7c1nl溆>NNNVߏt+}/hŸ=Qs ;pE1k;u: ;5[.L &1N"z;W/|Mk͉ vԛLYk?ͦ[T})M9}=s#3+B xPǰpblw6^2Si7__Q[pP"]qK!dfI0.MJ^Bbb)-_GZE/2*J7].W:38Q(̊ ru-11Jn6kkjf=dECCì]XG*cŮmmm`4kk- X!a4Cы/**6[pr:L+eee*/l6ǸmČhl6O9$Rggθ\D^G?w:mmm*5׵bʼnX1QQ8Їmb+W"Reee;q۷ob>pѲG@rrr[[xqq`iRZ%%d9b鬭oKk9>>듓IXSSF7U*^OLLq9qqa̭/!2.׫VoܷoHK&aB*K{NXV 0z]9~ӯ[FBc4x^dJLL\Y,ֆ߿iқ7ك]d! ?~\HR}iPps>:MKfv+W8NZ-␩VʢljbuAyh9A:L=ңD}شs!g3QT¬<[t||;::*W;XO鋣Prr2{ 3pR]]]eee[UUUoõp]9iL^w H.8{>&xaYhÞӎo~эUY7򻭖%aشsw?~\Vd2jt/]~~~[[R")N<,'К?Î! m޻yl|LTf@Zn{zl&EZOWKMG[';[xjjښ>mqKEk1Ms||t:tT*,Yu͏ꮮ.~u kVXO>"`}}¿-;3,߄MFGb:r~51r*ܙ Mx}lw{:ӎpgnC}#IJzSL~X@0UKMu7I)/ܙ7q{KRmN["Yav\w{פ|́9kMwVLlԒӎ /wkv`yΛ@ɇq{T;۷nuJ~799g~},uV~~}X۷o,uKf$ar۹vL^oo,ot ;|tdlb pef (tRO>~~\KwwnByT[T(cz{}\P:a9*ewnyG>:d`f*\_!i,o r64yc"ӾL~Wzvэ:v㣯u[1haw{[j::vޕeE;<}#G' ozFv%)'{Ww '$eE;2c玲IgiVa`k6F(ڙ77R2 2|ޯ4}ޯn oi}ivj݊,߶kǠRZ_*w8Ֆ֗*^\l<ε@A~7_3mt/1 v2%KYVPYi7[j25WŤnFgmWfkL[ݡ+ vAښps`¾`-PLҴ%B&s٩gZSү7]n¾]*"!b;\;vİ] NN= XFjMhXv6U᭷X0}/F)Fwwr\ƻRpNϦ8L3{FV ϓ֤n>X6Nݚ7pphCf5); kʁO1J97;Dܤ o6yt (V⾞ktXtB%N j͹kkɋvh\S^o1@Ȕ!!;5\S(?;5{)k~~1 ULc+ 䇷2>{׳ `Zq:J7n *T>tӃy/>usH юG/H>Ej.pGkXGxF|ޯ֤ϫєw{Ŧljlp\>[k>OŸI IDAT~է9%_\B7g6ffgA?~'33ʍu ;2yvj6NJ cU17\5g}ϯ^Z#V՛֚7455Sj2ò۬l6\s8ͩt8+O@U(x`۸wȜh٣L2ecfζ3:r\ǁ eD#]O<*)5Ӭ-VJ9 Q`yL/F!s55\0WAC P֮]+\ L,Ů>J :׃%uvuul&d> mQm-F,CJښχF3~,XǏ\.'z0 ֖˒%ӠH&7vb^"T%w:^91lŒ%?)q"H2dɍj5&xLNNeBH",.4( 8nc}:D6 "c,JZS6HYh()z,d`)Q86W$!RIA#\h4jZTDԌNBqY 1 N?S2 !0+/{8#2KV5ԑbp;dfO[ǰ#ɘp҅BE2? ?8).g3e.?<%OZ~i *αZA`J2I(JBd< 3 ʔ?dyC4#ik2 ?k2 !M_Z<4a.*{Î7>I_^"DZDt^aW nKikRarQi"E@On$7. ܅'Irm;ޔrZh? cQZ_d8f1GuO`Ir"].3׼qs6emү1rQef3m܄צ Տ*+Q+؅ /Me0l,)十O6gv@|lb,g\paޙsOȥ'dP*L8Ezϋ1ioBU!vÎ{5 v?痈7W$(v\x#CA~/y..؝d֗z}^ff.حHP;5֗b Lq)Y V-Y$gy/^VI?(:tt[>+ܙ'Y,A*5o$I),Ȑ85ĘOoɻ0cr3cwQ1a=IJ7 v6?RJLj 15~kׯ0#?d0El\<)G0P~-ٛ"AKKa &pa,9[2,εsE`I^8#gy/>)/ȼk _h?ߣoۋڰ2I)?5mMu7kJkMG`1ɨpkdfddnA#T F&k;WeJe^q{|oEq .}}L!E]\os-*b5~5  ɸlxomZ+&6ƈ c Q@!Yc!nU j)>&Ēr<9Fc"W V !Aֆ{:=}#˜[`1|\{kyz5MSoX<y*NV,\Qʳ6\5z$= :֤dmX G,Z \.\Iϙ33ROf¨Ez)\cery_,yPUpR]{e{lOOGG{*Jj}/+q[t Òc؁Ђ5CkN"Qlgm^[%H0;Sz` ?xT 2o:ﵤ$bB|{Iݚ}mP5'2JyfA/%I0|fe'l~@f)u[7¡KTu.ܙSulRaэ7p.X E99#2Or]<a28J)k>:_ آo| kvcc8W)_o^O>a\o^d8*D &ceԯ 3z{=;mG>:" ;5\S(?;5?ߦT( &cVL2>{~O[VܙF9t ?˻S&#.ikR"}愣k`2]ikRIlaf )Cmmm=/Ngbbb[[aۇǏk׮A3 gxQէ޹c. n^t%C4 _fJ^r {6r7hڈO+tۃ:\;330G iel9N[S3O.S".t+/v]TToErFGGqAzu\<4eÄ]Ws md:BtH i4=r|rQćz?¾Jٰ~S z"ΊR܋ĵ)Gwuuuuu0} |aG 3=Ya|ЅlLemĩjkYV[SSPY){Y,{P`E Z=:::9!#KW={}Y9{rKٰUm¥Xf *+?r3,ٌyQ#Cj e62=Ta#{3jm<1bluu4yvJHf8Cc̖2g0d/[,vYSBrqЬ B!^Bff;mZ93`(9$2j4۬TaYv!1 Β1zE!$z1|sEEN7lGQ E/B!j2s/:q-L\Q.z^}Y5B ݶ%U30`71TVcWnF^9$S2Ihn*ͦjVBыBH\X,~_HE!$vpӬBI<J ^BbGc4r6[t)hBHot޹="29F롑CB!^Bff;mZ93`5^9$2j4۬TaY\jhBȬ1J1a-٬j"0W8EVk/y\m0&wޮJIev˿4wޮz{evFјL.%Qm-qښPiښjD" _ե 4 \s jvqmF,RRXyr,26'd‚ e#셨E XSvÎʝfa˔RRYqa3gZ͏.!$L zvխG_B~HE5] ENc4tv;òp+WDQE/0l459%k$ ?bm3BB'!.YmNJY*;u]_w ~/5b ݶclZf,`21Qmm/^daJ\x70:k+'aSװ\yǏ{ B\y|G 5nnƞHEa0A#9UH Ugv6z[@r_B"b7 h)-ӃxE342̝Za~Lbe yAHtY&Tihכ^BbGc4[,Q=vw1/TV,`˲e#?+X1’_WǮl.\+!W*SW0 G8Y@J*r셝-g6U+{u~ ƕ|6@2fsY%w^CIܟzިm0n.v dd aK8$d&-xC vן\t&Mt251sS $s/3tE^$͙u!!^BE/B!!CыBHE!$P"(zB?!^BE/B!!CыBH,l^Yrva^ 6^Bb-Kl3/}QTm9҂|d IDAT@ͮl![,-.^A*4^d3n^Wv6=m~o!!$">lp6[ TV;E/ؙIw[9נU _u%"!dJ-KuYV[S/^dQkjn}m*|/ #tmU sLBbyi6"Yn*^}򉢒\$]x}Z2K.[,v9`x2ybUQ>TzUWiݶ_Lvskp؜4aXx ,{Hы,R jUiO՞e nna\sHHrll,縴aK*}3JB! F՛֚7455Ufn,j썹l6K!$d c4c7UTʌ`dF !>PY@e~pPߋBHqf ȡ̄F!i5:kkh,Ą)BQ" v{gmmi*m&Ӱ@ò}!Xl0,TTQ񓁁ו^.͵vsc7|18\ 3S)W<0J# >޸yr!Zn @m_V"Ǟ.tAF7JTA2蘎دxW<.J>WQ}^}vUoZ>١$FɎ;=C7| }g=tC }#+ӑN"/T޴.\o}ȓ-G9|{=18fUzw]#M!1n`^i^)y5Ti 7tcywO) MAQ\*rogϽ\='^ݧ ;4.o8,O0n9Φ'ZX.BZ7?F6=|b¸9d^Ԟ-X1a8Pˆ cB),Xbs*3iU>Qń$u9p7xw?d˅jmylw}-ةn/sq:鷻_BK3IlwI A赓ڼLMgĿ^ۙH`/]1ߥC r͒ p`WI\gwRWj,Dɻŏ00w'`Ǯ$:d>ܝ {C&?طD`~"ķPxe`6~Z gыMg#;C"l:ct(@\X\&.ܝMV~ ]B/7t~ų$bsu>QB3$Vh9Jh2yC(~gx$O-K$o$*1ͪ4nH:zI_rY[]0~D,3u\9`MM qֈ~5Ko`7]Vx@2Vmiu> *V5s,΢6/o ~ۅpv1r8 %jnlo,BT d7ćx_D.Lk7G [CS rY:3 mF> }.L ƌ̊i2mz3q#~oH qQw34ZZ8Ogᱛ6ijF| v!Q*e %uێ_V14MO}7LuO=;7ćr;lXΪ4qTĸ9W7[wY=L 4e˃VY._X|ȡ˴I^7S+e7~~'S$ ^-%Y ¤zzxX } ^zfw:%/`u(e K2ͻ/ \{wop~Ҫ3n(Q ϟk_9BӴ~ =Q7@8f&8^t4i8<^od !ʄ¾}?Q.VW>y@WoVW:$VW\_3Zk_Q'Wnp#GK?M8QXMAM?qjii.i|<߉Vֲ6-mdɻ?;Ӯ(9N%=Ni?vY܅tm s?kޯ+ q"bŕKy._weocߓ!W]vvnX8[[ݷMow vf[P;=w8b3r];: ñ13yxqxSѧ5{Txaqb'Wd SimGrid: Logging support
SimGrid  3.10
Versatile Simulation of Distributed Systems

A generic logging facility in the spirit of log4j (grounding feature) More...

Modules

 Existing log categories
 (automatically extracted)

Macros

#define XBT_LOG_STATIC_THRESHOLD   xbt_log_priority_none
#define XBT_LOG_NEW_SUBCATEGORY(catName, parent, desc)
#define XBT_LOG_NEW_CATEGORY(catName, desc)
#define XBT_LOG_DEFAULT_CATEGORY(cname)
#define XBT_LOG_NEW_DEFAULT_CATEGORY(cname, desc)
#define XBT_LOG_NEW_DEFAULT_SUBCATEGORY(cname, parent, desc)
#define XBT_LOG_EXTERNAL_CATEGORY(cname)
#define XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(cname)
#define XBT_LOG_ISENABLED(catName, priority)
#define XBT_CDEBUG(c,...)
 Log an event at the DEBUG priority on the specified category with these args.
#define XBT_CVERB(c,...)
 Log an event at the VERB priority on the specified category with these args.
#define XBT_CINFO(c,...)
 Log an event at the INFO priority on the specified category with these args.
#define XBT_CWARN(c,...)
 Log an event at the WARN priority on the specified category with these args.
#define XBT_CERROR(c,...)
 Log an event at the ERROR priority on the specified category with these args.
#define XBT_CCRITICAL(c,...)
 Log an event at the CRITICAL priority on the specified category with these args (CCRITICALn exists for any n<10).
#define XBT_DEBUG(...)
 Log an event at the DEBUG priority on the default category with these args.
#define XBT_VERB(...)
 Log an event at the VERB priority on the default category with these args.
#define XBT_INFO(...)
 Log an event at the INFO priority on the default category with these args.
#define XBT_WARN(...)
 Log an event at the WARN priority on the default category with these args.
#define XBT_ERROR(...)
 Log an event at the ERROR priority on the default category with these args.
#define XBT_CRITICAL(...)
 Log an event at the CRITICAL priority on the default category with these args.
#define XBT_IN(...)
 Log at TRACE priority that we entered in current function, appending a user specified format.
#define XBT_OUT(...)
 Log at TRACE priority that we exited the current function, appending a user specified format.
#define XBT_HERE(...)
 Log at TRACE priority a message indicating that we reached that point, appending a user specified format.

Enumerations

enum  e_xbt_log_priority_t { ,
  xbt_log_priority_trace = 1, xbt_log_priority_debug = 2, xbt_log_priority_verbose = 3, xbt_log_priority_info = 4,
  xbt_log_priority_warning = 5, xbt_log_priority_error = 6, xbt_log_priority_critical = 7, xbt_log_priority_infinite = 8
}
 Log prioritiesThe different existing priorities. More...

Functions

void xbt_log_control_set (const char *control_string)

Detailed Description

A generic logging facility in the spirit of log4j (grounding feature)

This section describes the API to the log functions used
everywhere in this project.

Table of contents

1. Introduction

This module is in charge of handling the log messages of every SimGrid program. The main design goal are:

  • configurability: the user can choose at runtime what messages to show and what to hide, as well as how messages get displayed.
  • ease of use: both to the programmer (using preprocessor macros black magic) and to the user (with command line options)
  • performances: logging shouldn't slow down the program when turned off, for example
  • deal with distributed settings: SimGrid programs are [often] distributed ones, and the logging mechanism allows to syndicate each and every log source into the same place. At least, its design would allow to, once we write the last missing pieces

There is three main concepts in SimGrid's logging mechanism: category, priority and appender. These three concepts work together to enable developers to log messages according to message type and priority, and to control at runtime how these messages are formatted and where they are reported.

1.1 Category hierarchy

The first and foremost advantage of any logging API over plain printf() resides in its ability to disable certain log statements while allowing others to print unhindered. This capability assumes that the logging space, that is, the space of all possible logging statements, is categorized according to some developer-chosen criteria.

This observation led to choosing category as the central concept of the system. In a certain sense, they can be considered as logging topics or channels.

1.2 Logging priorities

The user can naturally declare interest into this or that logging category, but he also can specify the desired level of details for each of them. This is controlled by the priority concept (which should maybe be renamed to severity).

Empirically, the user can specify that he wants to see every debugging message of MSG while only being interested into the messages at level "error" or higher about the XBT internals.

1.3 Message appenders

The message appenders are the elements in charge of actually displaying the message to the user. For now, only two appenders exist: the default one prints stuff on stderr while it is possible to create appenders printing to a specific file.

Other are planed (such as the one sending everything to a remote server, or the one using only a fixed amount of lines in a file, and rotating content on need). One day, for sure ;)

1.4 Message layouts

The message layouts are the elements in charge of choosing how each message will look like. Their result is a string which is then passed to the appender attached to the category to be displayed.

For now, there is two layouts: The simple one, which is good for most cases, and another one allowing users to specify the format they want. 3.1 Configuration provides more info on this.

1.5 History of this module

Historically, this module is an adaptation of the log4c project, which is dead upstream, and which I was given the permission to fork under the LGPL licence by the log4c's authors. The log4c project itself was loosely based on the Apache project's Log4J, which also inspired Log4CC, Log4py and so on. Our work differs somehow from these projects anyway, because the C programming language is not object oriented.

2. Programmer interface

2.1 Constructing the category hierarchy

Every category is declared by providing a name and an optional parent. If no parent is explicitly named, the root category, LOG_ROOT_CAT is the category's parent.

A category is created by a macro call at the top level of a file. A category can be created with any one of the following macros:

The parent cat can be defined in the same file or in another file (in which case you want to use the XBT_LOG_EXTERNAL_CATEGORY macro to make it visible in the current file), but each category may have only one definition. Likewise, you can use a category defined in another file as default one using XBT_LOG_EXTERNAL_DEFAULT_CATEGORY

Typically, there will be a Category for each module and sub-module, so you can independently control logging for each module.

For a list of all existing categories, please refer to the Existing log categories section. This file is generated automatically from the SimGrid source code, so it should be complete and accurate.

2.2 Declaring message priority

A category may be assigned a threshold priority. The set of priorities are defined by the e_xbt_log_priority_t enum. All logging request under this priority will be discarded.

If a given category is not assigned a threshold priority, then it inherits one from its closest ancestor with an assigned threshold. To ensure that all categories can eventually inherit a threshold, the root category always has an assigned threshold priority.

Logging requests are made by invoking a logging macro on a category. All of the macros have a printf-style format string followed by arguments. If you compile with the -Wall option, gcc will warn you for unmatched arguments, ie when you pass a pointer to a string where an integer was specified by the format. This is usually a good idea.

Here is an example of the most basic type of macro. This is a logging request with priority warning.

XBT_CLOG(MyCat, xbt_log_priority_warning, "Values are: %d and '%s'", 5, "oops");

A logging request is said to be enabled if its priority is higher than or equal to the threshold priority of its category. Otherwise, the request is said to be disabled. A category without an assigned priority will inherit one from the hierarchy.

It is possible to use any non-negative integer as a priority. If, as in the example, one of the standard priorities is used, then there is a convenience macro that is typically used instead. For example, the above example is equivalent to the shorter:

XBT_CWARN(MyCat, "Values are: %d and '%s'", 5, "oops");

2.3 Checking if a particular category/priority is enabled

It is sometimes useful to check whether a particular category is enabled at a particular priority. One example is when you want to do some extra computation to prepare a nice debugging message. There is no use of doing so if the message won't be used afterward because debugging is turned off.

Doing so is extremely easy, thanks to the XBT_LOG_ISENABLED(category, priority).

2.4 Using a default category (the easy interface)

If XBT_LOG_NEW_DEFAULT_SUBCATEGORY(MyCat, Parent) or XBT_LOG_NEW_DEFAULT_CATEGORY(MyCat) is used to create the category, then the even shorter form can be used:

XBT_WARN("Values are: %s and '%d'", 5, "oops");

Only one default category can be created per file, though multiple non-defaults can be created and used.

2.5 Putting all together: the easy interface

First of all, each module should register its own category into the categories tree using XBT_LOG_NEW_DEFAULT_SUBCATEGORY.

Then, logging should be done with the XBT_DEBUG, XBT_VERB, XBT_INFO, XBT_WARN, XBT_ERROR and XBT_CRITICAL macros.

Under GCC, these macro check there arguments the same way than printf does. So, if you compile with -Wall, the following code will issue a warning: XBT_DEBUG("Found %s (id %d)", some_string, a_double)

If you want to specify the category to log onto (for example because you have more than one category per file, add a C before the name of the log producing macro (ie, use XBT_CDEBUG, XBT_CVERB, XBT_CINFO, XBT_CWARN, XBT_CERROR and XBT_CCRITICAL and friends), and pass the category name as first argument.

The TRACE priority is not used the same way than the other. You should use the XBT_IN, XBT_OUT and XBT_HERE macros instead.

2.6 Example of use

Here is a more complete example:

#include "xbt/log.h"

/ * create a category and a default subcategory * /
XBT_LOG_NEW_CATEGORY(VSS);
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(SA, VSS);

int main() {
       / * Now set the parent's priority.  (the string would typically be a runtime option) * /
       xbt_log_control_set("SA.thresh:3");

       / * This request is enabled, because WARNING >= INFO. * /
       XBT_CWARN(VSS, "Low fuel level.");

       / * This request is disabled, because DEBUG < INFO. * /
       XBT_CDEBUG(VSS, "Starting search for nearest gas station.");

       / * The default category SA inherits its priority from VSS. Thus,
          the following request is enabled because INFO >= INFO.  * /
       XBT_INFO("Located nearest gas station.");

       / * This request is disabled, because DEBUG < INFO. * /
       XBT_DEBUG("Exiting gas station search");
}

3. User interface

3.1 Configuration

Although rarely done, it is possible to configure the logs during program initialization by invoking the xbt_log_control_set() method manually. A more conventional way is to use the –log command line argument. xbt_init() (called by MSG_init() and friends) checks and deals properly with such arguments.

3.1.1 Threshold configuration

The most common setting is to control which logging event will get displayed by setting a threshold to each category through the threshold keyword.

For example,

--log=root.threshold:debug

will make SimGrid extremely verbose while

--log=root.thres:critical

should shut it almost completely off.

Note that the threshold keyword can be abbreviated here. For example, all the following notations have the same result.

--log=root.threshold:debug
--log=root.threshol:debug
--log=root.thresho:debug
--log=root.thresh:debug
--log=root.thres:debug
--log=root.thre:debug
--log=root.thr:debug
--log=root.th:debug
--log=root.t:debug
--log=root.:debug     <--- That's obviously really ugly, but it actually works.

The full list of recognized thresholds is the following:

  • trace: enter and return of some functions
  • debug: crufty output
  • verbose: verbose output for the user wanting more
  • info: output about the regular functionning
  • warning: minor issue encountered
  • error: issue encountered
  • critical: major issue encountered

3.1.2 Passing several settings

You can provide several of those arguments to change the setting of several categories, they will be applied from left to right. So,

--log="root.thres:debug root.thres:critical"

should disable almost any logging.

Note that the quotes on above line are mandatory because there is a space in the argument, so we are protecting ourselves from the shell, not from SimGrid. We could also reach the same effect with this:

--log=root.thres:debug --log=root.thres:critical

3.1.3 Format configuration

As with SimGrid 3.3, it is possible to control the format of log messages. This is done through the fmt keyword. For example,

--log=root.fmt:%m

reduces the output to the user-message only, removing any decoration such as the date, or the process ID, everything.

Here are the existing format directives:

  • %%: the % char
  • %n: platform-dependent line separator (LOG4J compatible)
  • %e: plain old space (SimGrid extension)
  • %m: user-provided message
  • %c: Category name (LOG4J compatible)
  • %p: Priority name (LOG4J compatible)
  • %h: Hostname (SimGrid extension)
  • %P: Process name (SimGrid extension – note that with SMPI this is the integer value of the process rank)
  • %t: Thread "name" (LOG4J compatible – actually the address of the thread in memory)
  • %i: Process PID (SimGrid extension – this is a 'i' as in 'i'dea)
  • %F: file name where the log event was raised (LOG4J compatible)
  • %l: location where the log event was raised (LOG4J compatible, like '%F:%L' – this is a l as in 'l'etter)
  • %L: line number where the log event was raised (LOG4J compatible)
  • %M: function name (LOG4J compatible – called method name here of course). Defined only when using gcc because there is no FUNCTION elsewhere.
  • %b: full backtrace (Called %throwable in LOG4J). Defined only under windows or when using the GNU libc because backtrace() is not defined elsewhere, and we only have a fallback for windows boxes, not mac ones for example.
  • %B: short backtrace (only the first line of the %b). Called %throwable{short} in LOG4J; defined where %b is.
  • %d: date (UNIX-like epoch)
  • %r: application age (time elapsed since the beginning of the application)

If you want to mimic the simple layout with the format one, you would use this format: '[%h:%i:(%i) %r] %l: [%c/%p] %m%n'. This is not completely correct because the simple layout do not display the message location for messages at priority INFO (thus, the fmt is '[%h:%i:(%i) %r] [%c/%p] %m%n' in this case). Moreover, if there is no process name (ie, messages coming from the library itself, or test programs doing strange things) do not display the process identity (thus, fmt is '[%r] %l: [%c/%p] %m%n' in that case, and '[%r] [%c/%p] %m%n' if they are at priority INFO).

For now, there is only two format modifiers: the precision and the width fields. You can for example specify %.4r to get the application age with 4 numbers after the radix, or %15p to get the process name on 15 columns. Finally, you can specify %10.6r to get the time on at most 10 columns, with 6 numbers after the radix.

Note that when specifying the width, it is filled with spaces. That is to say that for example %5r in your format is converted to "% 5f" for printf (note the extra space); there is no way to fill the empty columns with 0 (ie, pass "%05f" to printf). Another limitation is that you cannot set specific layouts to the several priorities.

3.1.4 Category appender

As with SimGrid 3.3, it is possible to control the appender of log messages. This is done through the app keyword. For example,

--log=root.app:file:mylogfile

redirects the output to the file mylogfile.

Any appender setup this way have its own layout format (simple one by default), so you may have to change it too afterward. Moreover, the additivity of the log category is also set to false to prevent log event displayed by this appender to "leak" to any other appender higher in the hierarchy. If it is not what you wanted, you can naturally change it manually.

3.1.5 Category additivity

The add keyword allows to specify the additivity of a category (see 4.2 Appenders). '0', '1', 'no', 'yes', 'on' and 'off' are all valid values, with 'yes' as default.

The following example resets the additivity of the xbt category to true (which is its default value).

--log=xbt.add:yes

3.2 Misc and Caveats

  • Do not use any of the macros that start with '_'.
  • Log4J has a 'rolling file appender' which you can select with a run-time option and specify the max file size. This would be a nice default for non-kernel applications.
  • Careful, category names are global variables.

4. Internal considerations

This module is a mess of macro black magic, and when it goes wrong, SimGrid studently loose its ability to explain its problems. When messing around this module, I often find useful to define XBT_LOG_MAYDAY (which turns it back to good old printf) for the time of finding what's going wrong. But things are quite verbose when everything is enabled...

4.1 Performance

Except for the first invocation of a given category, a disabled logging request requires an a single comparison of a static variable to a constant.

There is also compile time constant, XBT_LOG_STATIC_THRESHOLD, which causes all logging requests with a lower priority to be optimized to 0 cost by the compiler. By setting it to xbt_log_priority_infinite, all logging requests are statically disabled at compile time and cost nothing. Released executables might be compiled with (note that it will prevent users to debug their problems)

-DXBT_LOG_STATIC_THRESHOLD=xbt_log_priority_infinite

Compiling with the

-DNLOG

option disables all logging requests at compilation time while the

-DNDEBUG

disables the requests of priority below INFO.

4.2 Appenders

Each category has an optional appender. An appender is a pointer to a structure which starts with a pointer to a do_append() function. do_append() prints a message to a log.

When a category is passed a message by one of the logging macros, the category performs the following actions:

  • if the category has an appender, the message is passed to the appender's do_append() function,
  • if additivity is true for the category, the message is passed to the category's parent. Additivity is true by default, and can be controlled by xbt_log_additivity_set() or something like –log=root.add:1 (see 3.1.5 Category additivity). Also, when you add an appender to a category, its additivity is automatically turned to off. Turn it back on afterward if it is not what you wanted.

By default, only the root category have an appender, and any other category has its additivity set to true. This causes all messages to be logged by the root category's appender.

The default appender function currently prints to stderr, and the only other existing one writes to the specified file. More would be needed, like the one able to send the logs to a remote dedicated server. This is on our TODO list for quite a while now, but your help would be welcome here, too.

Macro Definition Documentation

#define XBT_LOG_STATIC_THRESHOLD   xbt_log_priority_none

All logging requests with priority < XBT_LOG_STATIC_THRESHOLD are disabled at compile time, i.e., compiled out.

#define XBT_LOG_NEW_SUBCATEGORY (   catName,
  parent,
  desc 
)
Parameters
catNamename of new category
parentfather of the new category in the tree
descstring describing the purpose of this category

Defines a new subcategory of the parent.

#define XBT_LOG_NEW_CATEGORY (   catName,
  desc 
)
Parameters
catNamename of new category
descstring describing the purpose of this category

Creates a new subcategory of the root category.

#define XBT_LOG_DEFAULT_CATEGORY (   cname)
Parameters
cnamename of the cat

Indicates which category is the default one.

#define XBT_LOG_NEW_DEFAULT_CATEGORY (   cname,
  desc 
)
Parameters
cnamename of the cat
descstring describing the purpose of this category

Creates a new subcategory of the root category and makes it the default (used by macros that don't explicitly specify a category).

#define XBT_LOG_NEW_DEFAULT_SUBCATEGORY (   cname,
  parent,
  desc 
)
Parameters
cnamename of the cat
parentname of the parent
descstring describing the purpose of this category

Creates a new subcategory of the parent category and makes it the default (used by macros that don't explicitly specify a category).

#define XBT_LOG_EXTERNAL_CATEGORY (   cname)
Parameters
cnamename of the cat

Indicates that a category you'll use in this file (to get subcategories of it, for example) really lives in another file.

#define XBT_LOG_EXTERNAL_DEFAULT_CATEGORY (   cname)
Parameters
cnamename of the cat

Indicates that the default category of this file was declared in another file.

#define XBT_LOG_ISENABLED (   catName,
  priority 
)
Parameters
catNamename of the category
priorityminimal priority to be enabled to return true (must be e_xbt_log_priority_t)

Returns true if the given priority is enabled for the category. If you have expensive expressions that are computed outside of the log command and used only within it, you should make its evaluation conditional using this macro.

#define XBT_CDEBUG (   c,
  ... 
)

Log an event at the DEBUG priority on the specified category with these args.

Parameters
cthe category on which to log
...the format string and its arguments
#define XBT_DEBUG (   ...)

Log an event at the DEBUG priority on the default category with these args.

Parameters
...the format string and its arguments

Enumeration Type Documentation

Log prioritiesThe different existing priorities.

Enumerator:
xbt_log_priority_trace 

enter and return of some functions

xbt_log_priority_debug 

crufty output

xbt_log_priority_verbose 

verbose output for the user wanting more

xbt_log_priority_info 

output about the regular functionning

xbt_log_priority_warning 

minor issue encountered

xbt_log_priority_error 

issue encountered

xbt_log_priority_critical 

major issue encountered

xbt_log_priority_infinite 

value for XBT_LOG_STATIC_THRESHOLD to not log

Function Documentation

void xbt_log_control_set ( const char *  control_string)
Parameters
control_stringWhat to parse

Typically passed a command-line argument. The string has the syntax:

 ( [category] "." [keyword] ":" value (" ")... )...

where [category] is one the category names (see Existing log categories for a complete list of the ones defined in the SimGrid library) and keyword is one of the following:

  • thres: category's threshold priority. Possible values: TRACE,DEBUG,VERBOSE,INFO,WARNING,ERROR,CRITICAL
  • add or additivity: whether the logging actions must be passed to the parent category. Possible values: 0, 1, no, yes, on, off. Default value: yes.
  • fmt: the format to use. See 3.1.3 Format configuration for more information.
  • app or appender: the appender to use. See 3.1.4 Category appender for more information.
SimGrid-3.10/doc/html/sc3-description.png000664 007661 000620 00000124621 12242224150 020457 0ustar00gierschand000000 000000 PNG  IHDR;/$SgAMA asRGB cHRMz&u0`:pQ<bKGD̿ pHYsHHFk>IDATx}$U}.`wg]UXZEB'5כ[+Dg{#\oTLz#C7Yu/tCj~1F;F"Wa4 DUP]e]~SU3۟~vNz=߇WcE iZuP,[a @iвʞX˹ #/(:hRJ{ؽ A Ns°s1rC7+61A1E@eܻ*mT ԭܣim:-{fUtt*:&Pm՝}Ju^:&cti*-t jVƟ5򡂅°!? YEŷK,bQaEXF@2 XD2 (YX`%,ha8,b^~o^fQ~d(8-, ?O^thPAXA2KYXP3`*Ed2%yf J,[XАlX,,P=}kYSǨ,\#}6|56@Eݦ)1kb(m@TL V,*DS t`RQ)*P&mJJQ,=z]% 29d/ĹU(lA910P1ŧK2b^*Ciy"ܼKrMIۿ[t<ߜ{ 9²'M(0M˩!aaُ~`PS/s#exX$DEQ?ڢ"SlG+=o{)2OEG cTW%VN?h7\j1lg tX蔼ǻZBGB`޽ >?闑Mgr %[-cQ(]:0 Y Ux6T(t6[Ebmc+<@j)H͖B"(s,Rh1NKbǒl)lF[Vt00&ƏU:NFqÏi)Χ)6Ԣ 贁ͮݨcRHj!jΙD-t'ܐJAQ-mY5>- JSFi R )"0єb@@"mMq”b$slq+ЕH{wW`mZ2S RS2uiIÍT +.i?EbT =;*kK$ePk֎JY97ҾE,YYzZ%`^| $aDaj4ESt=c'lyI.:sY)Zќ刑Lf]Wa~Fn3߹ ,] ^tVA^`KwF߄3,Ө8d%E]\DI0Z,Plw~)z\C^#$:E)"0ZxI$D#S x]oaGĻYf(t,BXWg8 pe9'.9+h|/hΗ=^4 !] $)'Qt3(J!]yJ5'*NJk 0dϜ!> Z9 *w9^|=X%J:V"sKb]e, ,@Eʦ%J,s ^.,AqB9"F XY+mcIG:oH4hPt)=ߡsαY~J+uogY恫cgŀt;Wiϖotg\qba~jH5 e\sW[^϶}zX>,ۋ14 srb2s~96wIx9;yV'K܎\3y.xڱ ˲nu2-Ni_Ӟ*U|9ӯ"}!8.\q}*,E :'$"{'FؐX&/ˡk,:,7NcU2ڎ=̡9*QI+bs6P'pk1 :PibQdv.ҪqUV]IXГN.ՇfЉ}mдf2U_bΩlV9AۉNTZ2䩄ihc]~=OPXWTI Pa7 VCft8 e"M@)I13A)*a)`gڷ@)({N9@h[)RJI/ZkRSeo2\o >-b'bN oI&IF3+՗BU#,ED.N9 WŲ֐V]gbvZ۔4\g:w" ;Kr#!u+vnh:XhN޷HpL1,:U ˛om K,\3;|pBzZ3PtOy𖝨͟@P{y#$zvx` JX6%˂۱.Y"^Ws9jt $y ۴A@φq؈<2_~FIʞ 5)M1(zY׀'!W]UhӋrE?ϠadMCcic(*u /VW 'w:XhPvrZV2- Ƞ%IY˴LFE;Q`z2 i9NLnW 1cS49,k6~=ǒGhu"ܥYs (6?bw'=UeR/ ,c9æI\)f]q5*l{3퉶' kfnϢY!*sTl.!,pPDjl!imfl rCRPdY8D2UD$*Dnm9lԭmJWJMHM_tNk]S U/:ftդM"5cdWe[թY-j.5*=@dWV*PT(g]9"f9ODWs޾Xa5 eQYOV:$-4sru4eӾUɢP,I/54aբʜ4PW1\}ZW-~ZwFAF Uh!3z Z!_JiGѭ8&4-SiRtXME53TQdVia߫YT iK+S&Lf!UݪRQɁnb#5|Ey0jC{3=N_%\O)uTB:%bE9u\AZRj B@(mJTTle0hRRh[a݋tg% PDSlj շ\t`O80r.%w9IB q7Yڸ۠>o$ LoE 4D|%NC߯QGŎP( )Xhe]r=+,[Ep6TQx0ٞOx/k& qCVwͪ);)2J5Aae'[XrUlZNxCZTEh'(*:GUU^agfe1XEeZmTh u,+K*be|1]{,* V󊥈 ݨҖVtڸ-uA:,EYomsӃN&qPJv*JcTEiFM4 `mԙSF3nPtiVvՂU#h#N@)H j6Lʱ"W ) 4eTYkMQV݉$e#OŽ7ð{2?rxtp߽[}՝v{:7?OqILsg8'͵%IGCz7/˽EW(G9{#~0STޔ0aǓٓݙ?ɹ+g0 O.I}? m*>{x쓓re@"V.a>_Iْ񞾋cyxM+qHHGXX V\:Ϗ\ep;K-X ]h-#7 xbR|JcC[. 0t6r77iEd6kcokg4~o l^>F,yWȖz⊈AJuqτ{:2:Zn߇<c,. rKே\of=;ߒ!FZ |ןEMҦ yĬyInphXX/nBpAߢ'FRE/SH10:[zhSawb!˟=1^-jƢl_\=u4*0{=VxGj澝c`~ Lb'T%J'͊{#x.;K_Ѥ0PկxƧ?2AwwlvRIEc2Δ\'vlwp.a_᛹_[v IoZ;)_sǁ }lu3o0SʐEvv|Sx{1GdWE!]9znZkssqhs$}eڗLj粉v9 BM|('n!;w3zm<${Q`RX ޙ_aHVv/1{g90g2૒ZҐ~L9asyff۠'.R9L)ps#<֟1Lhx*vrT bWn3 nJT䪢'%ML1/3* 8cs}Lp#Y2d#.}:B#Vi@h[[7GOsKr|n{:/>H%XpO|'w=- Q 9p" 8_C&^xLsmLrGYR>u*lg>shƃ>[>fS FؙY%L;"{}7PE=שa3[rC^}n^KQ p<Cmgs 8L9egz mqCrϿeX T+SuBћz_. 3U=wc:bq/2)2 Y>A⪥@\@J"&5Z N[QߛhǷp+*@y3{7zi~ox8ԩsb,ؐ/*9"QL"?!֣e~vAEIf7g̰XK{c5el5sƟ8יܟPӽvGrV2\v&1 xo"!U$SFtwBQHk4^E#GXϻV6^ssm;g؋ -L2Yb_X]17 'Z5dHlVIZ̠0fF7OS^mnj:ZQ3Ke P _t W^k_d>cVs #Rȷgn|odsS2ej,l&XF~4olw{ g\-b_ʻ{{آ󢳬(j߃[¢ْV4*^]ӵ G*!j2N&|g+|j| slnRށWcR>`?"Dj4JT:%jTox/:z%Hj:Ljf=oLV n3eC?o݉#doC_8T*4)gHy4$pZE/%&_ SgSαcx *2ia7 @VrX̶'WE3RoNF,ݷ{pgi i5)y\a0[̎ ]L(_}C~*z^Bߵ+Ry5/t_7:;*gKZ3$%b WDFx S> m:y\-ǥͫ3m59|GHIs?4AHOv*s wp#%yÎfsk~C/Av"&/ixыyveϵj*8g"b$|l-j{.%-X`|{\l$."v!ͤ!T)| nFx+U&/7ڽ3ܞSy4Gs$sЙ0-X0+dcK4E)jP0L]QYP?:>2x@kĺ@ s;9۳X֧F/8}7 G;:e%}j7Isݶ`lc IBQ`<qcJsɾF!s[I*;@~ //$NJ]eF?3\byZDs<7[d,9KX;:sTR]כ~D捼j5Q)O=̱w aWEl[&=AU:k_[P ꃗhSMyq)1/0ՂϥvG"ƗMc΋%s, < cf4͏c 2CpШPgJ8 P baIT諚~39|' dW9% %Y /ãʉc -FdD5)(YuYžcfmZY Sx" aL!/~&xhKmO%6s!'gq?q~x=u V n#e-%/bkT[8:854,?,I:xCM-g5 ^n|;ܟz$ )|:2{-g"86;Y/ Gz^ef ܐ`R"v'1zlv:Di%SK%?X}B1xO96X|NS0QzeMVWfאߍiz>f.qLj1Uϝӡaqlyd&dh]HO0iR,?MЄ*p_ꊬ9>{5%.r;-]γ$7;jz0 K%b jsU.ww*^Y4"a^ǧC`?.R~//({<_bRpحDƄiJ:i C6"Bql5GV>^''wa"S^mD:7I3}n7Y">5*s[r?K5@oa8䠐W!Aqle'/K9vQ'n)wf5=)e!kP8wDĺpkz:};"W*9djZEwՖc2 j0zÑm ָ}{Ќl\]7:Ӝ G*ZN᠃G"ƿ bS]ߚ>?сM\3'YR\#;ߺYx3OټGbL]6{pD:s)-⇜ "Py(3BKu&KԷOr|H(7$ڋr[ )73:+F1Bd81)ݰ9iu8_疀߂ ="*^PC9aR>x*žqˇ5YȲ1vԸ㩜cg>)%s7bOӷξX 4lF%)nQeT MjKɗ ~9IBZ2 "Fi}JES( $:nss̋9Sl,nhzhሣTfv$||`NxW|"?)/W:on8Jl:3byfbWm\dVĠ4Y้P9ި}NjS eQ@As,鋓0MF6vpQ¹Lty u$iAؓ=q$s,VRtpo] ҇[ȕf88 K 1~pgv\>goЗ0e7p.K)4&u[弟4aPl ԊM2) %G.:ʔ8s/s$^zckz'<֣p |).m 7w~'RjMh(n)k!56Cׂ6m+<"w/`7&l ḷ:3`ogA:=dt 9 |WkxYfqnR+oRDLя'_ꃗi.I"7qaJi =qoEtE"BM^>^4^۸q$mqCԼ*SO6sVR۔l㉒L6pHþeU0%gp0PJ9` t^&Йѩqeǵw.> YTj }uʔly7e'c )ST$I&ƺL.>&iRa&BxD H@ P2ivRΣ}-0+UD7~B؍ATV:n%.[9 ߊ?3&IH ){ݦ@<8qplsrGy3x/K[ǣd*eJ6u£IeԼ&UQ%9Ó&t:C9ЉR<88%,/׍4Y3LDKM̀Ԇ+QQiJ+8[a Tif  c/;6;.Q05NASmá(*Ůup4.1o[(ȸe@K 1K IpM:MWlRϹs3/{sF {BG;E5r '~'ҺD  ŸJjdt^6zEB6SWqg7m&X`+37&O Faz殃LʿJ#wU -7MEY^/q\`Ag%ٲͩ[һz΀*%9O~DZC,[Anc*j#w+.uv7rUs^3x&pRާvA$:K<\r'GA~"7 CՀ)3µ{<(,mu*7ܗJD^b{ (T9a5fb[nI4x8NW;יlE*ZiKJ!Ҋx,o y7Jz{[q1+(96?X϶8Õ@|ML)=2%y/gEqD@]2k$}үSݢ8{^64=ѵ*m7^ h"=3{7^ⰼ&8I~±92KiPpۨRa[!ҭa n&"vXu>qZ~(:o/ek;7>&`0>ܔ]$)π֍OMKPa˓4 ^)'W,K_MZXtUL44-D&4ͥ^:@T9Ė<AdbA:`:=Hka})5Mꉢ1XtK7Ӝ~`7;\T{2Q^QU `H>=4yx;j0|.QtnTю)_a )mT0dco*q:KY{?\'nI'/{&~(I^gJCmc\1 hA;S|] +|l0ƺ VBh|byEn}I=4 dWu\N%bc@ݒzAi?3\ˋyȥ pXBaAN/ Ulm%:[(l/mz:峴j*$ewݒly4 h`j,2XE/0:S #˸2>%UVТƬ+M`j+("QvT_ Hb?=:^!Ljb}9pbj1da)nF50̓6ֱOd2fqF䗵(u49@gΔ?Sd֦X^4bZr=XVT*f|swKT%`3l򞔤i* HQjis[;sj^P}6X0$וHbVr$90}ɟ+L4-qPmt 2J4)R@k'zjڵ8M)"~ 4dǧn61 h|am}-$G= I6&C 77@$y"U1z~8 a@` hD_g&ywݦK5L0!tʢOW 1(S%zxeq(n! M|NjY-aVXBCpdvn'݇%R&Unnj] wr#hvq& Hx2vZKx>e ͟08'sA&A9Pطtc\F `k;*F`q/inip5ڨَwe"5w`mxH,$Q0d W\7n)qoG=\ ReaH Og.=}nx Wp:_q51*eɷok2iE 47ԧSEbo$ukIli:'bHܽ=)CyA7Cә6˼:kMFEa@Rnw6{?YFW*&Q6 =me\Ž gqSGp9ޱzOXC<"ypl5]q]s@\Tv;؜- sd=/tiN Guka9 3M,p'ɇ(.]`Ԣ)SFDQx.~FU\H NNb|Ya%u >N+Rгb?"M샴po4[1p=>7 MozvqjfiO$o3Dv <mjjQOr+t\E `#Q۶蛀4ul!%T.啉JNU1g $aPgcPI]3|H|dU֟cPE57AC/~Clt9ackvzK8kj5SܓdH,Nb5 H !P)p'3|80(䜞O$.SH,;,Ihu7YN#? G5)A=SROd9QQqLjnJ?QkX%FlJy\$(<%)ڞw3:~/sz)ïrl2lTQ욻w3x鰻=a©bIb I*%*9Erf ptW +` &xn&0@wR\~a3ӆaa3n1-y`†g9po&JT3?\`;䂣ѴN͂An4ȭu9d*/lmڔ d=vxNoڿa)KH#AdwDV2=ynz&6zzRG3[)pN狺'rL{ zo84Xˤ^Q% iO'>h:-;Ұ"\^ܙ0^`I[1PTTk֦y0i9tAY WΚa|mN:=JyzLS4}u\v#_j: /b^t%hӒsj‰> D $nrFOYْ@A$ <Pk&]#Ň 24ˉ\[2'[>rS]n67 mӖT*&F*o}CJEbZhֵFGi: l XI- AS7}#= 89RҢE 5 m61^~+'[Šք}hSi9F1@ ^h {\-68*|0 #fQ9ʘ.ʄeQG/B.bqd U-x{b7%̌8Z}O[}l0<$]d鱷X( #;6lqDfwr?T|/}5(-G3Uinf͉iDzuɱbM[G*?R0ִPyE1< \*b78/sO}SquIE?J %>4Ė܄|1?Q pӵ1]WMYl'C$@x=E59?hӹMQQ q1Gun.jǴ3M}Z\Xɳ*RuoQ.H.3P nٖkJ9ZٰO91445c1G2% FS4 ^D-@.VA ¯RON=\+e#;i&72v8b=bcx^3w`Rn@˚{8k!'OS"oKi)C!u<[3D+{`ꖥa0K %&?b9%E7]Cå<0ҝǙ}&Z&&e{Ivp<_e/ke39HP$0(+x&:G<LFJ_͐HO2eTt޹;~Vdʣ>NC']m?K<ʉl௢oY#zE?tԮzց0{{M/d$Rrp/AÜgaPN$f&4e#nD>B2T<,&pE6v3CX*=C2Q; ,6/\ iC"|W͉6}"l:Ư}?9U$*f;21%=]7^^D߯W' ;8zǓƳm+L)MRX[1A*=6e %zx> XRLAǷGF/GfQg7#SqA1zf&Ly#_c9#\o3$Ôfcd(M-NU?Oa‰n;uͻ8kW癚 :,K2~/) ?BMW'8>ﻻY>Oo]=>RDgB񲫤p0Iն(w7F:'*;Y޲;ϺQ R{4MA^>_rMYDeMW&xpgL|kQsatI3|!P$tf# ^CK./B n^-bSN~I;5mdMDS[p gCoKsyzO2iRk~ <8|u)p)e7n9,bamSܖv/N~]XߣEon99ӛ,çAؿ4i`iqܘ<)ްh/ZJVò,͚֯YK_wbMX %ku[v[[ FϯY[%k)ƌnXŐVT>o`"U~,[E˲,kCז8+5am>mZLIO颪 c\dWp#NawqxvAff`#, 6&,+?)[p}WnκL)"po=xBG?nZRH83k}CH8cB> Ef,U9GC9ta.gΛro[.E!$g/j K/";R?Wؒ#S7D4lAcFD-pkɉJ;2̠WOU1=1(:-j,&^ƒy2 j/?9Si&$XJ yyE0s֯|!6DutTyDfBʤL39 2¶x"YN ͎Ht"uNd[10W IDێ* ѥ*15wCŏ4Y,SL0opC^:paeDr`j`4(SPYO 8m[nfP)w]AdG~pD3xUXݓp~SqlQ,6cqE@?u-e7slOyKgscR: !lL}6Βrr|2iy̻=lKVC@"?3Q-:jt]9[юFm=qn "ǂLQmִ9Ds%gCzW~A«-'R cbzH$/`>]~e8W.+{?F)19 &xOA"(l%s74n͛*%QCy"*Z Z7 -t@;30As ]K;-q_.v˿(+Ly!Gٵ."߻ΗhD%QӍx$5j]]+N:hFj=KDX!`}59 y},Gul>y 9yΞIj<@ZYU:1®dxЊcbOS[ M_ɴcq.&Y`x(ӤDe ZAřvthRM@`& t: CzsvE0wfTD!7?xrڱu)b. #Қ4JMlݴMT9)A[Gj滹A!hx{3" m>\{=`(Sv$ୀC_n<"I-Tr}hKDIAVVJ5 &q FSZWݢ%3~wTZcz@Jtlispӕj8Hztr {.u3 V#\Mjs-t_6/C[5vu 6KZ)aEIΉe6xgE|lf~;s!`{!{Y-pI(BCgI7t&-ʷI>vd%;ԋ*f xB8ȳI9Ը6ECzLM;!QlqXm۝^!=JnUT6F[1AfXy&dž@k,t \<Ӯ@z1nP9;G)rq{A^szJP 2gw7t g K'yvcя 7Bl2x {di-*fQ#ޚNvGoE0L:빻ݷfox1Avyv4Nxrw0-:6e0 GOdQƵ .tMf:YzИa Nq^lE%Cvp<̺3Z }}#7ɐ4/KltO3x5T! ^s2%}_^uyFJM\\~Q> mio1T1+&-9Oz%4{r( A1tF޲ ' ٛKQuͷx[9yVM0 *˥ۉd4(r hCJYk8^,Š3᢫b+yt^[/mI |+5y=xG93䔉=lVE̳ep# z KZӝ5vvc Sd7d( l^}QnH`jF[TDxN|6Ԫҍӱ,w耍6`v:V3. cɽeX YPŔaiwא;5ՙ۔3[ 5(}]N4Aa x[*6?H@)F0x#T'IrMռ}:eTxy2_#Y γJa <ҵ*QFb~_*ԩȐZCSDg`9̡G9jXʙ"ta&rd &:F2ej]*8L#J Y J%nDUE0뷒LW OUbc49a5͂Ol%;C$,'ny{}h@:s XǶTR1\Av#S؎<$ne*1R66?Œm]=`&Vz&k{ 74JeBPؚhĥL^QAH ErF3bgAM\Iw)TsN%*- ֤EJv }k+_-pW+RHD4r2 S *})sT`fddb9`*REo<,OsP. a~ o*5=>FOE<I!  O( 9:=p;4J`1RM'-mp l9S]y!#o_w'yxuSjRu(z`ΌhGģmkp>/eb*4zTi Wړzލ o0gȳ)s/++C[7J\eK S_Eld;=bL.:uZiڢ{IU/u!6sU<N){*Mf 5M!\VL?lEZ|6xd,oEnY:h=oHqlg5)`,%=C[4kkqX.}nD>̻8( uZ@^:G1RA'G y/y{伽 cyVtP4gh`COVG0 kCP vfX0xd"LvCwcM.qݒ^gUITZDH6:H)gzHM1s7:˺/Dn# A]E%.Q5IZaTwwYWq悽,$CJ?B3OPt/qn40uf68[ߌ.ӨV ref]y._aC~tyf8zSP {CF9xL2 )N5Ǖ) ƒ<-tCM^oqEu5jM%JvmM=עenx[l=3xnN7k= &e6:};aCg`˚%(P3Tc7Ws f@n\mUiٔ !e~wyczh"m6sqqk c[,"c Sg.Hd?Gm=%-RY*_3F46wq[\ɱNh/ѤŏVg));wEɵT)X޲Co5ÑzqU"]~vadXUuJ(+yw&bTyvp-ʔyV؟mLOofؘS*g%J5ʩi59U&4y2չ+PAN*zfND1wk\Z`@V PG3p]L 5uϵ`K\7\Lbs&0g[fzu K:qT +YKSJo +ibMXj%eZֲeYu9۬ 9\ϡE7KZJV)cykκu5 d-zkzKc+*'',uI[yɗJHX3e-[EkѲ[ =\ӲNv ChmùB^wWXrPؘ-yx'LҪw0mdEd[ =eחK֥ $sV)4sVÚ,˲;lAᏭa')=<G{ 8y )3o&s`zo+x,# ~gd~u&g&T.Bb(f,DbURTVy)-n㣱s=gOFy,L/TT?.x/:9.!\$M~3=!x_ qSȖ6zɻDF+FKMx735]:s L<, .bͧ8U?bB|h?O{ç SJ /ffҏ 񴈟rIRw?IoGydzyJ\f;] ~ ;.}< Qpf|>M1B2Ӣ@&xfbh8dXWy%b< li?z[5f8 Nɥu8e2tnbw~g ;0^ۮ>:(`p(|TPuݓf:\BAnLsc'ΐB>X}Nf% }\+/8OE!y1:vS$u65NGڇpM|>=+\,oޓC%olQYitmܚDNSc"g#]bpH5q]u" n-.:[M52uE]!~ XcWXUYѓ{)vm;fB5,_NYNZ\ƓL97Mhƒ){28[EK *p$_C 4;ǒ7<ȴg<`SLWEN}.ܥ^;6 ,zjBA.a;}q%mVT'_ ױkk)71ޞX}\Cs>٘bUGЛLҺ!\*.GK±䔒'`*mtH_k`Q]}G+K¦^tܜ,&Lfb^O1&1!qh!,mwru\ęo UUG"`_m7'ԣ T`2l [[sA( 󬉚h6 LV?t6Dߚ!liө8'_`cTx^_Xr\I!,TK>у!L _r#<'ͻRD5)%No~? lJgaf _ƨɿ0:vQ nE:uٹ_A-",b ǡp $,1|9+] {DB !ir|LN3ŋGE sc/fdj 7Uy ֜ߐCYN K{ 7`h_C^@:?E(扮lWV9>! ☎ă`gc&6_]׷8q@N==1nC4YIcF6 .aiIٖk(Yūż/4'c,. k.eИnOzl%&AO"^Pa$cn p'ͤ)qut\?ƞDoY~Ji3>Gߘ"+t`:!&<MLp3&=:%B oC!<${)l qhT ŻrQ9&-ޝaWBCZrֶm12zX3cAJ]M:~ ݶ̽acai:{SInJ"elsţ` V\Ӡ  xF'>x3zmWy,n܋yR(ruk\{WVW ea|=予Qx=3^cMs S=]"@b,)ѻj~~Pj' YX`HB2N.g7sO6͒IJ&!]>R&vtiq+laSM9^}}:c2 B52EuDVQ 5Zf 2Kxl\36 (Qqm12uc#NRF!oy {3 M(2;".VML$rf8m‘U*ߜ0ա1T\:C8IlB:+ ڦ!agK{AXc,dW**-ts4a&|pQ.RުϤӾ5K5J"C_FÓ@e㼒 g\ӹi:=CYИtUU&f*tA!i|A&u_^_՜{Dpbl ^+}""@g*F0|D) C;<zjʍG@Kln&;Bkh(":H~~ʼپTnK.߷!-؁]]!:2GP@;AKu7[GQrP0{N#л2여 ڤ2m.5Q=<ȟX{W/dKXEyi,~H!*lۋ}A8;W>U0$vqp[TKU .nrA"*p䏙n^"mQz;qC@NMpIܾgm7M0WX^T93Ag#H`f..‹ !1ErK8B鑯\@m[CӵcbNyģX(dpr9wi&x;˩IVRq 9Q$?wRh}LHpjf:CO{=W'ƚ㒣i[A*RVˉ.#<ǹ\m?f8G \K,0&Hc@*!ޝ{_pevG=6xUpSysQ.0(*千i|wOWV [\(Wpt·}(Ӭ0$o=1{%T(`A%]坳 S%MjmPY.aSD_T$xG8 Mڨ%w 8C6T)eO(̛_׍|-y$Q ]x3Mp zԤN)p" /d~N.OHkm!w=O4|*',*K =QF'3gĚfgeJa:t+R8g*2㈲lo.`x.;" !v n'jDŽ0\y +7Tg[8+eݓsْ>`!/Q "Diq3ovra?&PFJ[BY9B`s}4'W*+lޤcBOR[a7lǍ(hHMF5aN x"z֭*_}\|F&xovFAQhG1 [?$Xel]?wVIa+Ϋ ově3IxSWR>LV*%Fga>UQ}kR?F3#,R5(ydT 4쮇ye([(K ;?Wάw=K \QUJr!q!;Щ),r禈?p@z5Oq)$/OrO@+&%#\l`xAgp} p`,|CQQA"f OP z"Aegp>'>} U:` LG7w ]xŷ¤5_#bNSjNs9eÔ|}*RFsA&O9Xs\|"LmFZo㣑 Xr|јaM@xEl5k( {r%)+PFsDwL15x0:l|G؊`=|80Q(rU/nM!2yb v4:@g-elxwMU(Q(<ڲ-Lx/tU8)Fp;{;AdV7RndoRHܲ_a9϶fi1~ˣgCx.lnͭ1+4B}ª]|?g*t#'>G37 B^Ԝ*2%]хM127z/ 2jՃ])ƪ/ ^Ҧ1ΗPCIYP:s U;8S}liXʭ_螔= !AcU &ثIVqj%TʴPv%j%*Ʈ{bF~?D#²U-ௌݣF-:G(29I_\&O8 ~)$$ѣg*|<1,3OjI(NvsbVr#t K"y>U G S5ɲ+簫r] ]6~=h(CLíR3x(;H7)^Ƴ ~P˵e ' t :ٕgc|=s%R~{4EӆT1f;F>]CTw|O`<{0IrVd Tˁ7mR4yzGࠡ~=X#ަbO(zgCuǮ]mIBkHW]kU1LG5 u#S * ߌ.ڀq \'rZ_S445B ɑ/VF#*_ռ;SSySsBU%*d?H_ߓN9؇sYª% w`k0#NLU 2&-~84 ZIָ;Đ'DAU8< ϓqwcU ].kP1ӤL!ji|nJP"N?g߹D'Xpo8Rh5 wT1)ƀugxjF ܐyS ,,6qi {'7: ẋ9djȯs6<EjS)lqDTכӍ~䁑6hSaL9lr?iĔ6N50v%8d1'nzNЇ_9%.~um3_Umogc ǜǯFٟ^^dhUms|.$NyaXi\e4i1\;#]C=X<cIk+ZlK5Jac3*#1Sӓm\4`,{`JRZ71|)/=3c )w1-|9iW<4Rk J.lt_x5J}z1gU㇜O|uXcW!Z91V 2u]c`,"1U#K00ha, 2halE_i^u63+>XW%43VHΟrqpw[Xݠǵ kmv?uUՉ&1c1 e1%q jEMV0.1 jERXmyqKG#M=JQm(יȓ|V=GYܹ#ռ6r~C1o%PEy$jנʡ5‚"a|o~|}J+z?o1sǽ#V^g<>Nc,$ %ZlI J&՞[k6 6뫀0м`?éRG%cQ*ʲ+'sݍt{W,:~ޒ뎔b $22:E`!aqVc xhZePJ11!jڤDe*-*`KqbY:uO(c:36O2#+sR*R4]m{dER,`b(*s7耭4))LҤR|:¶_t&b"VSiRQ0RZ\S@g;Цv}T L2G Ѭ2GZ<:*Jwγ(XeΝo[cyfX5Bj概RIљj פ4R)f5&%h3}ҦnU11:&XMThaPZJިŤ.1QUxm:s ۞=Zڢޒ&:;[RgXcľQHhd+$e2{.vfu'Y=Yǐi]Ϲb󖜣tUӐn Edl}q+k[s#]NgkwJsn`g/urtbwu#b8v]ZΝW;̹rڨX[\vfz>%, =\픬` n8=^2K {OY]tݙվ8 $5^||m^WJH&QĬYYѭ6%EJ?[X ] u%)+M2'sjhEER2[c^&ak29uEY-EـLz5t%3[oy߷"v";{[UEgvWl޲Lkmۛ{ASֺi^ɬvBEUI򼏺LA9*rFQ`'CFlM ZPCsEV|LV1XTL#[+:GFv:IN FUYՅEh Jwf/?w"uHۏEWb;mJ2}qukM^{554@v\l1"h(<9YѶ;KhVh!3e 6hJSi<9-P49`&ELk'ZBI9/I_5Uj*{X=T JT))&Fl~]VYv.ESu|z+$һWGMs["nHʜb(jWVtRP ;Y(Hkf&hT:&E(\]))R~QT  JIѕ9]y߁\dML])t^=h*ES_ˤF8hɳ):=kF*RQtEWJBWK:2O*S(ĥ]K4+E*߉:RQt$@JI1.M)B J%t/M5 JE| &bȻ$%l[ /z`vy,"听hE,)b[ņuJ&.P);P`a<Ι2Y7d/;W5wz%9cd[nKH05:-fѐD k!.#'SNH^<⾛N7wɴ7z3Eyj^Ms!C50Gpg4l*VY=H߰N [ AzE}vSjFòTa>ӵ^F89F16ƪR'Y2}?Vs1 p#c1N6c5G"Ih>]Ug"ۺ^zsV^lrՈGtL=2';&C]),c~NOK 3MrׂDIX11Q a$@+x'=S㭝O0J-X"5?֬= NN&sf%ZT̎W'7[S1;v uS/[)b Ǹ뽋7ɯT~G0 cv2Mj\u]r]MfwrĻ̷ijjSz0젂24X_"JVv*L/᩽H-bx,ȜNZ@]l2/ݮ XbG|덮*2^VLIW~Su6O/EWfqe~{%i t4XdYeיۜNm?k8-eNn!EWu:Ey Y|%9 NzWNݎK;uuOb(U?1P,+^^rUn$꠻;բl>urn_=p.h /wiS:5 _2OKO*:S{65utT׺vx`PeNh$Q>+ɞM'[*nUVeγ?K\Tnz̀:S߼7^P @'&3E>->[\h =W}gmYxҝio&Q18Vl Wi,o"bwsSV"˪aW(twxBө́IP |sBp;PguMdvҭ=327!kn5-Tt.jcm-+܌wLsw~ I\m|sx™3\ݰLmS8gp MnҤSA4&/8<';Rds*5PJ7% u_ZBS ES ;Ea9m Tto E |;e&n1(,BHvbҠ .B6N)SG`,YV*eJ,@F촂ŚS$XMf)!L` b;zV*զN#>L%\Fe)Ido8d10|1|10>kcc51Xc c,c11X ca|10>kcc51Xc c,c+JEMW*J+rES#k2RR+iA1\'GVf((:)f6N5EB- ;I@Td%*TU&*0hzks2U-B4hY-Y;iWPttnzdE m*mTtV[aKVlKr6# |zBbĪji>v"mT*𯕙>w0d˨4P *mt*9+Vy 408jMh)PM&RE<9rH>.3F<"ڀZutP1RDKw#$MWd_c?T8ddKY"kzN ˩0ҩds6%6ǟ']cSsFt WYfuQRW1yR,JΊ{@(_eJ-T@jcRT*JzD&PT̢fnx@K1Mʤ`n`̳*UV(Pꦍyo"sþ~Qb96v2DF,qvw1ƈ-U@uV߁S`eEU ,&=Ez(ΥFMc)7텉.+`,)P*贁6ET&&%PշW/@]TP>o-1ƠIEQAk.\rCtJZ5LUV܎Pv:8m34ObթRR,b1VC)SR,a_cсr?Gr~n^9 c1Pӭ:!nT~?bc cSN̵þ1ÇL@OqNŌ1l>|I^ d~a_c??u<þxFеx_Nk# Ҁ:>M1e${I]٘C+Oly'ڸ:}X5H4:8y0րcGmv\Q^n|p:s\}8d7X5~7Ej-\KKK0@ Ё[8Fk|[E ÅtTx"}7EpnqZZt6r>>ltl}~nngljF\16\I{c9ʙP-l}܂}\˥9,׺fk9-l|E{Hѽsy} lxmhϞAs[7s)ߕgejݼ[k=ӹщk9keq)ȗk9,727=ҝݝ5=w `ݳ}1:w_RnvB6ˈy`#x/s)w*n6_f+ލ\P_V൑ =jw9D 8/s!Pd#Pثsr 9[8[CqV.Ts4xwsK9>glVeQ i.y#lBl_F_C| MZ۽9Ϝ8$%[Ekp9 lD4?Ca ->> j7m@eDrx 0C. ܗhhHlDQ#$DHQ6<~l͛y3)ι饺aBF{H ?6|eDbRq16)l$?_g?e.#rz8s SimGrid: examples/msg/token_ring/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
token_ring Directory Reference

Files

file  ring_call.c
file  token_bypass.c
SimGrid-3.10/doc/html/group__XBT__set__cons.html000640 007661 000620 00000021435 12242224150 022022 0ustar00gierschand000000 000000 SimGrid: Set and set elements, constructor/destructor
SimGrid  3.10
Versatile Simulation of Distributed Systems
Set and set elements, constructor/destructor

Data Structures

struct  xbt_set_elm_
 It must be possible to cast set elements to this type. More...

Typedefs

typedef struct xbt_set_ * xbt_set_t
 Opaque type representing a set.
typedef struct xbt_set_elm_ s_xbt_set_elm_t
 It must be possible to cast set elements to this type.

Functions

xbt_set_t xbt_set_new (void)
 Constructor.
void xbt_set_free (xbt_set_t *set)
 Destructor.

Detailed Description

SimGrid-3.10/doc/html/group__XBT__dict__curs.html000640 007661 000620 00000052612 12242224150 022165 0ustar00gierschand000000 000000 SimGrid: Cursors on dictionaries
SimGrid  3.10
Versatile Simulation of Distributed Systems

Data Structures

struct  s_xbt_dict_cursor
 Cursor on dictionaries (opaque type) More...

Macros

#define xbt_dict_foreach(dict, cursor, key, data)

Functions

xbt_dict_cursor_t xbt_dict_cursor_new (const xbt_dict_t dict)
 Creator.
void xbt_dict_cursor_free (xbt_dict_cursor_t *cursor)
 Destructor.
void xbt_dict_cursor_rewind (xbt_dict_cursor_t cursor)
 Reinitialize the cursor. Mandatory after removal or add in dict.
char * xbt_dict_cursor_get_key (xbt_dict_cursor_t cursor)
 Get current key.
void * xbt_dict_cursor_get_data (xbt_dict_cursor_t cursor)
 Get current data.
void xbt_dict_cursor_set_data (xbt_dict_cursor_t cursor, void *data, void_f_pvoid_t free_ctn)
 Set current data.
void xbt_dict_cursor_first (const xbt_dict_t dict, xbt_dict_cursor_t *cursor)
 Create the cursor if it does not exists. Rewind it in any case.
void xbt_dict_cursor_step (xbt_dict_cursor_t cursor)
 Move to the next element.
int xbt_dict_cursor_get_or_free (xbt_dict_cursor_t *cursor, char **key, void **data)
 Get current data, or free the cursor if there is no data left.

Detailed Description

Don't get impressed, there is a lot of functions here, but traversing a
dictionary is immediate with the xbt_dict_foreach macro.
You only need the other functions in rare cases (they are not used directly in SG itself).

Here is an example (assuming that the dictionary contains strings, ie
that the <tt>data</tt> argument of xbt_dict_set was always a null-terminated char*):
xbt_dict_cursor_t cursor=NULL;
 char *key,*data;

 xbt_dict_foreach(dict,cursor,key,data) {
    printf("   - Seen:  %s->%s\n",key,data);
 }
Warning
Do not add or remove entries to the cache while traversing !!

Macro Definition Documentation

#define xbt_dict_foreach (   dict,
  cursor,
  key,
  data 
)
@param dict a \ref xbt_dict_t iterator
@param cursor an \ref xbt_dict_cursor_t used as cursor
@param key a char*
@param data a void** output
Note
An example of usage:
xbt_dict_cursor_t cursor = NULL;
char *key;
char *data;
xbt_dict_foreach(head, cursor, key, data) {
printf("Key %s with data %s\n",key,data);
}

Function Documentation

xbt_dict_cursor_t xbt_dict_cursor_new ( const xbt_dict_t  dict)

Creator.

Parameters
dictthe dict
void xbt_dict_cursor_free ( xbt_dict_cursor_t cursor)

Destructor.

Parameters
cursorpoor victim
char* xbt_dict_cursor_get_key ( xbt_dict_cursor_t  cursor)

Get current key.

Parameters
cursor,:the cursor
Returns
the current key
void* xbt_dict_cursor_get_data ( xbt_dict_cursor_t  cursor)

Get current data.

Parameters
cursorthe cursor
Returns
the current data
void xbt_dict_cursor_set_data ( xbt_dict_cursor_t  cursor,
void *  data,
void_f_pvoid_t  free_ctn 
)

Set current data.

Parameters
cursorthe cursor
datathe new data
free_ctnthe function to free the new data
void xbt_dict_cursor_first ( const xbt_dict_t  dict,
xbt_dict_cursor_t cursor 
)

Create the cursor if it does not exists. Rewind it in any case.

Parameters
dicton what to let the cursor iterate
[out]cursordest address
int xbt_dict_cursor_get_or_free ( xbt_dict_cursor_t cursor,
char **  key,
void **  data 
)

Get current data, or free the cursor if there is no data left.

Returns
true if it's ok, false if there is no more data
SimGrid-3.10/doc/html/group__XBT__graph.js000640 007661 000620 00000005125 12242224150 020615 0ustar00gierschand000000 000000 var group__XBT__graph = [ [ "xbt_graph_new_graph", "group__XBT__graph.html#ga782dba2130eee76b8bd4e6934098fd8f", null ], [ "xbt_graph_new_node", "group__XBT__graph.html#ga95d8d120c9be3efbed1880700458d8ca", null ], [ "xbt_graph_new_edge", "group__XBT__graph.html#gaec90776579173b58de9b89868abbda0f", null ], [ "xbt_graph_node_get_data", "group__XBT__graph.html#gaed845d52f5432f7940e1bceb336d3c38", null ], [ "xbt_graph_node_set_data", "group__XBT__graph.html#gaa100e0fe6d317aa185dffe89b3a9deae", null ], [ "xbt_graph_edge_get_data", "group__XBT__graph.html#ga7105c211e327da8f90b432224451cfb3", null ], [ "xbt_graph_edge_set_data", "group__XBT__graph.html#ga9cbe4fe591cf0d6746909db9ae2cd2aa", null ], [ "xbt_graph_get_edge", "group__XBT__graph.html#ga4a037e91f75ccee400b51b5564720693", null ], [ "xbt_graph_edge_set_length", "group__XBT__graph.html#ga68339a976c82e67edf79fa59d4619396", null ], [ "xbt_graph_edge_get_length", "group__XBT__graph.html#gac906c4328b3d910457c960cd64d70784", null ], [ "xbt_graph_get_length_matrix", "group__XBT__graph.html#ga3c4697edd9ee89142ec85ed882aad249", null ], [ "xbt_graph_free_node", "group__XBT__graph.html#ga966d2089b5392e5f556a6d149bdc112c", null ], [ "xbt_graph_free_edge", "group__XBT__graph.html#ga6b9895d6065b7e122bc55c71e32da821", null ], [ "xbt_graph_free_graph", "group__XBT__graph.html#gad290d4c3fa3f0c82f7f6cc18a3506546", null ], [ "xbt_graph_get_nodes", "group__XBT__graph.html#gada4b1109afba1fe3a8f046a45694c707", null ], [ "xbt_graph_get_edges", "group__XBT__graph.html#ga1c292fb71d5119d59496a89d90a8ba30", null ], [ "xbt_graph_node_get_outedges", "group__XBT__graph.html#gac8dd5691103f6c69b8f773a5937c2a8a", null ], [ "xbt_graph_edge_get_source", "group__XBT__graph.html#ga8946bd8838820677e2e44e793be2c9e6", null ], [ "xbt_graph_edge_get_target", "group__XBT__graph.html#ga137cf4ffadf401a1080795664d99834a", null ], [ "xbt_graph_export_graphviz", "group__XBT__graph.html#gacbbb619bcd7032ba6c0f8e932126d26b", null ], [ "xbt_graph_export_graphxml", "group__XBT__graph.html#ga59db9ffe13c1c4e4012e61fe38525363", null ], [ "xbt_graph_load", "group__XBT__graph.html#ga11cca6af16cef8e4ea7f5f340da517dd", null ], [ "xbt_graph_save", "group__XBT__graph.html#ga2b6d7cfdc45b1df905eba88fdc1d8c18", null ], [ "xbt_graph_shortest_paths", "group__XBT__graph.html#gaa5d7e658935aa26a17acaa1cdcd575a4", null ], [ "xbt_graph_topo_sort", "group__XBT__graph.html#ga80c9aa63aac343d7b3ba246a6e4f6297", null ], [ "xbt_graph_spanning_tree_prim", "group__XBT__graph.html#gac305eb0dfe08abbe849f2a74dfa3a3a4", null ] ];SimGrid-3.10/doc/html/win_install_05.png000664 007661 000620 00000061461 12242224150 020277 0ustar00gierschand000000 000000 PNG  IHDRsRGBbKGD pHYs  tIME ޿ IDATxwuwv].wHr)$ޒP AQPD(* RT t$F үݝݽ%]|;ߙwcHw޵#'+(-#MEU"""^FF"_&=2d~8!$q!"""1ki:YapPSZÖavl(ǎRŊ_}# !"8BBbbƒ0iu."@ڋ'A|<`G 0YQ՜uAK ' 88@p]] F=U-- G7H0Qq*YR :Cī0A 5@qpֽqk- "ID:FY88m.[ς:9zT$wB_ vφL(PS4_u悆tQ.*z5( '9MuHD&ͺxm%+<0u-9YyA 6GR.-ܥڵ 5aCfqzTDȈ#4D#avǎ"Etlb0؈[/Xoȋz1 s/~t\ ]VH;FjDAzA=ȥ&J8jF߮ bkZ`-矐S/r Y%׳Xo厷9%uss=&ʨAAAyM.mx3X$ke_'HրDj¸|v[KFlȧoOyws(J;SKAṼAn=j_5n,`:[z׳D]KāZ 5s*%#~:q5֋k[ZΉ-+V0~d>E033.x.X/I]$u<([֓;lnq?%FhQD-bn|`8u \gۿ2qW#H/4.ǑzlvGM{p03`ʼn]]kp%a#x7W;"@2j8= ?t|PVoTw~J)%9CPlrMK~e\zVyT-y?M5M,Ƿ&[k̎,Ćitb0ޠԳxvXz^DWG܎ DM9FEM7nhj?n}_,&~cO]w3cbc猢Φбވpݯae"V- ^y('3\q,[¬=?~%|hGFarQ^bzM w䧹\Sҳz' 8&|<YOO9[56yRDn F`ł]ݣUw5X`/X ZԍŒ%?z~=!Apcc9rh,0a Lu>h35?X'qHQDz zDaAU;nQG|9ꌺ+y2`4FMM_ɡhX6.kԶlg[,O* %?_bٛ*K:]϶X:$O};gwOo޶ϱBmk'vGRظ0a H~wwh !##Ydm"łu'3ɁB1Q$P77sI&x!_1OAH'$.x&$nвc t -6 o.-~?puu6^V=?Ȕ󘻸3=#I,I~{xK>\{R) => )QO/O'DcW?hoO#g2L͢5,HVp."|R4編kTX{gŵ~7ϵXz}J&G#~7i568AYbyP!0X߽en?>zCCf7X[P QVhIwx tֈaXW`ZF?ډ""]Xm#?Z?j8=p>y/>4cŸt˵FIZDXD4ԢK- (Y7nI KC b/6-~|Bx-" Ի6k3c=<=k .Xw;zk-v}#""Ima>75'_NyE?(B;86B b?x/66$O%U.cYp3&1vyJ6 'p$31vX>;+zAéؼ/SNM @x~?dzQ]Z.5X\la߸όK:DV;"X/ȵI=CQl15.]Mt}t=Ⴧ3e!'zR}(PfU&v0ϯöÕ S0w{杍pLMWݛ(7rʃ)=ɠWO30ˇ~GlE22 s&ÐQ>6/u'ߋOOZo}]d<+O^ͣk'^7_PDDDDzs[a,RQ ҟ<#DZ0'#<&/xԅ=>}`'^̇ =CYA.i`{u9IDDDDP_=vfCzt#eTO1T5ZDDDth[?07ol ßLἰK9uS-YZHI;֚*Ydksxj9\?wO6c];s?7E_;L4~"Ssb֜E3}킔r|9SZ5U, o`9sg< ( 2֫zpj0Fi􀢾i#|s!=|9swDRϷwo89c(ODDDK;3?_0+>+~|R/8&>'#.h)㯻uDD=xcus?//9ޢK-0m؛).Ei~x>üyy?nr;㎍q-4n!`vz {"<~/CHWȁiv܉'6Zu;Xؽo痜n3 C-jOnNNonILkOK*C(Pvuq=X\σ7i3AT.6 _8cGJ+Ϸߟq߻m /e}m %%[xbDu3lXNJ5ߠ_aa+rf}"nP_QR?Vpۆ5˂=qf?8*NN[Qռ n)\5t$NG߂+#IOhMW̚R̚9|LJs[xL9"u[KVb1,.whB&.{ϘHQN^As<oL' 冁uyۣ M""" 倸IdȮ+&qM|5\01ټY ӹb4 bp`6lb;f5,Z~o V|" ǿ6o?_z]3X>X͗_IJ24.3n1Sq*Zf,jm>(/[c39cȴvoeG}4ۜqq `p`.:8s] x4w]wڴ: y/a;Wn >>H+Hqyh9䒷7>]_7 2xཅi-3qSGs@x~N='z,Ӓ`[DDKf_dYSgN{x[wom4K^H)neoϞl] 7A~yEu/\,n7;ͤg?H=! u?Wϛxp+<_sMMcϼEDD~w#8mL.HL 1s&/|a8ZkM*?8 ]n]l6/f橩jֺv |]Z/9[S);?P~ee} \{f*N_[.6 6WCz!<^X*{Y 2Nÿ_.p\Vᦵ8='PC{ d;jU:ޒܢ]DDK_O_^?(&3oG-my23/[ [fMqq zar !vfkbzqY13Ws;#z@1sv 8ߦZEDD:* (ig xs?X͓OwgsJ\^9(ӛiçk΁@nyϚZ1.:"f>{~7{+w~PUYb_EXb'}xcvUݐ :i ;pAe뙳y0B^ IDATu2S,ɣws sU7>żVpϗ]e]VX6o3^o"S?i[}7Nސk e0w\Һ퍖Vtǿ]oߕxo23, h {TCYDDDtxqpSO9SO9%ۖ3ټ[r叫gn4nE=p2`2QorءOp pB=wbUpp' гhφaޢ]Lٺl/,Mϓ j'%_1 .$_\jxVժ_Ke1,""@] OK'y杹|/0~Kjry?NVtX.ڳW,a+9?gqk姟x(, K Z]GS\*>8mڨ\w(,ٓ3Ol??jڠA:hEDD:8L*j\sEQ/kFΙԍ"~58B3͏놆c7K}(/6Ͼ}}̑_ZV>5`@ 4@ r8mg#`Q.]u]^޼sO 5[Sk4˹=%sS`ϲ83s-{ꨩdd㯄0K?P^_5. &G( y/aO{wn*VΜ }EDDK~z~?[~r=# 7~ݪ± td/ u?~}+ȭ~ם;~t#kB? ܚg_mb {0BC0?TukM~kGmC(PN)?3R +6~ nz_Q3 OlYp9>tVmL8$^f;b|O~چ'V=+k^[ͅ2x`iD>}*dG|s͕vr{PoFepI~Pg 烐ڒ1&僚ڻoQ{YHWQ_Ep mރwWӟf ߬Yn+o׵ïsq5o(Ok99{K)/o@-nqGXw_yc4}:FfsԀ4:LnYR3ś7 mǶ~Χ[=wsu|qv_vNt7-׍eFuc*9xOZ3y-NoG-ms|Sᗥ|O5Ku~h>M宥mi^Zs<]>_?䷙Oqϛ`ӣGÞ={[ocOj2ŋ~)"a GퟟηnK/iEEx%<;s"P`f,Cz>p00~A^wK VW҉V dؔќ[\`3&Zɥw|Nne[jְXD+'~0d_ˡm-~ 4ZS-//H7T_R57KOtu7UZ[NOon*Y3rs6̡te {"lp7䲩r-)/jF 7<ӉGLK,]z{~/^qyoR~V~pksT[/խk^]c S'{h%9 C,|*bjJBز{,@7rޔr9w0\`TZb/y%վexv/R>"@]:)#꟧{X;齁}`ܸqM.;4TzҟbxraS .IWV=K?KvQݸ)V:Z.F7.u]<9Ȯ^Lp$j` PȣSn#k}e{SkZY ^};JggSR锹5džċ~mX:t:߿u &;kofXsL'TZ&К?׮%-VȻ-]xZ[Nח196;RSU!҈F}~f0WRƲޜ7!ZzL/<հ #~a0/v锫=_k-izZ{,(P.)'⒣{&r_pǜ-,^nl_¼Uigl_֭j[SC 4oeIw} [wSiͭҭ\Z76Z͕'crsytr+k[\dWqF|kgb:W\qW\q'h-+oǎndeKhjJmuv30uWM圧>ෳwo \L6+2ղࣽ|q &o8֥xOx,_oǽT)zJ>r;_EO{by{W*_ϳwIYUx4z'tPkx |w!q=tHqԥ%"yNRjm=; ^^۵EDDDt@˖n4lX@mݘ~C|k GQ.]Lό͌#X3>n=*`Hl;ҕC(#NW//W/ϼUyo^VDrg9^M",WDaK BK4ꋤOGb쩄p!pֈAeUꅭ\QJ^X1۷ùf]REDDDt}N&W3Tgy7NcaJXΛXЮ}{\o(qi#xvQ \JDDDA(/+,ȇIy~a"""@]>gGںuo]5_>/ol4~bXV[ž]qCCB~^sYˇvGeLn~=9d_9+[;i_>r:epN*= oe1C(CärBdMy9˪bJÿ8=+/} y~v(PW^P1C@_m `-5QpmpϫO|8SEFrCA0O Q9{|Qf.,}X #ȩ# O}x Q.QV?|pxg#loavd[g<zQ}B|\My9lVuK7%x&W' 9sQ.j00wU[ 7c;lve;u0M5Pg>..FѽznEDDDHpBL U"""" ԻYOA "")*]_J޹s*AwewT%tJ!U4Q(P""""" EDDDDDuQ.""""@]DDDDDu"""""@]DDDDD(PQ.""""" EIcM:T^_]n;6|eyQVAUkvɳ=$іeR;j~Rm2cj[.uڟ)ؗ<[tkR;ʹIDt`O:h<؏Od~0O3T[P3n9j!ߟ_ur;yjiizK7uroz+wS5wHl[Z[j%kk7K. Zoۚ[֔9ZSԱαg5t>SM5BStXSۑ9*X[u|o[|؋u2|slk7u"O&ՅK'}"o.nv޷-cK*OStT/J閩--ִtꪥ:I3~N<15긹u%xNԗOZKK{7EK֚2ӽ`\Gז=PwPm-}Hw[ -G:kק} Ǘ}'e_Zڣ:{?q@]=IXrs۶\ lګ[KGR^lGx?bYsHGٓ־#ZU5Iuvv;glogkkWe^%jQV[ϵCÛٚ|/r Ut[vܭtն\T=S_ 몭6ͶtKٖ>uڗev?`=z|q^ukȁbVй|5<XnRTEdw l񵿶@q@׭fw 陧jK#jQi"Nu.L@_5چO:/|t3uIHzͬbɒel߱S""";7]! ԥc5,xogq*CDD3f`޼yw Q.Ӓ%A o@]K_r {L`YJWҕtwm6@]:Bvb0Uҕt+륋(Po[?Y1FJWҕ"]Dtx;";t+]J?(5~(PNe[VJWҕ.>~u)]JWҕUEK3سQkDNJWҕ.@]:C[pҕt+]]0]Dt"CAKQҕt+ S (PΣFUҕt+k+PXk;O'[`nRti'sPXX.{{}fw 陧K&LK/'/;#'"Dt\/{ؾc*DDD}zsԑ~ޱR" ԥcڽc%ӦLfڔɪ 9讁"4GU """"@]DDDDD(P""""" EDDDDDMK\%RSEv2Gõxmc2 8l"""@]q~ZU[JU)O>{nduQ.YcVM0uUJ;X~;?꒖'=)c_; 7>{3~L0A&"""E]ZdeՖRL~7uiz=fT_Vm) pQ.3ພ ӉD5XDDDD +LύF Q..zNN>UUZg]2-M KKwSuiMu֫]4ťtݺlb40N^Zm˙N]니(Pdgsh(8N@"""" ԥI0'x*8~ dtryn8wڭMDDDKXFkq DO&Q.""""" EDDDDu"""""@]DDDDD(P""""" EDDDDDuQ.""""@]DDDDDu"""""@]DDDDD(PQ.""""" EDDDDDuQ.""""@]DDDDD(PXkm|1l$ӟ0u3dd3 @ԅ``] Q%e%*W@J|a QȈa2~Q/CƖ BBm1vuEf吙e 9ȂXy8i}/ґ8,!(񯏞nԏ}oIu$X_R e.%ˠquE  #xk\ 2uQ`|Ix7>-Z:uOm<_mR^Uivބ@ݜ@ GwlW '8A0! ~zбZKxZ|:@1XD-^DD/lU "aǴv1 Du"Au! Q0XrIAZ_S {K ;x?rz`++U:Xs8(7v/﹭_ IDAT/B= 8^ PˆI T"Gm3Y[?ŋa,j/}ٮM 6)vtFn,bM#`65a09~BV~]z: 8ZqB w1D_EDDiςk /OЃ=jkԾmeb5'W.}EIɁkF{n$g&ī(-/k!Ɔt u06\"ZYNIi)[CL|Ԁv,'HE مKэ[ɍoԥ7uHGZ@<@z%8h8&@ bX`nkXn~'x zg3`ṳw!pk=c{vXg`KctHV<Az<0N me9^E&Takp c#+anlbsf oQO6N΁ٗe{<삟z Eїg}E>bC4?Fx%ՕY8^0^$B$y z|>>?܆,qxukHduGcq{|<Dz5|6?oM ll46Q»{3f`̐QF{G"m[Z߆oYnk(<ǟt/6VUBֆ:$q^s6H 3v{`vl/ |(s8#/܁k]u,fUu|_6ߋ! :| 7nI]}Q׿O#L7!j}Q?WmizQ4(HH@}qZp8H7]N;`Cϲs&tMNcY@MEomnlRዻ`;c88 @ ؐ`]^7t[3$x%l=VdԶ4Qtq^>""""s/)mm ^lXF\?HWe?ߩ ;܈g]xh;|FdƺTopo;a8ܿ3\LIE4@ʣ[ۯ^a_"4wlvbg浥a[].Oίse2W*_?[mO}x6CzXJ,K7E9^>ʰ>Wnx>U Cwwg`b~vBՇ&z7r=WC? ;D6h*Z/;]ce7r0V2(ZGҐdFœѰy}`(WOA*8rue6.e2=U1-?1H**} M߳Aw^6kd>ЅfwH.xˀimimwu?h]kl 2?_rK1Go58B_{I>S~gRks 2G'ԛuB4Z0 ![_[>f9G6Tv=|z葽2ꉛ/~b , PkQli^% fz_Z4W>CƱ212֓^=FfUݛ"koH%o^vp\wkޤTW_ ǵzbnd^iDnĖUۯҧ[ߪ;?OLZ7ZTՖK%IwY뮑^sٟIk.WI'm τ/N>+cިղs٭^tI:7ax[K|/ɞ#5:1Rs)N2* ԟ^ф]Fևn}OiߕTJ&%_2ASC< -aXb mTfÙ2/:<+ aRW ~| k/NXʖ%9n};n׏?>@'֨"I:g8Vn/^ E]C҈^ VyP EPY$?U2-Mɿ,ͽ@s%7RW# J\aY)' Kbkdnǟ\69Kg׽_hK[I_,),li80ǥ'3;vހlmԁepB,dzŒlP {6BJ_ޡ/_fx&A.R}/D-j!}@41M??$K|st\Nxxꩈc*hӘ+O=_f;E5?–?{ 9N;_ޖ}m?k-Fz_~ ڴ>zY}7ҫ[7=4Oj>j5O[l9$ʞpj PZ<-W[ EIFo׾7 c$9'%I89~QK k%/ .|DڸNG@zo>+=o{G3\o$ :9XC *M^_,տjn'|,v@za? |Mt_7<|'UgJaOZ^ZFZa+|(Ƅ-NXY^cGu>A $4ždG {V7-\ 9?+I:c!}$I7~ԍT5MڨO8v}/S&G/Kr̾]M8G~~E.N}l}ݿ5Ȧ%*lHBKj>~u@/ r6Ȭ38$V@F@VdWEyrY^#vju@K"H*='_e1Su34({HGn5tog3Za5үa495*en4ᱽγ䎮fTf`P-8&ݢLNPW ꕲl,\@;g*=қiJ[_7OXIY֋_Y6*V@ducel c}%"~E xd6sP:6ۊ_Ù 2ņ 8@CnwHw}˕ֺB7B@o꒶>uWkz(dQ`):ab6֗k}c~ \['sofujח []--Vg@Ҁ\a_|0ֆo | T 7ݠ(WJdu G@NN)^5 {[RH֕jF 󴸛ws_ Hcj'P\FwxNZ/i4S8Tߍo˴n!U1oX|Ju 7Jۥ-_7fɩ~Pc[XP}>f;(V $ _vŤnLV;W1ۈ,@Xu@proE [lۚ燤#3aBwUN2i5dVJg,RW/6dof^˨:]$$lW&=%6ɴ{~R;Ee~n%ﻵ|z^tsy{^v,+P"kbFo)kr64&vwW!z~ZNC#|+j^5OKYSz+F㛚fLJ -0Z+[=5Lh[V;$dD?4kׯiӤMIntusK[N_u1ɧIXK.ɾ:I;weHL;qWӬ iXf<*jn79~/ͺC:tKSۤ˻ؤ ݺUQWCY"GYZ`ZL;%mӊ4NkiL2&iJ|i֗y?t.Z_; QIN$ݏ:)w+^zvyM3/N'VQ}K0a֮GIOfnnwetIs{Ѥ.Yۿ,lUz2I?fYn8:Yִ<$˒dԍybѭ]u BN ֺvҏnt9K}vGC@?[5RX/uV N0=.@S59iB,}VIL/ljwd MqG,!?ظ$.RNW$k~Z+ KFD5%`VRr]$xmK-EuHa/O{ iYjn^Үq}SFXAUioKL7wq}⦕dV]:}>nqYN^!˸܍iwQM7y]:`%>m7l *xucY;]߻zgw7Kmu!h 34n7L܉Qk԰Y;I֍NZ_3Rfm;Y'hf~ CHc8m[5Z72k:wiw|m֐֟ugoE榺{1) y -S AXK<0hQȩ%v AA  uu(*%'km.+w0n1FqU븬0@Pި̗8n{.zyTm0K:md}_"Az%ngkw~4ඛgkB1u#]5;{xQ=1zBA:Pm=2 z~tt^}PCz=WH9:t-{Lmûܞ%)NpZ8}L6OTŤn^cc} 3c Е齾pɅh0Ç'[>^n]_QPu VzX%P|E)cN:t+JuzU{ J/=2uȬ.32ڸaGl=n _qð UX_ s\Wuޯg['Ϡ( /s^/-R ȈYvŢnͳ'=忡(U7 sߨ?r@c W@ga@[{P8a>'t܁M;ˍs"c»=rҰV2\L G^IW%pE>'aBCP-=_|0u | EPZu 6=fN)*F3dk6Ri*MJ?GT[g40WtORt6y&tVQ9"n6C^PYUJx%)H &W S_k- ۟ ?`֞݇. 8uu:::@P@PAAA  uu::@P@P@PΎEgy}mYXR74;suUtZN6oYBt״ZyXtQD +P1?Wmz~:]IEs|dv;ܶ!qыuĸmGZ{ k~Ǵ6[㍛!U]GsQ7ZNrT{MtC::r$*E?iGdklyZ yhǢb㰵qF|;4͵\ ͡9.5I8L|񸓪y# c BipayܨqFMywUPXQvul5 Wy;d}utYftaYvӏ꿝Ġ1@K;%O:Dž:,ώ˻mt1Aofk-Y~L}>HZ$]TNUHoNO4uAp8UiDuᐒ߽$nUhujT2q}œnh݉J Xk-eX^n̨duㇽa|Q'0|EQAqQ~e~xZG~v'{qng!} )1# :o&"wt@P@PAA  hPSS윂  FG511N2֊uuC_:RRi^!oV)k:r9w8;~\Q b]:,sAb.A׊uuꠜ^IDATAA{ήyZasm:YއjX=.DVl%4nٓ"d': U\R0f!u5n\Ʌ ulYwPixk 2搞fgUk'ĦUn i>ޗrث,G}Qlr GǷRZ㖳?usj ͵^[Xk-eX^n̨du= pϿGo9L O=S_Z`zE<=\H!q uuX!Jy.ji!J]@P4ց477K1ҁ4:2L2Ԋuu/s㚚:^|AAP911N2Ԋuuo A+  uu:(Pgim:qLf[Zd2u`0FAţ Dii:ԑ+{v+~pX}zIENDB`SimGrid-3.10/doc/html/group__XBT__cfg__decl.js000640 007661 000620 00000002513 12242224150 021377 0ustar00gierschand000000 000000 var group__XBT__cfg__decl = [ [ "xbt_boolean_couple", "structxbt__boolean__couple.html", null ], [ "xbt_cfg_cb_t", "group__XBT__cfg__decl.html#ga4080887ffe36fb58611ee70094c003be", null ], [ "e_xbt_cfgelm_type_t", "group__XBT__cfg__decl.html#gaae016e87dc6935ed51617bbea7b8aa6c", [ [ "xbt_cfgelm_int", "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6caf101f0c7af43525d4a07e9bcb5d3b7f2", null ], [ "xbt_cfgelm_double", "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca35412ca92ec3591c76f5403810aed6f3", null ], [ "xbt_cfgelm_string", "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cac8df732d454a4bc85379de2c154a737e", null ], [ "xbt_cfgelm_boolean", "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6cab46f486cddae583964bd0667fabb269b", null ], [ "xbt_cfgelm_peer", "group__XBT__cfg__decl.html#ggaae016e87dc6935ed51617bbea7b8aa6ca79bd0045369cbc55fe7191a28d31d168", null ] ] ], [ "xbt_cfg_new", "group__XBT__cfg__decl.html#ga25f767ddf162fcf5cf45c2aac58f47b8", null ], [ "xbt_cfg_cpy", "group__XBT__cfg__decl.html#gac679f68b23823dc08aceaefaf9b372da", null ], [ "xbt_cfg_free", "group__XBT__cfg__decl.html#ga67592bfbe600c89f45f40ceeb7df2c9a", null ], [ "xbt_cfg_dump", "group__XBT__cfg__decl.html#ga9ef64a88e6fa46d78938b32247a29528", null ] ];SimGrid-3.10/doc/html/ftv2folderclosed.png000640 007661 000620 00000001150 12242224150 020676 0ustar00gierschand000000 000000 PNG  IHDR}\/IDATx]MO@~uؐlp]#]PYEC\9y`xC &=qvZv3m؃vLN}}ޝZA@n ONp xKxj8s _[D'yye+ 7#rNlk* 0Ь_d_(Öz=xvhzP-䍒̪u$\DJcB4.:Ϗ-}LE #gN;B6䬜@p&h>p9EEάʑ"un$R"?{<%PNt$߶+^<"2Dqq\ҙaA"ԵP}#Ez{.8i p(ADwDE߂z;Kק8t q:uvvݛvEn{MFXgfZ֝*ߩ:jYq#3SWr'  IENDB`SimGrid-3.10/doc/html/dir_2b510cd0b86e1460c983f2b924612a9b.html000640 007661 000620 00000014203 12242224150 022655 0ustar00gierschand000000 000000 SimGrid: build_release/src/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
src Directory Reference

Files

file  context_sysv_config.h
file  internal_config.h
SimGrid-3.10/doc/html/group__SD__link__management.js000640 007661 000620 00000001621 12242224150 022652 0ustar00gierschand000000 000000 var group__SD__link__management = [ [ "SD_link_get_list", "group__SD__link__management.html#gae6a4a20a3269c3595a195d24f220fb40", null ], [ "SD_link_get_number", "group__SD__link__management.html#ga8f5ff7ea86c621aa77f44e913222613d", null ], [ "SD_link_get_data", "group__SD__link__management.html#ga4f56602832da18405e8d0e2653f0744c", null ], [ "SD_link_set_data", "group__SD__link__management.html#ga180c8056827783104c4cecce3acc9b23", null ], [ "SD_link_get_name", "group__SD__link__management.html#gace788d7f0b4b57c5af0b8a5025929780", null ], [ "SD_link_get_current_bandwidth", "group__SD__link__management.html#ga4bdb09a991d2366f38c303ed2e48c885", null ], [ "SD_link_get_current_latency", "group__SD__link__management.html#ga61b0106214ae990e8f4c9aaecfbc0779", null ], [ "SD_link_get_sharing_policy", "group__SD__link__management.html#gaab6c4e1b06d62ed57157b508561b28c8", null ] ];SimGrid-3.10/doc/html/help.html000640 007661 000620 00000015344 12242224150 016551 0ustar00gierschand000000 000000 SimGrid: Getting help
SimGrid  3.10
Versatile Simulation of Distributed Systems
Getting help

If you are new to the SimGrid framework, you should first strive at reading the current documentation and studying the provided examples. But if a question remains, don't hesitate to ask to the community. You have several ways of doing so:

  • Ask your question to the User Mailing list
  • Asking your quetion on Stack Overflow is also a good idea, as this site is very well indexed. We answer questions there too (don't forget to use the SimGrid tag in your question so that we can see it), and they remain usable for the next users.
  • If your question is about the internals and not about using SimGrid, you may prefer to send your question to the Developers Mailing list
  • Join us on IRC and ask your question directly on the chanel #simgrid at irc.debian.org. Be warned that even if many people are connected to the chanel, they may be doing some useful stuff instead of lurking on IRC. So don't be surprised if you don't get an answer in the second, and turn to the mailing lists if nobody seems to be there.
SimGrid-3.10/doc/html/group__simix__process__management.js000640 007661 000620 00000005140 12242224150 024216 0ustar00gierschand000000 000000 var group__simix__process__management = [ [ "smx_process_t", "group__simix__process__management.html#ga9496f5abef32b4e9d1ef03298d7446e6", null ], [ "simcall_process_create", "group__simix__process__management.html#gaf19a836d7ea387f1526fc48231726dc9", null ], [ "simcall_process_kill", "group__simix__process__management.html#ga2fd1c21b67cdf31506f5cd2a94d91313", null ], [ "simcall_process_killall", "group__simix__process__management.html#ga2a8d8ea34037935fcba5456884a0e886", null ], [ "simcall_process_cleanup", "group__simix__process__management.html#gabbc2bb1e3346602a7e7ce8af2f9963b0", null ], [ "simcall_process_change_host", "group__simix__process__management.html#gab10c8ebfd02973f5556bada2bb0a2915", null ], [ "simcall_process_suspend", "group__simix__process__management.html#ga9fdb4fa34e26498e410db9794f0fe1a7", null ], [ "simcall_process_resume", "group__simix__process__management.html#ga2e9bb138e7ba7f7e588cb662be3b1757", null ], [ "simcall_process_count", "group__simix__process__management.html#gae7ec2e782070e190356478e8c88a0cc5", null ], [ "simcall_process_get_PID", "group__simix__process__management.html#gab71a0ff395a1ba9075f4ca76da63b5c3", null ], [ "simcall_process_get_PPID", "group__simix__process__management.html#ga84d861a0d2125159a5f55a767f710ad6", null ], [ "simcall_process_get_data", "group__simix__process__management.html#ga3ef2cbb5679f4f103f1d56b0e4e74f6b", null ], [ "simcall_process_set_data", "group__simix__process__management.html#ga18c58debc643922bf68b5d8de563e4c5", null ], [ "simcall_process_set_kill_time", "group__simix__process__management.html#gac55e617472e645926ca1cdcea8533508", null ], [ "simcall_process_get_host", "group__simix__process__management.html#gada27408ad1425a1a1f94e8d9dbab31ee", null ], [ "simcall_process_get_name", "group__simix__process__management.html#ga86836c7ddd8864c4662a384014959a76", null ], [ "simcall_process_is_suspended", "group__simix__process__management.html#ga5ba7792648b97d73a68a0472f756bf17", null ], [ "simcall_process_get_properties", "group__simix__process__management.html#gad0cdca75425dbbb863121e44b1462612", null ], [ "simcall_process_on_exit", "group__simix__process__management.html#ga3e5f4a672ee15995a110ef2bff287b00", null ], [ "simcall_process_auto_restart_set", "group__simix__process__management.html#ga433713db62cee73ad3006d2d3eabc702", null ], [ "simcall_process_restart", "group__simix__process__management.html#gaf4fd76982573c1f58d3eed172ba2d64c", null ], [ "simcall_process_sleep", "group__simix__process__management.html#ga7e5cce2d1b8238c587b9e3be60c26b26", null ] ];SimGrid-3.10/doc/html/functions.html000640 007661 000620 00000036227 12242224150 017634 0ustar00gierschand000000 000000 SimGrid: Data Fields
SimGrid  3.10
Versatile Simulation of Distributed Systems
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:

- a -

- c -

- d -

- e -

- f -

- g -

- i -

- l -

- m -

- n -

- p -

- r -

- s -

- t -

- v -

- w -

SimGrid-3.10/doc/html/dir_c640365a1f2b97689859d021e20abcd7.html000640 007661 000620 00000033321 12242224150 022674 0ustar00gierschand000000 000000 SimGrid: src/surf/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf Directory Reference

Files

file  cpu_cas01.c
file  cpu_cas01_private.h
file  cpu_ti.c
file  cpu_ti_private.h
file  fair_bottleneck.c
file  instr_routing.c
file  instr_surf.c
file  lagrange.c
file  maxmin.c
file  maxmin_private.h
file  network.c
file  network_constant.c
file  network_gtnets.c
file  network_gtnets_private.h
file  network_ns3.c
file  network_ns3_private.h
file  network_private.h
file  new_model.c
file  new_model_private.h
file  platf_generator.c
file  platf_generator_private.h
file  random_mgr.c
file  sg_platf.c
file  simgrid_dtd.c
file  storage.c
file  storage_private.h
file  surf.c
file  surf_action.c
file  surf_model.c
file  surf_private.h
file  surf_routing.c
file  surf_routing_cluster.c
file  surf_routing_dijkstra.c
file  surf_routing_floyd.c
file  surf_routing_full.c
file  surf_routing_generic.c
file  surf_routing_none.c
file  surf_routing_private.h
file  surf_routing_vivaldi.c
file  surfxml_parse.c
file  surfxml_parseplatf.c
file  trace_mgr.c
file  trace_mgr_private.h
file  workstation.c
file  workstation_ptask_L07.c
SimGrid-3.10/doc/html/group__XBT__log.js000640 007661 000620 00000007004 12242224150 020273 0ustar00gierschand000000 000000 var group__XBT__log = [ [ "Existing log categories", "group__XBT__log__cats.html", null ], [ "XBT_LOG_STATIC_THRESHOLD", "group__XBT__log.html#ga78721bb3ac4ce5dcddb5b102d03ec9ad", null ], [ "XBT_LOG_NEW_SUBCATEGORY", "group__XBT__log.html#ga1cd0df7ea8110bd27c2843812f4c93ee", null ], [ "XBT_LOG_NEW_CATEGORY", "group__XBT__log.html#ga9e4d4fda6d921febf75e85f9cd9d611a", null ], [ "XBT_LOG_DEFAULT_CATEGORY", "group__XBT__log.html#gaa23cb30f6de5c9e0a26a6516817c7e20", null ], [ "XBT_LOG_NEW_DEFAULT_CATEGORY", "group__XBT__log.html#ga5094a0e812d0012e6ee4d2257b1a13f1", null ], [ "XBT_LOG_NEW_DEFAULT_SUBCATEGORY", "group__XBT__log.html#ga8a4327fc994afcfb2eaebea0c4d1b00a", null ], [ "XBT_LOG_EXTERNAL_CATEGORY", "group__XBT__log.html#ga7db05649e5c3c7aba06909409e470143", null ], [ "XBT_LOG_EXTERNAL_DEFAULT_CATEGORY", "group__XBT__log.html#ga28625f3f3aa5986954a2b90f029c2e96", null ], [ "XBT_LOG_ISENABLED", "group__XBT__log.html#ga6c9d37281690342c607e30b1f0b59aed", null ], [ "XBT_CDEBUG", "group__XBT__log.html#ga08edef341742c903623742c6e05d54ee", null ], [ "XBT_CVERB", "group__XBT__log.html#ga2c0bed18aac8cf41d8f3480513f564bc", null ], [ "XBT_CINFO", "group__XBT__log.html#gac2f65621104f3bcff51738a12d5c2921", null ], [ "XBT_CWARN", "group__XBT__log.html#ga2c14b44f6b1abbf73104d17727315e3b", null ], [ "XBT_CERROR", "group__XBT__log.html#ga0cd5463eb5b259b005b5c3f87db1709a", null ], [ "XBT_CCRITICAL", "group__XBT__log.html#ga4b5b9ad4a5086e2e9bd2ee47b3c03c9c", null ], [ "XBT_DEBUG", "group__XBT__log.html#gaec7da836fa1482fcda89227dfb1284d9", null ], [ "XBT_VERB", "group__XBT__log.html#gab9815968eb142e81c5e661ececb1f0f3", null ], [ "XBT_INFO", "group__XBT__log.html#ga57f4469c36aeb5f44b5786882b364af8", null ], [ "XBT_WARN", "group__XBT__log.html#ga6accdad9dccecd8d220a479ea0202827", null ], [ "XBT_ERROR", "group__XBT__log.html#ga46c64033e6f2d9f309f498bbb2c475f5", null ], [ "XBT_CRITICAL", "group__XBT__log.html#gadb4c7510140f9e4437be797baf5122a2", null ], [ "XBT_IN", "group__XBT__log.html#ga20e7ed6a7dd096897446901c39e1194f", null ], [ "XBT_OUT", "group__XBT__log.html#gaec5266e036c60029988444fcfdb91e6c", null ], [ "XBT_HERE", "group__XBT__log.html#gaed62d764d379720d6ce03d2a0d9c3c32", null ], [ "e_xbt_log_priority_t", "group__XBT__log.html#ga01ff08eb23b4f14bb759c676bcf8df82", [ [ "xbt_log_priority_trace", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a1b9b706830e4aa1405157d20117aa5cd", null ], [ "xbt_log_priority_debug", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82aac8ecdd32b640581940959e6f9ed1588", null ], [ "xbt_log_priority_verbose", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82afef8e3f2e237f8de9c839a2f5c875fc7", null ], [ "xbt_log_priority_info", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82af28091fa16fda657d0768baaab6f4c27", null ], [ "xbt_log_priority_warning", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82ac87b95b266f551288e8d9faec534baa9", null ], [ "xbt_log_priority_error", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a32afa42aab40395dbabb07cafbf84eb5", null ], [ "xbt_log_priority_critical", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a8bd5d340adeae3a8e5a3182912c230f3", null ], [ "xbt_log_priority_infinite", "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a875884ddb873e6613178c5b3c71b8a77", null ] ] ], [ "xbt_log_control_set", "group__XBT__log.html#ga2289997893363b1ad5f7ff32cbfbf432", null ] ];SimGrid-3.10/doc/html/navtreeindex5.js000640 007661 000620 00000030650 12242224150 020047 0ustar00gierschand000000 000000 var NAVTREEINDEX5 = { "structs__xbt__peer.html#a45e2bc83b39c767a0eb30f0424afcaaf":[7,12,1], "structs__xbt__peer.html#af01618f07baa131c3c0124cd5d0040dd":[7,12,0], "structs__xbt__strbuff__t.html":[7,13], "structs__xbt__strbuff__t.html#a039b27a338bdc7a9d54c36d1c2daf362":[7,13,2], "structs__xbt__strbuff__t.html#a3b2c38009fddf97ec924a6bb9704d21b":[7,13,1], "structs__xbt__strbuff__t.html#a6234de4d442da30727575dbddd31b8d4":[7,13,0], "structsurf__action.html":[7,14], "structsurf__action.html#a0f6bd3843542d60168febd743a659c6b":[7,14,8], "structsurf__action.html#a240981003cb7b2ef07b822b07a3e9973":[7,14,2], "structsurf__action.html#a37297c84bb3ccf1ef03d4e511e053cfa":[7,14,1], "structsurf__action.html#a4999b0d857d5e2e56431de7308909fbb":[7,14,7], "structsurf__action.html#a524498b274bd63b350e368a57105f47f":[7,14,5], "structsurf__action.html#a70718c000fde32ab38b44bda300d2d09":[7,14,13], "structsurf__action.html#aa9ca06fd7e5854befa6036abda2365b4":[7,14,12], "structsurf__action.html#ab18a20606e4b5393b305f7b0e5ca8fbf":[7,14,4], "structsurf__action.html#ab81d9f768089a74b58910ad81f50d5f7":[7,14,6], "structsurf__action.html#ac4a7ad89969d52b85af19d654028371b":[7,14,10], "structsurf__action.html#ad0f4512c2052ff1b6d60675d075ba61c":[7,14,9], "structsurf__action.html#ad4acecd52a2d4699e5f2145225fc890d":[7,14,11], "structsurf__action.html#ad856ef7cb77971a29ce0691b52bfd89e":[7,14,3], "structsurf__action.html#ae625aa666adf7ad0079f96b1c6aa32f9":[7,14,0], "structsurf__action__state.html":[7,15], "structsurf__action__state.html#a037da16821384bfb2364d03d7bc7c6b2":[7,15,0], "structsurf__action__state.html#a25766c647f7fadf3b54cdd5f7ab81957":[7,15,1], "structsurf__action__state.html#ae22e8832c0918dc4942f1d918103e186":[7,15,3], "structsurf__action__state.html#afd75fc8c3f9c0427127d33cf6c0514d8":[7,15,2], "structsurf__cpu__model__extension__public.html":[7,16], "structsurf__cpu__model__extension__public.html#a021b77671388c599ad2766a90c81e76b":[7,16,2], "structsurf__cpu__model__extension__public.html#a1268396ff96a74088a72d907a98d9cdb":[7,16,3], "structsurf__cpu__model__extension__public.html#a139044f6689c63e6939eda189bbfb2e7":[7,16,4], "structsurf__cpu__model__extension__public.html#a1b22aefda22ef2008d3e766b62d572ba":[7,16,5], "structsurf__cpu__model__extension__public.html#a1c11e37584a93400ebb83bf9b96a5e03":[7,16,8], "structsurf__cpu__model__extension__public.html#a3883e31823744ed91d5d8b8c21e74cc0":[7,16,6], "structsurf__cpu__model__extension__public.html#a5816b47e1f6e0e5f93c1c4b62d79a6b5":[7,16,0], "structsurf__cpu__model__extension__public.html#a5e57cc323b1c567fc962402d62dc1fd4":[7,16,10], "structsurf__cpu__model__extension__public.html#a64282d4497eb33d17ab05decedd2d4f7":[7,16,7], "structsurf__cpu__model__extension__public.html#a82f84497e5f6ecdd9a0975aed17951a7":[7,16,11], "structsurf__cpu__model__extension__public.html#a962dfab591421956597dcba1dd658f2e":[7,16,1], "structsurf__cpu__model__extension__public.html#aed1cc6b4f2b91715d103ee5b9f233159":[7,16,9], "structsurf__model.html":[7,17], "structsurf__model.html#a0e84008d3c39ef70dbdb98a9de1bcf48":[7,17,1], "structsurf__model.html#a1b01e2fdca338d8a3180ae3ab054c337":[7,17,18], "structsurf__model.html#a285237be60a0c75c56d50f754f10ca1b":[7,17,0], "structsurf__model.html#a2ab1dc2a56a9950a1fc5afd4b09013f9":[7,17,4], "structsurf__model.html#a2fe3155ae5dfb3782e1e7b01dc90a988":[7,17,15], "structsurf__model.html#a34f89ec266f457c37000f52cdd354a08":[7,17,14], "structsurf__model.html#a4702f5e90dc62742ec188695e0ff1c72":[7,17,13], "structsurf__model.html#a8dea34276bb3ba16c8c951579d4e46f1":[7,17,17], "structsurf__model.html#a8f0b61e06575462b3c5cbf1a22f3e859":[7,17,11], "structsurf__model.html#a90af557a210c80ed385fc4a0f4b3a882":[7,17,10], "structsurf__model.html#a9170f75c0ec35d6b9655a11afb171cc5":[7,17,19], "structsurf__model.html#a969312b9fd1533e9fb8488059522d760":[7,17,3], "structsurf__model.html#a9bcb1343173e301eb3e861d8cefe30c1":[7,17,5], "structsurf__model.html#aae5c7f6115a8e8f0c2c7dbd168dd8a8e":[7,17,7], "structsurf__model.html#acb6cffe534dbfcfb5c3fefc5b714e623":[7,17,6], "structsurf__model.html#ad6398c4a857042569f6943e95d4dcec4":[7,17,2], "structsurf__model.html#ade0d9846b3a3e6321e87a51fc257116b":[7,17,9], "structsurf__model.html#adf9644f3b9b404f36973a25bfee0e761":[7,17,16], "structsurf__model.html#af65ddbc8ce59a3e2e7e26098b5ba6552":[7,17,12], "structsurf__model.html#afdbd4f9c98ca4af207c89ebb29c9d8bb":[7,17,8], "structsurf__model__description.html":[7,18], "structsurf__model__description.html#a5eaeaa936d28f0f7ba00ba8eb59a80b4":[7,18,1], "structsurf__model__description.html#a740c20b38e538e3696a09c873b6fd36d":[7,18,0], "structsurf__model__description.html#ae86f5b47c6be7110e8b6af4f30c60353":[7,18,2], "structsurf__network__model__extension__public.html":[7,19], "structsurf__network__model__extension__public.html#a5ff6d0954f860e74ddc1d0b244f10f4e":[7,19,4], "structsurf__network__model__extension__public.html#a605fe2fe5f6d1311179a36dbf67931be":[7,19,2], "structsurf__network__model__extension__public.html#a6714ba944b2ad344f1ca39243ebede17":[7,19,1], "structsurf__network__model__extension__public.html#a76c9975d0433f0df43694f075b8fe177":[7,19,3], "structsurf__network__model__extension__public.html#aa966bc991d790f93aad9388ec7667138":[7,19,0], "structsurf__network__model__extension__public.html#ab6f43aef34d2a59f87990905d8079ce2":[7,19,5], "structsurf__storage__model__extension__public.html":[7,20], "structsurf__storage__model__extension__public.html#a24ae807255ef54c187a3081cf92d897d":[7,20,6], "structsurf__storage__model__extension__public.html#a32699c8fc477edbfac34ec0fcb7a7ef3":[7,20,9], "structsurf__storage__model__extension__public.html#a42319a48e89b0993946e5f682b0985f3":[7,20,5], "structsurf__storage__model__extension__public.html#a6edd559401a7bb577f9bcc6e5dd14507":[7,20,0], "structsurf__storage__model__extension__public.html#a7c8a55abd88a25e9d145e2359f055eb4":[7,20,3], "structsurf__storage__model__extension__public.html#a7d6f3d2b274ee34a45f98ce665b29b30":[7,20,7], "structsurf__storage__model__extension__public.html#abe562eab79f101743c22738c64f3063d":[7,20,8], "structsurf__storage__model__extension__public.html#ac419c1b7d87fbe63da7e3ded0e934758":[7,20,2], "structsurf__storage__model__extension__public.html#adb41211decbb6c95a961df19f35e89e9":[7,20,4], "structsurf__storage__model__extension__public.html#ae83133f18c15e5337b6e2db10a36c8fb":[7,20,1], "structsurf__workstation__model__extension__public.html":[7,21], "structsurf__workstation__model__extension__public.html#a05b075710abf615a2e8042a26c9c9efa":[7,21,22], "structsurf__workstation__model__extension__public.html#a13bf38fd96228f099d5edbe6f55dafff":[7,21,2], "structsurf__workstation__model__extension__public.html#a1d53057051b5a38f76ada79e77f0a7a8":[7,21,6], "structsurf__workstation__model__extension__public.html#a21f808bbbafa9bf838c71b5e54501465":[7,21,1], "structsurf__workstation__model__extension__public.html#a2a5078c4fb3e07f25f44b2e7c09f0fe5":[7,21,20], "structsurf__workstation__model__extension__public.html#a312f9396dedf79f7b302b30e495cc3ea":[7,21,16], "structsurf__workstation__model__extension__public.html#a31d18284360c7d2c8cbe166ea11482c9":[7,21,17], "structsurf__workstation__model__extension__public.html#a4360bd7e469801b2adc37c56edccfeca":[7,21,4], "structsurf__workstation__model__extension__public.html#a564334f9eb1e783fa1f561bdf3a5aae0":[7,21,14], "structsurf__workstation__model__extension__public.html#a5941aa4dc3036999b15440856231bfec":[7,21,25], "structsurf__workstation__model__extension__public.html#a629896cdfcba04b9ab82e5896d8b1fd1":[7,21,13], "structsurf__workstation__model__extension__public.html#a660cd47d3c8ef9bdd3dcb1bfd81f8e57":[7,21,15], "structsurf__workstation__model__extension__public.html#a702b54c36d761fe3b96cf5d405a128ad":[7,21,24], "structsurf__workstation__model__extension__public.html#a726ac406652d1bae492281fa707d17ed":[7,21,26], "structsurf__workstation__model__extension__public.html#a84cdf3b9de17ceef028da789296fd1ae":[7,21,12], "structsurf__workstation__model__extension__public.html#a90246cc197b56b34eac1d9f27ed1b3b6":[7,21,21], "structsurf__workstation__model__extension__public.html#a9168385fe6385599bf57cd3cfd2a57c2":[7,21,19], "structsurf__workstation__model__extension__public.html#aab3ed59f084f1e1b1f50585df5fe7b6d":[7,21,10], "structsurf__workstation__model__extension__public.html#aad3d20d4803ed5677f542b6f44162924":[7,21,7], "structsurf__workstation__model__extension__public.html#aafea04bd8821bb8d70b411c506287609":[7,21,23], "structsurf__workstation__model__extension__public.html#ab42c4d864c6a32e4c73c5bc71b6e8b04":[7,21,27], "structsurf__workstation__model__extension__public.html#abaf4c0ebadf674786b3f697763abecf4":[7,21,30], "structsurf__workstation__model__extension__public.html#abfe09c2f5cb3774077c701c9c6cb62e6":[7,21,8], "structsurf__workstation__model__extension__public.html#acc013aa36dd95194f3d49ef5ea97e684":[7,21,3], "structsurf__workstation__model__extension__public.html#acc8de81168be6e2fb61d6d808da40ab6":[7,21,18], "structsurf__workstation__model__extension__public.html#ad44708cb6550651107c38f4cccf0262f":[7,21,0], "structsurf__workstation__model__extension__public.html#ad58819c1f9aa1e143e20d2b5a6d550c9":[7,21,28], "structsurf__workstation__model__extension__public.html#ae6ed8c858e3d713fc7f1ba8f04bd1008":[7,21,5], "structsurf__workstation__model__extension__public.html#ae83fe4298008ce08652906ccf51ad66e":[7,21,9], "structsurf__workstation__model__extension__public.html#aedbabf023af55bb46d1e4492fcc7ae76":[7,21,11], "structsurf__workstation__model__extension__public.html#aef1f2e4b24fc51e57560870f9fd83b90":[7,21,29], "structxbt__boolean__couple.html":[7,22], "structxbt__boolean__couple.html#a48c1494b9e7d77ca03e866e37db3bf4e":[7,22,0], "structxbt__boolean__couple.html#ae1dc08ae1e8037e7a42de0a2c304a510":[7,22,1], "structxbt__ex__t.html":[7,23], "structxbt__ex__t.html#a1ab763b8cc638b962eacf17f8d476796":[7,23,8], "structxbt__ex__t.html#a1d67c080063f5af389c3b23c381c240f":[7,23,4], "structxbt__ex__t.html#a2b10084a06349fff9725b7de494027a5":[7,23,3], "structxbt__ex__t.html#a2fdd312ae1d96663701d743283404924":[7,23,1], "structxbt__ex__t.html#a43496be8c6bd77600d056b9a451e88e0":[7,23,10], "structxbt__ex__t.html#a699c25f08a1720fd3d669706e0765782":[7,23,5], "structxbt__ex__t.html#a83dc86da4901fc1589688824301eb929":[7,23,7], "structxbt__ex__t.html#a9bb9f8aef46f7821ab7c0ccd04b52f4f":[7,23,2], "structxbt__ex__t.html#ab5dd68c13c396302ebd7e98f76ff825d":[7,23,6], "structxbt__ex__t.html#ad0a0a10d1bb3838b5b205fc005693ec3":[7,23,0], "structxbt__ex__t.html#af10ed4276cd133c66ce669b8a11d59cd":[7,23,9], "structxbt__set__elm__.html":[7,24], "structxbt__set__elm__.html#a5a2ab800a2ad4e62739c13ff4f7d6104":[7,24,1], "structxbt__set__elm__.html#a6896ad1af2ffaa976b0aa3850bd0a9c9":[7,24,2], "structxbt__set__elm__.html#ad72fec45d8f1714b7465f1b951095746":[7,24,0], "tracing.html":[4,8], "tracing.html#basic_conf":[4,8,7,0,2], "tracing.html#custom_graph":[4,8,7,0,3], "tracing.html#instr_category_functions":[4,8,1], "tracing.html#instr_mark_functions":[4,8,2], "tracing.html#instr_uservariables_functions":[4,8,3], "tracing.html#tracing_tracing_analyzing":[4,8,7], "tracing.html#tracing_tracing_enabling":[4,8,0], "tracing.html#tracing_tracing_example":[4,8,6], "tracing.html#tracing_tracing_example_parameters":[4,8,5], "tracing.html#tracing_tracing_options":[4,8,4], "tracing.html#tracing_viva_analysis":[4,8,7,0], "tracing.html#tracing_viva_graph":[4,8,7,0,1], "tracing.html#tracing_viva_time_slice":[4,8,7,0,0], "use.html":[4], "use.html#MSG_ex_asynchronous_communications":[4,0,0,0], "use.html#MSG_ex_basics":[4,0,0], "use.html#MSG_ex_master_slave":[4,0,0,1], "use.html#MSG_ex_ms_TOC":[4,0,0,1,0], "use.html#MSG_ext_icomms_Main":[4,0,0,0,5], "use.html#MSG_ext_icomms_Receiver":[4,0,0,0,3], "use.html#MSG_ext_icomms_Sender":[4,0,0,0,2], "use.html#MSG_ext_icomms_code":[4,0,0,0,0], "use.html#MSG_ext_icomms_core":[4,0,0,0,4], "use.html#MSG_ext_icomms_fct_Waitall":[4,0,0,0,6], "use.html#MSG_ext_icomms_fct_Waitany":[4,0,0,0,7], "use.html#MSG_ext_icomms_fct_Waitany_receiver":[4,0,0,0,9], "use.html#MSG_ext_icomms_fct_Waitany_sender":[4,0,0,0,8], "use.html#MSG_ext_icomms_preliminary":[4,0,0,0,1], "use.html#MSG_ext_ms_application":[4,0,0,2,0], "use.html#MSG_ext_ms_core":[4,0,0,1,5], "use.html#MSG_ext_ms_forwarder":[4,0,0,1,4], "use.html#MSG_ext_ms_helping":[4,0,0,2], "use.html#MSG_ext_ms_main":[4,0,0,1,6], "use.html#MSG_ext_ms_master":[4,0,0,1,2], "use.html#MSG_ext_ms_platform":[4,0,0,2,1], "use.html#MSG_ext_ms_preliminary":[4,0,0,1,1], "use.html#MSG_ext_ms_slave":[4,0,0,1,3], "use.html#using_MC":[4,2], "use.html#using_msg":[4,0], "use.html#using_simdag":[4,4], "use.html#using_simix":[4,5], "use.html#using_smpi":[4,1], "use.html#using_trace":[4,3] }; SimGrid-3.10/doc/html/group__XBT__cunit.js000640 007661 000620 00000001414 12242224150 020633 0ustar00gierschand000000 000000 var group__XBT__cunit = [ [ "XBT_TEST_SUITE", "group__XBT__cunit.html#gaaf7f17704d7f1b2070c69bbd4a22469e", null ], [ "XBT_TEST_UNIT", "group__XBT__cunit.html#ga00e45218050b20e0874600bf8a093fca", null ], [ "xbt_test_add", "group__XBT__cunit.html#ga33c58870448aa6698fd8ceb02b5414a4", null ], [ "xbt_test_fail", "group__XBT__cunit.html#ga04e70ec73d2366145a38eff836653ee6", null ], [ "xbt_test_assert", "group__XBT__cunit.html#ga15e0116c033c1125582021c76f407ea6", null ], [ "xbt_test_exception", "group__XBT__cunit.html#ga7b2f459569efbe7862537a2223374f24", null ], [ "xbt_test_expect_failure", "group__XBT__cunit.html#gab6fa2a7525ea09e047ebc849a36afac4", null ], [ "xbt_test_skip", "group__XBT__cunit.html#gab1fe95862df7198fb9fc71f1fd031f5d", null ] ];SimGrid-3.10/doc/html/group__msg__synchro.js000640 007661 000620 00000001140 12242224150 021323 0ustar00gierschand000000 000000 var group__msg__synchro = [ [ "msg_sem_t", "group__msg__synchro.html#gadb025f3f21a31a3140675cea7a4ef957", null ], [ "MSG_sem_init", "group__msg__synchro.html#gaa540fb0fe72d3bf3b4183ba3c6e07faa", null ], [ "MSG_sem_acquire", "group__msg__synchro.html#ga6baf039cbe49f8d83b8d5423f463f4bc", null ], [ "MSG_sem_acquire_timeout", "group__msg__synchro.html#gad080078a175bc7f88618970b07dd445b", null ], [ "MSG_sem_release", "group__msg__synchro.html#ga47ed8c02cacfe486d3fa7d29beb56af1", null ], [ "MSG_sem_would_block", "group__msg__synchro.html#ga46b0858501af3424a570f8d786320520", null ] ];SimGrid-3.10/doc/html/group__XBT__API.js000640 007661 000620 00000000433 12242224150 020122 0ustar00gierschand000000 000000 var group__XBT__API = [ [ "Grounding features", "group__XBT__grounding.html", "group__XBT__grounding" ], [ "Usual data structures", "group__XBT__adt.html", "group__XBT__adt" ], [ "Misc general purposes library components", "group__XBT__misc.html", "group__XBT__misc" ] ];SimGrid-3.10/doc/html/dir_abfd4b05a641ac2679f98816407469af.html000640 007661 000620 00000027070 12242224150 022770 0ustar00gierschand000000 000000 SimGrid: include/xbt/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
xbt Directory Reference

Files

file  asserts.h
file  automaton.h
file  config.h
file  cunit.h
file  dict.h
file  dynar.h
file  ex.h
file  fifo.h
file  function_types.h
file  graph.h
file  graphxml.h
file  graphxml_parse.h
file  hash.h
file  heap.h
file  lib.h
file  log.h
file  mallocator.h
file  matrix.h
file  misc.h
file  mmalloc.h
file  module.h
file  parmap.h
file  peer.h
file  queue.h
file  replay.h
file  RngStream.h
file  set.h
file  setset.h
file  str.h
file  strbuff.h
file  swag.h
file  synchro_core.h
file  sysdep.h
file  virtu.h
file  win32_ucontext.h
file  xbt_os_thread.h
SimGrid-3.10/doc/html/group__XBT__fifo__cons.js000640 007661 000620 00000001004 12242224150 021610 0ustar00gierschand000000 000000 var group__XBT__fifo__cons = [ [ "xbt_fifo_item_t", "group__XBT__fifo__cons.html#ga58e96f4a3637f7ff6bb1a9f53e7865c8", null ], [ "xbt_fifo_t", "group__XBT__fifo__cons.html#ga24efbdc1db204e1a628958ce7509a312", null ], [ "xbt_fifo_new", "group__XBT__fifo__cons.html#ga2797ae0ae47b096ffdd99fbd60d8402d", null ], [ "xbt_fifo_free", "group__XBT__fifo__cons.html#ga7e4e0a12b0bb5a0cc761e926a6ec8ea7", null ], [ "xbt_fifo_reset", "group__XBT__fifo__cons.html#ga028b8b135de99c5526269b5c124093cf", null ] ];SimGrid-3.10/doc/html/tabs.css000640 007661 000620 00000002213 12242224150 016365 0ustar00gierschand000000 000000 .tabs, .tabs2, .tabs3 { background-image: url('tab_b.png'); width: 100%; z-index: 101; font-size: 13px; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } .tabs2 { font-size: 10px; } .tabs3 { font-size: 9px; } .tablist { margin: 0; padding: 0; display: table; } .tablist li { float: left; display: table-cell; background-image: url('tab_b.png'); line-height: 36px; list-style: none; } .tablist a { display: block; padding: 0 20px; font-weight: bold; background-image:url('tab_s.png'); background-repeat:no-repeat; background-position:right; color: #283A5D; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; outline: none; } .tabs3 .tablist a { padding: 0 10px; } .tablist a:hover { background-image: url('tab_h.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); text-decoration: none; } .tablist li.current a { background-image: url('tab_a.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } SimGrid-3.10/doc/html/msg-tuto-src.tgz000640 007661 000620 00000116377 12242224150 020035 0ustar00gierschand000000 000000 c(R}sǕ;J̍S^TRo3'tx^]o._^.|qXח/n?ZSmbhӷ7^Wg/ ?G{{|qU O= zQ ]<;|Q|y}ohX;_ zyq'ů_๿?)n.Cç?/wZmoOo~w|fg>ry88|Y<{uzq8V^uQ\ P\y~ehcwO~oɯ_7=/ϏGrӭ/o^o^=+^\^_Q,vgC G?O^tUlۿpkugWWWO0SQ]\7x=~d;8%Obޜ<{e>o]\{z7[oo| ']n<ƛ\҆z0}9Ú[~zȍ#ESwk6/߻ػ7W_V3amK4 -;j)>ت}9B.էn;Ҿ>&_63[ȭ)WpXZo{G;b71cGSﳱ۳OƗn2v@ϊDt>d޼{el77y~5n?/vĴOCbcY۟=$>6; U ﰆϖa4OwxyysP}D{k?Fӏ)x\t]>9:}\{<φgba;{xmLm|['kU(c6FsWry&}յgQԚc\r` _dhOob wR=?_xY\|ۃ5t_omSB|i&1Oc73w96fm8&6ugn>4=[-n F]y{{~[oqn ir¬l3/.^ެ?zp)6VmQ;2ޛUwOwh˯g,.^?=999Y3GYKk3z}E'b^[ ò 7[~a7?|ayunW_˟}Zuey4읅wy-,`W<|ɰc lqdz+SoϻM[#bx7?ߵ}:{ ~[:1?۶3뮇}Oɯ~W\퟿^ܼ/>{=̑'/|89:;=yq珆YG~oW~q=˷y}_ߞO[w_x2ɳӧgha/D~?98xĞ>-pB:}>?_= e?WbלT]ob{>}|b>4| {r _cӿ_?/v}|`SU..=z&}Hz󳋿OOͫ& dwj![[ebVmSO?Yzf^-M-q\{zqs_kO0O\l?q,0ߊ='nӳ'gg5@Ǚ@¥tV԰?;C۸MSMXX`qXռ%{#]-^?=?}ڥ߾'o,R`ۜľ࿞8z~1qX}0w'3˷Wקw~r7yv_3|G]}iS>]|Svӗ'Mvf~$V=InBqzwt!5'} 3wޝnl: \xG)?izk7~='}c;,va\_]b<|O$O*It=r%~ {~+y?|oǾ}o>>n nmZ~`^_&ı__aoC?qo#8u?Z/oZkc9㓟9:93?Z\\,~̏^^=__S>^7o/^Wg~2$W=zOt0TUV__};>x(2|oo_~w |u#ЗdZ~Fܲ6ӿ[N2.ٯr=Xٳ_w|j5o¯.nmWv]__8ZɷlVo'o,u5 Ơ?wWC_&]>zܝt>N_2~WpH'a^~5|d권Kj`vJfE-o}ݙO>YMfZh~@u}߈]gLAvQ5f4_xfሳenPfFE>[v1˾-0kݶyhc~&ڍmC:rlBz%Nos4|鵵zw7f33Mk<=dzuW]//,α<O?˯D G?,m/O{c\\,ޜ^L$?/3==Nwa_ӝutiD^qqfi#_[{Omq6>e^ֻ:>'?pt|u|:j7>nz߰>ƃMovxްGw0ӭa{c{;ڡÞvs{]ACç]ON[ܓ?Z=|6i4;Mx3A٫gv3t;N=6kn}'|eg7j V6W~^/fWǟ|Rc<ǿW\ЇFwGl>mRv@^pv|/hyYK\XZƙ׳4nqS[|W}ψtw>^:c4EXl|hPe}?5 af>4 ʹ4׻g+5` xBC03쿿{Liiy̿O|aWO"qÛ=x~~s4w=[́}R],>})mq8Lws~ÿ60z]a2N"29v -ZZ'oT`T>icgѨӗg77gWkmԍ=< u4xԻuW8jYWcWZ{%X-%z9ŷox=>m#]dmMn> >uNf}}?|ѬуBx^n[9; {EO0xOηyL_ڟd/wSw?ij:Qۺ | P uԞhG]Xu+cn*oǟlbk2k?[ǿ-›`_5O> ܻ_t[?~EUx_`?5ׯ+ݯp<&gù~7{soܯ<_[~~tLz{[yn9nC tk%1a0ZZHK^nG@|xNtJ(w@9ƃ̕Iv}1x9yvn-W׶Nm9nGաJvf: ءC*nnbg5ð{ ?So94!iBO}4'6'.HuW9[C_>u!1<^z8;Dş+OD|vʳw%|Wmo<{ókwR A_r>Kf6K!AC1ϒR^_bȂeXY/\]V1#\,>#Cx&tdvk vc9d}А|vg=`g۱`a<2!K7ҙҭs)}А|`S`cJ2ȔnLÚҝ>(c4[?x1{I}ek`ց9d_yА|}eg_9`|}e`쾲Ӽg_9ʼ@NϾrR^_r%|l:0l4lGn6ŇdwlGhi0d2hi0d2&CKvy䋷o2,o=wn ?}.1{3]܌c{2]c{1]\cGalh~lÃ;3_qvC;i0 e0>Ppg`yX|NbQhJ e0>Ppg's@cQ=^f2>bk뇔b/9`9Kg<ѣeH>'zLDsNbm(+; >Qy; >Qy; >Qyf2>'Ӽ=ʼ=ѭRvc?NGdW4!8Fmb6{w˃Կ!߃D 7#W=o{zO;=(=n="OcBޏu9d=S?⿦jm hW,5{ojNpIOx?:^ "9c}6a7;̽=~eo|blp=Ut>nk;܍{va>~oqh7e?h-<|hgV432WTt7'ۢbs+I߾ig=zҪ!A97gXp꙾S>oϦ}ټVV=I7;>ޖ=uƏ-!N ] ,mʴ6ν%pV_|f~O\9㏎3b,?t`3)6}cǛ4sQNArqp{atq w#XG[31. i,XsAkc[C~C5x3tcmyt~'߽[=QcL}ع2<ƞtcm䎇?ͼ|thm/3TVgkOpm?ӿWwҧ=so/.z7ipeL'Ǩ7ݖ<ݍ7vʇVtailvϖ ,nÕgD`f7>H/'`1{NÆwɰlNG=<|21venp1M˷׋Ouyuw:k5iO5.ǂ]/nnn?٫kOz)aVpwyP?߆0W\?6omD}bˮrbjF}wВÇ`<0L>s:ۇ-O`x׳*|}^ZrpדZ}._9+g\ד;j!!n#od挵=3~=ϴDhMcK<:&HM7Wg{>Z8gpb=)V^rסg_4T?aWwrJm͛dtV?~|_~}£4/]^8{ cbquo./ųĜ] 'aW 5_e.pIgo>?%f6>dQ[kG>$aۛTţᷟ~?ӯt: ?0BZ&Ie'mQ'}OHCjM!n>'/Uyj1tfIPgIj錊d9,aLapt3Rlb gP$T 1\κ@71 #EA v[  vċv"aa bZe@6 gcYb v_y}÷BCI ;23+k7rC"=aG9Ay떦+8vSr!1n9׼!N_$6 M"$0%!Eh5b/3B]aW~6 ڝ0Ը WеKX23n0CܓirXU:do͹ "Xc nRCKWK_pǁ_)gvZ(x1U; ij۝/AgnqƮ~G4 "JZbԌۙSN,cc*BAiB\ $ uME^Q"Zr74ޯHMqY,˺ 6©W8us[m@h+{Ch-tcIk v/]fy1kҀs]c72;+V218,l U lhұ͘ښk*2 4AԶ gC}Xf)"aZJ")XXB,̼&ڣ%d0:oHܻWwSs(H{ـ1*bn$+H{re :|Gij-ΠwnWwjZ}E3) bS }J#Gp\Jw@B..C&y}e ,隝Z+[Fe7&蚥C!fe'f"q(1kpTF"q()I%xB[I{a廿]Vj4?gSJrzzz$A]J!,-OHiĽt9 B25N*ZiHz/ &i9㌈;h݈LNeSF1#8"1PXDļ#\_(]EV^jJaV 8y'转Ģ*|_Ji\(7 XGĽȘ޼iX RQ^UF"ډdK+nlh<|ɜ4H{^N ݇)=3쭉 ;S, zG]Md(:5Y(D]_; ppr;K zʆg. A&,TaW*EJlvj޻+QDG=_z yGyp_G8;@Q,&x/R4K7=F9yV= ʙ(+PDFzfaw"!ewGDG ZQ ~]0errؕl(R9ƭX0۬兎T#wRL('݅B=kwRKI{uHIs{@M]$ u} _}-ޭ Bk `ߓNc*e{MV %=߽JZ2:¨˲;T#+(E nG(iw|vEľC5 ($M '˱0n>'["^o$b!} ,msK P;Syr(kщ3C"}SoN Տ%\VD"=مd;`RUw9bv)ge\%QyQ^x@K\RڢiFxV@0\8STxF{~YNQSfsv=ݒW.eJ'>1QOV9SC!,ҋOR\|";[B#M{6):0w(s!ҠB-=N*1Uf,+\,>*YP8ĿG-tDJ=o %eWixyaN-VgRSD|;4\Ef 9JTu7OX=CFxH W0VK̿{}P%*щwcJD;PF+ӔPօSJGJACt)N' ~XZ:D W.b&A [YH^F*6OdDXr ( Q^^:OfC+V(KD{MZ/XtXT×vrСQvwj+th8) KKAL}ӤIÉ`xdIJD,|3f׽+!a{xI5M"Rm"cAVG4LZ7PXESHa BM%TR2 o:C4,vN"mX Bp&3 Ie4wzsT2x;q">NKWҘefނhQ%ԲYʚ™`dshxJ;Y+4E {~X8Z)- +{<VbK`x- oK0YAf1ֹ*vBZ,BrTmpO@xRzQwpnH&hu ڡFe,Vjò+d"qM :LY1+^Z=⯲7%4C<|6':)UB; |@gxxw~r  HJޅgb\K$*33ȣYo a7 41^t/t %S"–ҳ)7^n@|raM\!&2qP NJEd|H^I[+RA!ekգ6dJP<`i/d3!NI7ށqGrZqxHbOMZ X,dpZ Y˙Qx\xyE0|t[)u oR Hk ?K64 cЎb?ķV;rHEZGXJf}x%uOM8<{Ѻ&e42hB5|m2\M(<DYaM$|bxIFDT .;tfC%X c1z]dlvIbeM(|ZթYBBkE <ң$.FYo!NPv #aJ9fτoXvp>W J5Cv?YEYp8bq5Zm q!֮@[_ ˇNFS ;?)E[ 3"*+Qǚ`B4i=-fqOک%>:ZAk5G&+K"O _bI,3l6`?K|ή)Nb,4pbq?G,`hmHS*kyȔ0x]!q [zF|얎l+) oC- xJaaR%]-бRYx(c7ixAz0d>3x hxjC48e35JxJ|5ev-gwŵ4q&-Ä,$2F bqx87,DçfL JiPʮtUH w~H0]!B?, 7XK.HX㖶4]kcixThSEtC0<awZ+ +kbhS˨ī]CC@|aV%RC8|ͬCC@|*6gCTW2- b.!K x;#IC`<L40rBJz 8>n58rƤzL'.(qT)y? $W#GkҰJC.!4DL1Ũ/Y-Rv;O@<4^Ch|ㅼjjC`HUkVm P4Ox>1: ziihLm oYyzŶ"Qt` |ermÀ2 &e[`/ 5x ~jOZC|MYaBcID\؋ݩ\ۢnٙn O,Gj|X!B͈Gm!y 0ʗ6})#Lj%D2-+3!ꡐWigv(5Z"0% _" ( [-O7s(e;aQnZ9SU~`V ǵG;(_"S.?ٵ-x(eBSabmxe0>䋛Gw-miZ\R^Ɨ`(=[K0D5vg2UK-eؕp[b۵u[-pD ;deGd舊_ki:AҴ,į*JG'6`_P%l=HhGzaiAAI]v3\|ݎ$35|^,S%~1gDi˄GH 1񸗎~(ܕ_FҔw!y%x7픀sKzӬ_һ%b dz*Ѫ!5'D;&͇ZɧvG k)s:"fڜK;rf7: ?1J'qoǺ9B4M93*5sKJɶxG)ueQx3IAC) rg,E']q%Ih[ `wBvZIS=tDZ:dF6a0[MSAA3q:&pVK辳P|U,X͡Y,SZ(t,yGBTfZtÏ^*رR|BI |'CWZh= %R &>u>Qk,gxxXHCk7h;v7_{JQ %Cs4ӕijrr~V%-d0Ä% cjVrOH<n,Yxv(tT:23' 9!c FDߠH@Tڶvu?h{yge=➵+S+.%'Vp;f(lq⃟+iheytPa"P ڷK<|HFY%VAzmZ5R!g 4K{TyfE;W5<=dٴ=CEDc9K=N% ^v_/ߣlM.0j1M _zeD0<+ɒF JZG/Ô BeH3{byF"1 ޳@r#YH֖\ xaRY '>R iao,Dad :K:,|pJe:W=J]S5̵C) m+. v*$'QxjP*E0?.jWsUGtPhP\EBJUa؃BP(M5!e}Ӊ-O-W cittj!HX 6v7mX䡜[&Lk#jn5C ]iOIj׌] P?,ᅯڽC{`CZ)Iu0Cvc*ICve4ք0Eo}vpӦ -,Q'gR)i3ISʆvYWN%f#,,{٘k_җpK?I;Gϛޱ2SxJءKf1S+1&"lyj:/He@v7X'&}lWMZ\TD4k3-IRxhAW(Ct*ig7G mjxL/icg -1%)$1ɏFBIMVYKlta^5u_+jJ@ﳫidj2dh旝n [dDLu}=0{hA4F)%=4iCM4tg. X"9rA= 73jnd,_ ޽ ?8wg R^$uAJáa:C*k©&T@K@}uCן{?>RKQiK2Xֆ cR J wޔ[ @ !h5 2j) [ TXJ8.,==9G:@IM}o79 =Q[TMx9o}x^ +xhY\1M>+)Hz #3D/!@dBre=bCì5:L\fh׎87>q-)$Z &pdaE$׏E}PV s8-VZf/\Y:S\gFbܵc;vr&0xH6єKjI[fRx`Ґ!y Dߗ\Yc~K/3Ia+>ʩ ~R8+?0|*8B49FO֑Z)LТ= $󋏎jva۔>/4̭8'_|L|фRYSNBGyՌRv z&c6ʫJ @~YUf/\;<^mh څt~ٶXz-eQKcE\a@+I-ah G?vH-Gtrgڃ q̢\PD'֮*lL+`UbϏANIKWy^-j\2iV$⾬f#=luhȊ#.lyj~Tޒ^GbJ*/gqv2CT4H=BȮ,dBI[Sp4u="ek*qF>a4{Dcω s@\j>Yyۥ'w( ާ J~ UYm(+ߣvFjʈ@elĪ!P=jN8"_frG'81}:ju#Q ^O9 O,zDd8RINXb ,IFCaY+ _^k'e-֚_z2m{x۩CR=~K:Ab%KG3g{:G5lB٫ MF&l{|OY{'z/;$92-Oj̑{\#ZN!梴S KZEj[|!:'=j=J3#CGYԑ A^ml{Q'\K{L!0f R*2zL)]jMV'G>ԎȌs}"Ư"* ҡf c]-SMOWo xCdG־s ]Q|zk=W >%-7w]>FKy Jkr,$Rf{ϣ gmGh6jO$⾄=lGs*jnd{T@^2Ql#eёUMY='~ҋ wN>>8x]P䙔!5†]u|ъGy\yB%^{}/)lx&5RQ&!lq,mw&Qo:R )wF4uEܗ+^^@ , ҆F!4^˨!I,$ֻ?*GuD}e^ ]D}Y҄{Bivk"څ9Ґ|3(ήҤ}_.)8: 4kW?^$tFDlD4x >r-FJǤ85_uҖp2֞^"ɾF[71oa,i_c]Վޣa1J/{=dQV_ 8){sgF{tǤ.ɜqXFGLJI}lҫ.#W2i#ZR = \OIQҎa6<ír* bcKPwjR'9}FUF$^_2 'Ğ#⾱цvKGsQ^̱1j) +i+ve"ä3a:vLWb]*=K{LD5L.j)gp{`n2nmf&b2)C@y`d-DŽʭ{!LGI4QeP{˦ q#Y#v_{Fl5@xw_FLSkd-#9,+y*^ضrf@֓ec'3#$qNx(f7t"yҾ.)V>PVpfB{Λza/lr0KEʑ>b"j#$,v1gT뚅&٥%֓{${i#9+&vdbm~S֯ߣ"\0-@}@A j]3kޏkI]x:= _]$S / G&iQV49b^o=.lXZ` OyA(-#富x3U[iV\M>|լ{? U@yLW=K1Hz¯D֬{EeV1|XKLS#7+ q#/-a3(Xkimi- `GJRı&(: Uj)}}1/gX%PY](I#%_ϰeq:N͗dDÄRi–92!Y>j+LwK.p2{G vDa e["$?*3"& =fkцy|zޅg"RΐV GgK&p>hQxiK@~ۏ,߸ (ct8d~v  I5WWƷD$ hP{4;k5wk3`%431/-'H\E9!΁(mG:hHCҽ e2!G_g;)?Z,Q$Z7 ]_dmwp9CF0^koՊ rR3|kI[&0k xz_f.S+}5ce*mfI?|y. {/"5`Dߏ^`f)0{)%-;f>IZd{Xѥa)|*q'e q7|)ebM΀0$fUa5ߣR!>u 8}U SiGY% P ﱮ SR R%nMAґab:|J{ڷ@k;K_Y*_0u<^.QX& 5e,SJE=V{pO./(,ʊQ5C 5ʔjYVK\5݇^_Y4vv/R/HuGo, A)H#"+/Q(l2cvn 63=1clJɎ4f av^#`m~C{ZgaPGu|-ϔT]U^wKw2nTYM~MCE:qurP Ց(/I`> eԠrK}v ,?"$|-F'ܥZՍ,E(ZVGu/7"B_%?ӟ#Y$t" jj-ahϷHix% ?:PPl8Dѿ0|lIͅ@-t2i,(VK$>XCiTҐ~j'<]ᗐ-w.$ir-a).A{1-Q%<{٢% ],3adRc1"j&!Zop],DFY_2{Q Ia9I-2/.5څ-%Ϥe[oF #ENbga^jX W<%KKD'x9 ҡA9$ -CJ\:QjZ@|ߞ;P/"iRZlCUtʡ R9|s@aK ><2-s)',}o{"$?%X-Xc\, G4ڣ .;;Fi 'h OpRJ BucuQ{L21E“VK>U]ңf6{)422,]jz{}jWe6ʅqyˬ\D;DO-AƽPT.bq:F-hPg岘). c-NYQ5{5 F\舳/Wq!6s8d% )BN!َ@{+:ֺ"IM=( ,ca@qbjy]O"!5:k:"XNlvחUV#W3Gck/ ii:"Kt޺үesU0ݽa>(4GpG2QQlױĽ]N}dסXy .UQGqȇk6nSZ/-%6x7'x u鋞 6Y!̖RTߪq6 ]R{?L'dqzd݇JsMl= H+"~Y>/Y!V~uMT}[y&}6j+坞/o#rc$> +;L`e>Rɒ@U#ִU(0ɓ8+ܓYuP+Yt Z+‚vm)&)5_,OjCPkW 'Xt}"aeY& 3x}}{WL[Op=d'rk'vH3j=bg@BXS:ΔT/o۴=ecL"<#ER(z@=uI P\Rff< f2K퉭T/6^Od=,YP iWWZGl &aߙL\}حb-0&Gra2`(".ͽGMPM|ӑ_ZǙ!+z;3f [f5U-(] [//z1`yY(\"n=.i:R5-Ϡ h?kG)GȝK({Є索=ST0J3H H{.Bwb= #U.johgI{Go޶Xí'~6ñ'W:{'޾D$$YQlaڠ1T(au=،%x}ޕ\CLP*H{~'Z&t W",ix^j3t_ű[BhOؿ&ރWD]q ~/S"~)U:ˎ T8=1vv0P,iEFA ۦã y""lj{[U5elGݥZ}O}=9nuzc)%Y(UQg4;Z#Zy=~oFwT'Te[B_atϞueOY[Fa䈁 -4^II{6([IS{B4^>7sSk+4#-ס] ͲHދ D a4S v0u EȈRNCxr-5zm=e$=FbE~g6 C390S{E@pFw]L2KOc2rhjӉ:,J`hxjp W^~ EFjv}Gmaڡ(~;AX8KwuVAP]iԂYpqM]`h 5nQZ 6":4i}hyjR8i%A]iIe5lzz2rzAnFT6yU.NSC={P& -eb@j1?4MޗRgNY=Sj$K(cV[ehNiyj&n(&:+#DCԥ]-L[֞(]O~āF+^JB=R,WVamJ+u64LFրZ.ȽM},& JgH7.#W[C\ԱrpB>=;\GS(vn z.02!FF}Z6ݛ,IM#)r[&>zRF i9ˆʝ#;yղNHLGk1lf]o۶Zn9&476]vjhh9%$'u?.(QZ m\/DX,>l2{̰0?!y gD f'5rD+X0[:zv9߽B. Oh+󃏰ltfKA쫮haK(#ԋ&!TWpE [Fr)]V /b{4Yoe6gtZW]lق}6% ofVȉe{6[56)n>joHeƙFr^EpQ p!|)ˢ囏hd,/ܛN fKZS*HvkoY"Tq7ѓp퉻)vEʚ푽IX7I{)}@+\h&%K96G>$$S޷ףӔ`|@-2v⾅辣f{J)]Pf{3E.X C#pP6¶ \z )dDі] ko5Mǰ̳AFa-nE[ lY0sXKr1}  !ŚiI%Qep}H6b4 ;Ȱ$+$IY0蒂,<΍ p&"{LS @3=B8D4Y+ٰ6E7cn sR+]0}{荖x3GHNI{%}uL-QsMI0ÑZML2 |=VVks}"ʞ |-#Sxц!hBc:V&E1HZ|1P؂1=4n 9MQ!,xB3}#"z@Gp>cؔt=9 I# xobĿ h)%ch1ޭ a{"t.Nr81Խ&H0q.!x2XP6 -X?4i\{qĽs7qS]vr o&CHC7p1C3#Mu.ĨKD۷[9]|y^ppFYJҀ1=Ό!6Kh\h:ep q)P[&wr/Z$V>]uak,a}.tVdf"*\= Wh0lqW0cp/.9޴xr Eͦ{ S2ϒl0,!Ɔ@kZ dÙ5nRTDd8h{g h7 G*pt dJ =A~lٱƶq.ʠ_E=q>m`$G3lJ.[ kjV4+I d7pɑq|!pΟmׁ9:DY GZ"Pg {t'ɡL Rpv{=lc؊ cA<3#Zl j aMY5b=T`@&ɖ8wa@{" 碻}+kɬj0P$Jb8>@, $B)HiAZ2sˆjn$X0[16//Jj8>@`{AsQEu/7bᒙ (cɕ̙훴hZe8^%hv2BPoeRJq: pȽm!0JsNpYSHa{\"c 9U6'iBF:qӑRYT,&)D ceۘEqC#¥'q2 j@"&C=d!ϒڛ].s S6 gOiMrIX_8{0{m01e C #73Y]s{Xy Y[Nf(6hsD`rx5lKC kb]W0}P#<;r=NXg#"q u%W =r2";ʞǸ5#9G1=) ,%4%W =@|[)ɠQBSBm6b։v.ni6) [O-`ɋ+lҡa>YWhA 2hI#Ya@{~PES N CكX_ E[&Ie]ǀ_2KFc:6b |I ea.ptE5 x*;je{KILxb{a<ꅙn4e c1b "ǹkYߋڷ[:3}zab"&85ac!G-؃煥 6-絏\xKy|51ODp岰Wg7"Y7Bd@^[`8W*ztaVC(2pŴMXQ%&#؈X7xQ4Eځh,'t$!ւހn#dbFH4bKh5kq cA Dw,7CEVY71R\!h.),'(!%{7ۇ_Ҥ/[|rz{< $ƶfш!h7EX1A$E\L4c9>nb@<E=12I&D ^a1aV aH .7Bvf{byI a`E3:Ct{9Ӣ!q"$h<2콧F o'XpI?,G߷PMr3= ':'Z,CZK0c)9'趬aDbaOyqb oЖ8 ~qF*[o41ގ+϶ )l0;e|<BCG1ImOE!}m8 #_{h+pצ,ae|Vm =%  9/s 1wD`ř1Y}-e L)lg(| kфOaj7~]vl<+,=e|)!DIOCC광GF_3% O(CS a|\iKC:-EaQe}cI-6D%^4^jK[=qųXNxQf|]'8% &AڵSG0e|87 Gaccѩa1 ? 7_S 8,99=d[>-W‰m 1W#m‡3Ɔ[7-uo=wőd0|b\F(JsSsKRL+f=h_@Q i1Րݷi8G.XȰrEє,!经LL%8]  Riє!7EE. S"d|{MF2@~y 4P;dx|$Lԡ4LмՔ28T ,hTђBƷ)b [^s&z!FYQN$Fրp$>n+520>3"IEaD#!~-Zp :]τ ocon(0'("4!s lQޞа#"QP#5 {a 'GK@ =}@Hrb|<cNTCDW!oY%!cn6,)'#b# q<ͣ@6a6! z>.fg?E/ oZqknjٰj@L^hc@O1fT5ܛf޴#te+Bl0-y]5!'iF#ːxj=jTToȰt½|#[r = +Pfp+p,5(99ߗQr hVdN@aѿF^Ґ0=c)f-;=2}o-&PdOg s$Eb pi'Rr{ek,r{Lk $Z2`q(F`; S6Le@\17U5?M#9_hs(#iqlE~S\ fܫxXF!(l0x: mقف,)0PZQe"zMQj` !% z w'IZ({\D 9M1ܽOЋy%G݇p[%6C71xe𡴐t|z%?Hu/$ڽJ[hbQ_ u!IW3}ϑh)G6FzWB~;MD!cjZÉ !Eܬ,<Hdt ׄ?* dh{`Zvݞܸ./z|٘N;t|o{?_QFq*o3¿M+M:,o6&pnF Qv1fpp]}Qүк oA:y?tR5.ߦg 8ŧ^:bp6ߙ{+m­_t߳':ĵ|C^2I`Tbu.d^hC Yj0$'QrSuޑ:O8U Mj^Q6k4+_O5QVu+7W eJFirrw]'Yjx?Rv׮=5q 2i\Un*8Jkm6ruzV5(2}f^d?Vs4jj|{v9N̸J&JzY7;|7 00DSTwc"~)+?at ޹S7*=wwp MQBLB7I]R%\Ӕ(PP;&H)Ƃ*ޥ&ݫ#ud%nmɚ &  Nmz5L}\Nj/-ZA(fπX:j ՘:H\d\t*Cgz]\aF:ÕUiϛSLi}z^SZ/kPP@}#>NIf]*玖tcOxO}t9y߽qV-;%E7XkK g\Z619H|c:Lާ` tǚOr /;$F@ﮯɈf_XQ᜾e6a'@2=z^8`w{O=uz`OփY<`Y*A?TÃ޺{='fzXtNC\e)h1_?xZ8}ܺblܝ.ƊʻؼΝP\ߤ[bldؤbldXŔM=4q4Jy]^o6:*͚@Ub2k]\*ÖkNҬ^.w˵n\'oX7|9ܚQQhkEyڟ{L嘼GLTɛz]ċ|E.f'Ay<(oVKjXܔ͚^<{SCu=Tv}qP] ޺{=T7"IӏNVCNvdu=Tzq;Y]^n'+ANVCE; z ;\a vpnqC^8Ar16Kn]{Ɛ8u1-cŸ'Z.Ÿ,ccu1VطKofPzs]ۭywv-16[ 16[2blbblbdn+nɈQ 16[2b[e]략 A\`* 8k;aQ}-հݥk%yWvʻS]}<:2i:cuz~U iw;u NY4Uai׀:5XW:@vn͖m]<^yC&[c#v`p(z` Bm&pj zyP]lsiC=uz6` +%"…`\T}c\E=z8.㢂Eu=(_< \qϹ\q!Y.ƣrbl<BLMչ]r 1*ō)&&EF >vq@c@)̿k:9ӑ9nxwqΉVI}\=Q/hwwᗃ4Rg%|>9ߍ{MWaȩ,L.r-~>JD{>rK)@9{s;b#/k[wqyۗ/{sW_}U3IǓ xվJc۱ߤ"ݽ-4~Z;6c2t:FMY@h8VpU8ջxgEOP?q} W_{E6H՗߾x^z0==4Fvr >>~:\E_ݤC'99 oP*خKWY$i~9xICn u]::< FS殞?L8d2IQ: ) ?@͋՛޺>Sz5t9QO ߽y:I?ao W:ӿ( Ն*vy]L' ӧ*,Mg'+܏Xot`dשކ+(Oθ}w/qvx^QGז/kG#6uQ]w&=t !ދo7ŷ^VZ]YV-)X(=JF7a/5]&lL'ו> zv ԩALӰF]=Vc'V?gUT͗.Y~ُꗃfosokh>9wOR~=ظZl7NgzntMATa ba_z5doOϜ)ck} `oĕDwf`^MUW804v蜳8;[mu>T^xy}ׁ\3|!Z'т9:Tס|~?ms-ԇq/CK~߽N]t5sQϩ_˦:ç;Kf l$>ƨS'YkRBW6'zLWI'i"Odxw>ƩݏTCBrN3d8W,|-*H*6x.h \kO=&f_WmNCxgֻ.1YScl/+\hH\/~It@Zpm;yFtl(ܒy!uM]{py&%x:uz%7]oV bc م?NW:+[;wts>B?*][[i-q^do8H7eI:Xı:ukqh}Rȣ5yg.Q羕_Mm^̬~?y_Z&;Ipnf}և^̪?CPZ=7`.3\FȼrJn^p 7wUzɒD)xe~0w+k*)`ŽjlnA6DÃXg)𕛻mn/VeĿgG|(9Y٫૒73M5\ӵle3͇C޽?N_j3p[G=W~g}n+/\FFژ; Jc}|YzW}V;65ޟә|66)!+ ɦx;Txle[BA>mىD_&ɨ'Vd Fbc{vh`owqVF ,Ln ;B>Ƈyafj662lj1ޓieF7onQɫtqqhh5E*E0y!S2p Y ܣPB}5ǵSoZcR6 M=tA=t5cMXSki0,o}>>{8/;m^bW!-o'3cC $l{6?IpIZ$L>WZr.9k]\{?yגA:J[1oN1#ACA^#Խ$P[IQ#PCbh~D&wlQ_uSimGrid-3.10/doc/html/group__XBT__fifo__direct.js000640 007661 000620 00000003301 12242224150 022122 0ustar00gierschand000000 000000 var group__XBT__fifo__direct = [ [ "xbt_fifo_foreach", "group__XBT__fifo__direct.html#ga7062f0aae3a97fa72fcf86673675d434", null ], [ "xbt_fifo_new_item", "group__XBT__fifo__direct.html#gad9f577f95ac147ed876083d60166a662", null ], [ "xbt_fifo_set_item_content", "group__XBT__fifo__direct.html#ga3a95882cc4858a10fa29216c939eb1b4", null ], [ "xbt_fifo_get_item_content", "group__XBT__fifo__direct.html#ga601af16f78f6f1753477ce8e91eece01", null ], [ "xbt_fifo_free_item", "group__XBT__fifo__direct.html#ga4bfc376902e2e15da4acb31c2ac77d84", null ], [ "xbt_fifo_push_item", "group__XBT__fifo__direct.html#gae1266d2dc81fc9d46334500682756b93", null ], [ "xbt_fifo_pop_item", "group__XBT__fifo__direct.html#ga32cfb8161a224dafafbf3f667d8257aa", null ], [ "xbt_fifo_unshift_item", "group__XBT__fifo__direct.html#gab5d6b760390ffc095f35f50e5bfd890a", null ], [ "xbt_fifo_shift_item", "group__XBT__fifo__direct.html#ga46dbde2e3359af8a79f2d4da7582d18c", null ], [ "xbt_fifo_remove", "group__XBT__fifo__direct.html#gafae46252cee20c382f9ce4f2e2573135", null ], [ "xbt_fifo_remove_all", "group__XBT__fifo__direct.html#ga0662ae632f8f72753074f0cf234f8c46", null ], [ "xbt_fifo_remove_item", "group__XBT__fifo__direct.html#gabd68f9b13a5e4984224760e9e5afed3b", null ], [ "xbt_fifo_get_first_item", "group__XBT__fifo__direct.html#gadde4755e50e84bf3235182227cdc1580", null ], [ "xbt_fifo_get_last_item", "group__XBT__fifo__direct.html#ga8cbb245158703f78cab3d076804eaa61", null ], [ "xbt_fifo_get_next_item", "group__XBT__fifo__direct.html#ga6fde465c7d19469ee07e28d7ae5f611b", null ], [ "xbt_fifo_get_prev_item", "group__XBT__fifo__direct.html#gac47a383a08e9c08cc4dd5bf29cd50994", null ] ];SimGrid-3.10/doc/html/nav_f.png000640 007661 000620 00000000231 12242224150 016517 0ustar00gierschand000000 000000 PNG  IHDR8`IDATxK Eі[BmkHprӼ.ꎤR6Z VIE5jliIJ0/u޿6sH yIENDB`SimGrid-3.10/doc/html/javadoc/002750 007661 000620 00000000000 12242224150 016334 5ustar00gierschand000000 000000 SimGrid-3.10/doc/html/javadoc/allclasses-frame.html000640 007661 000620 00000005730 12242224150 022444 0ustar00gierschand000000 000000 All Classes

All Classes

SimGrid-3.10/doc/html/javadoc/deprecated-list.html000640 007661 000620 00000007703 12242224150 022301 0ustar00gierschand000000 000000 Deprecated List

Deprecated API

Contents

SimGrid-3.10/doc/html/javadoc/overview-tree.html000640 007661 000620 00000016004 12242224150 022025 0ustar00gierschand000000 000000 Class Hierarchy

Hierarchy For All Packages

Package Hierarchies:

Class Hierarchy

SimGrid-3.10/doc/html/javadoc/index-all.html000640 007661 000620 00000233137 12242224150 021107 0ustar00gierschand000000 000000 Index
A B C D E F G H I J K L M N O P R S T U V W 

A

acquire() - Method in class org.simgrid.msg.Mutex
 
acquire(double) - Method in class org.simgrid.msg.Semaphore
Locks on the semaphore object until the provided timeout expires
acquire() - Method in class org.simgrid.msg.Semaphore
Locks on the semaphore object with no timeout
advanceState(int, int) - Method in class org.simgrid.msg.RngStream
Advances the state of the stream by k values, without modifying the states of other streams (as in RngStream_SetSeed), nor the values of Bg and Ig associated with this stream.
all() - Static method in class org.simgrid.msg.Host
This static method returns all of the hosts of the installed platform.
args - Variable in class org.simgrid.msg.Process
The arguments of the method function of the process.
As - Class in org.simgrid.msg
 
As() - Constructor for class org.simgrid.msg.As
 

B

bind(Process) - Method in class org.simgrid.msg.VM
Add the given process into the VM.

C

cancel() - Method in class org.simgrid.msg.Task
Cancels a task.
capacity - Variable in class org.simgrid.msg.Semaphore
Semaphore capacity, defined when the semaphore is created.
clean() - Static method in class org.simgrid.msg.Msg
Deprecated.
close() - Method in class org.simgrid.msg.File
Close the file.
Comm - Class in org.simgrid.msg
Communication action, representing an ongoing communication between processes.
Comm() - Constructor for class org.simgrid.msg.Comm
Protected constructor, used by Comm factories in Task.
create(String) - Method in class org.simgrid.msg.Process
The natively implemented method to create an MSG process.
createEnvironment(String) - Static method in class org.simgrid.msg.Msg
The native implemented method to create the environment of the simulation.
critical(String) - Static method in class org.simgrid.msg.Msg
Issue an critical logging message.
currentHost() - Static method in class org.simgrid.msg.Host
This static method return an instance to the host of the current process.
currentProcess() - Static method in class org.simgrid.msg.Process
This static method returns the currently running process.

D

debug(String) - Static method in class org.simgrid.msg.Msg
Issue a debug logging message.
deployApplication(String) - Static method in class org.simgrid.msg.Msg
The method to deploy the simulation.
destroy() - Method in class org.simgrid.msg.Comm
Unbind the communication object
destroy() - Method in class org.simgrid.msg.Task
The natively implemented method to destroy a MSG task.
destroy() - Method in class org.simgrid.msg.VM
Destroy the VM
dsend(String) - Method in class org.simgrid.msg.Task
Send the task asynchronously on the mailbox identified by the specified name, with no way to retrieve whether the communication succeeded or not
dsendBounded(String, double) - Method in class org.simgrid.msg.Task
Send the task asynchronously on the mailbox identified by the specified name, with no way to retrieve whether the communication succeeded or not

E

environmentGetRoutingRoot() - Static method in class org.simgrid.msg.Msg
 
error(String) - Static method in class org.simgrid.msg.Msg
Issue an error logging message.
execute() - Method in class org.simgrid.msg.Task
Executes a task on the location on which the process is running.
exit() - Method in class org.simgrid.msg.Process
 

F

File - Class in org.simgrid.msg
Copyright (c) 2012-2013.
File(String, String) - Constructor for class org.simgrid.msg.File
Constructor, opens the file.
finalize() - Method in class org.simgrid.msg.Comm
Finalize the communication object, destroying it.
finalize() - Method in class org.simgrid.msg.File
 
finalize() - Method in class org.simgrid.msg.Mutex
 
finalize() - Method in class org.simgrid.msg.RngStream
Destructor
finalize() - Method in class org.simgrid.msg.Semaphore
Deletes this semaphore
finalize() - Method in class org.simgrid.msg.Task
Deletes a task.
finalize() - Method in class org.simgrid.msg.VM
 
finished - Variable in class org.simgrid.msg.Comm
Indicates if the communication is finished
fromPID(int) - Static method in class org.simgrid.msg.Process
This static method gets a process from a PID.

G

getByName(String) - Static method in class org.simgrid.msg.Host
This static method gets an host instance associated with a native host of your platform.
getCapacity() - Method in class org.simgrid.msg.Semaphore
Returns the semaphore capacity
getClock() - Static method in class org.simgrid.msg.Msg
Retrieve the simulation time
getComputeDuration() - Method in class org.simgrid.msg.Task
Gets the computing amount of the task FIXME: Cache it !
getCoreNumber() - Method in class org.simgrid.msg.Host
This method returns the number of core of a host.
getCount() - Static method in class org.simgrid.msg.Host
This static method returns the count of the installed hosts.
getCount() - Static method in class org.simgrid.msg.Process
This static method returns the current amount of processes running
getData() - Method in class org.simgrid.msg.Host
Gets the data of the host.
getHost() - Method in class org.simgrid.msg.Process
Returns the host of the process.
getHosts() - Method in class org.simgrid.msg.As
 
getId() - Method in class org.simgrid.msg.Task
 
getLoad() - Method in class org.simgrid.msg.Host
This method returns the number of tasks currently running on a host.
getMessageSize() - Method in class org.simgrid.msg.Task
 
getModel() - Method in class org.simgrid.msg.As
 
getName() - Method in class org.simgrid.msg.As
 
getName() - Method in class org.simgrid.msg.Host
This method returns the name of a host.
getName() - Method in class org.simgrid.msg.Task
Gets the name of a task
getName() - Method in class org.simgrid.msg.VM
 
getPID() - Method in class org.simgrid.msg.Process
This method returns the PID of the process.
getPPID() - Method in class org.simgrid.msg.Process
This method returns the PID of the parent of a process.
getProperty(String) - Method in class org.simgrid.msg.As
 
getProperty(String) - Method in class org.simgrid.msg.Host
Returns the value of a given host property.
getProperty(String) - Method in class org.simgrid.msg.Process
Returns the value of a given process property.
getRemainingDuration() - Method in class org.simgrid.msg.Task
Gets the remaining computation of the task
getSender() - Method in class org.simgrid.msg.Task
Gets the sender of the task Returns null if the task hasn't been sent yet
getSons() - Method in class org.simgrid.msg.As
 
getSource() - Method in class org.simgrid.msg.Task
Gets the source of the task.
getSpeed() - Method in class org.simgrid.msg.Host
This method returns the speed of the processor of a host, regardless of the current load of the machine.
getTask() - Method in class org.simgrid.msg.Comm
Returns the task associated with the communication.

H

hasData() - Method in class org.simgrid.msg.Host
Checks whether a host has data.
Host - Class in org.simgrid.msg
A host object represents a location (any possible place) where a process may run.
Host() - Constructor for class org.simgrid.msg.Host
 
host - Variable in class org.simgrid.msg.Process
The host of the process
HostFailureException - Exception in org.simgrid.msg
This exception is raised when the host on which you are running has just been rebooted.
HostFailureException() - Constructor for exception org.simgrid.msg.HostFailureException
Constructs an HostFailureException without a detail message.
HostFailureException(String) - Constructor for exception org.simgrid.msg.HostFailureException
Constructs an HostFailureException with a detail message.
HostNotFoundException - Exception in org.simgrid.msg
This exception is raised when looking for a non-existing host.
HostNotFoundException() - Constructor for exception org.simgrid.msg.HostNotFoundException
Constructs an HostNotFoundException without a detail message.
HostNotFoundException(String) - Constructor for exception org.simgrid.msg.HostNotFoundException
Constructs an HostNotFoundException with a detail message.

I

id - Variable in class org.simgrid.msg.Process
Even if this attribute is public you must never access to it.
info(String) - Static method in class org.simgrid.msg.Msg
Issue an information logging message
init(String[]) - Static method in class org.simgrid.msg.Msg
The natively implemented method to initialize a MSG simulation.
irecv(String) - Static method in class org.simgrid.msg.Task
Starts listening for receiving a task from an asynchronous communication
irecvBounded(String, double) - Static method in class org.simgrid.msg.Task
Starts listening for receiving a task from an asynchronous communication with a capped rate
isAvail() - Method in class org.simgrid.msg.Host
This method tests if a host is available.
isend(String) - Method in class org.simgrid.msg.Task
Sends the task on the mailbox asynchronously
isendBounded(String, double) - Method in class org.simgrid.msg.Task
Sends the task on the mailbox asynchronously (capping the sending rate to \a maxrate)
isRunning() - Method in class org.simgrid.msg.VM
Returns whether the given VM is currently running
isSuspended() - Method in class org.simgrid.msg.Process
Tests if a process is suspended.
isSuspended() - Method in class org.simgrid.msg.VM
Returns whether the given VM is currently suspended

J

JniException - Exception in org.simgrid.msg
This exception is raised when there is a problem within the bindings (in JNI).
JniException() - Constructor for exception org.simgrid.msg.JniException
Constructs an JniException without a detail message.
JniException(String) - Constructor for exception org.simgrid.msg.JniException
Constructs an JniException with a detail message.
JniException(String, Exception) - Constructor for exception org.simgrid.msg.JniException
 

K

kill() - Method in class org.simgrid.msg.Process
This method kill a process.
killAll(int) - Static method in class org.simgrid.msg.Process
This method kills all running process of the simulation.
killTime - Variable in class org.simgrid.msg.Process
Kill time of the process

L

listen(String) - Static method in class org.simgrid.msg.Task
Listen whether there is a waiting task on the mailbox identified by the specified alias
listenFrom(String) - Static method in class org.simgrid.msg.Task
Tests whether there is a pending communication on the mailbox identified by the specified alias, and who sent it
listenFromHost(String, Host) - Static method in class org.simgrid.msg.Task
Counts the number of tasks waiting to be received on the \a mailbox identified by the specified alia and sended by the specified \a host.

M

main(String[]) - Static method in class org.simgrid.msg.Msg
Example launcher.
main(String[]) - Method in class org.simgrid.msg.Process
The main function of the process (to implement).
migrate(Host) - Method in class org.simgrid.msg.Process
Migrates a process to another host.
migrate(Host) - Method in class org.simgrid.msg.VM
Immediately change the host on which all processes are running No migration cost occurs.
Msg - Class in org.simgrid.msg
 
Msg() - Constructor for class org.simgrid.msg.Msg
 
MsgException - Exception in org.simgrid.msg
This exception is an abstract class grouping all MSG-related exceptions
MsgException() - Constructor for exception org.simgrid.msg.MsgException
Constructs an MsgException without a detail message.
MsgException(String) - Constructor for exception org.simgrid.msg.MsgException
Constructs an MsgException with a detail message.
msgName() - Method in class org.simgrid.msg.Process
Returns the name of the process
Mutex - Class in org.simgrid.msg
A mutex implemented on top of SimGrid synchronization mechanisms.
Mutex() - Constructor for class org.simgrid.msg.Mutex
 

N

name - Variable in class org.simgrid.msg.Process
The name of the process.
name - Variable in class org.simgrid.msg.Task
Task name
NativeException - Exception in org.simgrid.msg
This exception is raised when there is an error within the C world of SimGrid.
NativeException(String) - Constructor for exception org.simgrid.msg.NativeException
Constructs an NativeException with a detail message.
nativeInit() - Static method in class org.simgrid.msg.As
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.Comm
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.File
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.Host
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.Msg
 
nativeInit() - Static method in class org.simgrid.msg.Mutex
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.Process
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.RngStream
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.Semaphore
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.Task
Class initializer, to initialize various JNI stuff
nativeInit() - Static method in class org.simgrid.msg.VM
Class initializer, to initialize various JNI stuff
nextProcessId - Static variable in class org.simgrid.msg.Process
Even if this attribute is public you must never access to it.

O

open(String, String) - Method in class org.simgrid.msg.File
Opens the file whose name is the string pointed to by path.
org.simgrid.msg - package org.simgrid.msg
 

P

pause() - Method in class org.simgrid.msg.Process
Deprecated.
pid - Variable in class org.simgrid.msg.Process
The PID of the process
ppid - Variable in class org.simgrid.msg.Process
The PPID of the process
Process - Class in org.simgrid.msg
A process may be defined as a code, with some private data, executing in a location (host).
Process() - Constructor for class org.simgrid.msg.Process
Default constructor
Process(String, String) - Constructor for class org.simgrid.msg.Process
Constructs a new process from the name of a host and his name.
Process(String, String, String[]) - Constructor for class org.simgrid.msg.Process
Constructs a new process from the name of a host and his name.
Process(Host, String) - Constructor for class org.simgrid.msg.Process
Constructs a new process from a host and his name.
Process(Host, String, String[]) - Constructor for class org.simgrid.msg.Process
Constructs a new process from a host and his name, the arguments of here method function are specified by the parameter args.
Process(Host, String, String[], double, double) - Constructor for class org.simgrid.msg.Process
Constructs a new process from a host and his name, the arguments of here method function are specified by the parameter args.
ProcessKilledError - Error in org.simgrid.msg
This error class is only used to interrupt the java user code when the process gets killed by an external event.
ProcessKilledError(String) - Constructor for error org.simgrid.msg.ProcessKilledError
 
ProcessNotFoundException - Exception in org.simgrid.msg
This exception is raised when looking for a non-existing process.
ProcessNotFoundException() - Constructor for exception org.simgrid.msg.ProcessNotFoundException
Constructs an ProcessNotFoundException without a detail message.
ProcessNotFoundException(String) - Constructor for exception org.simgrid.msg.ProcessNotFoundException
Constructs an ProcessNotFoundException with a detail message.

R

randInt(int, int) - Method in class org.simgrid.msg.RngStream
Returns a (pseudo)random number from the discrete uniform distribution over the integers {i, i + 1, . . . , j}
randU01() - Method in class org.simgrid.msg.RngStream
Returns a (pseudo)random number from the uniform distribution over the interval (0, 1), after advancing the state by one step.
read(long, long) - Method in class org.simgrid.msg.File
Read elements of a file.
reboot() - Method in class org.simgrid.msg.VM
Reboot the VM, restarting all the processes in it.
receive(String) - Static method in class org.simgrid.msg.Task
Retrieves next task from the mailbox identified by the specified name
receive(String, double) - Static method in class org.simgrid.msg.Task
Retrieves next task on the mailbox identified by the specified name (wait at most \a timeout seconds)
receive(String, Host) - Static method in class org.simgrid.msg.Task
Retrieves next task sent by a given host on the mailbox identified by the specified alias
receive(String, double, Host) - Static method in class org.simgrid.msg.Task
Retrieves next task sent by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds)
receiveBounded(String, double) - Static method in class org.simgrid.msg.Task
Retrieves next task from the mailbox identified by the specified name with a capped rate
receiveBounded(String, double, double) - Static method in class org.simgrid.msg.Task
Retrieves next task on the mailbox identified by the specified name (wait at most \a timeout seconds) with a capped rate
receiveBounded(String, Host, double) - Static method in class org.simgrid.msg.Task
Retrieves next task sent by a given host on the mailbox identified by the specified alias with a capped rate
receiveBounded(String, double, Host, double) - Static method in class org.simgrid.msg.Task
Retrieves next task sent by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds) with a capped rate
receiving - Variable in class org.simgrid.msg.Comm
Indicates if the communication is a receiving communication
release() - Method in class org.simgrid.msg.Mutex
 
release() - Method in class org.simgrid.msg.Semaphore
Releases the semaphore object
resetNextSubstream() - Method in class org.simgrid.msg.RngStream
Reinitializes the stream g to the beginning of its next substream: Ng is computed, and Cg and Bg are set to Ng .
resetStart() - Method in class org.simgrid.msg.RngStream
Reinitializes the stream g to its initial state: Cg and Bg are set to Ig .
restart() - Method in class org.simgrid.msg.Process
Restarts the process from the beginning
restartStartSubstream() - Method in class org.simgrid.msg.RngStream
Reinitializes the stream g to the beginning of its current substream: Cg is set to Bg .
resume() - Method in class org.simgrid.msg.Process
Resumes a suspended process by resuming the task on which it was waiting for the completion.
resume() - Method in class org.simgrid.msg.VM
Immediately resumes the execution of all processes within the given VM No resume cost occurs.
RngStream - Class in org.simgrid.msg
Export of RngStreams for Java
RngStream() - Constructor for class org.simgrid.msg.RngStream
Creates and returns a new stream without identifier.
RngStream(String) - Constructor for class org.simgrid.msg.RngStream
Creates and returns a new stream with identifier "name".
run() - Static method in class org.simgrid.msg.Msg
Run the MSG simulation.
run() - Method in class org.simgrid.msg.Process
This method runs the process.

S

Semaphore - Class in org.simgrid.msg
A semaphore implemented on top of SimGrid synchronization mechanisms.
Semaphore(int) - Constructor for class org.simgrid.msg.Semaphore
Creates a new semaphore with the given capacity.
send(String) - Method in class org.simgrid.msg.Task
Sends the task on the mailbox identified by the specified name
send(String, double) - Method in class org.simgrid.msg.Task
Sends the task on the mailbox identified by the specified name (wait at most \a timeout seconds)
sendBounded(String, double) - Method in class org.simgrid.msg.Task
Sends the task on the mailbox identified by the specified alias (capping the sending rate to \a maxrate)
sendBounded(String, double, double) - Method in class org.simgrid.msg.Task
Sends the task on the mailbox identified by the specified alias (capping the sending rate to \a maxrate) with a timeout
setAntithetic(boolean) - Method in class org.simgrid.msg.RngStream
If a = true the stream g will start generating antithetic variates, i.e., 1 - U instead of U , until this method is called again with a = false.
setAsyncMailbox(String) - Static method in class org.simgrid.msg.Host
This static method sets a mailbox to receive in asynchronous mode.
setAutoRestart(boolean) - Method in class org.simgrid.msg.Process
Sets the "auto-restart" flag of the process.
setComputeDuration(double) - Method in class org.simgrid.msg.Task
Set the computation amount needed to process the task
setData(Object) - Method in class org.simgrid.msg.Host
Sets the data of the host.
setDataSize(double) - Method in class org.simgrid.msg.Task
Set the data size of the task
setId(Long) - Method in class org.simgrid.msg.Task
 
setKillTime(double) - Method in class org.simgrid.msg.Process
Set the kill time of the process
setName(String) - Method in class org.simgrid.msg.Task
Sets the name of the task
setPackageSeed(int[]) - Static method in class org.simgrid.msg.RngStream
Sets the initial seed of the package RngStreams to the six integers in the vector seed.
setPriority(double) - Method in class org.simgrid.msg.Task
This method sets the priority of the computation of the task.
setProperty(String, String) - Method in class org.simgrid.msg.Host
Change the value of a given host property.
setSeed(int[]) - Method in class org.simgrid.msg.RngStream
Sets the initial seed Ig of stream g to the vector seed.
showArgs() - Method in class org.simgrid.msg.Process
 
shutdown() - Method in class org.simgrid.msg.VM
Immediately kills all processes within the given VM.
sleep(long) - Static method in class org.simgrid.msg.Process
Makes the current process sleep until millis millisecondes have elapsed.
sleep(long, int) - Static method in class org.simgrid.msg.Process
Makes the current process sleep until millis milliseconds and nanos nanoseconds have elapsed.
start() - Method in class org.simgrid.msg.Process
This method actually creates and run the process.
startTime - Variable in class org.simgrid.msg.Process
Start time of the process
storage - Variable in class org.simgrid.msg.File
 
suspend() - Method in class org.simgrid.msg.Process
Suspends the process by suspending the task on which it was waiting for the completion.
suspend() - Method in class org.simgrid.msg.VM
Immediately suspend the execution of all processes within the given VM No suspension cost occurs.

T

task - Variable in class org.simgrid.msg.Comm
Task associated with the comm.
Task - Class in org.simgrid.msg
A task is either something to compute somewhere, or something to exchange between two hosts (or both).
Task() - Constructor for class org.simgrid.msg.Task
Default constructor (all fields to 0 or null)
Task(String, double, double) - Constructor for class org.simgrid.msg.Task
Construct an new task with the specified processing amount and amount of data needed.
Task(String, Host[], double[], double[]) - Constructor for class org.simgrid.msg.Task
Construct an new parallel task with the specified processing amount and amount for each host implied.
TaskCancelledException - Exception in org.simgrid.msg
This exception is raised when task is cancelled.
TaskCancelledException() - Constructor for exception org.simgrid.msg.TaskCancelledException
Constructs an TaskCancelledException without a detail message.
TaskCancelledException(String) - Constructor for exception org.simgrid.msg.TaskCancelledException
Constructs an TaskCancelledException with a detail message.
test() - Method in class org.simgrid.msg.Comm
Returns if the communication is finished or not.
TimeoutException - Exception in org.simgrid.msg
This exception is raised when time's out while sending tasks.
TimeoutException() - Constructor for exception org.simgrid.msg.TimeoutException
Constructs an TimeoutFailureException without a detail message.
TimeoutException(String) - Constructor for exception org.simgrid.msg.TimeoutException
Constructs an TransferFailureException with a detail message.
toString() - Method in class org.simgrid.msg.As
 
TransferFailureException - Exception in org.simgrid.msg
This exception is raised if transfer failed while sending tasks.
TransferFailureException() - Constructor for exception org.simgrid.msg.TransferFailureException
Constructs an TransferFailureException without a detail message.
TransferFailureException(String) - Constructor for exception org.simgrid.msg.TransferFailureException
Constructs an TransferFailureException with a detail message.

U

unbind(Process) - Method in class org.simgrid.msg.VM
Removes the given process from the given VM, and kill it Will raise a ProcessNotFound exception if the process were not bound to that VM

V

verb(String) - Static method in class org.simgrid.msg.Msg
Issue an verbose logging message.
VM - Class in org.simgrid.msg
 
VM(Host, String, int) - Constructor for class org.simgrid.msg.VM
Create a new empty VM.

W

waitCompletion() - Method in class org.simgrid.msg.Comm
Wait for the complemetion of the communication for an indefinite time
waitCompletion(double) - Method in class org.simgrid.msg.Comm
Wait for the completion of the communication.
waitFor(double) - Method in class org.simgrid.msg.Process
Makes the current process sleep until time seconds have elapsed.
warn(String) - Static method in class org.simgrid.msg.Msg
Issue an warning logging message.
wouldBlock() - Method in class org.simgrid.msg.Semaphore
returns a boolean indicating it this semaphore would block at this very specific time Note that the returned value may be wrong right after the function call, when you try to use it...
write(long, long) - Method in class org.simgrid.msg.File
Write elements into a file.
A B C D E F G H I J K L M N O P R S T U V W 
SimGrid-3.10/doc/html/javadoc/resources/002750 007661 000620 00000000000 12242224150 020346 5ustar00gierschand000000 000000 SimGrid-3.10/doc/html/javadoc/resources/inherit.gif000640 007661 000620 00000000071 12242224150 022474 0ustar00gierschand000000 000000 GIF89a, DrjԐ;߀Q@N;SimGrid-3.10/doc/html/javadoc/allclasses-noframe.html000640 007661 000620 00000005064 12242224150 023001 0ustar00gierschand000000 000000 All Classes

All Classes

SimGrid-3.10/doc/html/javadoc/serialized-form.html000640 007661 000620 00000016430 12242224150 022321 0ustar00gierschand000000 000000 Serialized Form

Serialized Form

SimGrid-3.10/doc/html/javadoc/help-doc.html000640 007661 000620 00000016516 12242224150 020725 0ustar00gierschand000000 000000 API Help

How This API Document Is Organized

This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

  • Package

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    • Interfaces (italic)
    • Classes
    • Enums
    • Exceptions
    • Errors
    • Annotation Types
  • Class/Interface

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    • Class inheritance diagram
    • Direct Subclasses
    • All Known Subinterfaces
    • All Known Implementing Classes
    • Class/interface declaration
    • Class/interface description
    • Nested Class Summary
    • Field Summary
    • Constructor Summary
    • Method Summary
    • Field Detail
    • Constructor Detail
    • Method Detail

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

  • Annotation Type

    Each annotation type has its own separate page with the following sections:

    • Annotation Type declaration
    • Annotation Type description
    • Required Element Summary
    • Optional Element Summary
    • Element Detail
  • Enum

    Each enum has its own separate page with the following sections:

    • Enum declaration
    • Enum description
    • Enum Constant Summary
    • Enum Constant Detail
  • Tree (Class Hierarchy)

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
  • Deprecated API

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

  • Index

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

  • Prev/Next

    These links take you to the next or previous class, interface, package, or related page.

  • Frames/No Frames

    These links show and hide the HTML frames. All pages are available with or without frames.

  • Serialized Form

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

  • Constant Field Values

    The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.

This help file applies to API documentation generated using the standard doclet.
SimGrid-3.10/doc/html/javadoc/stylesheet.css000640 007661 000620 00000022071 12242224150 021240 0ustar00gierschand000000 000000 /* Javadoc style sheet */ /* Overall document style */ * { margin:0; padding:0; } body { font-family:Helvetica, Arial, sans-serif; color:#000000; } p { margin:20px 0; } pre { font-size:1.0em; } h1 { font-size:1.4em; } h2 { font-size:1.35em; } h3 { font-size:1.3em; } h4 { font-size:1.25em; } ul { margin:10px 0 10px 20px; } li { list-style:disc; } dl dt { font-size:0.95em; font-weight:bold; margin:10px 0 0 0; } dl dd { margin:10px 0 10px 20px; } dl dd ul { margin-left:0; } dl dd ul li { list-style:none; margin:10px 0 10px 0; } caption { background: #CCCCFF; color:#000000; text-align: left; font-size: 150%; font-weight: bold; border-left: 2px ridge; border-right: 2px ridge; border-top: 2px ridge; padding-left: 5px; width:auto; } /* Document title and Copyright styles */ .aboutLanguage { float:right; font-size:0.9em; color:#000000; } .legalCopy { margin:7px; } .bar { font-size:1em; margin:10px 0 0 10px; } .bar a { font-weight:normal; } /* Navigation bar styles */ .topNav { border-top:2px solid #C0C0C0; margin:7px; padding:7px 0; height:2.8em; width:99%; min-width:600px; } .bottomNav { border-top:2px solid #C0C0C0; margin:7px; padding:7px 0; height:2.8em; width:99%; } .subNav { border-bottom:2px solid #C0C0C0; float:left; width:99%; margin:7px; min-width:600px; } .subNav div { clear:left; float:left; padding:0 0 5px 2px; width:100%; } .topNav a:link,.topNav a:active, .topNav a:visited, .topNav a:hover, .bottomNav a:link,.bottomNav a:active, .bottomNav a:visited, .bottomNav a:hover { color:#000000; font-weight:bold; text-decoration:underline; font-size:1em; } /* Navigation bar list styles */ .topNav ul.navList, .bottomNav ul.navList { background-color:#EEEEFF; padding:7px 5px; margin:0; float:left; width:80%; } ul.navList li{ list-style:none; float:left; padding:3px 4px; color:#000000; font-size:0.98em; } ul.navList li.navBarCell1Rev { background-color:#00008B; color:#FFFFFF; font-weight:bold; font-size:0.97em; } /* Sub-navigation bar list styles */ .subNav ul.navList { float:left; margin:0; font-size:0.7em; width:350px; } ul.subNavList { float:left; margin:0; font-size:0.7em; width:350px; } ul.subNavList li{ list-style:none; float:left; font-size:90%; } /* Page header and footer styles */ .header, .footer { clear:both; margin:0 7px; } .indexHeader { font-size:0.9em; margin:10px 0 7px 10px; } .header ul { padding-left:20px; } /* Header and footer title styles */ .header h1.title { font-size:1.4em; text-align:center; margin:0; } .header h2.title { font-size:1.35em; margin:0; } .subTitle { margin:0; padding-top:10px; font-size:0.75em; font-weight:bold; } /* Page layout container styles */ .contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { clear:both; padding:10px 10px; position:relative; } .indexContainer { padding:0 0 10px 10px; font-size:0.9em; } /* Class inheritance information styles */ ul.inheritance { margin:0; padding:0; } ul.inheritance li { display:inline; list-style:none; } ul.inheritance li ul.inheritance { margin-left:15px; background-image:url(resources/inherit.gif); background-repeat:no-repeat; padding-left:15px; padding-top:1px; } /* Heading styles */ .indexContainer h2 { font-weight:normal; font-size:1.0em; padding:10px 0 0 0; } .contentContainer h2 { margin:10px 0; } .constantValuesContainer h2 { background:#CCCCFF; border:2px ridge; padding:3px; margin:0 0 10px 0; } .serializedFormContainer ul.blockList li.blockList h2 { background:#EEEEFF; border:2px ridge; padding:3px; margin:0 0 15px 0; text-align:center; } .classUseContainer ul li ul li h3 { margin-bottom:30px; padding:3px; } .serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList h3 { background:#EEEEFF; margin:0 0 15px 0; padding:3px; } .serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList h3 { background:#CCCCFF; margin:0 0 15px 0; padding:3px; border:2px ridge; } ul.blockList ul.blockList li.blockList h3, ul.blockList ul.blockList li.blockList h3 { background:#CCCCFF; border:2px ridge; padding-left:5px; } div.summary ul.blockList ul.blockList li.blockList h3 { background:#CCCCFF; border:0; border:2px ridge; padding-left:5px; } div.summary ul.blockList ul.blockList ul.blockList li.blockList h3 { background:#EEEEFF; border:0; border-bottom:2px ridge; } div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { font-size:1.15em; font-weight:bold; padding:0 0 10px 0; } /* Table styles */ .contentContainer table { border-collapse: collapse ; width:100%; } .contentContainer table td, .contentContainer table th { border:2px ridge; padding:3px; } /* Constant values page table styles */ .constantValuesContainer table { border-collapse: collapse ; margin:0 0 10px 0; } .constantValuesContainer table caption{ font-size:0.95em; padding:3px; background:#EEEEFF; } .constantValuesContainer table td, .constantValuesContainer table th { border:2px ridge; padding:3px; } /* Class-use/Package-use page table styles */ .classUseContainer table { border-collapse: collapse ; width:100%; margin:0 0 15px 0; } .classUseContainer ul li ul li table { margin-bottom:30px; } .classUseContainer ul li ul li table caption{ font-size:0.95em; padding:3px; background:#EEEEFF; } .classUseContainer table td, .classUseContainer table th { border:2px ridge; padding:3px; } /* Summary table styles */ ul.blockList li.blockList table.overviewSummary { margin:0; margin-bottom:15px; } ul.blockList li.blockList table caption { padding:3px; } ul.blockList li.blockList table.overviewSummary td.colFirst{ text-align:right; } table.packageSummary td.colFirst, table.overviewSummary th.colFirst { width:15%; } div.summary ul.blockList ul.blockList li.blockList caption { display:none; } div.summary ul.blockList li.blockList ul.blockList li.blockList table.overviewSummary th { border-top:0; } /* Table column block styles */ ul.blockList li.blockList table.overviewSummary td.colLast div.block{ padding:0; padding-left:40px; } ul.blockList li.blockList table.overviewSummary td.colOne div.block{ padding:0; padding-left:40px; } .contentContainer ul.blockList li.blockList table .colOne div.block{ padding-left:40px; } .classUseContainer ul li ul li table .colLast div.block, .classUseContainer ul li ul li table .colOne div.block{ padding-left:40px; } /* List styles */ ul.horizontal li { display:inline; font-size:0.9em; } /* Container specific list styles */ .indexContainer ul { margin:0; } .indexContainer ul li { list-style:none; } .serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList { border:0; } .serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList { list-style:none; border:0; border-bottom:2px ridge; } .serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockListLast { list-style:none; } /* General list styles */ ul.blockList, ul.blockListLast { margin-left:0; padding-left:0; } ul.blockList li.blockList, ul.blockListLast li.blockList { list-style:none; margin-bottom:25px; } ul.blockList ul.blockList ul.blockList li.blockList { border:2px ridge; } div.details ul.blockList ul.blockList ul.blockList li.blockList { border:0; border-bottom:2px ridge; } /* Definition list styles */ ul.blockList li.blockList dl{ margin-bottom:15px; } ul.blockList li.blockList dl dd{ margin:0 0 0 30px; } ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList dl, ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList dl{ padding:0 0 10px 35px; } dl.nameValue dt, dl.nameValue dd{ display:inline; } ul.blockList li.blockList pre{ margin:0 0 15px 0; } /* List content styles */ ul.blockList li.blockList ul.blockList li.blockList pre{ margin:10px 0 15px 0; } ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList pre, ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList pre{ padding:0 0 10px 0; } ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList div.block, ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList div.block{ padding:0 0 10px 35px; } /* Formatting effect styles */ .strong { font-weight:bold; } .sourceLineNo { color:green; padding:0 30px 0 0; } SimGrid-3.10/doc/html/javadoc/constant-values.html000640 007661 000620 00000006366 12242224150 022362 0ustar00gierschand000000 000000 Constant Field Values

Constant Field Values

Contents

SimGrid-3.10/doc/html/javadoc/org/002750 007661 000620 00000000000 12242224150 017123 5ustar00gierschand000000 000000 SimGrid-3.10/doc/html/javadoc/org/simgrid/002750 007661 000620 00000000000 12242224150 020561 5ustar00gierschand000000 000000 SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/002750 007661 000620 00000000000 12242224150 021347 5ustar00gierschand000000 000000 SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/Task.html000640 007661 000620 00000152676 12242224150 023157 0ustar00gierschand000000 000000 Task

org.simgrid.msg

Class Task

  • java.lang.Object
    • org.simgrid.msg.Task


  • public class Task
    extends java.lang.Object
    A task is either something to compute somewhere, or something to exchange between two hosts (or both). It is defined by a computing amount and a message size.
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      protected java.lang.String name
      Task name
    • Constructor Summary

      Constructors 
      Constructor and Description
      Task()
      Default constructor (all fields to 0 or null)
      Task(java.lang.String name, double computeDuration, double messageSize)
      Construct an new task with the specified processing amount and amount of data needed.
      Task(java.lang.String name, Host[] hosts, double[] computeDurations, double[] messageSizes)
      Construct an new parallel task with the specified processing amount and amount for each host implied.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      void cancel()
      Cancels a task.
      protected void destroy()
      The natively implemented method to destroy a MSG task.
      void dsend(java.lang.String mailbox)
      Send the task asynchronously on the mailbox identified by the specified name, with no way to retrieve whether the communication succeeded or not
      void dsendBounded(java.lang.String mailbox, double maxrate)
      Send the task asynchronously on the mailbox identified by the specified name, with no way to retrieve whether the communication succeeded or not
      void execute()
      Executes a task on the location on which the process is running.
      protected void finalize()
      Deletes a task.
      double getComputeDuration()
      Gets the computing amount of the task FIXME: Cache it !
      java.lang.Long getId() 
      double getMessageSize() 
      java.lang.String getName()
      Gets the name of a task
      double getRemainingDuration()
      Gets the remaining computation of the task
      Process getSender()
      Gets the sender of the task Returns null if the task hasn't been sent yet
      Host getSource()
      Gets the source of the task.
      static Comm irecv(java.lang.String mailbox)
      Starts listening for receiving a task from an asynchronous communication
      static Comm irecvBounded(java.lang.String mailbox, double rate)
      Starts listening for receiving a task from an asynchronous communication with a capped rate
      Comm isend(java.lang.String mailbox)
      Sends the task on the mailbox asynchronously
      Comm isendBounded(java.lang.String mailbox, double maxrate)
      Sends the task on the mailbox asynchronously (capping the sending rate to \a maxrate)
      static boolean listen(java.lang.String mailbox)
      Listen whether there is a waiting task on the mailbox identified by the specified alias
      static int listenFrom(java.lang.String mailbox)
      Tests whether there is a pending communication on the mailbox identified by the specified alias, and who sent it
      static int listenFromHost(java.lang.String alias, Host host)
      Counts the number of tasks waiting to be received on the \a mailbox identified by the specified alia and sended by the specified \a host.
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      static Task receive(java.lang.String mailbox)
      Retrieves next task from the mailbox identified by the specified name
      static Task receive(java.lang.String mailbox, double timeout)
      Retrieves next task on the mailbox identified by the specified name (wait at most \a timeout seconds)
      static Task receive(java.lang.String mailbox, double timeout, Host host)
      Retrieves next task sent by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds)
      static Task receive(java.lang.String mailbox, Host host)
      Retrieves next task sent by a given host on the mailbox identified by the specified alias
      static Task receiveBounded(java.lang.String mailbox, double rate)
      Retrieves next task from the mailbox identified by the specified name with a capped rate
      static Task receiveBounded(java.lang.String mailbox, double timeout, double rate)
      Retrieves next task on the mailbox identified by the specified name (wait at most \a timeout seconds) with a capped rate
      static Task receiveBounded(java.lang.String mailbox, double timeout, Host host, double rate)
      Retrieves next task sent by a given host on the mailbox identified by the specified alias (wait at most \a timeout seconds) with a capped rate
      static Task receiveBounded(java.lang.String mailbox, Host host, double rate)
      Retrieves next task sent by a given host on the mailbox identified by the specified alias with a capped rate
      void send(java.lang.String mailbox)
      Sends the task on the mailbox identified by the specified name
      void send(java.lang.String mailbox, double timeout)
      Sends the task on the mailbox identified by the specified name (wait at most \a timeout seconds)
      void sendBounded(java.lang.String alias, double maxrate)
      Sends the task on the mailbox identified by the specified alias (capping the sending rate to \a maxrate)
      void sendBounded(java.lang.String alias, double timeout, double maxrate)
      Sends the task on the mailbox identified by the specified alias (capping the sending rate to \a maxrate) with a timeout
      void setComputeDuration(double computationAmount)
      Set the computation amount needed to process the task
      void setDataSize(double dataSize)
      Set the data size of the task
      void setId(java.lang.Long id) 
      void setName(java.lang.String name)
      Sets the name of the task
      void setPriority(double priority)
      This method sets the priority of the computation of the task.
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • name

        protected java.lang.String name
        Task name
    • Constructor Detail

      • Task

        public Task()
        Default constructor (all fields to 0 or null)
      • Task

        public Task(java.lang.String name,
            double computeDuration,
            double messageSize)
        Construct an new task with the specified processing amount and amount of data needed.
        Parameters:
        name - Task's name
        computeDuration - A value of the processing amount (in flop) needed to process the task. If 0, then it cannot be executed with the execute() method. This value has to be >= 0.
        messageSize - A value of amount of data (in bytes) needed to transfert this task. If 0, then it cannot be transfered with the get() and put() methods. This value has to be >= 0.
      • Task

        public Task(java.lang.String name,
            Host[] hosts,
            double[] computeDurations,
            double[] messageSizes)
        Construct an new parallel task with the specified processing amount and amount for each host implied.
        Parameters:
        name - The name of the parallel task.
        hosts - The list of hosts implied by the parallel task.
        computeDurations - The amount of operations to be performed by each host of \a hosts.
        messageSizes - A matrix describing the amount of data to exchange between hosts.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/Semaphore.html000640 007661 000620 00000032673 12242224150 024172 0ustar00gierschand000000 000000 Semaphore

org.simgrid.msg

Class Semaphore

  • java.lang.Object
    • org.simgrid.msg.Semaphore


  • public class Semaphore
    extends java.lang.Object
    A semaphore implemented on top of SimGrid synchronization mechanisms. You can use it exactly the same way that you use classical semaphores but to handle the interactions between the processes within the simulation.
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      protected int capacity
      Semaphore capacity, defined when the semaphore is created.
    • Constructor Summary

      Constructors 
      Constructor and Description
      Semaphore(int capacity)
      Creates a new semaphore with the given capacity.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      void acquire()
      Locks on the semaphore object with no timeout
      void acquire(double timeout)
      Locks on the semaphore object until the provided timeout expires
      protected void finalize()
      Deletes this semaphore
      int getCapacity()
      Returns the semaphore capacity
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      void release()
      Releases the semaphore object
      boolean wouldBlock()
      returns a boolean indicating it this semaphore would block at this very specific time Note that the returned value may be wrong right after the function call, when you try to use it...
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • capacity

        protected final int capacity
        Semaphore capacity, defined when the semaphore is created. At most capacity process can acquire this semaphore at the same time.
    • Constructor Detail

      • Semaphore

        public Semaphore(int capacity)
        Creates a new semaphore with the given capacity. At most capacity process can acquire this semaphore at the same time.
    • Method Detail

      • acquire

        public void acquire(double timeout)
                     throws TimeoutException
        Locks on the semaphore object until the provided timeout expires
        Throws:
        TimeoutException - if the timeout expired before the semaphore could be acquired.
      • acquire

        public void acquire()
        Locks on the semaphore object with no timeout
      • release

        public void release()
        Releases the semaphore object
      • wouldBlock

        public boolean wouldBlock()
        returns a boolean indicating it this semaphore would block at this very specific time Note that the returned value may be wrong right after the function call, when you try to use it... But that's a classical semaphore issue, and SimGrid's semaphores are not different to usual ones here.
      • getCapacity

        public int getCapacity()
        Returns the semaphore capacity
      • finalize

        protected void finalize()
        Deletes this semaphore
        Overrides:
        finalize in class java.lang.Object
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/package-summary.html000640 007661 000620 00000024022 12242224150 025322 0ustar00gierschand000000 000000 org.simgrid.msg

Package org.simgrid.msg

  • Class Summary 
    Class Description
    As  
    Comm
    Communication action, representing an ongoing communication between processes.
    File
    Copyright (c) 2012-2013.
    Host
    A host object represents a location (any possible place) where a process may run.
    Msg  
    Mutex
    A mutex implemented on top of SimGrid synchronization mechanisms.
    Process
    A process may be defined as a code, with some private data, executing in a location (host).
    RngStream
    Export of RngStreams for Java
    Semaphore
    A semaphore implemented on top of SimGrid synchronization mechanisms.
    Task
    A task is either something to compute somewhere, or something to exchange between two hosts (or both).
    VM  
  • Exception Summary 
    Exception Description
    HostFailureException
    This exception is raised when the host on which you are running has just been rebooted.
    HostNotFoundException
    This exception is raised when looking for a non-existing host.
    JniException
    This exception is raised when there is a problem within the bindings (in JNI).
    MsgException
    This exception is an abstract class grouping all MSG-related exceptions
    NativeException
    This exception is raised when there is an error within the C world of SimGrid.
    ProcessNotFoundException
    This exception is raised when looking for a non-existing process.
    TaskCancelledException
    This exception is raised when task is cancelled.
    TimeoutException
    This exception is raised when time's out while sending tasks.
    TransferFailureException
    This exception is raised if transfer failed while sending tasks.
  • Error Summary 
    Error Description
    ProcessKilledError
    This error class is only used to interrupt the java user code when the process gets killed by an external event.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/TimeoutException.html000640 007661 000620 00000021535 12242224150 025547 0ustar00gierschand000000 000000 TimeoutException

org.simgrid.msg

Class TimeoutException

  • All Implemented Interfaces:
    java.io.Serializable


    public class TimeoutException
    extends MsgException
    This exception is raised when time's out while sending tasks.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      TimeoutException()
      Constructs an TimeoutFailureException without a detail message.
      TimeoutException(java.lang.String s)
      Constructs an TransferFailureException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • TimeoutException

        public TimeoutException()
        Constructs an TimeoutFailureException without a detail message.
      • TimeoutException

        public TimeoutException(java.lang.String s)
        Constructs an TransferFailureException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/HostNotFoundException.html000640 007661 000620 00000021653 12242224150 026514 0ustar00gierschand000000 000000 HostNotFoundException

org.simgrid.msg

Class HostNotFoundException

  • All Implemented Interfaces:
    java.io.Serializable


    public class HostNotFoundException
    extends MsgException
    This exception is raised when looking for a non-existing host.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      HostNotFoundException()
      Constructs an HostNotFoundException without a detail message.
      HostNotFoundException(java.lang.String s)
      Constructs an HostNotFoundException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • HostNotFoundException

        public HostNotFoundException()
        Constructs an HostNotFoundException without a detail message.
      • HostNotFoundException

        public HostNotFoundException(java.lang.String s)
        Constructs an HostNotFoundException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/package-tree.html000640 007661 000620 00000016345 12242224150 024575 0ustar00gierschand000000 000000 org.simgrid.msg Class Hierarchy

Hierarchy For Package org.simgrid.msg

Class Hierarchy

SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/TaskCancelledException.html000640 007661 000620 00000021640 12242224150 026613 0ustar00gierschand000000 000000 TaskCancelledException

org.simgrid.msg

Class TaskCancelledException

  • All Implemented Interfaces:
    java.io.Serializable


    public class TaskCancelledException
    extends MsgException
    This exception is raised when task is cancelled.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      TaskCancelledException()
      Constructs an TaskCancelledException without a detail message.
      TaskCancelledException(java.lang.String s)
      Constructs an TaskCancelledException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • TaskCancelledException

        public TaskCancelledException()
        Constructs an TaskCancelledException without a detail message.
      • TaskCancelledException

        public TaskCancelledException(java.lang.String s)
        Constructs an TaskCancelledException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/JniException.html000640 007661 000620 00000022211 12242224150 024631 0ustar00gierschand000000 000000 JniException

org.simgrid.msg

Class JniException

  • java.lang.Object
    • java.lang.Throwable
      • java.lang.Exception
        • java.lang.RuntimeException
          • org.simgrid.msg.JniException
  • All Implemented Interfaces:
    java.io.Serializable


    public class JniException
    extends java.lang.RuntimeException
    This exception is raised when there is a problem within the bindings (in JNI). That's a RuntimeException: I guess nobody wants to survive a JNI error in SimGrid
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      JniException()
      Constructs an JniException without a detail message.
      JniException(java.lang.String s)
      Constructs an JniException with a detail message.
      JniException(java.lang.String string, java.lang.Exception e) 
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • JniException

        public JniException()
        Constructs an JniException without a detail message.
      • JniException

        public JniException(java.lang.String s)
        Constructs an JniException with a detail message.
        Parameters:
        s - the detail message.
      • JniException

        public JniException(java.lang.String string,
                    java.lang.Exception e)
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/As.html000640 007661 000620 00000024332 12242224150 022603 0ustar00gierschand000000 000000 As

org.simgrid.msg

Class As

  • java.lang.Object
    • org.simgrid.msg.As


  • public class As
    extends java.lang.Object
    • Constructor Summary

      Constructors 
      Modifier Constructor and Description
      protected As() 
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      Host[] getHosts() 
      java.lang.String getModel() 
      java.lang.String getName() 
      java.lang.String getProperty(java.lang.String name) 
      As[] getSons() 
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      java.lang.String toString() 
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • As

        protected As()
    • Method Detail

      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getName

        public java.lang.String getName()
      • getSons

        public As[] getSons()
      • getProperty

        public java.lang.String getProperty(java.lang.String name)
      • getModel

        public java.lang.String getModel()
      • getHosts

        public Host[] getHosts()
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/HostFailureException.html000640 007661 000620 00000021633 12242224150 026345 0ustar00gierschand000000 000000 HostFailureException

org.simgrid.msg

Class HostFailureException

  • All Implemented Interfaces:
    java.io.Serializable


    public class HostFailureException
    extends MsgException
    This exception is raised when the host on which you are running has just been rebooted.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      HostFailureException()
      Constructs an HostFailureException without a detail message.
      HostFailureException(java.lang.String s)
      Constructs an HostFailureException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • HostFailureException

        public HostFailureException()
        Constructs an HostFailureException without a detail message.
      • HostFailureException

        public HostFailureException(java.lang.String s)
        Constructs an HostFailureException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/MsgException.html000640 007661 000620 00000023244 12242224150 024646 0ustar00gierschand000000 000000 MsgException

org.simgrid.msg

Class MsgException

  • java.lang.Object
    • java.lang.Throwable
      • java.lang.Exception
        • org.simgrid.msg.MsgException
    • Constructor Summary

      Constructors 
      Constructor and Description
      MsgException()
      Constructs an MsgException without a detail message.
      MsgException(java.lang.String s)
      Constructs an MsgException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • MsgException

        public MsgException()
        Constructs an MsgException without a detail message.
      • MsgException

        public MsgException(java.lang.String s)
        Constructs an MsgException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/Host.html000640 007661 000620 00000050024 12242224150 023152 0ustar00gierschand000000 000000 Host

org.simgrid.msg

Class Host

  • java.lang.Object
    • org.simgrid.msg.Host


  • public class Host
    extends java.lang.Object
    A host object represents a location (any possible place) where a process may run. Thus it is represented as a physical resource with computing capabilities, some mailboxes to enable running process to communicate with remote ones, and some private data that can be only accessed by local process. An instance of this class is always bound with the corresponding native host. All the native hosts are automatically created during the call of the method Msg.createEnvironment(). This method take as parameter a platform file which describes all elements of the platform (host, link, root..). You cannot create a host yourself. The best way to get an host instance is to call the static method Host.getByName(). For example to get the instance of the host. If your platform file description contains an host named "Jacquelin" : \verbatim Host jacquelin; try { jacquelin = Host.getByName("Jacquelin"); } catch(HostNotFoundException e) { System.err.println(e.toString()); } ... \endverbatim
    • Constructor Summary

      Constructors 
      Modifier Constructor and Description
      protected Host() 
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      static Host[] all()
      This static method returns all of the hosts of the installed platform.
      static Host currentHost()
      This static method return an instance to the host of the current process.
      static Host getByName(java.lang.String name)
      This static method gets an host instance associated with a native host of your platform.
      double getCoreNumber()
      This method returns the number of core of a host.
      static int getCount()
      This static method returns the count of the installed hosts.
      java.lang.Object getData()
      Gets the data of the host.
      int getLoad()
      This method returns the number of tasks currently running on a host.
      java.lang.String getName()
      This method returns the name of a host.
      java.lang.String getProperty(java.lang.String name)
      Returns the value of a given host property.
      double getSpeed()
      This method returns the speed of the processor of a host, regardless of the current load of the machine.
      boolean hasData()
      Checks whether a host has data.
      boolean isAvail()
      This method tests if a host is available.
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      static void setAsyncMailbox(java.lang.String mailboxName)
      This static method sets a mailbox to receive in asynchronous mode.
      void setData(java.lang.Object data)
      Sets the data of the host.
      void setProperty(java.lang.String name, java.lang.String value)
      Change the value of a given host property.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • Host

        protected Host()
    • Method Detail

      • getByName

        public static Host getByName(java.lang.String name)
                              throws HostNotFoundException,
                                     java.lang.NullPointerException
        This static method gets an host instance associated with a native host of your platform. This is the best way to get a java host object.
        Parameters:
        name - The name of the host to get.
        Returns:
        The host object with the given name.
        Throws:
        HostNotFoundException - if the name of the host is not valid. NativeException if the native version of this method failed.
        java.lang.NullPointerException
      • getCount

        public static int getCount()
        This static method returns the count of the installed hosts.
        Returns:
        The count of the installed hosts.
      • currentHost

        public static Host currentHost()
        This static method return an instance to the host of the current process.
        Returns:
        The host on which the current process is executed.
      • all

        public static Host[] all()
        This static method returns all of the hosts of the installed platform.
        Returns:
        An array containing all the hosts installed.
      • setAsyncMailbox

        public static void setAsyncMailbox(java.lang.String mailboxName)
        This static method sets a mailbox to receive in asynchronous mode. All messages sent to this mailbox will be transferred to the receiver without waiting for the receive call. The receive call will still be necessary to use the received data. If there is a need to receive some messages asynchronously, and some not, two different mailboxes should be used.
        Parameters:
        mailboxName - The name of the mailbox
      • getName

        public java.lang.String getName()
        This method returns the name of a host.
        Returns:
        The name of the host.
      • setData

        public void setData(java.lang.Object data)
        Sets the data of the host.
        Parameters:
        data -
      • getData

        public java.lang.Object getData()
        Gets the data of the host.
        Returns:
        The data object associated with the host.
      • hasData

        public boolean hasData()
        Checks whether a host has data.
        Returns:
        True if the host has an associated data object.
      • getLoad

        public int getLoad()
        This method returns the number of tasks currently running on a host. The external load is not taken in account.
        Returns:
        The number of tasks currently running on a host.
      • getSpeed

        public double getSpeed()
        This method returns the speed of the processor of a host, regardless of the current load of the machine.
        Returns:
        The speed of the processor of the host in flops.
      • getCoreNumber

        public double getCoreNumber()
        This method returns the number of core of a host.
        Returns:
        The speed of the processor of the host in flops.
      • getProperty

        public java.lang.String getProperty(java.lang.String name)
        Returns the value of a given host property.
      • setProperty

        public void setProperty(java.lang.String name,
                       java.lang.String value)
        Change the value of a given host property.
      • isAvail

        public boolean isAvail()
        This method tests if a host is available.
        Returns:
        True if the host is available.
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/ProcessKilledError.html000640 007661 000620 00000017512 12242224150 026017 0ustar00gierschand000000 000000 ProcessKilledError

org.simgrid.msg

Class ProcessKilledError

  • java.lang.Object
    • java.lang.Throwable
      • java.lang.Error
        • org.simgrid.msg.ProcessKilledError
  • All Implemented Interfaces:
    java.io.Serializable


    public class ProcessKilledError
    extends java.lang.Error
    This error class is only used to interrupt the java user code when the process gets killed by an external event. Don't catch it.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      ProcessKilledError(java.lang.String s) 
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • ProcessKilledError

        public ProcessKilledError(java.lang.String s)
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/TransferFailureException.html000640 007661 000620 00000021742 12242224150 027215 0ustar00gierschand000000 000000 TransferFailureException

org.simgrid.msg

Class TransferFailureException

  • All Implemented Interfaces:
    java.io.Serializable


    public class TransferFailureException
    extends MsgException
    This exception is raised if transfer failed while sending tasks.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      TransferFailureException()
      Constructs an TransferFailureException without a detail message.
      TransferFailureException(java.lang.String s)
      Constructs an TransferFailureException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • TransferFailureException

        public TransferFailureException()
        Constructs an TransferFailureException without a detail message.
      • TransferFailureException

        public TransferFailureException(java.lang.String s)
        Constructs an TransferFailureException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/Mutex.html000640 007661 000620 00000022146 12242224150 023343 0ustar00gierschand000000 000000 Mutex

org.simgrid.msg

Class Mutex

  • java.lang.Object
    • org.simgrid.msg.Mutex


  • public class Mutex
    extends java.lang.Object
    A mutex implemented on top of SimGrid synchronization mechanisms. You can use it exactly the same way that you use the mutexes, but to handle the interactions between the processes within the simulation.
    • Constructor Summary

      Constructors 
      Constructor and Description
      Mutex() 
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      void acquire() 
      protected void finalize() 
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      void release() 
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • Mutex

        public Mutex()
    • Method Detail

      • finalize

        protected void finalize()
        Overrides:
        finalize in class java.lang.Object
      • acquire

        public void acquire()
      • release

        public void release()
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/NativeException.html000640 007661 000620 00000020431 12242224150 025341 0ustar00gierschand000000 000000 NativeException

org.simgrid.msg

Class NativeException

  • All Implemented Interfaces:
    java.io.Serializable


    public class NativeException
    extends MsgException
    This exception is raised when there is an error within the C world of SimGrid. Refer to the string message for more info on what went wrong.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      NativeException(java.lang.String s)
      Constructs an NativeException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • NativeException

        public NativeException(java.lang.String s)
        Constructs an NativeException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/ProcessNotFoundException.html000640 007661 000620 00000021771 12242224150 027216 0ustar00gierschand000000 000000 ProcessNotFoundException

org.simgrid.msg

Class ProcessNotFoundException

  • All Implemented Interfaces:
    java.io.Serializable


    public class ProcessNotFoundException
    extends MsgException
    This exception is raised when looking for a non-existing process.
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor and Description
      ProcessNotFoundException()
      Constructs an ProcessNotFoundException without a detail message.
      ProcessNotFoundException(java.lang.String s)
      Constructs an ProcessNotFoundException with a detail message.
    • Method Summary

      • Methods inherited from class java.lang.Throwable

        fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • ProcessNotFoundException

        public ProcessNotFoundException()
        Constructs an ProcessNotFoundException without a detail message.
      • ProcessNotFoundException

        public ProcessNotFoundException(java.lang.String s)
        Constructs an ProcessNotFoundException with a detail message.
        Parameters:
        s - the detail message.
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/Msg.html000640 007661 000620 00000042230 12242224150 022763 0ustar00gierschand000000 000000 Msg

org.simgrid.msg

Class Msg

  • java.lang.Object
    • org.simgrid.msg.Msg


  • public final class Msg
    extends java.lang.Object
    • Constructor Summary

      Constructors 
      Constructor and Description
      Msg() 
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      static void clean()
      Deprecated. 
      static void createEnvironment(java.lang.String platformFile)
      The native implemented method to create the environment of the simulation.
      static void critical(java.lang.String s)
      Issue an critical logging message.
      static void debug(java.lang.String s)
      Issue a debug logging message.
      static void deployApplication(java.lang.String deploymentFile)
      The method to deploy the simulation.
      static As environmentGetRoutingRoot() 
      static void error(java.lang.String s)
      Issue an error logging message.
      static double getClock()
      Retrieve the simulation time
      static void info(java.lang.String s)
      Issue an information logging message
      static void init(java.lang.String[] args)
      The natively implemented method to initialize a MSG simulation.
      static void main(java.lang.String[] args)
      Example launcher.
      static void nativeInit() 
      static void run()
      Run the MSG simulation.
      static void verb(java.lang.String s)
      Issue an verbose logging message.
      static void warn(java.lang.String s)
      Issue an warning logging message.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • Msg

        public Msg()
    • Method Detail

      • nativeInit

        public static void nativeInit()
      • getClock

        public static final double getClock()
        Retrieve the simulation time
        Returns:
        The simulation time.
      • debug

        public static final void debug(java.lang.String s)
        Issue a debug logging message.
        Parameters:
        s - message to log.
      • verb

        public static final void verb(java.lang.String s)
        Issue an verbose logging message.
        Parameters:
        s - message to log.
      • info

        public static final void info(java.lang.String s)
        Issue an information logging message
        Parameters:
        s -
      • warn

        public static final void warn(java.lang.String s)
        Issue an warning logging message.
        Parameters:
        s - message to log.
      • error

        public static final void error(java.lang.String s)
        Issue an error logging message.
        Parameters:
        s - message to log.
      • critical

        public static final void critical(java.lang.String s)
        Issue an critical logging message.
        Parameters:
        s - message to log.
      • init

        public static final void init(java.lang.String[] args)
        The natively implemented method to initialize a MSG simulation.
        Parameters:
        args - The arguments of the command line of the simulation.
      • run

        public static final void run()
        Run the MSG simulation. The simulation is not cleaned afterward (see clean() if you really insist on cleaning the C side), so you can freely retrieve the informations that you want from the simulation. In particular, retrieving the status of a process or the current date is perfectly ok.
      • clean

        @Deprecated
        public static final void clean()
        Deprecated. 
        This function is useless nowadays, just stop calling it.
      • createEnvironment

        public static final void createEnvironment(java.lang.String platformFile)
        The native implemented method to create the environment of the simulation.
        Parameters:
        platformFile - The XML file which contains the description of the environment of the simulation
      • environmentGetRoutingRoot

        public static final As environmentGetRoutingRoot()
      • deployApplication

        public static final void deployApplication(java.lang.String deploymentFile)
        The method to deploy the simulation.
        Parameters:
        deploymentFile -
      • main

        public static void main(java.lang.String[] args)
                         throws MsgException
        Example launcher. You can use it or provide your own launcher, as you wish
        Parameters:
        args -
        Throws:
        MsgException
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/RngStream.html000640 007661 000620 00000041713 12242224150 024144 0ustar00gierschand000000 000000 RngStream

org.simgrid.msg

Class RngStream

  • java.lang.Object
    • org.simgrid.msg.RngStream


  • public class RngStream
    extends java.lang.Object
    Export of RngStreams for Java
    • Constructor Summary

      Constructors 
      Constructor and Description
      RngStream()
      Creates and returns a new stream without identifier.
      RngStream(java.lang.String name)
      Creates and returns a new stream with identifier "name".
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      void advanceState(int e, int g)
      Advances the state of the stream by k values, without modifying the states of other streams (as in RngStream_SetSeed), nor the values of Bg and Ig associated with this stream.
      protected void finalize()
      Destructor
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      int randInt(int i, int j)
      Returns a (pseudo)random number from the discrete uniform distribution over the integers {i, i + 1, . . . , j}
      double randU01()
      Returns a (pseudo)random number from the uniform distribution over the interval (0, 1), after advancing the state by one step.
      void resetNextSubstream()
      Reinitializes the stream g to the beginning of its next substream: Ng is computed, and Cg and Bg are set to Ng .
      void resetStart()
      Reinitializes the stream g to its initial state: Cg and Bg are set to Ig .
      void restartStartSubstream()
      Reinitializes the stream g to the beginning of its current substream: Cg is set to Bg .
      void setAntithetic(boolean a)
      If a = true the stream g will start generating antithetic variates, i.e., 1 - U instead of U , until this method is called again with a = false.
      static boolean setPackageSeed(int[] seed)
      Sets the initial seed of the package RngStreams to the six integers in the vector seed.
      boolean setSeed(int[] seed)
      Sets the initial seed Ig of stream g to the vector seed.
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • RngStream

        public RngStream()
        Creates and returns a new stream without identifier. This procedure reserves space to keep the information relative to the RngStream, initializes its seed Ig , sets Bg and Cg equal to Ig , sets its antithetic and precision switches to 0. The seed Ig is equal to the initial seed of the package given by setPackageSeed if this is the first stream created, otherwise it is Z steps ahead of that of the most recently created stream.
      • RngStream

        public RngStream(java.lang.String name)
        Creates and returns a new stream with identifier "name". This procedure reserves space to keep the information relative to the RngStream, initializes its seed Ig , sets Bg and Cg equal to Ig , sets its antithetic and precision switches to 0. The seed Ig is equal to the initial seed of the package given by setPackageSeed if this is the first stream created, otherwise it is Z steps ahead of that of the most recently created stream.
    • Method Detail

      • finalize

        protected void finalize()
        Destructor
        Overrides:
        finalize in class java.lang.Object
      • setPackageSeed

        public static boolean setPackageSeed(int[] seed)
        Sets the initial seed of the package RngStreams to the six integers in the vector seed. This will be the seed (initial state) of the first stream. If this procedure is not called, the default initial seed is (12345, 12345, 12345, 12345, 12345, 12345). If it is called, the first 3 values of the seed must all be less than m1 = 4294967087, and not all 0; and the last 3 values must all be less than m2 = 4294944443, and not all 0. Returns false for invalid seeds, and true otherwise.
      • resetStart

        public void resetStart()
        Reinitializes the stream g to its initial state: Cg and Bg are set to Ig .
      • restartStartSubstream

        public void restartStartSubstream()
        Reinitializes the stream g to the beginning of its current substream: Cg is set to Bg .
      • resetNextSubstream

        public void resetNextSubstream()
        Reinitializes the stream g to the beginning of its next substream: Ng is computed, and Cg and Bg are set to Ng .
      • setAntithetic

        public void setAntithetic(boolean a)
        If a = true the stream g will start generating antithetic variates, i.e., 1 - U instead of U , until this method is called again with a = false.
      • setSeed

        public boolean setSeed(int[] seed)
        Sets the initial seed Ig of stream g to the vector seed. This vector must satisfy the same conditions as in setPackageSeed. The stream is then reset to this initial seed. The states and seeds of the other streams are not modified. As a result, after calling this procedure, the initial seeds of the streams are no longer spaced Z values apart. We discourage the use of this procedure. Returns false for invalid seeds, and true otherwise.
      • advanceState

        public void advanceState(int e,
                        int g)
        Advances the state of the stream by k values, without modifying the states of other streams (as in RngStream_SetSeed), nor the values of Bg and Ig associated with this stream. If e > 0, then k = 2e + c; if e < 0, then k = -2-e + c; and if e = 0, then k = c. Note: c is allowed to take negative values. We discourage the use of this procedure.
      • randU01

        public double randU01()
        Returns a (pseudo)random number from the uniform distribution over the interval (0, 1), after advancing the state by one step. The returned number has 32 bits of precision in the sense that it is always a multiple of 1/(232 - 208), unless RngStream_IncreasedPrecis has been called for this stream.
      • randInt

        public int randInt(int i,
                  int j)
        Returns a (pseudo)random number from the discrete uniform distribution over the integers {i, i + 1, . . . , j}
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/Comm.html000640 007661 000620 00000042244 12242224150 023135 0ustar00gierschand000000 000000 Comm

org.simgrid.msg

Class Comm

  • java.lang.Object
    • org.simgrid.msg.Comm


  • public class Comm
    extends java.lang.Object
    Communication action, representing an ongoing communication between processes.
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      protected boolean finished
      Indicates if the communication is finished
      protected boolean receiving
      Indicates if the communication is a receiving communication
      protected Task task
      Task associated with the comm.
    • Constructor Summary

      Constructors 
      Modifier Constructor and Description
      protected Comm()
      Protected constructor, used by Comm factories in Task.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      protected void destroy()
      Unbind the communication object
      protected void finalize()
      Finalize the communication object, destroying it.
      Task getTask()
      Returns the task associated with the communication.
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      boolean test()
      Returns if the communication is finished or not.
      void waitCompletion()
      Wait for the complemetion of the communication for an indefinite time
      void waitCompletion(double timeout)
      Wait for the completion of the communication.
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/VM.html000640 007661 000620 00000037132 12242224150 022564 0ustar00gierschand000000 000000 VM

org.simgrid.msg

Class VM

  • java.lang.Object
    • org.simgrid.msg.VM


  • public class VM
    extends java.lang.Object
    • Constructor Summary

      Constructors 
      Constructor and Description
      VM(Host host, java.lang.String name, int coreAmount)
      Create a new empty VM.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      void bind(Process process)
      Add the given process into the VM.
      protected void destroy()
      Destroy the VM
      protected void finalize() 
      java.lang.String getName() 
      boolean isRunning()
      Returns whether the given VM is currently running
      boolean isSuspended()
      Returns whether the given VM is currently suspended
      void migrate(Host destination)
      Immediately change the host on which all processes are running No migration cost occurs.
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      void reboot()
      Reboot the VM, restarting all the processes in it.
      void resume()
      Immediately resumes the execution of all processes within the given VM No resume cost occurs.
      void shutdown()
      Immediately kills all processes within the given VM.
      void suspend()
      Immediately suspend the execution of all processes within the given VM No suspension cost occurs.
      void unbind(Process process)
      Removes the given process from the given VM, and kill it Will raise a ProcessNotFound exception if the process were not bound to that VM
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • VM

        public VM(Host host,
          java.lang.String name,
          int coreAmount)
        Create a new empty VM. NOTE: it is expected that in the future, the coreAmount parameter will be used to add extra constraints on the execution, but the argument is ignored for now.
    • Method Detail

      • finalize

        protected void finalize()
        Overrides:
        finalize in class java.lang.Object
      • destroy

        protected void destroy()
        Destroy the VM
      • isSuspended

        public boolean isSuspended()
        Returns whether the given VM is currently suspended
      • isRunning

        public boolean isRunning()
        Returns whether the given VM is currently running
      • bind

        public void bind(Process process)
        Add the given process into the VM. Afterward, when the VM is migrated or suspended or whatever, the process will have the corresponding handling, too.
      • unbind

        public void unbind(Process process)
        Removes the given process from the given VM, and kill it Will raise a ProcessNotFound exception if the process were not bound to that VM
      • migrate

        public void migrate(Host destination)
        Immediately change the host on which all processes are running No migration cost occurs. If you want to simulate this too, you want to use a Task.send() before or after, depending on whether you want to do cold or hot migration.
      • suspend

        public void suspend()
        Immediately suspend the execution of all processes within the given VM No suspension cost occurs. If you want to simulate this too, you want to use a \ref File.write() before or after, depending on the exact semantic of VM suspend to you.
      • resume

        public void resume()
        Immediately resumes the execution of all processes within the given VM No resume cost occurs. If you want to simulate this too, you want to use a \ref File.read() before or after, depending on the exact semantic of VM resume to you.
      • shutdown

        public void shutdown()
        Immediately kills all processes within the given VM. Any memory that they allocated will be leaked. No extra delay occurs. If you want to simulate this too, you want to use a MSG_process_sleep() or something
      • reboot

        public void reboot()
        Reboot the VM, restarting all the processes in it.
      • getName

        public java.lang.String getName()
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/Process.html000640 007661 000620 00000122606 12242224150 023661 0ustar00gierschand000000 000000 Process

org.simgrid.msg

Class Process

  • java.lang.Object
    • org.simgrid.msg.Process
  • All Implemented Interfaces:
    java.lang.Runnable


    public abstract class Process
    extends java.lang.Object
    implements java.lang.Runnable
    A process may be defined as a code, with some private data, executing in a location (host). All the process used by your simulation must be declared in the deployment file (XML format). To create your own process you must inherit your own process from this class and override the method "main()". For example if you want to use a process named Slave proceed as it : (1) import the class Process of the package simgrid.msg import simgrid.msg.Process; public class Slave extends simgrid.msg.Process { (2) Override the method function \verbatim public void main(String[] args) { System.out.println("Hello MSG"); } \endverbatim } The name of your process must be declared in the deployment file of your simulation. For the example, for the previous process Slave this file must contains a line : <process host="Maxims" function="Slave"/>, where Maxims is the host of the process Slave. All the process of your simulation are automatically launched and managed by Msg. A process use tasks to simulate communications or computations with another process. For more information see Task. For more information on host concept see Host.
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      java.util.Vector<java.lang.String> args
      The arguments of the method function of the process.
      protected Host host
      The host of the process
      long id
      Even if this attribute is public you must never access to it.
      double killTime
      Kill time of the process
      protected java.lang.String name
      The name of the process.
      static long nextProcessId
      Even if this attribute is public you must never access to it.
      protected int pid
      The PID of the process
      protected int ppid
      The PPID of the process
      double startTime
      Start time of the process
    • Constructor Summary

      Constructors 
      Modifier Constructor and Description
      protected Process()
      Default constructor
        Process(Host host, java.lang.String name)
      Constructs a new process from a host and his name.
        Process(Host host, java.lang.String name, java.lang.String[] args)
      Constructs a new process from a host and his name, the arguments of here method function are specified by the parameter args.
        Process(Host host, java.lang.String name, java.lang.String[] args, double startTime, double killTime)
      Constructs a new process from a host and his name, the arguments of here method function are specified by the parameter args.
        Process(java.lang.String hostname, java.lang.String name)
      Constructs a new process from the name of a host and his name.
        Process(java.lang.String hostname, java.lang.String name, java.lang.String[] args)
      Constructs a new process from the name of a host and his name.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      protected void create(java.lang.String hostName)
      The natively implemented method to create an MSG process.
      static Process currentProcess()
      This static method returns the currently running process.
      void exit() 
      static Process fromPID(int PID)
      This static method gets a process from a PID.
      static int getCount()
      This static method returns the current amount of processes running
      Host getHost()
      Returns the host of the process.
      int getPID()
      This method returns the PID of the process.
      int getPPID()
      This method returns the PID of the parent of a process.
      java.lang.String getProperty(java.lang.String name)
      Returns the value of a given process property.
      boolean isSuspended()
      Tests if a process is suspended.
      void kill()
      This method kill a process.
      static int killAll(int resetPID)
      This method kills all running process of the simulation.
      abstract void main(java.lang.String[] args)
      The main function of the process (to implement).
      void migrate(Host host)
      Migrates a process to another host.
      java.lang.String msgName()
      Returns the name of the process
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      void pause()
      Deprecated. 
      void restart()
      Restarts the process from the beginning
      void resume()
      Resumes a suspended process by resuming the task on which it was waiting for the completion.
      void run()
      This method runs the process.
      void setAutoRestart(boolean autoRestart)
      Sets the "auto-restart" flag of the process.
      void setKillTime(double killTime)
      Set the kill time of the process
      void showArgs() 
      static void sleep(long millis)
      Makes the current process sleep until millis millisecondes have elapsed.
      static void sleep(long millis, int nanos)
      Makes the current process sleep until millis milliseconds and nanos nanoseconds have elapsed.
      void start()
      This method actually creates and run the process.
      void suspend()
      Suspends the process by suspending the task on which it was waiting for the completion.
      void waitFor(double seconds)
      Makes the current process sleep until time seconds have elapsed.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • nextProcessId

        public static long nextProcessId
        Even if this attribute is public you must never access to it. It is used to compute the id of an MSG process.
      • id

        public long id
        Even if this attribute is public you must never access to it. It is compute automatically during the creation of the object. The native functions use this identifier to synchronize the process.
      • startTime

        public double startTime
        Start time of the process
      • killTime

        public double killTime
        Kill time of the process
      • name

        protected java.lang.String name
        The name of the process.
      • pid

        protected int pid
        The PID of the process
      • ppid

        protected int ppid
        The PPID of the process
      • host

        protected Host host
        The host of the process
      • args

        public java.util.Vector<java.lang.String> args
        The arguments of the method function of the process.
    • Constructor Detail

      • Process

        protected Process()
        Default constructor
      • Process

        public Process(java.lang.String hostname,
               java.lang.String name)
                throws HostNotFoundException
        Constructs a new process from the name of a host and his name. The method function of the process doesn't have argument.
        Parameters:
        hostname - The name of the host of the process to create.
        name - The name of the process.
        Throws:
        HostNotFoundException - if no host with this name exists.
      • Process

        public Process(java.lang.String hostname,
               java.lang.String name,
               java.lang.String[] args)
                throws HostNotFoundException,
                       NativeException
        Constructs a new process from the name of a host and his name. The arguments of the method function of the process are specified by the parameter args.
        Parameters:
        hostname - The name of the host of the process to create.
        name - The name of the process.
        args - The arguments of the main function of the process.
        Throws:
        HostNotFoundException - if no host with this name exists. NativeException
        NativeException
      • Process

        public Process(Host host,
               java.lang.String name)
        Constructs a new process from a host and his name. The method function of the process doesn't have argument.
        Parameters:
        host - The host of the process to create.
        name - The name of the process.
      • Process

        public Process(Host host,
               java.lang.String name,
               java.lang.String[] args)
        Constructs a new process from a host and his name, the arguments of here method function are specified by the parameter args.
        Parameters:
        host - The host of the process to create.
        name - The name of the process.
        args - The arguments of main method of the process.
      • Process

        public Process(Host host,
               java.lang.String name,
               java.lang.String[] args,
               double startTime,
               double killTime)
        Constructs a new process from a host and his name, the arguments of here method function are specified by the parameter args.
        Parameters:
        host - The host of the process to create.
        name - The name of the process.
        args - The arguments of main method of the process.
        startTime - Start time of the process
        killTime - Kill time of the process
    • Method Detail

      • create

        protected void create(java.lang.String hostName)
                       throws HostNotFoundException
        The natively implemented method to create an MSG process.
        Parameters:
        hostName - A valid (bound) host where create the process.
        Throws:
        HostNotFoundException
      • killAll

        public static int killAll(int resetPID)
        This method kills all running process of the simulation.
        Parameters:
        resetPID - Should we reset the PID numbers. A negative number means no reset and a positive number will be used to set the PID of the next newly created process.
        Returns:
        The function returns the PID of the next created process.
      • kill

        public void kill()
        This method kill a process.
      • suspend

        public void suspend()
        Suspends the process by suspending the task on which it was waiting for the completion.
      • pause

        @Deprecated
        public void pause()
        Deprecated. 
        Suspends the process by suspending the task on which it was waiting for the completion. DEPRECATED: use suspend instead.
      • setAutoRestart

        public void setAutoRestart(boolean autoRestart)
        Sets the "auto-restart" flag of the process.
      • restart

        public void restart()
        Restarts the process from the beginning
      • resume

        public void resume()
        Resumes a suspended process by resuming the task on which it was waiting for the completion.
      • isSuspended

        public boolean isSuspended()
        Tests if a process is suspended.
        Returns:
        The method returns true if the process is suspended. Otherwise the method returns false.
      • msgName

        public java.lang.String msgName()
        Returns the name of the process
      • getHost

        public Host getHost()
        Returns the host of the process.
        Returns:
        The host instance of the process.
      • fromPID

        public static Process fromPID(int PID)
                               throws NativeException
        This static method gets a process from a PID.
        Parameters:
        PID - The process identifier of the process to get.
        Returns:
        The process with the specified PID.
        Throws:
        NativeException - on error in the native SimGrid code
      • getPID

        public int getPID()
        This method returns the PID of the process.
        Returns:
        The PID of the process.
      • getPPID

        public int getPPID()
        This method returns the PID of the parent of a process.
        Returns:
        The PID of the parent of the process.
      • getProperty

        public java.lang.String getProperty(java.lang.String name)
        Returns the value of a given process property.
      • setKillTime

        public void setKillTime(double killTime)
        Set the kill time of the process
        Parameters:
        killTime - the time when the process is killed
      • currentProcess

        public static Process currentProcess()
        This static method returns the currently running process.
        Returns:
        The current process.
      • migrate

        public void migrate(Host host)
        Migrates a process to another host.
        Parameters:
        host - The host where to migrate the process.
      • sleep

        public static void sleep(long millis)
                          throws HostFailureException
        Makes the current process sleep until millis millisecondes have elapsed. You should note that unlike "waitFor" which takes seconds, this method takes milliseconds. FIXME: Not optimal, maybe we should have two native functions.
        Parameters:
        millis - the length of time to sleep in milliseconds.
        Throws:
        HostFailureException
      • sleep

        public static void sleep(long millis,
                 int nanos)
                          throws HostFailureException
        Makes the current process sleep until millis milliseconds and nanos nanoseconds have elapsed. You should note that unlike "waitFor" which takes seconds, this method takes milliseconds and nanoseconds. Overloads Thread.sleep.
        Parameters:
        millis - the length of time to sleep in milliseconds.
        nanos - additionnal nanoseconds to sleep.
        Throws:
        HostFailureException
      • waitFor

        public void waitFor(double seconds)
                     throws HostFailureException
        Makes the current process sleep until time seconds have elapsed.
        Parameters:
        seconds - The time the current process must sleep.
        Throws:
        HostFailureException
      • showArgs

        public void showArgs()
      • run

        public void run()
        This method runs the process. Il calls the method function that you must overwrite.
        Specified by:
        run in interface java.lang.Runnable
      • main

        public abstract void main(java.lang.String[] args)
                           throws MsgException
        The main function of the process (to implement).
        Parameters:
        args -
        Throws:
        MsgException
      • exit

        public void exit()
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
      • getCount

        public static int getCount()
        This static method returns the current amount of processes running
        Returns:
        The count of the running processes
SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/package-frame.html000640 007661 000620 00000005630 12242224150 024723 0ustar00gierschand000000 000000 org.simgrid.msg

org.simgrid.msg

SimGrid-3.10/doc/html/javadoc/org/simgrid/msg/File.html000640 007661 000620 00000031305 12242224150 023115 0ustar00gierschand000000 000000 File

org.simgrid.msg

Class File

  • java.lang.Object
    • org.simgrid.msg.File


  • public class File
    extends java.lang.Object
    Copyright (c) 2012-2013. The SimGrid Team. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the license (GNU LGPL) which comes with this package.
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      protected java.lang.String storage 
    • Constructor Summary

      Constructors 
      Constructor and Description
      File(java.lang.String storage, java.lang.String path)
      Constructor, opens the file.
    • Method Summary

      Methods 
      Modifier and Type Method and Description
      void close()
      Close the file.
      protected void finalize() 
      static void nativeInit()
      Class initializer, to initialize various JNI stuff
      protected void open(java.lang.String storage, java.lang.String path)
      Opens the file whose name is the string pointed to by path.
      long read(long size, long nMemb)
      Read elements of a file.
      long write(long size, long nMemb)
      Write elements into a file.
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • storage

        protected java.lang.String storage
    • Constructor Detail

      • File

        public File(java.lang.String storage,
            java.lang.String path)
        Constructor, opens the file.
        Parameters:
        storage - is the name where you can find the file descriptor
        path - is the file location on the storage
    • Method Detail

      • finalize

        protected void finalize()
        Overrides:
        finalize in class java.lang.Object
      • open

        protected void open(java.lang.String storage,
                java.lang.String path)
        Opens the file whose name is the string pointed to by path.
        Parameters:
        storage - is the name where you can find the file descriptor
        path - is the file location on the storage
      • read

        public long read(long size,
                long nMemb)
        Read elements of a file.
        Parameters:
        size - of each element
        nMemb - is the number of elements of data to write
      • write

        public long write(long size,
                 long nMemb)
        Write elements into a file.
        Parameters:
        size - of each element
        nMemb - is the number of elements of data to write
      • close

        public void close()
        Close the file.
      • nativeInit

        public static void nativeInit()
        Class initializer, to initialize various JNI stuff
SimGrid-3.10/doc/html/javadoc/index.html000640 007661 000620 00000004764 12242224150 020343 0ustar00gierschand000000 000000 Generated Documentation (Untitled) <noscript> <div>JavaScript is disabled on your browser.</div> </noscript> <h2>Frame Alert</h2> <p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.</p> <br>Link to<a href="org/simgrid/msg/package-summary.html">Non-frame version.</a> SimGrid-3.10/doc/html/javadoc/package-list000640 007661 000620 00000000020 12242224150 020612 0ustar00gierschand000000 000000 org.simgrid.msg SimGrid-3.10/doc/html/group__msg__deprecated__functions.html000640 007661 000620 00000105647 12242224150 024536 0ustar00gierschand000000 000000 SimGrid: MSG Deprecated
SimGrid  3.10
Versatile Simulation of Distributed Systems
MSG Deprecated

This section describes the deprecated functions. PLEASE STOP USING THEM. More...

Functions

msg_error_t MSG_get_errno (void)
 Return the last value returned by a MSG function (except MSG_get_errno...).
msg_error_t MSG_task_put (msg_task_t task, msg_host_t dest, m_channel_t channel)
 Put a task on a channel of an host and waits for the end of the transmission.
msg_error_t MSG_task_put_bounded (msg_task_t task, msg_host_t dest, m_channel_t channel, double maxrate)
 Does exactly the same as MSG_task_put but with a bounded transmition rate.
msg_error_t MSG_task_put_with_timeout (msg_task_t task, msg_host_t dest, m_channel_t channel, double timeout)
 Put a task on a channel of an host (with a timeout on the waiting of the destination host) and waits for the end of the transmission.
int MSG_task_probe_from (m_channel_t channel)
 Test whether there is a pending communication on a channel, and who sent it.
int MSG_task_Iprobe (m_channel_t channel)
 Test whether there is a pending communication on a channel.
int MSG_task_probe_from_host (int channel, msg_host_t host)
 Return the number of tasks waiting to be received on a channel and sent by host.
msg_error_t MSG_task_get_from_host (msg_task_t *task, m_channel_t channel, msg_host_t host)
 Listen on channel and waits for receiving a task from host.
msg_error_t MSG_task_get (msg_task_t *task, m_channel_t channel)
 Listen on a channel and wait for receiving a task.
msg_error_t MSG_task_get_with_timeout (msg_task_t *task, m_channel_t channel, double max_duration)
 Listen on a channel and wait for receiving a task with a timeout.

Detailed Description

This section describes the deprecated functions. PLEASE STOP USING THEM.

We don't remove them because the ability to run old scientific code is something important to us. But these functionalities are not actively supported anymore.

To access these functions, you should define the relevant option at configuration time in ccmake.

Function Documentation

msg_error_t MSG_task_put ( msg_task_t  task,
msg_host_t  dest,
m_channel_t  channel 
)

Put a task on a channel of an host and waits for the end of the transmission.

This function is used for describing the behavior of a process. It takes three parameter.

Parameters
taska msg_task_t to send on another location. This task will not be usable anymore when the function will return. There is no automatic task duplication and you have to save your parameters before calling this function. Tasks are unique and once it has been sent to another location, you should not access it anymore. You do not need to call MSG_task_destroy() but to avoid using, as an effect of inattention, this task anymore, you definitely should renitialize it with MSG_TASK_UNINITIALIZED. Note that this task can be transfered iff it has been correctly created with MSG_task_create().
destthe destination of the message
channelthe channel on which the process should put this task. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
Returns
MSG_HOST_FAILURE if the host on which this function was called was shut down, MSG_TRANSFER_FAILURE if the transfer could not be properly done (network failure, dest failure) or MSG_OK if it succeeded.
msg_error_t MSG_task_put_bounded ( msg_task_t  task,
msg_host_t  dest,
m_channel_t  channel,
double  maxrate 
)

Does exactly the same as MSG_task_put but with a bounded transmition rate.

See Also
MSG_task_put
msg_error_t MSG_task_put_with_timeout ( msg_task_t  task,
msg_host_t  dest,
m_channel_t  channel,
double  timeout 
)

Put a task on a channel of an host (with a timeout on the waiting of the destination host) and waits for the end of the transmission.

This function is used for describing the behavior of a process. It takes four parameter.

Parameters
taska msg_task_t to send on another location. This task will not be usable anymore when the function will return. There is no automatic task duplication and you have to save your parameters before calling this function. Tasks are unique and once it has been sent to another location, you should not access it anymore. You do not need to call MSG_task_destroy() but to avoid using, as an effect of inattention, this task anymore, you definitely should renitialize it with MSG_TASK_UNINITIALIZED. Note that this task can be transfered iff it has been correctly created with MSG_task_create().
destthe destination of the message
channelthe channel on which the process should put this task. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
timeoutthe maximum time to wait for a task before giving up. In such a case, MSG_TRANSFER_FAILURE will be returned, task will not be modified
Returns
MSG_HOST_FAILURE if the host on which this function was called was shut down, MSG_TRANSFER_FAILURE if the transfer could not be properly done (network failure, dest failure, timeout...) or MSG_OK if the communication succeeded.
int MSG_task_probe_from ( m_channel_t  channel)

Test whether there is a pending communication on a channel, and who sent it.

It takes one parameter.

Parameters
channelthe channel on which the process should be listening. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
Returns
-1 if there is no pending communication and the PID of the process who sent it otherwise
int MSG_task_Iprobe ( m_channel_t  channel)

Test whether there is a pending communication on a channel.

It takes one parameter.

Parameters
channelthe channel on which the process should be listening. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
Returns
1 if there is a pending communication and 0 otherwise
int MSG_task_probe_from_host ( int  channel,
msg_host_t  host 
)

Return the number of tasks waiting to be received on a channel and sent by host.

It takes two parameters.

Parameters
channelthe channel on which the process should be listening. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
hostthe host that is to be watched.
Returns
the number of tasks waiting to be received on channel and sent by host.
msg_error_t MSG_task_get_from_host ( msg_task_t task,
m_channel_t  channel,
msg_host_t  host 
)

Listen on channel and waits for receiving a task from host.

It takes three parameters.

Parameters
taska memory location for storing a msg_task_t. It will hold a task when this function will return. Thus task should not be equal to NULL and *task should be equal to NULL. If one of those two condition does not hold, there will be a warning message.
channelthe channel on which the process should be listening. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
hostthe host that is to be watched.
Returns
a msg_error_t indicating whether the operation was successful (MSG_OK), or why it failed otherwise.
msg_error_t MSG_task_get ( msg_task_t task,
m_channel_t  channel 
)

Listen on a channel and wait for receiving a task.

It takes two parameters.

Parameters
taska memory location for storing a msg_task_t. It will hold a task when this function will return. Thus task should not be equal to NULL and *task should be equal to NULL. If one of those two condition does not hold, there will be a warning message.
channelthe channel on which the process should be listening. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
Returns
a msg_error_t indicating whether the operation was successful (MSG_OK), or why it failed otherwise.
msg_error_t MSG_task_get_with_timeout ( msg_task_t task,
m_channel_t  channel,
double  max_duration 
)

Listen on a channel and wait for receiving a task with a timeout.

It takes three parameters.

Parameters
taska memory location for storing a msg_task_t. It will hold a task when this function will return. Thus task should not be equal to NULL and *task should be equal to NULL. If one of those two condition does not hold, there will be a warning message.
channelthe channel on which the process should be listening. This value has to be >=0 and < than the maximal number of channels fixed with MSG_set_channel_number().
max_durationthe maximum time to wait for a task before giving up. In such a case, MSG_TRANSFER_FAILURE will be returned, task will not be modified and will still be equal to NULL when returning.
Returns
a msg_error_t indicating whether the operation was successful (MSG_OK), or why it failed otherwise.
SimGrid-3.10/doc/html/advanced.html000640 007661 000620 00000013752 12242224150 017367 0ustar00gierschand000000 000000 SimGrid: Advanced Topics
SimGrid  3.10
Versatile Simulation of Distributed Systems
Advanced Topics

This page does not exist yet. Writing an acceptable user documentation is already difficult, but writing a good documentation for advanced users is near to impossible. In the meanwhile, please refer to the tutorials on the project web page, looking for the "SimGrid::Internals" tutorials.

SimGrid-3.10/doc/html/group__XBT__sock.html000640 007661 000620 00000012762 12242224150 021010 0ustar00gierschand000000 000000 SimGrid: Sock
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/pls.html000640 007661 000620 00000033630 12242224150 016415 0ustar00gierschand000000 000000 SimGrid: Packet level simulation
SimGrid  3.10
Versatile Simulation of Distributed Systems
Packet level simulation

It is possible to use a packet-level network simulator instead of the default flow-based simulation. You may want to use such an approach if you have doubts about the validity of the default model or if you want to perform some validation experiments. At the moment, we support the GTNetS simulator and since version 3.6.2, ns-3.

Using GTNetS

To enable GTNetS model inside SimGrid it is needed to patch the GTNetS simulator source code and build/install it from scratch

  • Download and enter the recent downloaded GTNetS directory
svn checkout svn://scm.gforge.inria.fr/svn/simgrid/contrib/trunk/GTNetS/
cd GTNetS
  • Use the following commands to unzip and patch GTNetS package to work within SimGrid.
unzip gtnets-current.zip
tar zxvf gtnets-current-patch.tgz
cd gtnets-current
cat ../00*.patch | patch -p1
  • OPTIONALLY you can use a patch for itanium 64bit processor family.
cat ../AMD64-FATAL-Removed-DUL_SIZE_DIFF-Added-fPIC-compillin.patch | patch -p1
  • Compile GTNetS

    Due to portability issues it is possible that GTNetS does not compile in your architecture. The patches furnished in SimGrid SVN repository are intended for use in Linux architecture only. Unfortunately, we do not have the time, the money, neither the manpower to guarantee GTNetS portability. We advice you to use one of GTNetS communication channel to get more help in compiling GTNetS.

ln -sf Makefile.linux Makefile
sed -i 's/-fPIC/-fPIC -fpermissive/g' Makefile
make depend
make debug
  • NOTE A lot of warnings are expected but the application should compile just fine. If the makefile insists in compiling some QT libraries please try a make clean before asking for help.
  • To compile optimized version
make opt
  • Installing GTNetS

It is important to put the full path of your libgtsim-xxxx.so file when creating the symbolic link. Replace < userhome > by some path you have write access to.

ln -sf /<absolute_path>/gtnets_current/libgtsim-debug.so /<userhome>/usr/lib/libgtnets.so
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}/<userhome>/usr/lib/
mkdir /<userhome>/usr/include/gtnets
cp -fr SRC/*.h /<userhome>/usr/include/gtnets
  • Enable GTNetS support in SimGrid

In order to enable gtnets with simgrid you have to give where is gtnets. (path to <gtnets_path>/lib and <gtnets_path>/include)

cmake . -Denable_gtnets=ON -Dgtnets_path=/<userhome>/usr
  • Once you have followed all the instructions for compiling and installing successfully you can activate this feature at runntime with the following options:
cd simgrid
make
ctest -R gtnets
  • Or try the GTNetS model dogbone example with
gtnets/gtnets gtnets/onelink-p.xml gtnets/onelink-d.xml --cfg=network_model:GTNets

A long version of this HowTo it is available

More about GTNetS simulator at GTNetS Website

  • DISCLAIMER The patches provided by us worked successfully with GTNetS found here, dated from 12th June 2008. Due to the discontinuing development of GTNetS it is impossible to precise a version number. We STRONGLY recommend you to download and install the GTNetS version found in SimGrid repository as explained above.

Using NS3

It is possible to use discrete-event network simulator (ns-3) for Internet systems instead of the default one.

A ns-3 platform is created according to the platform file you provide in SimGrid format. However from this configuration, we had to set up some extra parameters :

  • First, whenever possible, we let default ns3 values and we don't changed it ; in case you have doubts on values for those parameters (TCP parameters for example), blame ns-3...

  • Second, routing used inside ns-3 is a global and static one, relying on a shortest path algorithm. We did so by using ns3::Ipv4GlobalRoutingHelper::PopulateRoutingTables.

  • Third, we also choose to restrict the way your platform is built : end hosts cannot have more than one interface card (so, only one <link> in your SimGrid platform should link an end host to the platform ; if not, your end host will be considered as a router.

To use ns3 model inside SimGrid you have to install at least the version 3.10 of ns3 simulator.

  • Download and enter the lateast release (here the 3.12.1)
http://www.nsnam.org/release/ns-allinone-3.12.1.tar.bz2
tar -xf ns-allinone-3.12.1.tar.bz2
cd ns-allinone-3.12.1/ns-3.12.1/
  • Configure, make and install ns3
./waf configure --prefix="ns-3_install_directory"
./waf
./waf install

After install ns-3 you should have directories into your "ns-3_install_directory":

  • include/ns3/
  • lib/
  • bin/ (with 3.12)

You also need to add to the LD_LIBRARY_PATH : "ns-3_install_directory/lib".

  • Enable ns-3 support on SimGrid

In order to enable ns-3 with simgrid you have to give where is ns-3 to the simgrid configuration command. (path to <ns3_path>/lib and <ns3_path>/include)

cmake . -Denable_ns3=ON -Dns3_path=<ns3_path>

With the output of the configuration you can see if ns-3 is detected by included the directory to flags.

Configuration of package `simgrid' on arch (=4):
             BUILDNAME :        UNIX
             SITE      :        Linux_2.6.38-11-generic_x86_64
             Release   :        simgrid-3.6.1

         Compiler: c++ :        /usr/bin/c++
                version:        4.6.1
         Compiler: c   :        /usr/bin/gcc
                version:        4.6.1

               CFlags  :        -O3 -finline-functions -funroll-loops -fno-strict-aliasing -L/usr/lib/x86_64-linux-gnu -I/usr/include
                                        -L/home/navarrop/Install/ns3-3.10/lib -I/home/navarrop/Install/ns3-3.10/include -g3  -D_NS3_3_10
               CPPFlags:        -I/home/navarrop/Install/ns3-3.10/include -L/home/navarrop/Install/ns3-3.10/lib

        Compile Gtnets :        0
        Compile NS-3   :        1 ---------------------> Be sure this option is "1" otherwise ns-3 is not activated
        Gtnets path    :
        NS-3 path      :        /home/navarrop/Install/ns3-3.10
        Compile Lua    :
        Compile Smpi   :        OFF
        Compile Static :        OFF

        Maintainer mode:        OFF
        Supernovae mode:        OFF
        Model checking :        OFF
        Tracing mode   :        OFF
        Jedule  mode   :        OFF
        Latency bound  :        OFF
        Graphviz mode  :

        Simgrid dependencies:   -lm -lpthread -lns3 -lrt
        Smpi dependencies   :

        INSTALL_PREFIX:         /usr/local
-- Configuring done
-- Generating done
-- Build files have been written to: /home/navarrop/workspace/simgrid/build

Now you can compile SimGrid

make

Then you can see if ns-3 is well activated by testing

ctest -R ns3

You should see

    Start 182: msg-ns3-thread
1/3 Test #182: msg-ns3-thread ...................   Passed    0.35 sec
    Start 183: msg-ns3-ucontext
2/3 Test #183: msg-ns3-ucontext .................   Passed    0.22 sec
    Start 184: msg-ns3-raw
3/3 Test #184: msg-ns3-raw ......................   Passed    0.23 sec

More about ns-3 simulator (Official website)

SimGrid-3.10/doc/html/group__SURF__simulation.js000640 007661 000620 00000001313 12242224150 022015 0ustar00gierschand000000 000000 var group__SURF__simulation = [ [ "XBT_PUBLIC_DATA", "group__SURF__simulation.html#ga35bd1d3b1139b2f6990002f4aaeac759", null ], [ "surf_init", "group__SURF__simulation.html#ga403868865b66138187c3db30521e1bbe", null ], [ "surf_presolve", "group__SURF__simulation.html#ga9b7e7ceba73ff5ce637ecb58f1e2edc9", null ], [ "surf_solve", "group__SURF__simulation.html#gaa723e3f55eb26355d00de5bf07c6d373", null ], [ "surf_get_clock", "group__SURF__simulation.html#gafa85b9ba47f47d599353b872d2cb93d3", null ], [ "surf_exit", "group__SURF__simulation.html#ga1179497a5f822209f22b5735e0fb1104", null ], [ "watched_hosts_lib", "group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6", null ] ];SimGrid-3.10/doc/html/group__simix__file__management.js000640 007661 000620 00000000412 12242224150 023454 0ustar00gierschand000000 000000 var group__simix__file__management = [ [ "simcall_file_get_data", "group__simix__file__management.html#ga1d4bafa33327c5ce72d7db4a3f1b78d0", null ], [ "simcall_file_set_data", "group__simix__file__management.html#ga6a768555110db361a4e78fe04719c408", null ] ];SimGrid-3.10/doc/html/group__XBT__thread.js000640 007661 000620 00000001270 12242224150 020760 0ustar00gierschand000000 000000 var group__XBT__thread = [ [ "xbt_os_thread_t", "group__XBT__thread.html#ga7994e3241b60f854c77043c49a83873c", null ], [ "xbt_os_mutex_t", "group__XBT__thread.html#ga51b6d74f9dcfa8d7563ddf6386f9bd89", null ], [ "xbt_os_rmutex_t", "group__XBT__thread.html#gaac45eea7caeae848b86cf78d989d9aee", null ], [ "xbt_os_cond_t", "group__XBT__thread.html#ga2c6224cb25614dc8b972aca6288ebe60", null ], [ "xbt_os_sem_t", "group__XBT__thread.html#gab48cac979eebc8c1e26ca7adc7cec0ac", null ], [ "xbt_os_thread_atfork", "group__XBT__thread.html#gad4f77b979102bcbb4dc49538481146ac", null ], [ "xbt_os_get_numcores", "group__XBT__thread.html#ga737321f05368f70c51d5d4c939b3aa11", null ] ];SimGrid-3.10/doc/html/group__XBT__str.js000640 007661 000620 00000003622 12242224150 020324 0ustar00gierschand000000 000000 var group__XBT__str = [ [ "asprintf", "group__XBT__str.html#ga873b085fd80ad9b0cee0f841f48eb1d1", null ], [ "vasprintf", "group__XBT__str.html#gaf354d1d051622132c673dde7cfd63b79", null ], [ "bvprintf", "group__XBT__str.html#ga2faec67938497d455b6ab3ccb69d7fb3", null ], [ "bprintf", "group__XBT__str.html#ga6f0a0c16ffed231430899dabdb426ac6", null ], [ "xbt_getline", "group__XBT__str.html#ga7e85b04b6111d11c26329b4b6d2bfb89", null ], [ "xbt_str_rtrim", "group__XBT__str.html#ga9d7c43274b5a6339adfc724e2efd0ead", null ], [ "xbt_str_ltrim", "group__XBT__str.html#gaeb745f202229799d900aa3a20953186f", null ], [ "xbt_str_trim", "group__XBT__str.html#ga5259c70a74df4d63f39e68cc5fe8f1b3", null ], [ "xbt_str_split", "group__XBT__str.html#ga91672ded3b13340f1dfa6fb5ce64fb42", null ], [ "xbt_str_split_quoted", "group__XBT__str.html#gaa6839f81f1789acf3865eeade8c23c77", null ], [ "xbt_str_split_quoted_in_place", "group__XBT__str.html#ga2454f448cda4a1ba94409196a2f31d78", null ], [ "xbt_str_split_str", "group__XBT__str.html#ga84523a36aef41594015c8c2a22256385", null ], [ "xbt_str_join", "group__XBT__str.html#ga1271575a77363ce72fbdf65298a49622", null ], [ "xbt_str_join_array", "group__XBT__str.html#ga17585fd9f6432df9f84db21059486900", null ], [ "xbt_str_subst", "group__XBT__str.html#ga2aaaa9b7cdc3e30d0a2b85c7561ad0e6", null ], [ "xbt_str_varsubst", "group__XBT__str.html#ga42a82b549ada759cfc7ec4e0999dde1e", null ], [ "xbt_str_strip_spaces", "group__XBT__str.html#ga5b8c3f04c5bd47a54c6700c634c48d40", null ], [ "xbt_str_diff", "group__XBT__str.html#gadfd8938aaade2e991b8b51bed5aea886", null ], [ "xbt_str_from_file", "group__XBT__str.html#ga3d0726833fdc157351600358cc67097c", null ], [ "xbt_str_hash_ext", "group__XBT__str.html#ga10c19e31b7f944a5f426a7d436a44e6d", null ], [ "xbt_str_hash", "group__XBT__str.html#ga7b484f038534879efb07619091341977", null ] ];SimGrid-3.10/doc/html/group__XBT__API.html000640 007661 000620 00000020151 12242224150 020451 0ustar00gierschand000000 000000 SimGrid: XBT
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/win_install_01.png000664 007661 000620 00000055162 12242224150 020274 0ustar00gierschand000000 000000 PNG  IHDR]zsRGBbKGD pHYs  tIME -Y IDATxw|Ɵ;5Kem`lL7ؔ[0 K -`zHB !$R̀10゛\pe+:]k#|;}wvv^!+Wgy¼ȟUW B!ˣ29R:_Տښ6؁~%KwXw 끷4y^y Q/E3K(!.M~V['[h>SZZmU[γt+Y޽xQy'$i |ۢN!Yi= .("a{LO5д[_),(.(P<%0 #D;wTuB!]р*tH7TՄ[ zXxthW@3=^VECX-EpBH=Br6J]: 5 ؅etK@~yZ9qϾee,D'xP0$ab'wf W]ŘE(WU1ZgTN)þ܄}: BrB/N v`]7~۠E$t@cn(,H.VסjOTZZ ˽@Q ȓ~GE=;c⺺B3ᑓ=zb -*|ϲ5 onw*5t uԴ)(r h k:`FR5@tx1=Ыm_,BcK3tF5HM3fe@U8萪 /BM=D*[DhqBxE@n@S5M3EV"ldK]@%TM¯mhi^\r |з܋-5{|cP)R7 a4XfP}77bR"x|Dq)mmfr:H  ycϹ {]_T[]ꀢs lZ^(ǜD@a;0aW,.ąv$َr&ѳX@@GH´څ)A ,E (BcN@7PڂT?P 需m ؜:`&@[|m4ڊG@ߐo+JT !م48r6cݯ `h:kfLkD9F @W=UC&߽[zvx5ٙƣhyEB`ȨiJ10p[q Ï&&q6 oq M5kڝ.ݍ%}lL YyB[ 3! wD*s>IԊL0mzkcV2&.+/p.:.:XQDp7=<̮GIO´34 E@Wt kB-Bqr(°Ϳ5XbqzE@Yz0v@}σiwӃϧ{wP$R7 (WNO[{0 6ֻ{݇ucjwrRdy+*ę߁7 4ՍTo{!q.#<\}\bt/NtID\"5.ڏ Í jA@~3jn[ ml~m& =K8fJ l{ɇKu~=pܴRD<6hxvp< Q\1 !ܬƀaK]zyiL E@дTnlxmLB H)40vS(i= P<87!3{7܃ p#w+o=&.^7kJsy wU+;_ڃ።j?F (+KT׫`YC*r}Px|Da>0nh -2Rbg6%ygzczƽ.^^>Zوc,A^xLK ~ 뛏W+w֨;f-fy^F]Mwh0vN*"ܡN7< ZaX(7M1 Nuu * _~a&3816Ǜ7܅>]b|hxuwEcxC=\h`Wңw[oKMц;:L^xX"oGי `" 5hxsI}^keꦘ|a=⺸".!Ҫ.7.X&B>]4S"h6 k6շ..=B6 rp;Ŝ7WBV+}rnn`~m &ڽqoyۯ/T2z{wQ P'p"lEޠN!fl%k.Q./Ic _ 8Ѥ X&3w=N[ 30rE}y0y]߈͹`e.nX;pekG7g iQ湝y ہa/ | цQ1z@>*06iF6|BĴ:J fGQ |&hQO ]zAhmQ,GJ ߫Pjv{pW<=|r^B@CA>ڭoku+ZUaN,wXxv{&QZqg_ɡzMRەu#v |se*!dUAb>܃6ca)+.+a,zn^xn:@T7 Ԙ;y &=h# M;Iӑ!^㇗Y<^^:le5Qt 8@Hi>W!?M%evش;kUHMfr5ӹAp]gLRt 'S։pHHeoRsF?A+;7imӰaZ|C @F[J6ih$`vW=0W&V lmCuu\o!T#:44׫ZB'ƈV;!͏] O)hsFY8zga|:E8YJ [Xwœ] xIM >Bȥ!ApιZ0wzG1Rꀹ^5h~cI!t"Zпd9$9 zao +3B nn^u'a_3z_5PUrqH6}}L2njn݀^݀)zJkB=qךq[Q-}x{c vEy|L/CPVc{ ۀ3zB-Xo;7X_ |@^ pLY9w/໓XcB[ʲz\*T7\wYOwZ8'/4?lƌv缶0 ŒQ%\ KQB!D'\F<)(fJ0pˇ[ppirޘ8cB!~0NAKpwbY,\^EML L15K!iW=CzGCV\6C[OX 7ki҈' ԉaB!p~R)+\fL7 pHY7ʺ(ӌgNyB!] ˛<7kP+~xVfN!Qϧmpsl0B$BrFr`/FI! 6˥|BHV;~x3>lLu $d\)7[GpBJWU7]O75Q⮘1YW,\׾{D] ׮ڽk88Q';ӽ]`le;ds[1fX띰pZSQO75co+ػ7P~@>a3^X:=].\ҏ_ ɵk5@}ÑZu  !$k}x|Iº[ns ^/ a/v[ҠG.7ftvڲ }0s'QK'n9Zh|[csϢEg$4C0$[ xD5>IqmkU"zXy 0s>5}zmB%ӻqV⳪*j?j6Ki2nH]e*c~mxxk1n(5oW?G2祤8g @PBŶn~{y#ں =pr8~\MyKZ7]._W.6 WN~ݣWɥÁv ʍb,;k2ק+ֈgVmĻ [W4Jb3BxEh9 /Q P4n):77,wxU_z]?kۆ[O7%6ᤀq̙_1CʆXaɦMXb._[Kւ{V>`S縐߷ a6UQ}nkZ5E qҐ! ;~\ A6 oo][7aiC=_FǕq_oe_n3PGq҃¥npצ8+pjyuhJx-ٰ)>O8P6!xCJ߁~ 1ùṨ7?zxkqG y'7 Ji|r#KO/[?w\H?}ƇR`G{aM=͙xbHK޾ pބ!xbH<8oŅhU~2arkJZ:o\̞0Ks(]3_?a^ onBk jxSݑЧ5A'nC~qU6ՍX! f۶dd,Z0mۆg_{ݱko)NM*['cه$7Μ݁wo\%:ϊÏ͎՞lxH$ȣlB88a\1x1x ~βeF6b_GmssQqv l窔AC_p;%խSWf;ߧ[\ 2 ~#LW[d;ov<:)? !]TO}J7rDi!bU8ul\xẀLnۻ7~\HEF\ۿ}Ru@z1&ϺoMPڰw %!$g=_A\rq_h'=8yl ~U1gOn}I IDAT=/~"}b._ļk~1@n9hnjuP^^+UU@j|(08gx5Xc;!1ocU`Ա~,\cn]j|==]#\|񅖂ö8n>^E?OFq~B>@İb`+5M q̨cW6\pH(} ++C1À'NӺ+O}4F"{+ E;v¿>\/ j.)M3UwV^*(o' ߞ&ٷ(W{!4g\4{U1[_1śxy/9E6-.rPÁKL  q`Y MFx#B=L}Mcż< ο1qč^E ~Yޙ /_j6U8ȉ߿<2k_c+_=; ڀ59(9ǿ-X׏1}d3[&-Ul[;BWTgO?[{rˆo~w, /x/gf8)+tUl'3GkuV=x#=}]e7Zkq~e%bsi)͝`9:+\ܶ7TlY"{7>bxmK=jh?l+4$NTV.ފ:wI S~ێ+vB(l(\߀TUtv],҂R s8{fE= /|Ә:ǣW͊b58{̸i1e یIKqӕߏ{{ۍ}3nzvkԆ!.-8wL> Y73q}bCp kfau`,mOxÏ@x d`ݎ-7x'_k`lYha# vüU-{7YS60e`(kCU>WU-xzL+858\;;cى~,2.-ωҟ(_S>dj"4hZ_'mN:3'ekeGdMy&<ɿQog?\r@ jPSSUxpG sдt XzEl̘1YGqEpEa/0ǼxGPݺ58/p Avi&*o #qbh6"<{XqLisȇ¿i'—/Flj+'ZOa7|/hW謜kprM2 pqd(Xq+ͩ8/Iխu 늙 ׿7cY-Vs-=h=VaofU /"Nt[);i춙Xalx:m?nֱwU%xGSг\.ǽoNxI1y_|˷kzO~mUUAԚiuMgos0gN͛OBHlE٤xixr;*_V^]>oj>9nY +;uoQg`͏.AEE***p%o&GũKB]8.y܊OڀG.oBgK/ť^uO x 1{q,ٶ]^X#>Vf[r!{fXY1\64_q!/c}XzwΐXu->q>ŹL@jؽv<3]=݌AŇ?2=z6|fbD?'޽ox-}P2ꛛ={>Hbj!ҹu]X15Gw} ؎0_>/ǯ:۰k'Agsq 07+bՇ>?8|秸gq.~zx}Cq?yߋwOkܹ~뿱alp84jֈpEKD!eD)WᡓjwJsQ+fAύ{̹~ޗCQ{LLZux/ BAQk0%ؽW3O\s fa{faTL^E#FaGgb=`3qOR!fFY | f>\8ݣ;^>4mw4lcߗGI_ʇBHfZ'BJu #Wu8~$l-Brdܹ-x᳇\=w[ !{H4㬱c2?WDzLeXj{/{B<M[>+,ڰ_EmsmF2~oYacm fL2(rB!YOFV_d@o3KvJ4z aSFՍxdz0hR1v4ilqeŇ2haa~l1B(v8ub)N8 nقmio3܍A`M~Ta+ލ-@~ya c J|ŸQ)n;C=H!Bqwq#F@uC5Z#~7>Ԙ# 4>̼H-P {JP`c2ljh@e}30`I`T]o-;_5B=Yzxѻ;8l@Dj=~j<=oϭD hRo ^ (y^@6.?3N,Ac:x]|/)GB.qݑG:8֌Ϸ{|^owI`70pH<|Z`׮&\z5^]=0~`jɤ!8lD7B!FX?nhƷeQ XU ״[;8q"pA c{c{f Bq8J@`"+Bs_ KBIN.οeC! ߻9Z!Br'A!t.(BŝB!wB!P !Bq'BŝBB!N!;!B(BB!wB!P !Bq'Bŝd˹ZIsufï޳SřMW\ٜwM+[@, B(Q Y3LBɨdz0 εciNJ#x)VgI^ab/x׸YFVڜE<&N9B(1;hoN J,VVwrZV`| HXc.̗6+JyX-'BHXG4A[J֒c"*+垊6`UPLPnC.$ NcSVbYN'Unfޝe=dCڙq+7f!stwRVD銴m[Ȥ=8i'-bh`ɖW`6ʢc]g%X /Ɲl9q8m[vZ@\wF)J9?TY"6oB!}Cض6,l\Saa6GIع9BHý !;!B(BB!N!;!Bq'BŝB!wB!P !bgM!K2˱j}wd0!.wy->kBHNP[=@Q_h_ !\BQVCUkPu@]t)%t].uĤy5 uM*KŝB6ꀞ :4) 5 ]PD^_Ǧm5 T=\-O!$צMtM h~ 5 * aW5Zi2^Z)@S0R1)eʱHDKG%:-t'DKs$!]BU=h4D$.%@1?BZAإRMb#^[ɻ2I6=ɔp^H41uR.v²HHwU4 3v]Bw3w-3 =SvSr)*pavZ^\tf.醥.P~~# /QI{/zѱDߝpv+Wv÷[2yr̜+:-{BRwCSͽ"cx8CӥNN!Auh)zjuRPstR>k#/;!)q{+. &=Hssav/P !lc׻1}B\`W?ىz._ C6oC鼌RlCU]+%>U@H=b>|iWAyI.8n ௡N$bhg8;#]'de%ތ͌S;3n AwsY̢7Vy=N%j5T_}>=Ifr7> U U4"ͧ[aj 5l-Xi2!v6okܺ L!X -:x^(/@A~|x QPXM.խh\<.yVo>XMմ%{=!k~֣}@SڟȐe)(9b[S)P ۭ)dG^kegqBw9p{pqE qxEf6mY,WHjT3!PI` !N!;!Bq'BŝB!wB!P !Bq'B(BB!N!;!B(BŝB!wB!Ps !DJM&|6IH›K*i !hG˗2ui^݈;^bI*N̷v*ͤtM6C1qOw'DX\uN17*Ls.lIA/!$G݊١IJM4V<4(_:onu&!Vٙpb%Fo4]ZɓӴkD9V=[)+yNv0`5 Unw0T)h7 -فHqKf[fQğ|L[-?'m{i !9&N-h@w,tXv㶚XuhBVمDiz^n*];IZ!n7du 3V󝭃M;y d/m3[RiQǛƵd_uvru5M}A"=ŸXLYc=ߍ|`u_N*k7q;v _6m\iOVO*pݎӓd-di'4K i87!,vB:IughwYJ6XEwc`D'jNjnN{'‰3LQ+Rrh~۳OUmr&$P&֎sIDAT?ĊΟ۝z.ob,[L-w NJF֊X{8Ki ;g0v=QV3۟Zu-߱fy;׻u'rYf)qOduVV8u/djDiI&N#rNsF2پ܎)3:!an !w#P !Bq'kY&Pܹ#٭\OG-s٧[o_Bd*lիslI?FYwzʶMg`cT䖖v=Nq Hv,k"Q~Nґ{t$9Qփ}[;VMZmZGVJ,7Vn*ۋwP]r7YE:λN꼒q/V sKukXs>5GGN#Dmba!O%dv;dHUk$g&eWYG ۾O(Ygc|8!<NUrŊ'NUcى;"e7NCd۵4&~m/vBqO LN։48Iog]K-)vv2u(L'Nrdڸy%Dm .vQIW;B!!ne#lP !{audWfJβ9^+t-됐. Su`=qՅ"76!NIUHm BCV-}Y+4:t-^cҟ( V|y4۩#+$JXN!ejD9γ:JB:[uqˡFu8c5]tFN؉s7صb:aqۙL2NwZpBd~q}"BHZD$;Ð !˩3}Wm,D[BUrBT;3\$eĵ.{$3Zк(FZne;"$-w'/:H&wt ƊCDau.ܨ'H3dJNyyiN$D5s8q 789nǙ|ubEnJ얛6$lmI:*4>!@I [};ɇQBŝt::c%!:!B(BB!N!;!B(BŝB!wB!P !Bq'BŝBB!N!;!BrN܅De*}n/Ӟ+q]vbBrR_yVÊ;#-#4]{1Gm͆D a5ne6 R2 ?nLTwnC!q:"6{N)y':?Q8aoˋHhguiQZaGvܸ±+i{Nʹ°#I܌?#XY=M0j@>7(/M՟uR4ˈ{vB:#6 m*k:4M@>UIU o}`Mf{(V}Jj+(N%UM"@jm~M=P̾{֗lBHwUtxƮfLj3w  %8-Җ ɊiiXS|cum4\& J-=VܥZ=ϵ!z EXD'!cCP.,7wInw#xFsTy0nϵ|Z !ͩ;p}/Cc .)IKB&tM9FB4Bu[!xBģ]q 0e?UrpcXn\n;)# ;!G4ixݜv®3%Jt"=Ud[Yv.#tzqƦ5ߍieWU]fV^3.V-ZVwN2[M]L4ZY.sBHWCU蚀&M _AX`Ic ChzqL$jNU 3gm"+HzݣTȹv Ic5fe6|ϝ zBHgDuh)Wt]%T]jdOG٘2*BZ`KHh@ЍU y^졸B!Ƣwc=u~3'@&)BH)K ~* yoq߿-BHNQ8iPdbmoIK:rB!3,mB!$ (,B!N!;!B(BB!N!P !Bq'BŝB!wB!d^{uJle`^Ym3,_B};ơz:TY-nzظ_ɄyOfttݷvdT{jzow['3>]qƺ&Tnijjܨl|֗:LuNvζUW{wrNolp+V2T֧ӼfߩX/|MfvGW_s%W6OK?e V|홱sՊϥf,#_s bb-LǢ5hiʈ8^²r݆(^*Nj[Z~vZN#Vn:H"Q:H$v-V}Ū7B!L;N.K,f v-^nlKI!$G,wxw&Gѭ< !;}8K[G !D廊ߙaF!$-#[8Kp8"dѭ !$O9ܳY_yq P䞠!${ q@/Bn,!Bq'BŝB!wB!P !Bq'B(BB!N!;!B(BŝB!wB!P !Bq'BŝBB!N!;!B(BB!o~b 8fv7-wmԔ4FHH("N. AD z8U*T\8H$.sqDPDJHc;ޝaw{3,۳/ͬ@A_1yݶjʕhکEw_յSNJ6N&$p(dXmU WgյSں2=֙vuC/\9'"ҟ8}Ggή,ƸP/\AB5ױ-K',ֽ&cK/O5Ŝ˸H/u8$,vJle!m' Yd<~T$׍iaoYm\q1֖K9Ƒ':qJ<==÷ݒ(thE6 z0FP\/2SvrrIq2+,zq%Ku3\'^<*2s[xsy89~'ҕ6aV{bOh<I`/\,|srO_.".kW7:ATy/u#oy.=~V3NLSS7eݯvvy9]y׷KEdv08\޳.gO`ԿF; K7I2zpA `6϶-wqV]o$u"u|یە]qϞUYϓ}P0;4[ſOQm)8svbL (w@PPDGQ(1c +O~y<ϓx)8Wr}ڼ!I_ C@ J@ nhnWwIB?KW7>O5{M~U~c||Ss_{o^kkEre#cy/}ZD63/~Bw:k 8Wrs?kV܊fhS|+^vS[ZxgcxYs_KK#Ǔ^ \>yջ,o˪ӹ;CW} eyÙ_폎/XֲvcGTܷmy:CW棖wY><L܏2=/#E2 J:?hJ@A'3(!ݴ}q`4 ?uz4J:W^b;dimeA/}EE&'ok'FQ*a[k+ kuGΕrZM_zOW_+'WLoywG }gZ\)wh'~Yw:2o~kV 4K7I2zt@k OV?!Agxدٱ<9{[ .8WI|nf6D aPr;(w@IRw;K>%)=atۑvb.Iom?<ڲIENDB`SimGrid-3.10/doc/html/group__XBT__dict__basic.html000640 007661 000620 00000057253 12242224150 022300 0ustar00gierschand000000 000000 SimGrid: Dictionaries basic usage
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dictionaries basic usage

Functions

void xbt_dict_set (xbt_dict_t dict, const char *key, void *data, void_f_pvoid_t free_ctn)
 Add data to the dict (null-terminated key)
void * xbt_dict_get (xbt_dict_t dict, const char *key)
 Retrieve data from the dict (null-terminated key)
void * xbt_dict_get_or_null (xbt_dict_t dict, const char *key)
 like xbt_dict_get(), but returning NULL when not found
char * xbt_dict_get_key (xbt_dict_t dict, const void *data)
 retrieve the key associated to that object. Warning, that's a linear search
xbt_dictelm_t xbt_dict_get_elm (xbt_dict_t dict, const char *key)
 Retrieve element from the dict (null-terminated key)
xbt_dictelm_t xbt_dict_get_elm_or_null (xbt_dict_t dict, const char *key)
 like xbt_dict_get_elm(), but returning NULL when not found
void xbt_dict_remove (xbt_dict_t dict, const char *key)
 Remove data from the dict (null-terminated key)
void xbt_dict_reset (xbt_dict_t dict)
 Remove all data from the dict.
int xbt_dict_length (xbt_dict_t dict)
 Return the number of elements in the dict.
void xbt_dict_dump_output_string (void *s)
 function to be used in xbt_dict_dump as long as the stored values are strings
void xbt_dict_dump (xbt_dict_t dict, void(*output)(void *))
 Outputs the content of the structure (debugging purpose)
void xbt_dict_dump_sizes (xbt_dict_t dict)
 shows some debugging info about the bucklet repartition
int xbt_dict_is_empty (xbt_dict_t dict)
 test if the dict is empty or not

Detailed Description

Careful, those functions assume that the key is null-terminated.

Function Documentation

void xbt_dict_set ( xbt_dict_t  dict,
const char *  key,
void *  data,
void_f_pvoid_t  free_ctn 
)

Add data to the dict (null-terminated key)

Parameters
dictthe dict
keythe key to set the new data
datathe data to add in the dict
free_ctnfunction to call with (data as argument) when data is removed from the dictionary

set the data in the structure under the key, which is a null terminated string.

void* xbt_dict_get ( xbt_dict_t  dict,
const char *  key 
)

Retrieve data from the dict (null-terminated key)

Parameters
dictthe dealer of data
keythe key to find data
Returns
the data that we are looking for

Search the given key. Throws not_found_error when not found. Check xbt_dict_get_or_null() for a version returning NULL without exception when not found.

char* xbt_dict_get_key ( xbt_dict_t  dict,
const void *  data 
)

retrieve the key associated to that object. Warning, that's a linear search

Returns NULL if the object cannot be found

xbt_dictelm_t xbt_dict_get_elm ( xbt_dict_t  dict,
const char *  key 
)

Retrieve element from the dict (null-terminated key)

Parameters
dictthe dealer of data
keythe key to find data
Returns
the s_xbt_dictelm_t that we are looking for

Search the given key. Throws not_found_error when not found. Check xbt_dict_get_or_null() for a version returning NULL without exception when not found.

void xbt_dict_remove ( xbt_dict_t  dict,
const char *  key 
)

Remove data from the dict (null-terminated key)

Parameters
dictthe dict
keythe key of the data to be removed

Remove the entry associated with the given key

void xbt_dict_reset ( xbt_dict_t  dict)

Remove all data from the dict.

Parameters
dictthe dict
int xbt_dict_length ( xbt_dict_t  dict)

Return the number of elements in the dict.

Parameters
dicta dictionary
void xbt_dict_dump ( xbt_dict_t  dict,
void_f_pvoid_t  output 
)

Outputs the content of the structure (debugging purpose)

Parameters
dictthe exibitionist
outputa function to dump each data in the tree (check xbt_dict_dump_output_string)

Outputs the content of the structure. (for debugging purpose). output is a function to output the data. If NULL, data won't be displayed.

SimGrid-3.10/doc/html/structs__smx__simcall.html000640 007661 000620 00000013702 12242224150 022215 0ustar00gierschand000000 000000 SimGrid: s_smx_simcall Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_smx_simcall Struct Reference

Represents a simcall to the kernel. More...

#include <smx_smurf_private.h>

Detailed Description

Represents a simcall to the kernel.


The documentation for this struct was generated from the following file:
  • src/simix/smx_smurf_private.h
SimGrid-3.10/doc/html/group__XBT__dict__nnul.html000640 007661 000620 00000033112 12242224150 022157 0ustar00gierschand000000 000000 SimGrid: Dictionaries with non-nul terminated keys
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dictionaries with non-nul terminated keys

Functions

void xbt_dict_set_ext (xbt_dict_t dict, const char *key, int key_len, void *data, void_f_pvoid_t free_ctn)
 Add data to the dict (arbitrary key)
void * xbt_dict_get_ext (xbt_dict_t dict, const char *key, int key_len)
 Retrieve data from the dict (arbitrary key)
void * xbt_dict_get_or_null_ext (xbt_dict_t dict, const char *key, int key_len)
 like xbt_dict_get_ext(), but returning NULL when not found
void xbt_dict_remove_ext (xbt_dict_t dict, const char *key, int key_len)
 Remove data from the dict (arbitrary key)

Detailed Description

Those functions work even with non-null terminated keys.

Function Documentation

void xbt_dict_set_ext ( xbt_dict_t  dict,
const char *  key,
int  key_len,
void *  data,
void_f_pvoid_t  free_ctn 
)

Add data to the dict (arbitrary key)

Parameters
dictthe container
keythe key to set the new data
key_lenthe size of the key
datathe data to add in the dict
free_ctnfunction to call with (data as argument) when data is removed from the dictionary

Set the data in the structure under the key, which can be any kind of data, as long as its length is provided in key_len.

void* xbt_dict_get_ext ( xbt_dict_t  dict,
const char *  key,
int  key_len 
)

Retrieve data from the dict (arbitrary key)

Parameters
dictthe dealer of data
keythe key to find data
key_lenthe size of the key
Returns
the data that we are looking for

Search the given key. Throws not_found_error when not found.

void xbt_dict_remove_ext ( xbt_dict_t  dict,
const char *  key,
int  key_len 
)

Remove data from the dict (arbitrary key)

Parameters
dictthe trash can
keythe key of the data to be removed
key_lenthe size of the key

Remove the entry associated with the given key (throws not_found)

SimGrid-3.10/doc/html/stylesheet.css000640 007661 000620 00000047050 12242224150 017635 0ustar00gierschand000000 000000 /* The standard CSS for doxygen */ body, table, div, p, dl { font: 400 14px/19px Roboto,sans-serif; } /* @group Heading Levels */ h1 { font-size: 150%; } .title { font-size: 150%; font-weight: bold; margin: 10px 2px; } h2 { border-bottom: 1px solid #879ECB; color: #354C7B; font-size: 150%; font-weight: normal; margin-top: 1.75em; padding-top: 8px; padding-bottom: 4px; width: 100%; } h3 { font-size: 100%; } h1, h2, h3, h4, h5, h6 { -webkit-transition: text-shadow 0.5s linear; -moz-transition: text-shadow 0.5s linear; -ms-transition: text-shadow 0.5s linear; -o-transition: text-shadow 0.5s linear; transition: text-shadow 0.5s linear; margin-right: 15px; } h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { text-shadow: 0 0 15px cyan; } dt { font-weight: bold; } div.multicol { -moz-column-gap: 1em; -webkit-column-gap: 1em; -moz-column-count: 3; -webkit-column-count: 3; } p.startli, p.startdd, p.starttd { margin-top: 2px; } p.endli { margin-bottom: 0px; } p.enddd { margin-bottom: 4px; } p.endtd { margin-bottom: 2px; } /* @end */ caption { font-weight: bold; } span.legend { font-size: 70%; text-align: center; } h3.version { font-size: 90%; text-align: center; } div.qindex, div.navtab{ background-color: #EBEFF6; border: 1px solid #A3B4D7; text-align: center; } div.qindex, div.navpath { width: 100%; line-height: 140%; } div.navtab { margin-right: 15px; } /* @group Link Styling */ a { color: #3D578C; font-weight: normal; text-decoration: none; } .contents a:visited { color: #4665A2; } a:hover { text-decoration: underline; } a.qindex { font-weight: bold; } a.qindexHL { font-weight: bold; background-color: #9CAFD4; color: #ffffff; border: 1px double #869DCA; } .contents a.qindexHL:visited { color: #ffffff; } a.el { font-weight: bold; } a.elRef { } a.code, a.code:visited { color: #4665A2; } a.codeRef, a.codeRef:visited { color: #4665A2; } /* @end */ dl.el { margin-left: -1cm; } pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; font-family: monospace, fixed; font-size: 105%; } div.fragment { padding: 4px; margin: 4px; background-color: #FBFCFD; border: 1px solid #C4CFE5; } div.line { font-family: monospace, fixed; font-size: 13px; min-height: 13px; line-height: 1.0; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ white-space: pre-wrap; /* CSS3 */ word-wrap: break-word; /* IE 5.5+ */ text-indent: -53px; padding-left: 53px; padding-bottom: 0px; margin: 0px; -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } div.line.glow { background-color: cyan; box-shadow: 0 0 10px cyan; } span.lineno { padding-right: 4px; text-align: right; border-right: 2px solid #0F0; background-color: #E8E8E8; white-space: pre; } span.lineno a { background-color: #D8D8D8; } span.lineno a:hover { background-color: #C8C8C8; } div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; border: solid thin #333; border-radius: 0.5em; -webkit-border-radius: .5em; -moz-border-radius: .5em; box-shadow: 2px 2px 3px #999; -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); } div.groupHeader { margin-left: 16px; margin-top: 12px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background-color: white; color: black; margin: 0; } div.contents { margin-top: 10px; margin-left: 12px; margin-right: 8px; } td.indexkey { background-color: #EBEFF6; font-weight: bold; border: 1px solid #C4CFE5; margin: 2px 0px 2px 0; padding: 2px 10px; white-space: nowrap; vertical-align: top; } td.indexvalue { background-color: #EBEFF6; border: 1px solid #C4CFE5; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #EEF1F7; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl { vertical-align: middle; } div.center { text-align: center; margin-top: 0px; margin-bottom: 0px; padding: 0px; } div.center img { border: 0px; } address.footer { text-align: right; padding-right: 12px; } img.footer { border: 0px; vertical-align: middle; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } blockquote { background-color: #F7F8FB; border-left: 2px solid #9CAFD4; margin: 0 24px 0 4px; padding: 0 12px 0 16px; } /* @end */ /* .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } */ td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #A3B4D7; } th.dirtab { background: #EBEFF6; font-weight: bold; } hr { height: 0px; border: none; border-top: 1px solid #4A6AAA; } hr.footer { height: 1px; } /* @group Member Descriptions */ table.memberdecls { border-spacing: 0px; padding: 0px; } .memberdecls td, .fieldtable tr { -webkit-transition-property: background-color, box-shadow; -webkit-transition-duration: 0.5s; -moz-transition-property: background-color, box-shadow; -moz-transition-duration: 0.5s; -ms-transition-property: background-color, box-shadow; -ms-transition-duration: 0.5s; -o-transition-property: background-color, box-shadow; -o-transition-duration: 0.5s; transition-property: background-color, box-shadow; transition-duration: 0.5s; } .memberdecls td.glow, .fieldtable tr.glow { background-color: cyan; box-shadow: 0 0 15px cyan; } .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #F9FAFC; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memItemLeft, .memItemRight, .memTemplParams { border-bottom: 1px solid #DEE4F0; } .memItemLeft, .memTemplItemLeft { white-space: nowrap; } .memItemRight { width: 100%; } .memTemplParams { color: #4665A2; white-space: nowrap; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtemplate { font-size: 80%; color: #4665A2; font-weight: normal; margin-left: 9px; } .memnav { background-color: #EBEFF6; border: 1px solid #A3B4D7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .mempage { width: 100%; } .memitem { padding: 0; margin-bottom: 10px; margin-right: 5px; -webkit-transition: box-shadow 0.5s linear; -moz-transition: box-shadow 0.5s linear; -ms-transition: box-shadow 0.5s linear; -o-transition: box-shadow 0.5s linear; transition: box-shadow 0.5s linear; display: table !important; width: 100%; } .memitem.glow { box-shadow: 0 0 15px cyan; } .memname { font-weight: bold; margin-left: 6px; } .memname td { vertical-align: bottom; } .memproto, dl.reflist dt { border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 0px 6px 0px; color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); background-image:url('nav_f.png'); background-repeat:repeat-x; background-color: #E2E8F2; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; -webkit-border-top-left-radius: 4px; } .memdoc, dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; padding: 6px 10px 2px 10px; background-color: #FBFCFD; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; background-color: #FFFFFF; /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); /* firefox specific markup */ -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; /* webkit specific markup */ -webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); } dl.reflist dt { padding: 5px; } dl.reflist dd { margin: 0px 0px 10px 0px; padding: 5px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } .paramname code { line-height: 14px; } .params, .retval, .exception, .tparams { margin-left: 0px; padding-left: 0px; } .params .paramname, .retval .paramname { font-weight: bold; vertical-align: top; } .params .paramtype { font-style: italic; vertical-align: top; } .params .paramdir { font-family: "courier new",courier,monospace; vertical-align: top; } table.mlabels { border-spacing: 0px; } td.mlabels-left { width: 100%; padding: 0px; } td.mlabels-right { vertical-align: bottom; padding: 0px; white-space: nowrap; } span.mlabels { margin-left: 8px; } span.mlabel { background-color: #728DC1; border-top:1px solid #5373B4; border-left:1px solid #5373B4; border-right:1px solid #C4CFE5; border-bottom:1px solid #C4CFE5; text-shadow: none; color: white; margin-right: 4px; padding: 2px 3px; border-radius: 3px; font-size: 7pt; white-space: nowrap; } /* @end */ /* these are for tree view when not used as main index */ div.directory { margin: 10px 0px; border-top: 1px solid #A8B8D9; border-bottom: 1px solid #A8B8D9; width: 100%; } .directory table { border-collapse:collapse; } .directory td { margin: 0px; padding: 0px; vertical-align: top; } .directory td.entry { white-space: nowrap; padding-right: 6px; } .directory td.entry a { outline:none; } .directory td.entry a img { border: none; } .directory td.desc { width: 100%; padding-left: 6px; padding-right: 6px; padding-top: 3px; border-left: 1px solid rgba(0,0,0,0.05); } .directory tr.even { padding-left: 6px; background-color: #F7F8FB; } .directory img { vertical-align: -30%; } .directory .levels { white-space: nowrap; width: 100%; text-align: right; font-size: 9pt; } .directory .levels span { cursor: pointer; padding-left: 2px; padding-right: 2px; color: #3D578C; } div.dynheader { margin-top: 8px; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } address { font-style: normal; color: #2A3D61; } table.doxtable { border-collapse:collapse; margin-top: 4px; margin-bottom: 4px; } table.doxtable td, table.doxtable th { border: 1px solid #2D4068; padding: 3px 7px 2px; } table.doxtable th { background-color: #374F7F; color: #FFFFFF; font-size: 110%; padding-bottom: 4px; padding-top: 5px; } table.fieldtable { width: 100%; margin-bottom: 10px; border: 1px solid #A8B8D9; border-spacing: 0px; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } .fieldtable td, .fieldtable th { padding: 3px 7px 2px; } .fieldtable td.fieldtype, .fieldtable td.fieldname { white-space: nowrap; border-right: 1px solid #A8B8D9; border-bottom: 1px solid #A8B8D9; vertical-align: top; } .fieldtable td.fielddoc { border-bottom: 1px solid #A8B8D9; width: 100%; } .fieldtable tr:last-child td { border-bottom: none; } .fieldtable th { background-image:url('nav_f.png'); background-repeat:repeat-x; background-color: #E2E8F2; font-size: 90%; color: #253555; padding-bottom: 4px; padding-top: 5px; text-align:left; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom: 1px solid #A8B8D9; } .tabsearch { top: 0px; left: 10px; height: 36px; background-image: url('tab_b.png'); z-index: 101; overflow: hidden; font-size: 13px; } .navpath ul { font-size: 11px; background-image:url('tab_b.png'); background-repeat:repeat-x; height:30px; line-height:30px; color:#8AA0CC; border:solid 1px #C2CDE4; overflow:hidden; margin:0px; padding:0px; } .navpath li { list-style-type:none; float:left; padding-left:10px; padding-right:15px; background-image:url('bc_s.png'); background-repeat:no-repeat; background-position:right; color:#364D7C; } .navpath li.navelem a { height:32px; display:block; text-decoration: none; outline: none; font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } .navpath li.navelem a:hover { color:#6884BD; } .navpath li.footer { list-style-type:none; float:right; padding-left:10px; padding-right:15px; background-image:none; background-repeat:no-repeat; background-position:right; color:#364D7C; font-size: 8pt; } div.summary { float: right; font-size: 8pt; padding-right: 5px; width: 50%; text-align: right; } div.summary a { white-space: nowrap; } div.ingroups { font-size: 8pt; width: 50%; text-align: left; } div.ingroups a { white-space: nowrap; } div.header { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; margin: 0px; border-bottom: 1px solid #C4CFE5; } div.headertitle { padding: 5px 5px 5px 10px; } dl { padding: 0 0 0 10px; } /* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ dl.section { margin-left: 0px; padding-left: 0px; } dl.note { margin-left:-7px; padding-left: 3px; border-left:4px solid; border-color: #D0C000; } dl.warning, dl.attention { margin-left:-7px; padding-left: 3px; border-left:4px solid; border-color: #FF0000; } dl.pre, dl.post, dl.invariant { margin-left:-7px; padding-left: 3px; border-left:4px solid; border-color: #00D000; } dl.deprecated { margin-left:-7px; padding-left: 3px; border-left:4px solid; border-color: #505050; } dl.todo { margin-left:-7px; padding-left: 3px; border-left:4px solid; border-color: #00C0E0; } dl.test { margin-left:-7px; padding-left: 3px; border-left:4px solid; border-color: #3030E0; } dl.bug { margin-left:-7px; padding-left: 3px; border-left:4px solid; border-color: #C08050; } dl.section dd { margin-bottom: 6px; } #projectlogo { text-align: center; vertical-align: bottom; border-collapse: separate; } #projectlogo img { border: 0px none; } #projectname { font: 300% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } #projectbrief { font: 120% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #projectnumber { font: 50% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } #titlearea { padding: 0px; margin: 0px; width: 100%; border-bottom: 1px solid #5373B4; } .image { text-align: center; } .dotgraph { text-align: center; } .mscgraph { text-align: center; } .caption { font-weight: bold; } div.zoom { border: 1px solid #90A5CE; } dl.citelist { margin-bottom:50px; } dl.citelist dt { color:#334975; float:left; font-weight:bold; margin-right:10px; padding:5px; } dl.citelist dd { margin:2px 0; padding:5px 0; } div.toc { padding: 14px 25px; background-color: #F4F6FA; border: 1px solid #D8DFEE; border-radius: 7px 7px 7px 7px; float: right; height: auto; margin: 0 20px 10px 10px; width: 200px; } div.toc li { background: url("bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; margin-top: 5px; padding-left: 10px; padding-top: 2px; } div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; color: #4665A2; border-bottom: 0 none; margin: 0; } div.toc ul { list-style: none outside none; border: medium none; padding: 0px; } div.toc li.level1 { margin-left: 0px; } div.toc li.level2 { margin-left: 15px; } div.toc li.level3 { margin-left: 30px; } div.toc li.level4 { margin-left: 45px; } .inherit_header { font-weight: bold; color: gray; cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .inherit_header td { padding: 6px 0px 2px 5px; } .inherit { display: none; } tr.heading h2 { margin-top: 12px; margin-bottom: 4px; } @media print { #top { display: none; } #side-nav { display: none; } #nav-path { display: none; } body { overflow:visible; } h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } .summary { display: none; } .memitem { page-break-inside: avoid; } #doc-content { margin-left:0 !important; height:auto !important; width:auto !important; overflow:inherit; display:inline; } } SimGrid-3.10/doc/html/group__SD__datatypes__management.html000640 007661 000620 00000054111 12242224150 024245 0ustar00gierschand000000 000000 SimGrid: SD Data Types
SimGrid  3.10
Versatile Simulation of Distributed Systems
SD Data Types

This section describes the different datatypes provided by SD. More...

Typedefs

typedef xbt_dictelm_t SD_workstation_t
 Workstation datatypeA workstation is a place where a task can be executed. A workstation is represented as a physical resource with computing capabilities and has a name.
typedef struct SD_link * SD_link_t
 Link datatypeA link is a network node represented as a name, a current bandwidth and a current latency. A route is a list of links between two workstations.
typedef struct SD_task * SD_task_t
 Task datatypeA task is some computing amount that can be executed in parallel on several workstations. A task may depend on other tasks, this means that the task cannot start until the other tasks are done. Each task has a state indicating whether the task is scheduled, running, done, etc.
typedef xbt_dictelm_t SD_storage_t
 Storage datatypeTODO PV: comment it !

Enumerations

enum  e_SD_workstation_access_mode_t { SD_WORKSTATION_SHARED_ACCESS, SD_WORKSTATION_SEQUENTIAL_ACCESS }
 Workstation access modeBy default, a workstation resource is shared, i.e. several tasks can be executed at the same time on a workstation. The CPU power of the workstation is shared between the running tasks on the workstation. In sequential mode, only one task can use the workstation, and the other tasks wait in a FIFO. More...
enum  e_SD_task_state_t {
  SD_NOT_SCHEDULED = 0, SD_SCHEDULABLE = 0x0001, SD_SCHEDULED = 0x0002, SD_RUNNABLE = 0x0004,
  SD_IN_FIFO = 0x0008, SD_RUNNING = 0x0010, SD_DONE = 0x0020, SD_FAILED = 0x0040
}
 Task states. More...
enum  e_SD_task_kind_t {
  SD_TASK_NOT_TYPED = 0, SD_TASK_COMM_E2E = 1, SD_TASK_COMP_SEQ = 2, SD_TASK_COMP_PAR_AMDAHL = 3,
  SD_TASK_COMM_PAR_MXN_1D_BLOCK = 4
}
 Task kinds. More...

Detailed Description

This section describes the different datatypes provided by SD.

Typedef Documentation

typedef xbt_dictelm_t SD_workstation_t

Workstation datatypeA workstation is a place where a task can be executed. A workstation is represented as a physical resource with computing capabilities and has a name.

See Also
Workstations
typedef struct SD_link* SD_link_t

Link datatypeA link is a network node represented as a name, a current bandwidth and a current latency. A route is a list of links between two workstations.

See Also
Links
typedef struct SD_task* SD_task_t

Task datatypeA task is some computing amount that can be executed in parallel on several workstations. A task may depend on other tasks, this means that the task cannot start until the other tasks are done. Each task has a state indicating whether the task is scheduled, running, done, etc.

See Also
Tasks
typedef xbt_dictelm_t SD_storage_t

Storage datatypeTODO PV: comment it !

See Also
SD_storage_management

Enumeration Type Documentation

Workstation access modeBy default, a workstation resource is shared, i.e. several tasks can be executed at the same time on a workstation. The CPU power of the workstation is shared between the running tasks on the workstation. In sequential mode, only one task can use the workstation, and the other tasks wait in a FIFO.

See Also
SD_workstation_get_access_mode(), SD_workstation_set_access_mode()
Enumerator:
SD_WORKSTATION_SHARED_ACCESS 

Several tasks can be executed at the same time.

SD_WORKSTATION_SEQUENTIAL_ACCESS 

Only one task can be executed, the others wait in a FIFO.

Task states.

See Also
Tasks
Enumerator:
SD_NOT_SCHEDULED 

Initial state (not valid for SD_watch and SD_unwatch).

SD_SCHEDULABLE 

A task becomes SD_SCHEDULABLE as soon as its dependencies are satisfied.

SD_SCHEDULED 

A task becomes SD_SCHEDULED when you call function SD_task_schedule. SD_simulate will execute it when it becomes SD_RUNNABLE.

SD_RUNNABLE 

A scheduled task becomes runnable is SD_simulate as soon as its dependencies are satisfied.

SD_IN_FIFO 

A runnable task can have to wait in a workstation fifo if the workstation is sequential.

SD_RUNNING 

An SD_RUNNABLE or SD_IN_FIFO becomes SD_RUNNING when it is launched.

SD_DONE 

The task is successfully finished.

SD_FAILED 

A problem occurred during the execution of the task.

Task kinds.

See Also
Tasks
Enumerator:
SD_TASK_NOT_TYPED 

no specified type

SD_TASK_COMM_E2E 

end to end communication

SD_TASK_COMP_SEQ 

sequential computation

SD_TASK_COMP_PAR_AMDAHL 

parallel computation (Amdahl's law)

SD_TASK_COMM_PAR_MXN_1D_BLOCK 

MxN data redistribution (1D Block distribution)

SimGrid-3.10/doc/html/ftv2mnode.png000640 007661 000620 00000000366 12242224150 017343 0ustar00gierschand000000 000000 PNG  IHDRɪ|IDATx!NA\ Um@`5i`h W7] b&ofdY4 c 3v=]\B I=BB;k WN@vy4]Y|M}]x6a }dׇY>||5?>|B"'IENDB`SimGrid-3.10/doc/html/group__XBT__swag.js000640 007661 000620 00000000414 12242224150 020451 0ustar00gierschand000000 000000 var group__XBT__swag = [ [ "Swag types", "group__XBT__swag__type.html", "group__XBT__swag__type" ], [ "SWAG functions", "group__XBT__swag__func.html", "group__XBT__swag__func" ], [ "Swag cursor", "group__XBT__swag__curs.html", "group__XBT__swag__curs" ] ];SimGrid-3.10/doc/html/group__msg__task__usage.js000640 007661 000620 00000007344 12242224150 022137 0ustar00gierschand000000 000000 var group__msg__task__usage = [ [ "msg_mailbox_t", "group__msg__task__usage.html#gae2f7e0cd1e5707f78b4694abeef695d3", null ], [ "msg_comm_t", "group__msg__task__usage.html#gafe19e97b54682048a5b2f1c79add21cf", null ], [ "MSG_task_execute", "group__msg__task__usage.html#ga6ebbb75fe9ff779eac6ca57c5ad5bfe3", null ], [ "MSG_parallel_task_execute", "group__msg__task__usage.html#ga97bd13baa799b73b12599b3d6f7b849f", null ], [ "MSG_process_sleep", "group__msg__task__usage.html#gab7c18061b167e38f28886512ea73be6b", null ], [ "MSG_task_receive_from_host", "group__msg__task__usage.html#gae41e58a499fddc40b4b0de9a59894b29", null ], [ "MSG_task_receive", "group__msg__task__usage.html#ga710ee9d4ea587ab6ae66014913ac91e1", null ], [ "MSG_task_receive_bounded", "group__msg__task__usage.html#gad147ccce869d2be6888e123063430dd8", null ], [ "MSG_task_receive_with_timeout", "group__msg__task__usage.html#ga19687ebde0e9a07cb99fc73e7dfa7a03", null ], [ "MSG_task_receive_with_timeout_bounded", "group__msg__task__usage.html#ga4a29ded2ab96b5632e2f70dfd684783d", null ], [ "MSG_task_receive_ext", "group__msg__task__usage.html#ga1e2f86298cf00ea3ced4d263d31e2890", null ], [ "MSG_task_receive_ext_bounded", "group__msg__task__usage.html#gaa5c978ad309b34cc72accd934531f4ac", null ], [ "MSG_task_isend", "group__msg__task__usage.html#gaa280111a523d70bb36061e6e52ca1b42", null ], [ "MSG_task_isend_bounded", "group__msg__task__usage.html#gafb8d945da3bf7c7e54d8db238d5f5508", null ], [ "MSG_task_isend_with_matching", "group__msg__task__usage.html#gabab3742eeb92d3e9a03aa7068f7d5d7f", null ], [ "MSG_task_dsend", "group__msg__task__usage.html#ga7e292abd2fac532430ecb51a170a004a", null ], [ "MSG_task_dsend_bounded", "group__msg__task__usage.html#ga361a85b101d3de18e8b7ed0a101d2af3", null ], [ "MSG_task_irecv", "group__msg__task__usage.html#gadb4623d587d75ad3b078928f0f1b27a5", null ], [ "MSG_task_irecv_bounded", "group__msg__task__usage.html#gabc1b32d1baa16ae2dea503be7b74893f", null ], [ "MSG_comm_test", "group__msg__task__usage.html#gafd22dad001b95804f5e93aa146c84fd3", null ], [ "MSG_comm_testany", "group__msg__task__usage.html#gacd787fdda2fd925a1e4e0114cb4eb82e", null ], [ "MSG_comm_destroy", "group__msg__task__usage.html#gaa1b107438e7a295058e098a8c2c1bc4a", null ], [ "MSG_comm_wait", "group__msg__task__usage.html#ga2ae956f1e7a1014652d85b5f8db42aa3", null ], [ "MSG_comm_waitall", "group__msg__task__usage.html#ga01ce9097c976b96664e6785f6ab5d4b6", null ], [ "MSG_comm_waitany", "group__msg__task__usage.html#ga62772e7b378bc485c114231af4b8f596", null ], [ "MSG_comm_get_status", "group__msg__task__usage.html#ga6a872b2d96bdd22d28b851f1072792f5", null ], [ "MSG_comm_get_task", "group__msg__task__usage.html#gaf4fbe7c481859674d29475a0085d7333", null ], [ "MSG_task_send", "group__msg__task__usage.html#ga33c924177135850888f25378b8e0b3cf", null ], [ "MSG_task_send_bounded", "group__msg__task__usage.html#ga77f5e9bbbdb4a478cd3479d86678b7ab", null ], [ "MSG_task_send_with_timeout", "group__msg__task__usage.html#gae1fb84e33c47ad59862188845ececdf5", null ], [ "MSG_task_send_with_timeout_bounded", "group__msg__task__usage.html#ga67d9306a7940e2b32a57d4c4d2ce8523", null ], [ "MSG_task_listen", "group__msg__task__usage.html#ga297e41ae363db652f2075d7e9d164bb5", null ], [ "MSG_task_listen_from_host", "group__msg__task__usage.html#ga26ca8f6eb20767098104786a15f19fb8", null ], [ "MSG_task_listen_from", "group__msg__task__usage.html#ga7646951835a1ac861b6a35b41741a268", null ], [ "MSG_task_set_category", "group__msg__task__usage.html#gaff6a660d1f3a37ff7ee3daee0e3ae3b7", null ], [ "MSG_task_get_category", "group__msg__task__usage.html#ga4d8a840bc4a7f1b28ba351069de9b9c3", null ] ];SimGrid-3.10/doc/html/contributing.html000640 007661 000620 00000026051 12242224150 020325 0ustar00gierschand000000 000000 SimGrid: Contributing to SimGrid
SimGrid  3.10
Versatile Simulation of Distributed Systems
Contributing to SimGrid

We are sometimes asked by users how to give back to the project. Here are some ideas, but if you have new ones, feel free.

Spread the word

There is many ways to help the SimGrid project. The first and most natural one is to use it for your research, and say so. Cite the SimGrid framework in your paper and discuss of its advantages with your colleagues to spread the word. When we ask for new fundings to sustain the project, the amount of publications enabled by SimGrid is always the first question that we get. The more you use the framework, the better for us.

We use several systems to detect the scientific publications citing our work, so actually citing correctly the framework (see here) should be enough to get us adding your paper to our list. But if you remark that your paper is missing on our page listing all papers using SimGrid, please say so. Likewise, if your paper is badly cited, please drop us an email so that we can fix it.

Also, help us constituting an active and welcoming user community. Get subscribed to the mailing lists, and answer the questions that newcommers have if you can. Point them (gentely ;) to the relevant part of the documentation on need, and help them becoming part of our community too.

Another easy way to help the project is to add a link to the SimGrid homepage on your homepage to improve SimGrid's ranking in the search engines. Internet visibility is a battle where you can make the difference. This can be done by adding the following html snipet to your page, that simply renders as Simgrid.

<a href="http://simgrid.gforge.inria.fr/" 
   title="Versatile simulation of distributed systems: Grid Simulator, P2P simulator, MPI simulator, Cloud Simulator or HPC Simulator">
   Simgrid</a>

Or you can prefer this version with a little logo (if you want to contribute another logo for that, please don't hesitate ;)

<a href="http://simgrid.gforge.inria.fr/" 
   title="Versatile simulation of distributed systems: Grid Simulator, P2P simulator, MPI simulator, Cloud Simulator or HPC Simulator">
   <img src="http://simgrid.gforge.inria.fr/logos/SIMGRID_Logo_Thumbs_up.png"
        alt="Versatile simulation of distributed systems: Grid Simulator, P2P simulator, MPI simulator, Cloud Simulator or HPC Simulator" align="center"> 
</a>

Finally, if you organize a scientific event where you expect many potential users, invite us to give a tutorial on SimGrid. We found that 45 minutes to one hour is sufficient. It allows to explain the main motivations and outcomes of the project in order to motivate the attendees get more information on SimGrid, and eventually improve their scientific habits by using a sound simulation framework. Here is an example of such a presentation.

Reporting (and fixing) any issue you find

Because of its size and complexity, SimGrid is not perfect and contains a large amount of glitches and issues. When you find one, don't assume that it's here because we don't care. It survived only because nobody told us. We unfortunately cannot endlessly review our large code and documentation base. So please, report any issue you find to us, be it a typo in the documentation, a paragraph that needs to be reworded, a bug in the code or any other problem. The best way to do so is to open a bug on our Bug Tracking System so that we don't forget about it (we have other obligations too and are sometimes unable to fix bugs right away, no matter how easy the fix it). The worst way to report such issue is to go through private emails. These are unreliable, and we are trying to develop SimGrid openly, so private discussions are to be avoided if possible.

If you can provide a patch fixing the issue you report, that's even better, and often ensures that it will get fixed very soon.

Of course, a very good way to give back to the SimGrid community is to triage and fix the bugs in the BTS. If you can come up with a patch fixing them, we will be more than happy to apply your changes so that the entier community enjoys them.

Contributing features and associated tools

If you deeply miss a feature in the framework, you should consider implementing it yourself. That's free software, meaning that you are free to help yourself. Of course, we'll do our best to assist you in this task, so don't hesitate to contact us with your idea.

If you develop an independent tool that is somehow associated to SimGrid, we'd love helping you gaining visibility by listing it on our Contrib section.

SimGrid-3.10/doc/html/group__msg__file__management.html000640 007661 000620 00000061436 12242224150 023456 0ustar00gierschand000000 000000 SimGrid: File Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
File Management Functions

This section describes the file structure of MSG (msg_file_t) and the functions for managing it. It is based on POSIX functions. More...

Typedefs

typedef struct msg_file * msg_file_t
 File datatype.You should consider this as an opaque object.

Functions

msg_error_t MSG_file_set_data (msg_file_t fd, void *data)
 Set the user data of a msg_file_t.
void * MSG_file_get_data (msg_file_t fd)
 Return the user data of a msg_file_t.
void MSG_file_dump (msg_file_t fd)
 Display information related to a file descriptor.
sg_storage_size_t MSG_file_read (msg_file_t fd, sg_storage_size_t size)
 Read a file.
sg_storage_size_t MSG_file_write (msg_file_t fd, sg_storage_size_t size)
 Write into a file.
msg_file_t MSG_file_open (const char *mount, const char *fullname, void *data)
 Opens the file whose name is the string pointed to by path.
int MSG_file_close (msg_file_t fd)
 Close the file.
int MSG_file_unlink (msg_file_t fd)
 Unlink the file pointed by fd.
sg_storage_size_t MSG_file_get_size (msg_file_t fd)
 Return the size of a file.
xbt_dict_t MSG_file_ls (const char *mount, const char *path)
 Search for file.

Detailed Description

This section describes the file structure of MSG (msg_file_t) and the functions for managing it. It is based on POSIX functions.

(msg_file_t) and the functions for managing it.

See Also
msg_file_t

Function Documentation

msg_error_t MSG_file_set_data ( msg_file_t  fd,
void *  data 
)

Set the user data of a msg_file_t.

This functions checks whether some data has already been associated to file or not and attach data to file if it is possible.

void* MSG_file_get_data ( msg_file_t  fd)

Return the user data of a msg_file_t.

This functions checks whether file is a valid pointer or not and return the user data associated to file if it is possible.

void MSG_file_dump ( msg_file_t  fd)

Display information related to a file descriptor.

Parameters
fdis a the file descriptor
sg_storage_size_t MSG_file_read ( msg_file_t  fd,
sg_storage_size_t  size 
)

Read a file.

Parameters
sizeof the file to read
fdis a the file descriptor
Returns
the number of bytes successfully read
sg_storage_size_t MSG_file_write ( msg_file_t  fd,
sg_storage_size_t  size 
)

Write into a file.

Parameters
sizeof the file to write
fdis a the file descriptor
Returns
the number of bytes successfully write
msg_file_t MSG_file_open ( const char *  mount,
const char *  fullname,
void *  data 
)

Opens the file whose name is the string pointed to by path.

Parameters
mountis the mount point where find the file is located
fullnameis the file location on the storage
datauser data to attach to the file
Returns
An msg_file_t associated to the file
int MSG_file_close ( msg_file_t  fd)

Close the file.

Parameters
fdis the file to close
Returns
0 on success or 1 on error
int MSG_file_unlink ( msg_file_t  fd)

Unlink the file pointed by fd.

Parameters
fdis the file descriptor (msg_file_t)
Returns
0 on success or 1 on error
sg_storage_size_t MSG_file_get_size ( msg_file_t  fd)

Return the size of a file.

Parameters
fdis the file descriptor (msg_file_t)
Returns
the size of the file (as a sg_storage_size_t)
xbt_dict_t MSG_file_ls ( const char *  mount,
const char *  path 
)

Search for file.

Parameters
mountis the mount point where find the file is located
paththe file regex to find
Returns
a xbt_dict_t of file where key is the name of file and the value the msg_stat_t corresponding to the key
SimGrid-3.10/doc/html/group__msg__mailbox__management.js000640 007661 000620 00000000615 12242224150 023632 0ustar00gierschand000000 000000 var group__msg__mailbox__management = [ [ "MSG_mailbox_set_async", "group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8", null ], [ "MSG_mailbox_get_task_ext", "group__msg__mailbox__management.html#ga0ccdeb3f9337c9fa505ed39c74bd27a1", null ], [ "MSG_mailbox_get_task_ext_bounded", "group__msg__mailbox__management.html#ga073a924d91ab515e507e01399dbdd0dc", null ] ];SimGrid-3.10/doc/html/annotated.js000640 007661 000620 00000004522 12242224150 017242 0ustar00gierschand000000 000000 var annotated = [ [ "s_model_type", "structs__model__type.html", "structs__model__type" ], [ "s_smx_action", "structs__smx__action.html", "structs__smx__action" ], [ "s_smx_host_priv", "structs__smx__host__priv.html", "structs__smx__host__priv" ], [ "s_smx_process", "structs__smx__process.html", "structs__smx__process" ], [ "s_smx_rvpoint", "structs__smx__rvpoint.html", "structs__smx__rvpoint" ], [ "s_smx_simcall", "structs__smx__simcall.html", "structs__smx__simcall" ], [ "s_smx_storage_priv", "structs__smx__storage__priv.html", "structs__smx__storage__priv" ], [ "s_smx_timer", "structs__smx__timer.html", "structs__smx__timer" ], [ "s_surf_metric_t", "structs__surf__metric__t.html", "structs__surf__metric__t" ], [ "s_xbt_dict_cursor", "structs__xbt__dict__cursor.html", "structs__xbt__dict__cursor" ], [ "s_xbt_parmap", "structs__xbt__parmap.html", "structs__xbt__parmap" ], [ "s_xbt_parmap_thread_data", "structs__xbt__parmap__thread__data.html", "structs__xbt__parmap__thread__data" ], [ "s_xbt_peer", "structs__xbt__peer.html", "structs__xbt__peer" ], [ "s_xbt_strbuff_t", "structs__xbt__strbuff__t.html", "structs__xbt__strbuff__t" ], [ "surf_action", "structsurf__action.html", "structsurf__action" ], [ "surf_action_state", "structsurf__action__state.html", "structsurf__action__state" ], [ "surf_cpu_model_extension_public", "structsurf__cpu__model__extension__public.html", "structsurf__cpu__model__extension__public" ], [ "surf_model", "structsurf__model.html", "structsurf__model" ], [ "surf_model_description", "structsurf__model__description.html", "structsurf__model__description" ], [ "surf_network_model_extension_public", "structsurf__network__model__extension__public.html", "structsurf__network__model__extension__public" ], [ "surf_storage_model_extension_public", "structsurf__storage__model__extension__public.html", "structsurf__storage__model__extension__public" ], [ "surf_workstation_model_extension_public", "structsurf__workstation__model__extension__public.html", "structsurf__workstation__model__extension__public" ], [ "xbt_boolean_couple", "structxbt__boolean__couple.html", "structxbt__boolean__couple" ], [ "xbt_ex_t", "structxbt__ex__t.html", "structxbt__ex__t" ], [ "xbt_set_elm_", "structxbt__set__elm__.html", "structxbt__set__elm__" ] ];SimGrid-3.10/doc/html/group__SURF__build__api.js000640 007661 000620 00000000333 12242224150 021721 0ustar00gierschand000000 000000 var group__SURF__build__api = [ [ "host_lib", "group__SURF__build__api.html#gac90f96dce1a69464b09a9b79b1405da5", null ], [ "link_lib", "group__SURF__build__api.html#gaa55c4d6b7466ca2b40deef1f47a24063", null ] ];SimGrid-3.10/doc/html/structxbt__ex__t.html000640 007661 000620 00000025500 12242224150 021173 0ustar00gierschand000000 000000 SimGrid: xbt_ex_t Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
xbt_ex_t Struct Reference

Structure describing an exception. More...

#include <ex.h>

Data Fields

char * msg
xbt_errcat_t category
int value
char * procname
int pid
char * file
int line
char * func

Detailed Description

Structure describing an exception.

Field Documentation

char* xbt_ex_t::msg

human readable message

xbt_errcat_t xbt_ex_t::category

category like HTTP (what went wrong)

int xbt_ex_t::value

like errno (why did it went wrong)

char* xbt_ex_t::procname

Name of the process who thrown this

int xbt_ex_t::pid

PID of the process who thrown this

char* xbt_ex_t::file

Thrown point

int xbt_ex_t::line

Thrown point

char* xbt_ex_t::func

Thrown point


The documentation for this struct was generated from the following file:
  • include/xbt/ex.h
SimGrid-3.10/doc/html/bc_s.png000640 007661 000620 00000001250 12242224150 016336 0ustar00gierschand000000 000000 PNG  IHDR /9oIDATxMLANvKPJikR5^ChŃ!Dz *U4VbD1~`8x@^?@јn`JLLئXi v9)}aV&0)(zkNcFP'@KZK%!135}ݏd㰒>hGZ zڗi얺=@OȂ1ӯ3F[dJ`|^3\]'fy@Cos˧d:?$lhn nm\$cL6x@NoPΑՔG>9Q@.qܴ PCt(yQ$hN8 MNj$Őo_sLIENDB`SimGrid-3.10/doc/html/group__XBT__swag__curs.js000640 007661 000620 00000000355 12242224150 021650 0ustar00gierschand000000 000000 var group__XBT__swag__curs = [ [ "xbt_swag_foreach", "group__XBT__swag__curs.html#gad0579732a4cf176b7812381b85c1df42", null ], [ "xbt_swag_foreach_safe", "group__XBT__swag__curs.html#ga1cd81b745c6799a768b8f08c5d4c7974", null ] ];SimGrid-3.10/doc/html/group__XBT__dynar__ctn.js000640 007661 000620 00000000673 12242224150 021637 0ustar00gierschand000000 000000 var group__XBT__dynar__ctn = [ [ "xbt_dynar_get_ptr", "group__XBT__dynar__ctn.html#ga7cee77666f148fc987bbdeca3d10bdc2", null ], [ "xbt_dynar_insert_at_ptr", "group__XBT__dynar__ctn.html#ga06afc0831b210b5323e61a9a217d6158", null ], [ "xbt_dynar_push_ptr", "group__XBT__dynar__ctn.html#ga35272457aa299d326977767a00e01ffe", null ], [ "xbt_dynar_pop_ptr", "group__XBT__dynar__ctn.html#ga4f1ef94eae8a2060697a9674d46f0c2f", null ] ];SimGrid-3.10/doc/html/use.js000640 007661 000620 00000022734 12242224150 016066 0ustar00gierschand000000 000000 var use = [ [ "Using MSG", "use.html#using_msg", [ [ "Basic examples and features", "use.html#MSG_ex_basics", [ [ "Asynchronous communications", "use.html#MSG_ex_asynchronous_communications", [ [ "Code of the application", "use.html#MSG_ext_icomms_code", null ], [ "Preliminary declarations", "use.html#MSG_ext_icomms_preliminary", null ], [ "Sender function", "use.html#MSG_ext_icomms_Sender", null ], [ "Receiver function", "use.html#MSG_ext_icomms_Receiver", null ], [ "Simulation core", "use.html#MSG_ext_icomms_core", null ], [ "Main function", "use.html#MSG_ext_icomms_Main", null ], [ "Waitall function for sender", "use.html#MSG_ext_icomms_fct_Waitall", null ], [ "Waitany function", "use.html#MSG_ext_icomms_fct_Waitany", null ], [ "From a sender", "use.html#MSG_ext_icomms_fct_Waitany_sender", null ], [ "From a receiver", "use.html#MSG_ext_icomms_fct_Waitany_receiver", null ] ] ], [ "Basic Master/Slaves", "use.html#MSG_ex_master_slave", [ [ "Table of contents:", "use.html#MSG_ex_ms_TOC", null ], [ "Preliminary declarations", "use.html#MSG_ext_ms_preliminary", null ], [ "Master code", "use.html#MSG_ext_ms_master", null ], [ "Slave code", "use.html#MSG_ext_ms_slave", null ], [ "Forwarder code", "use.html#MSG_ext_ms_forwarder", null ], [ "Simulation core", "use.html#MSG_ext_ms_core", null ], [ "Main() function", "use.html#MSG_ext_ms_main", null ] ] ], [ "Helping files", "use.html#MSG_ext_ms_helping", [ [ "Example of application file", "use.html#MSG_ext_ms_application", null ], [ "Example of platform file", "use.html#MSG_ext_ms_platform", null ] ] ] ] ] ] ], [ "Using SMPI", "use.html#using_smpi", null ], [ "Using Model Checking", "use.html#using_MC", null ], [ "Using Trace", "use.html#using_trace", null ], [ "Using SimDag", "use.html#using_simdag", null ], [ "Using SIMIX", "use.html#using_simix", null ], [ "Platform Description", "platform.html", [ [ "Some words about XML and DTD", "platform.html#pf_overview", null ], [ "Basic concepts", "platform.html#pf_basics", null ], [ "Describing resources and their organization", "platform.html#pf_pftags", [ [ "Platform organization tag : AS", "platform.html#pf_As", null ], [ "Computing resources: hosts, clusters and peers.", "platform.html#pf_Cr", [ [ "host", "platform.html#pf_host", null ], [ "cluster", "platform.html#pf_cluster", null ], [ "peer", "platform.html#pf_peer", null ] ] ], [ "Network equipments: links and routers", "platform.html#pf_ne", [ [ "router", "platform.html#pf_router", null ], [ "link", "platform.html#pf_link", null ] ] ], [ "Storage", "platform.html#pf_storage", [ [ "Storage Main concepts", "platform.html#pf_sto_conc", null ], [ "storage_type", "platform.html#pf_sto_sttp", null ], [ "storage", "platform.html#pf_sto_st", null ], [ "mount", "platform.html#pf_sto_mo", null ], [ "mstorage", "platform.html#pf_sto_mst", null ] ] ] ] ], [ "Routing", "platform.html#pf_routing", [ [ "Routing models", "platform.html#pf_rm", [ [ "The router affair", "platform.html#pf_raf", null ], [ "Shortest-path based models", "platform.html#pf_rm_sh", null ], [ "Manually-entered route models", "platform.html#pf_rm_me", null ], [ "Simple/fast models", "platform.html#pf_rm_sf", null ] ] ], [ "Defining routes", "platform.html#ps_dec", [ [ "link_ctn", "platform.html#pf_linkctn", null ], [ "ASroute", "platform.html#pf_asro", null ], [ "route", "platform.html#pf_ro", null ], [ "bypassRoute", "platform.html#pf_byro", null ] ] ], [ "Basic Routing Example", "platform.html#pb_baroex", null ] ] ], [ "Tags not (directly) describing the platform", "platform.html#pf_other_tags", [ [ "config", "platform.html#pf_conf", null ], [ "random", "platform.html#pf_rand", null ], [ "include", "platform.html#pf_incl", null ], [ "trace and trace_connect", "platform.html#pf_tra", null ] ] ], [ "Hints and tips, or how to write a platform efficiently", "platform.html#pf_hints", [ [ "AS Hierarchy", "platform.html#pf_as_h", null ], [ "Exit AS: why and how", "platform.html#pf_exit_as", null ], [ "P2P or how to use coordinates", "platform.html#pf_P2P_tags", null ], [ "Choosing wisely the routing model to use", "platform.html#pf_wisely", null ], [ "Hey, I want to describe a switch but there is no switch tag !", "platform.html#pf_switch", null ], [ "How to express multipath routing in platform files?", "platform.html#pf_platform_multipath", null ] ] ], [ "Bypassing the XML parser with your own C functions", "platform.html#pf_flexml_bypassing", null ] ] ], [ "Deployment Description", "deployment.html", [ [ "Overview", "deployment.html#dep_over", null ], [ "An example", "deployment.html#dep_ex", null ], [ "Process", "deployment.html#process_tag", null ] ] ], [ "Tracing Simulations", "tracing.html", [ [ "Enabling using CMake", "tracing.html#tracing_tracing_enabling", null ], [ "Tracing categories functions", "tracing.html#instr_category_functions", null ], [ "Tracing marks functions", "tracing.html#instr_mark_functions", null ], [ "Tracing user variables functions", "tracing.html#instr_uservariables_functions", null ], [ "Tracing configuration Options", "tracing.html#tracing_tracing_options", null ], [ "Case studies", "tracing.html#tracing_tracing_example_parameters", null ], [ "Example of Instrumentation", "tracing.html#tracing_tracing_example", null ], [ "Analyzing SimGrid Simulation Traces", "tracing.html#tracing_tracing_analyzing", [ [ "Viva Visualization Tool", "tracing.html#tracing_viva_analysis", [ [ "Time Slice", "tracing.html#tracing_viva_time_slice", null ], [ "Hierarchical Graph View", "tracing.html#tracing_viva_graph", null ], [ "Basic Graph Configuration", "tracing.html#basic_conf", null ], [ "Customizing the Graph Representation", "tracing.html#custom_graph", null ] ] ] ] ] ] ], [ "Simgrid options and configurations", "options.html", [ [ "Passing configuration options to the simulators", "options.html#options_using", null ], [ "Configuring the platform models", "options.html#options_model", [ [ "Selecting the platform models", "options.html#options_model_select", null ], [ "Optimization level of the platform models", "options.html#options_model_optim", null ], [ "Numerical precision of the platform models", "options.html#options_model_precision", null ], [ "Parallel threads for model updates", "options.html#options_model_nthreads", null ], [ "Configuring the Network model", "options.html#options_model_network", [ [ "Maximal TCP window size", "options.html#options_model_network_gamma", null ], [ "Corrective simulation factors", "options.html#options_model_network_coefs", null ], [ "Simulating cross-traffic", "options.html#options_model_network_crosstraffic", null ], [ "Coordinated-based network models", "options.html#options_model_network_coord", null ], [ "Simulating sender gap", "options.html#options_model_network_sendergap", null ], [ "Simulating asyncronous send", "options.html#options_model_network_asyncsend", null ], [ "Configuring packet-level pseudo-models", "options.html#options_pls", null ] ] ] ] ], [ "Configuring the Model-Checking", "options.html#options_modelchecking", [ [ "Specifying a liveness property", "options.html#options_modelchecking_liveness", null ], [ "Going for stateful verification", "options.html#options_modelchecking_steps", null ], [ "Specifying the kind of reduction", "options.html#options_modelchecking_reduction", null ] ] ], [ "Configuring the User Process Virtualization", "options.html#options_virt", [ [ "Selecting the virtualization factory", "options.html#options_virt_factory", null ], [ "Adapting the used stack size", "options.html#options_virt_stacksize", null ], [ "Running user code in parallel", "options.html#options_virt_parallel", null ] ] ], [ "Configuring the tracing subsystem", "options.html#options_tracing", null ], [ "Configuring SMPI", "options.html#options_smpi", [ [ "Automatic benchmarking of SMPI code", "options.html#options_smpi_bench", null ], [ "Reporting simulation time", "options.html#options_smpi_timing", null ], [ "Simulating MPI detached send", "options.html#options_model_smpi_detached", null ], [ "Simulating MPI collective algorithms", "options.html#options_model_smpi_collectives", null ] ] ], [ "Configuring other aspects of SimGrid", "options.html#options_generic", [ [ "XML file inclusion path", "options.html#options_generic_path", null ], [ "Behavior on Ctrl-C", "options.html#options_generic_exit", null ] ] ], [ "Logging Configuration", "options.html#options_log", null ], [ "Index of all existing configuration items", "options.html#options_index", null ] ] ], [ "Getting help", "help.html", null ] ];SimGrid-3.10/doc/html/structxbt__set__elm__.js000640 007661 000620 00000000443 12242224150 021631 0ustar00gierschand000000 000000 var structxbt__set__elm__ = [ [ "ID", "structxbt__set__elm__.html#ad72fec45d8f1714b7465f1b951095746", null ], [ "name", "structxbt__set__elm__.html#a5a2ab800a2ad4e62739c13ff4f7d6104", null ], [ "name_len", "structxbt__set__elm__.html#a6896ad1af2ffaa976b0aa3850bd0a9c9", null ] ];SimGrid-3.10/doc/html/group__XBT__dynar__speed.js000640 007661 000620 00000001374 12242224150 022152 0ustar00gierschand000000 000000 var group__XBT__dynar__speed = [ [ "xbt_dynar_get_as", "group__XBT__dynar__speed.html#ga5604d34153e9c96ac193245757f63085", null ], [ "xbt_dynar_set_as", "group__XBT__dynar__speed.html#gafee03470eed0dc5e8eb240288ba8b11b", null ], [ "xbt_dynar_getlast_as", "group__XBT__dynar__speed.html#gac056cfe5092e40327377547abd9995ee", null ], [ "xbt_dynar_getfirst_as", "group__XBT__dynar__speed.html#ga209a34611a295f0e3516536e753893c3", null ], [ "xbt_dynar_insert_at_as", "group__XBT__dynar__speed.html#ga767cbdbaddd71fb98140eb78309b5739", null ], [ "xbt_dynar_push_as", "group__XBT__dynar__speed.html#ga50d763465a98678a3e83afa6b5ecd243", null ], [ "xbt_dynar_pop_as", "group__XBT__dynar__speed.html#gab6dd8b8802c7ad0b12a81ecd806370cc", null ] ];SimGrid-3.10/doc/html/group__XBT__dict__curs.js000640 007661 000620 00000002206 12242224150 021627 0ustar00gierschand000000 000000 var group__XBT__dict__curs = [ [ "s_xbt_dict_cursor", "structs__xbt__dict__cursor.html", null ], [ "xbt_dict_foreach", "group__XBT__dict__curs.html#ga3124aa46173fbf9fc703b748cebd4b70", null ], [ "xbt_dict_cursor_new", "group__XBT__dict__curs.html#ga5c29813d0de67603640f948b2d712209", null ], [ "xbt_dict_cursor_free", "group__XBT__dict__curs.html#ga88eb8699e8778f9d1c5821da0bab1849", null ], [ "xbt_dict_cursor_rewind", "group__XBT__dict__curs.html#ga0f0f7f26eef7dca0f3d837bac985a0ff", null ], [ "xbt_dict_cursor_get_key", "group__XBT__dict__curs.html#ga86b45796b83225553370f1ed2298bdba", null ], [ "xbt_dict_cursor_get_data", "group__XBT__dict__curs.html#ga2ebcfc14c62baafab95b9c994a2e6012", null ], [ "xbt_dict_cursor_set_data", "group__XBT__dict__curs.html#ga714c4490d2187b042a6993c68e860fad", null ], [ "xbt_dict_cursor_first", "group__XBT__dict__curs.html#gaed25ac933321fa3837877f2210979db7", null ], [ "xbt_dict_cursor_step", "group__XBT__dict__curs.html#ga9871423165388f7637dd67116b68044a", null ], [ "xbt_dict_cursor_get_or_free", "group__XBT__dict__curs.html#gad8ef9a04e0c50a3ed9a2dfa7ca36d599", null ] ];SimGrid-3.10/doc/html/SGicon.ico000664 007661 000620 00000271321 12242224150 016616 0ustar00gierschand000000 000000 100h2 ?9'<(>X7?00 dh, r00 %.  9T d hinPNG  IHDR\rf IDATx]k]=7:.g;2$ݽ6k?*%W@ @pzw^eYeY\y{&Ls2vY94M,3 ߒ0uG8n=|:L@' 3,xs ,z<ZuEshErB\,˲\-kZG鷔zes5^pG,%sZ5aD#l smF0]DuGyG>/MwQ pdɕ%KHn[RK#ߣ\c&zh Jc>1^zI֦yڣ<76z.eľ:\ 6#bT?*t{tH8 RzLtWe/H쇮 :w<ʧjg.+Ԅڞ/u[p~<59'+%A0vn{#sLD[g* uCґҤH\V}ϸfx9Gq? s!0lՏqAlz q6L䉐Qkw곔Cae!z6K>\F[m\x~$oij߲,kxkuIUؾIfܨ̍N$>-m>'mٖuej l=zI?{}(haҶ0Oy%G۠l}ƞ-n))}}#Ke:U6Ǜ`SE< :7oC0^"5pjCkcbaw6l9GZY{A6>s~tONvT0C^mPx^ 8[Hh>Rg0}HvVg{kiO0c'[:ذej-!7̂ޏXq~<4H2yApzm Sŕib04"CEC X\_!z]Q$pC1f0mb vFh&t+/tӻ=W2{Q'=B$)˲388~9?si>1'_/nkiU؉W- ڂh&]/oI-?Bq> y-39u4Q[so&r٥!` `ß_H>JGc%JG]Q79U3 OC9~ z3φʕy] 1AAD7_'kأ!Gbލ`f㏼DJ6OبmON&mowgbKKHD~4)aw6}7r_ (Z(BA5s'ҒK"Frwe0iOT| )f[`MIC96؆:'פ%i+߈k~n s&$+#oms@Im҉ R/uVλjSoheY6BRŠ'/43̻(FTtD⎨_ |=_&v B#~ SWr坮V ,U~\o#qu4aA>fxx7*#v7DZ(Ru|PN@9ǹ:P9w\)LuNnc 5lm5s-]~ u5 @_@q0jxs}RD*=[^|lC}4MyzTl}Jءf!Ӷ?@1$:'s!ۭ)>D x v3ezQ@ͽQx.>uUN ܍&T`G/3[dF!g" 9a,!Gn- @tTi` Z"W[R[ruz\K7~ # `?Mөrr} @&LS}#Yzʀȣ a/Z\ܞ/@i(}oI6jD`Gr@"Uw#e@ 0nPvȦ@tXM `рfVȄ-fv6Ln;[F t*рA_8:sΕ@~ ) @8X)a1 ('!ؘE֍C@EAA[䋙eYj.T.2 ]ņ;f65 ^t!ݳUFm{f L AP"ѭf>IN^o!}җ Y|C@hPH1:$kV˺}P$7@LsJom\K;Ҹ=(H_ x<7[ l%*A "J2LHtՍZTW;L[e5 (O{dHTuiկ^.} }*w-uzɜ~\JJ×}ɏvkw=7oZ/Y$.7`t:AA*MOHIRT]m)ҽ:Dl^$ل,y{ xaS貖ĜgU_ !Ђq` ^#Ϋe*sXB p%fnS${-ҾDzB5D,=dtVA1Lc,t2Ye[2=,8Y$W/֧h$WB>L*Υ9ի˗By-^Kς-myUZsӯ0)*]C7 stmnd]!H{TVZ[с9/!7M~u^3S?ka=xqi ? Sڔ;w`an zYex<@T ỂJgS/`__kE,˒$' <\ p ٙ^N /oHKk꘧>ė1Od x@5e?ҘeBǠ 誃` _Qr빌 y= ={MCU*Ml$0*Ín> acYin5DA4aYtwo_<0{T/0;1&z*QE稶fҞm&QH42G7eBokMi\8Cv TޗX,Q5HsO*os핇p]סD4 Dy#W LGP;%W0 PҀ\T&Q F`JO,>!tGݧ >Z `˲T"}wљC)gkPMT=@dۣP>ORM]TG~`y[ZGB ;>ŐiqMTmIT\01m=1{ڱUQ#vK(H+pUh% ' {wTbe6ИT{q [=3:wo]Rnt`v(Qf[ވŜ×Oh+{~*j0#jD+5 XyD(}O0qY:bs&Й sw@gT1?~v^'rD$z> '+?#ixhg)4=xjEs(c 4 kmCq7v)d gH[ 7@i^P4/_9fLpg5 5D[pD})1Sd?Bpw`.Qo+0- *xM_!X@x@7+J\; #8~* << .6`4A0' Wv $x$&E0'hD#ݙsponu`G! N\:UZ-H"KOi©1|;j#L=e͹ hn&x%ղ'z@k>oz ؖ p!!^]97i&B9AAh/7/=0dyOTO_)Yb&$G9[Sc0@F07ͼL~-%u/_NbFY@`G𔌽SP3 )K'mN'Bf&@QZ,KH8ѫD{ *JD%XD9FPeuz{SxeI'^ZwbajnB{Bd=e*y{?o]s_R)~@V85yuAOS+,(g eCP&B89d _oK%do0̧b* ,H{V1 ߚ w˲- [x2oStaO@ -G5}jJn^d9yeyuP@+,j iAH/Wu}WYUS4zj&b]e~]_Om#zǠIk|^D{s%~*AQز{iF[>V@dh)_ru_IEg4)3(6M,OT:yN fk 3 2н j ^Tg!.JF7iuM!Px>N 5 pi~̵|rz4(;ȹaN@4cP_jՐ`+S $ާ^3 $iZ ڙ,:ϙ/n@Ih-%X_ |;F4 ͚ɽC`3W4d-'Ʋ,,ձ~T`0C1 >d~پNd,Bm_&sB^Ҿ`?;K1]gMgvȹy? 4a|+c LJ }LeVT8]L0h84"`c,^_ G1M/@$FMB0E|aY7p@(x ֹl'A3Xb+{EH1˲8]P [d' do#LCL8eBK*q4MN7 -7=aĺ_&<'P;A-GjYd=2[{&@K54; 4BiT5Ֆ;uZM"|O~+]$ u$C7&`isfD3Y, O# y"KL^B6m[@D`Q}Oo(y`qr:Uwu@67M>#tz3d䷯h0G襨cC'-@ @qkw=L^bD=L4#@\!"VxfQ7kdXL?7WG߭ <a,l`}3>f[G}rׯ;( NPMa )&P @z2}Ly<< ',4,|Tjg{_9`ASJ|*Ix&`~.:igGvV: h˯~Ϥ0C2fn,!#ty'29\[N&P}YE]m9ʜTL_H̠de|}֬O3-~8x3pD]Zݲo%4-u|ŶŘ\|48e,^.il0ǀVy4q]}GW5ݸO|Z T,'CFa[FQ 3Jj)2Mgp ˥ܴ=n'bx$v6gi4^9]wMX >tѬufgg%Wa]f+ 9uwk2 L̹Ok/Y6F]!\IJ^RC%Hf ־&f?l1ȶ8w@]xw^3˭Bn4ys |$H]O6s-wr$P^5vh^;W?dL%J hC57 _A@M|󣼷l1!3`a3 h>Di׉|Oh ۷63?jQɅܕoX4QeF=W |OV'?@Ѥ}/)xƲ,;P'f4|z=/CK^`OaF@p9:SJ}' \5_liL6ڮI{rMGa^c+݁Mlw^׋Lj&~[8u<2xssFZFB@H$"%VJ3Į5œځ׵߃7+s,}}:gE"4D-K6 9SG/9]ȧi:ڀXav}7wdڀ9[%Pp5:<#epBERJ"vUHR˟؏2^i%gL{؃n#ZbU̇׉w~&?{Guf0R`-~Y]7 Pb>E;z~FCXes *$S)zu0oq: ˵@/@"3i'̬@h& MpB೺Q!" !I>@`4j>Y9eG>[* Ja p@qͼ@& ӏui@H! ˠم2cG)(O2+4qSC:Rsn6엱,:e53ƬE´/@ (2h3}P|܁D,!'Qj (n@ڜKReA!S-;K xD!hbx)@ oWAopr@ž_`='&2s{D^;OX%u`J1篽aOFYMoM;:1T x2TC40_*- 4@`շ,ЃdmH޽@0kk{gy|.i#s`t m!g#8’N#z~>/q)_ U59MՔ9xhq]:b"j`)@nNvb4ac˲yC(ZZ(~i:Q d"U/@4s@^$mY` ˉDE Ps44@蟙8Bi(S0m8XihICyߒ]OSv[4j96@*| |#i:L.s0g:K (>ҥxI"uDjF0M()/0P#xo"Wg <sٰ"9 ^CO .53rzeL ~+s|C#u(fX}/o!j{iRNQh8\uM(e"uo.݊e΂0 ў=^,;IZ֩)]b\!FL@ L̰1 A|h=.[gӤ+L;Yq17 3t=Z~~f88\&N8ǐ3eDi @e ѫP=5]_t6 `^7CwJ!sFN|. )Iv]Bo9Lxe_|S&DZ[4a^^0> ?_ '30Zh&!ɼQ0U!...NaY ]/5T҆{p ,ҁ( iFa\ |SQliYfsDOT/܍ׯRVj&b:HGK2j_5)1$ y*Ljϻ p@!ŨAJv%Qm?9pc1@iH=Qh5f( B;aٚ V"~2N_rΨ NYsN{AdX:0<)o@Q #آG{:7O.זud2q !T6ϲFxY^zS8(hnI[fݣY ]Ltd_P|M; FV66U[ ||)u_ƞ~Ցz>Ky^Jo9#(SB#c-jf>Y0BX}6@a-qyKK9YU/e|$F;Ӫ oVL̅Fn4 R=+?3[M <8 Wۍ0> Tt<-O)_-J&lT6\&(lh_6ޓ?vJU2_͗aIbjjx6'l`ԶԥS\?z"46 ve0QWr=U_Jj osU[ǥ#7QYPpk@+E)hڠ5̄o[ֆ&MbZ 3zH z~=@_EB^hA֋lSǕלa+u] =b*ʬSuSy'ut?Vu? 1hWb紼-GxQ Xo%R]uIreDrH4UJ 2џ6I|YXD&#@Q`Up0Gʫ>N!c6 >!PmMPѥQj yCkNNO'c"LR,XGp1b}>1= [n"D>SnjgБ7p͒6jfu{לc $I1ȱmͯF/781evډY\As; W!4bZBS45}t&l&|ba4[ҿk/ճiʣ_ \5!]F`4h &Y3u8iy*d켯 6`TxL;OGWM>΢)P"+R}VUCaH]5] 33t!|gL4CU2? t x) qgtMJe.;WhI=شR=t)fT 8 Aݻ+yFNGAhl{.F}2%4?B75ֈжmM^\+o!hO Ч ǒ^8i:a]ee^̀Ll9FiZ<\W`"80׼-Y+go {l=@ so9$ר'YG&u;_~ر%jǷ#'8LCFL`=VvQ}p+DG"mX )x %ot~#|ih 0¾؂^?(@ |y=IENDB`(0`xwwwpx|nvwpwvffdllwvfffnfp|ffffFw|fwwwlffegwlvFgpw~ghglggnglpgp|gpwppwwxxhGpwwwWvddfwdwdFpw~gpwv`pwdpp~gdpwpxwfwVFpgvpwrBGnnnfpdFpwwxvFwvx`gxdwp~vwvgvw~xgtBB`G~gwxwwpxld$FwngwvhggpwFwpnnnwgvgwg|gvgv~ldpfFgpxdlfwwwxgvFlvwwxnwfddlnfwvfnfghpww??x8 ????'? x????( @wgwvffpvflfgfvwwnFfgxffgfgvwwugwwpv@`pfwpgtwpdpggpggft$pngGvGpt xpwv`ggpv`hFFw~gfpvpwwgpefpl`ffgpp~lf|wwvxflfffxwfvw?`? ??<|F?(0wwdffglnllfpghwvfFpwwl`fpv`wvRpvp$$`vfGpG`R@f`wdxBtwppwdgfvfw`wxgpF`fgllfwwgfffgpw?#( wflfpvwwl`v`pwfpvxg@vphv`Ffvhgwwflffwwpcc?PNG  IHDR\rf IDATxiydefU֙YG!c(RFweQK0̝Q8lyF&1 i4M0@r# Ic(x%8gUeWf}PwWwW7`]~/88888888888\CH}k7:"2;^V)}w5w/6>=՗e+~ ݝZ/GDU z]}M 6;Q/W_FW}$\]_t+鿃^ϢS9-r]^޽ƣ_ r&w%c+1 "u6-p1|C6sKac/}_O&c5vF_k Tp۬w<-84y>*N/b׳^M*xVN-֠ 4CXJOWW~iơi^/fs0>*&2?k|jmf|."mtMc!F_ k.F}22Hx5 EQxjZv0]!BzQ }Vk,ةQ/2*}!Î0؄=Fxߢt?}#R(FpuEj,nRΜs.Lۍ,x%3aӐW?=XuU"P8Q\]!}sm(e73Yo*v[xT@ѩ[;|)FB)[#E "mQiP6[ J|@\&Q.)J E?MvV4vj9k%>oz |SsdP(VZxҶѯIYiDOME WOx8y5}70紻X__.WH|hMPY^J(W[rk2`T*$#j!LGEH`'Vj=ŧ&b G,;6 F˖^ZZb~~W0j*ZKǗ2LJrP*|mS.9yNTbWF#gI|*`-hu%߿m3QS+ z9Db(XP0xg8.Moq) I<7a&|5(H00`K q};q.Zi.ZQ[mdV:MsG:הsי%_\z]F*PR1 =]]nEaXo꾜O*r"ti H$L,%ț!Cq};~R4EͷqO˷l g=39]D9 Bv 0ȶ~ۦȥ}OF7 BrNŞc(;UЁAfXִ0ȸT=m-_E?~ʢAʗZ2Nr$z’HǛE~nY. CTf%UՖ<],j,t{;iQh0tg"3m]30JEE$b$)\tLWF S%7Lmj]ʄ9Xets}A|=𺄍Zvĵ]-1b-1?/3%.}^-b(-Nۙח0rp9K\-ñj§Wv2 W%ikgC*P.9f CGhD`{w_ŁsҎK-:JeEWW7$MLR,Q12H鄄X0?gWgZ+ؾfiǕ E©3^goPf:BPPH¡`'& YBrŧE#uy!W]Z %u "v:;;a׿ Vpf-)z#ia*MiW8JGG;-1ڮƻJK:'@[8HOGG:VPm:, ɮ*eZZb$#? \znXdUZbAZb1::ڈŖWac8GU ]%# _e\ܳ ) o!CQb -1Zb1LnDJYw@x8--1 CЍ$epSi$88, ϋ$3'5KdPk~-=˧a&@=_.MMWk(gr 99?}A8lԖ;8 97Q"`tu-8/Q"Ljn'ܿeh =>_2j]  Ϊ>0TU /kLې*<~!0`$hx<40]vhW6T88\4< Un76 \,S O((A4T?]C_UW.|鷥α+p&`Pj5͢^7a,*QgxZTbj{Eym2BP,R*ť;88,̢5gٟEƋd1|U Q 2*š*h0vS瀻ݒ>GW:UI&NVy !k%q{LN-G6jwy1]!U|@F.e" /g Ɗ|eʕtG$ s+cCc+_z+H2|b/[ϮѸ` @T*9 b\>Ē4Mc!R$̹}UdX,Q*?CX@j|mJ2mͽ,\?܌ͲLX>RV =)p c "\Y,4"e_tgեJ۶m4{ҷi%7[2:Nǘ̿N̲l@m?Pk鲢ͯ+#z# eA`WنdUI*pBdۃTҼ⳴%X9!&S/Ge2)\( M7Yr""qQz ,Bxx@T⇩_gpaпoɒ }v!nˏsϰ#g-tnٔd=xPyز |a{` iM]?+OvFykB3Xv@WMd;Z =J00-ƛ}_F&1Wtdy⩃Pd"1ُ~#S8[pX_W.v}QJ߿pT ] î&IA_N^_/B0?)']_}RxXs]gpexbL'cf>iSlx-#&~tܪ}#hW/#pyl|y1*+ Wf'۽2"R-"EU 6pE H\]) 䲹e9Ӳ|Yq->*gy؆ɢbued[xuajԜ7ڌo_(脥{t}ah MjzR<FRfWl+S棌ݽ +~&JhˏUN 5VEww׆y <(~˷xe@^۶E7L#5=zHgkν2R.s@,ʿv#jdB4JΏT}>7bVkjCK* nSlsAG%ԾŰGҷT1@V݁^vN0x$J𲲍+sN|`{M.-Lh ~ZqEN- inT+d'ŃϽ{gGTf֞@MiW2/6']U~~@`zfzx< χy4mΐ]x&X,R,*ʕʥlUrL6#i qݾ%]J=5D8_/ݛ쾇(_GCt(zwMz+Y4ȃTljJtġWQTCfFgOy\>"]QveýWk_. K5mb.l|(8U>?<TUAYbغ@T,lۢbYӂ!491RzS(S\ɔp ˦V;im 6 bv&mi Wlb{{ i;s7\:mE]9SdE执f ?xG'FwzieuG_kawkGIdsU-\fMx6%Ux&Rd^&ФW}1˒I ׼jν/Oh%5{mkkŧkP 1M|`*8'Ƕ{3J y !V/J\۴,[5nwqŒ|ӻ!1*Rl+ˀ]EzU-=\V .n\"ԥUdr,ݶm* IS \Pɓ)/]+h}|KaG|s;/WE~>IK,6AWd&6CE41dM#H Nv[ϓ+N*TcMmډ?8x&AWە$hYN^ clݺeF?KϕFu|(}C Ɋ2IƗvhAo4'y+H֏&vѠifhn h>f p"˫4' 7ޢW6Oj&V0$l .W5UQyGLR".jX»)ԩx#~r_\>.yVabD5"Fh̠%a~ޚy3[۲) dB BHViq1U\&0*a|2V]Jr $r3Cthxim%Ϋ]7ЁA15GJyZ+LU3 G<:?d* c59'Tݷ"|7x?)1i 7S ooGWK)b!:hoX,:򼘗h55BNpE&_9ѮO.Zl 5}'[:iooZ[ŢM9>Ǚbrr>])UI\Mi4,B 6-J)~Sկl~@}oshi:[[hoocE*r}溘 &xk<ï.,Ч@ 7v]P?s-z&N{[z}_pb¸DkfA=DTS59eWJ=:+S:-v̤`H6[$yM?8Eo_wE^Hݿ6zVX<(%R,s࢐pndAЭѣYqM,ᱳ[}tuwCGGۆExm,)=@R*.`h'v!TVڳߐr4&qrhq=WfI8ӯ]_q#9J.:BwwwҚ|Rww77li3[uj%A/M`' {]btBȹ4~3"F륷gzwo?{j;.|uܡ(0"\U/5B@클*vqU}ibr̉J />O9R`'WE3]5EKnVB%%mb1?7'GBljXl.'.,T0zF'UUIpW$ϝ,3^#ҿ?:EmԼۣnz IDAT態xņ7f{ҡB4|ES) U[;`}Q\rF ]NbjȻ/=~* qv &mF0ĈJçi~׋ԃ&?裋Ц"˭)-M%JL|"$3$"$"y⩃/`pMs} )W*Y  X9tHPKC=wZu!_8\ƼBM'LkyBV iҗ*2c Z5Nx}К'>Pc?K D V j_48OȁV $-ӎѐ׃T$OѺ';M+J/R^Ixw R@Oْ{VF>/?P#QNʄEAk@=_48OZ&tB`i!F gJ>||۱֚eU_AVNα#?F5BjZXOԱ4Qؽ~%# ;K *Bx6˩B4yMuxunlMj;Ŗ-tvvF&$zپlhYnT^kJ)z.anl?<pXwݽ[ lu )lݺVXuM3?_Q-b[6gB;y9|R2<ߞ!MZE94f5'U/2ZH 5{|.nkml+c, HT¶hJ\S&ls}R0hweU_)ULqiӗVThvXaY `&3յCEP&Zٯ~k.һJ 5\~Xv?ERۭ+87KHf 3e6Eõ5o4{O2KLI$MDx9K;l> T=KKל?3}ә,P98L@ا pu9xq}hPV-Q?H d*1FƚfÙYVG/ɟ-kǣ.[t†N_gh 1V@ -/C!<+Inۖs[| < phK_'Npb8⦠ۣ[;c!8*M#bd,i5?̩xS@uZahȷf}6K  L7DPT-!Us|6Os88/f8]]vιvn`xeaJq]<_yqL5 lɵ~fx7 M32ueǟo¾sp^5RQL3ũKM;ϖXv->Gڂ_9 b`r8mq|>~-Ţ};\8/:p#Hr*#34Y*3Zs7ǖ *zh 8#ɩ8ɤ'U2h|r[;H ]gיz )DL\(*"tgvv;f5ЛG"NO; eV%lS_kc"u_ kTeuU鰭u+<FЁAf +059G | Ko ۃJx1񝤛J. KUM7a.N$r6ɼTʒ* t7F7LOHY{,بs=l ?ץԄ_CC!Kt1tq_o-!wڄkD.[%Hiښp7u ͒H$ d2Үg35QN6GO,-}vbCwGޡuAkh+4ݠX*b)<-jl6X0-2kENzRR,RG/Oqpjf!pHb:ږwb\L6Kw>˘\3iײTHPB3P-7֔sŋA\I!e)T8B LaPoo3S$n.?*Tx"2P.dVehp7X/xrj 3QD``iB )2~KEK0꿶t k<(|SqznFG !2mZ)tD"  }h+KXʪv&\NwT:`ߐ@ǍpB.i r2oa$I X3^]>':(DL6GRxC <&q*k;$ɩ~um@+IeS?Tʒ!KTX݋Z""ـzQΣy<I35žC%^ҾB2ib&ЁMoBzhŅ!"F>{MzQk{OjooA>6ݷ2ev _ X+>*~sO|hgͳ.pqϽI|#-Dw^(*JUL3)̀⩜6k&bBjh^ ׻.kp j5#YD@^$ UbDRYE+_705K޵8T*he#$^ENI!efѽ:+^2lkl$E 2&'&F ͳ>1V1F=7:_V':(vmɶ")[5h8{O9;O၇ķx#69_yaV&?yT<`(a+`'E`cr\Hdy)~u!}նm+"Veۍ4o#aV}u\."$h8`c#opb8qgK)\5_HT.V7/e \7imm0 C_עpo'b|"LkY|s[ 䋥mgՖՎTfL6n<< H&'K'׺{ٟWJsv@]Fiok%FX*݀J-c7NEo+zhݳ֚G/eg?]X4JKK ЉFM!DTbӴ1Sz͢A  nm>*T<8v >z2Akk 6MVGH]}Q\?P'S*b$ ʍCho֖XӨu =p P36Ԫ7'~|bB~ՀUM+uC(Xr=g\cg9,ZĚFh `E댧3hSyƓU wDKq:;;ز7t]wxx@Oq|P3NLUITK9lh/Z8vsůwY%țH>;HVAh&9&֬nd9n@珉%m,yg~ W Hkp@ R,~MXI.B (L%M~|]*gIoo0"5b[֥ Ϳ;M# =rLU \Tyq!RGmM9iۈlj(\[kv C7z%<< ;9䓮$N5v9G{}AyQ!\PUMn; nQ==+iY@_#(RtƇhooj&M}r/qsn'Pt;4'PScdׅemKO!ʝT|8if\z"Ksko;Ζ%d[Zhd,GOW]]tvvڰ{4 n4=W5^.^Rl@G{[}m,E >݅ab毳!Nr#q鋼56@3Rw0\Dm-[VEMO 3>tzU]r ,G9c;k4g C:hkmX,JK,Z%v5 `{cm<6ւz_,6!o'=tt>.Ae9)jC]*9$Olx^U,TVkÊYd[H"JE.L`<7Xo%F[[+HXleI:`}"*YGep#n:ꤽ6Zb-rB51w& rslXP}P \F$hh^فaF07 +.^Մ™S\LJ=*]]tv06;Ĺ|7H޽>ΣT(gD,%7? {}dGN'1RY}t :;mU_ 3ͅDsƝDqc4A;G( ֟ }#iII2o)k֐Oh> mtuv޶ꃿ>16>ŋL¹PT&U}wre=ug G0t) z%OONM6E,PK)ѓ hv;E}brjD"i+%ew~= KV\cĞk;~ZWO XLӴM3liv 3eH$91S)e0&ʪ.dn&buZbYaX> l6K&%ɒ0MԎ He>^z)_H2 bjzg`y[H65+ ib)I)qƴX.LfUW& P,ERHfMb:HxoD1MP8+䨖j !j)LSm$;] F;GKH0PVݧI:0(jH.P(PԕP(,|p.ݫzk.MM ZOmFf dҤP /K+* r%5@*eIWB. 1~«ix4^Y4:mЁAaYbe5+orkjɋ6 7+3mbDb^6#QT@zٙ[Uk%(/d_k\U`bmT LrB>_\.z2 UVUdYAUkƖ]*{^2ԥT-J]u\f`ml["ͣ92Hyta(57 /޹馾8xW1-3_ S&E--˝Enoji/a):0(ιxۥ񒋛YYuZv 5NU`KDln,Pp&-15g7LGŲ$rX>x=RzoBu6Y).Qñq\jP6Td7?g_C9t`P$UFV,QgD=Z hM5m6bٰ'చ3eR,xS'*-j_lӲ2ao}ec&mȓvpX+i9ȹtr?i.$,pƆNa=es?kfcZ"N-ǮMbP6̉:87<(Bg~rDU|N;ϯ 0EB7I^k=|T YSQ7?_\(H;9:|3J[%!:9@M/. xt1 .d#sϽI]^͹|\[j˴G-/4^9o6s@\ {rܨN)M7ek8.ma8UnAG4!Ah&ޝ|84{Z (Ǎ$;~EP|T}M+Є.ۛ MBrc84{r4:VdTMpphvtDtƨi.|>[GHӜFaD6Δ|TĕkˑQբ]lu?>1a L)[ɳ+lsK躗dwC7%@=ON='5s ,4sL!WQ+p ,C8;t@A(Z^DCr%p*POAW$ yD%G%TLJ %L,z=%7SykV7H1U@]\5Mv45 vRbX?Ǡ88uMsK<sM4G88/Zb>6?)qȪ ppXco~ UF Yè`'O`Ҫe :s:IoP'E<ЁUun#&ɭE:=ؕ2RLLN15_sq:{Ҏ)nPY&%(OL?DK,n )Y/ܜPwpFf,/c*Ns}R$ 5(ةX]^]-ɩఎܨNgfB9l3::P#֙VanS'*1~ ޾t:{R@Tu=Slfjr!ఊ=|T|#b,_/^QYx6ReHLLNawI;vH9ɲB4WN*CcS~q20v 6۴"w_SK߲+ ;Q̓/=?~ϽIT0C6w3 dL&4W8a9{5y:I*Z/ki:0(xv%EWgn΄wq!cEZ#ֈTΦH:y0{O(+3*pd>gIeEA"L. i ǷfYL3E.[99`} IDATN_xOx#!Zdb+Uq(Kdٕt|>O&]{E.|[2|%HQ?o|qNa"#X.3%d2$&lA/)z ŧySjӿ'F>'DA?t`Pdd?#jmr(uz;4b'@-+V vd<Bm>f#1\v T ]JbSD"%,-dZ|%×Z2t xzX ?̓/ <؄X^3^LZ"i./sB$g`)w^e%#W5|O!nNHU\/HMy+!xƟO#6cEw flrܲy I'wf1rwb]]]Gw%-^;l}HA_-& dl%0a8Z2C)n,6ǫ -vW2EX]$p8飺+53=93JC~aWA<#i^sAjd `<#atoͳOiӊR%ͳs6̋<ǒӈ$o; \yt:>Ng#o\^#XVo))mÏ֣B!ntE4D<(4iDyzq=Fߟz*Q}d{Z;=i-vS{~Z$⻌#S;7 & kT 4"E(%_{|@t鮝sR2}S"oP1'f^#&0 }V:NjlL |ǞH$*4x(d)`x&^XzON']ڹ֒.%Sw}D䃫`•QP{|9b z9 8QUI޸PgΗx}MCtpSE"+AӒ[%ƴq_r\wJ->qlз=)c{lOohE슢: c>N1K:FMe210dxW+da"0PڲΙy(?YkELE;r 5ox) k8~z:لnnUbk)]'O?Լ ԜlE7ҖО-m i򟎞HM#zZ!?ANل?hH{&$akx>ҺփĈԯPTUUQ[g $5Qzm9)>$s,Z 4碲|SIZnR܄^X7bV4]ur\3on\#-^A{E:"ǧf f -P>XyN&Ģ)ǝ(m?c-j癓VLiB(rerx12}M2ڀa> CȱOEǡ`8M>aɟN~qbvžIÇPep㖯VHkzd 䡇=y"IwF8/:GW(̟77̉uiE ]ɓ?(9,SN,wXi"_1eJcS,k NNgAr8Y0Qr> `b-I蓏'z޻eF=YD, 9ȱPb:I梵J`#Q7OӍ>|SKL;r2Lht*\DC.4fp CFM199c{᜿mI1mQ b>ϓ?GΐOC7r(JwgMt]ǭv7yw7yS9AgiUJ_F(}h͚a"*o%tT3ax)[哠KϿȞIFFe\Zov}YQ)&$3dnwvj8D\B!Ø|]א3ޢLzIP9vrF$;\Gj9~’bh孡Zy0Vs)pRP {<ҥͯa=T|'WyiUu +Jz8[8U99{^wG9%* "Ӌyl$+CANSH.~b)'r:?Wu=0io0}/[E_43X`LLo^&&)GecӖ K%J5ARL*6MXLrVV؞Ip]v?HNo;MWvpR+~pg7CCj-Pb,@Pذ6a=2pR-Rc{F$QQUЉү4ȏX#ؗP͐h&b]uڹ[~]gFq9ϓs5/%4Kot,S,6!S,C Fհmj:L65a PR_qRܷ$lfz"Q%f&p??6^HKjO !/!}۶' c9ke^,+->wrF(1>>F:Iq^s8Vlu] tOqVM/%E%&~#y3(||0g3΢.s@q#"dF-15sUkiz$HBA-nL4 UURw$] ޱnvQ091N\`+5m _K%\u\gG7"SV躎Sj|DHC.O*溦}!jԿvC蚆(X:W AZxxҥ1'+B]}Q&߹Fr ̫4I~${[$AFtR*kZ YLיީ=LNN0R.cAoP,E8co9)O3Ǐ&ZB)I( E]j=3g^Xڢuu/ NƠ,nͲ_- }#lczct$SSal}{(oc)k |L(2a C7>(᣶kkd2?UR4M^IJnj(2eE<Ȳs1p.E )Yz4)EWpkgg|l<pl{I}iK!; E8*n#SrV[5=a/5ߤ4[.}yiHJڢA[>j1͠s%! 8ϝ!7fnxH^Ea=d±ӈa:h&(K?;\{s n)[a~&&)S*0 K~! H.?)2>6mY!SVG|<5{4lFh$ں|p]Wa3rɯ8%Q_QַLB)FVTWۧ&Ztu͵w#xb~N( J266mYzjuZVj/M !Wе]Q/, ! BEs׎aVwJE7 AD@U[7pطo/w Ͷ8>ì jn .N Ti$ zK!nlr^E_C{GLcРtA崮qr9۲d3 Iwr.Y +Ǟɡz;!2xQ"^nwvx^ op^ݿzӠѓ|7+?aI{O*3uE\(4R[vŗBG6BjW `_=MIބI&+SdpQBkYBڎ^/%ϥm8`7bxi̠Xbl=+MPt .?rv{8DQtmn1QXtwD!S[ٓ'v'ڮt6nH~@w /R_IڴIZNS6 382\:d4Sv\.GcA.%6ޙqG~XN):W_ǝ8291LNN:Ύ^g c[ |? #J W̺8izտ=GMpyDoΝyytMCSAu|.GnIs9(6.%6'X 2O;lb=ab|Ri;%S;3Ǐ&Qq bb?̺(Q_AX{ma7fЮxEVaij:MQR|3[=CjH!xܼݞ|U`I5ȸ<}$ GȪCݦn~ǧb6PM a >.Ȣd k $;L7;>3 /. x-&m32Rfbbu)οwMN3I]nDG{UqVꝾWÜr6+˅DwjQ3d@єw5>IENDB`(0` }ty{vL{2wt|w+p=WZ\inpQw8x l X dFkI d}w {`,ejl`9z{sikvW>kimo}#qpq z`nHTQ@u`9R/%=Jtz|mE^L*k PF4x nlqs%_ey-}o`Cp"^bcl;p~ yFm7]+WwóLx'rwyxtfP~?+3DaWzzeV9YAZ< V: VM<JR~}u_C\9S@!SȨ 'æɨ6dK!zq]lV0Z9VI1ðGlG\{[:c[KlZ:`df¤bB~_XJƨ&bWCi]\:kfZcgi¢<`FXH}2 ptv^@ Ȭͪ7j\CiR+x|~s]H#Q7 L3 N>=7fT5&nO^=Q4H7O@'ymUũp6eKʨLIm|AsdFCZ^`ADE~MJMNmO}rU!oY1ffASYZyz\X@}VW`418X   !"#$%&''&($()&*+,- . /01%%2%345%%6178 9:;<=>?@>>ABC1DE FGHI@JC>8??x8 ????'? x????( @|R>|:x4l6bZJx|}gt?n$i dXRf{ehY>~|>ihnirbxmFsf^N}@vr2IafbS,wyNelF~_3O~pbEx_Gi {vAo\7ui{iE|}pUy#t%Y}!nzahgbZP<NJAlprtx{puw`p]I'Z8\9N1QLAX'npjpcIT@wo^thR]> knqk~,srZpY3^DreNQJ;Mw{~k`LXL6{uLa^VS7 Z8hifL{;u32e`SR:X6Z:j]Eq(#%fcR5eR1{N4 yzvlxc?2YYX\:E,=:3LG<X;^H"^#omVe:aMogTJ};?$ @6vWvyymTu_}t_N;P} fjl}kI tUN=kD|aZTG~^fi1u@Nnq{ ~pko|9^D*9Id  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQBRSTUVWXYZ[\]^_`abbcdefgghijkalmnocpqrMstuhvwxyzb{|}~bfMabbZUUKIaMMҀܠSFQDN[&T(+U?`? ??<|F?(0x}puw}gkmm@ffa^i` heZr9b noulfpZkFow0Y{l~'[fsIzb,kwItiS` i1j:tzwnu*p.b};ufWG,P<SJ9YG~o:|nSW9T6[BZ8G6\/N6 zp6pX; qcLR3ty{xrLf\HW6osvITE*T5W?j_JX9 hZ@Z:L8X\9:/i`Nh`Obtx{%{ls#qr`@V5J.X7cV>Zq'khL{7 6Vl;x:f}|qZyM=H}&gHt sV 1ebg_\U~kak*w;sLvpbz]CS9|vphl x'U  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd^efghiijklmn<opqrstuvwxyz{|}~?#( @fvpu?bhdigsGv:s-[to7ZZla'j x8bro\H&ZJ,B1wTZ@pdNm[;TA.YpgUT;klezV>V;lK^fP+^Q8x?|mQM4 T;l`6clxcp|~bbjgzjIKpo_ cl0u;{HjS_|  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdecc?PNG  IHDR\rf IDATxygy}k;{fZmɲllcccqX &…$d0̅Ln½w2!!Ƚ $!@m"KhWK};ϾT{^Wu[7I|sZ:Tթ>!Bd!0M0k! xWo7DE'(H}sD0H׀ Po! X5[MScٛ6i"<37@ E5ILM n}7w`41i0y9݆I*Mb#=)'n͢s->L;;=2"]ƴ1 C*Qfj3B^%!IXd+S 4z<u?{U@ڴg.gˍQAy m!<}s@_4hjU{D uHuȏ&)wc9YYpiD7zi0;#ӽE^x0eh&qnNsם@kc:W/\\Ha&Cϣ`R;cQ"CR&vP%5\C#c9 %GhBhQ(L-( !sA s0&#R3´v )ae@4/\Џpc15vkQ A$~x a/gσN?[B%|H)z1 B焨!DaT@fAҦ}cWu# ۄIDI(( r,jEW6Z]UDc9-1'V{TKr<| oDz6RZ z"١HX+?L@W0״IFi_Ig5hJP !?S cf.a??|`dACB^8ؑcPpxSP}jU]ϱ ɍQŸG YO/`#+~6G tM-D68zӲA:HoHsHwļh0S$n#ZO8drCߡmA2 Jڻ8w80"Dg"jeSU cU^xQv9G:{椇U?+*BTFeUqUƖϡ-0֛Fzj ܺO`jV~(~t.Tv~plӆyv\ѤMEijÎ`bYeIDhAo"}.AbJ {~+?HORH;ڄuyR7_ \&.W+z`Qʕ9f6/f}+q $P?'c }3$0L BÌ.`9hBfzP3p&^bd.1̅M-e=N?W%7ZA(S+8R@ۧ+;x#/!tp/'б*6\ɡ!v1tru&Jc(" p:ӽر$ҍyrjz6]MtnYLośv^Fñ<$ >uUDS!;b͂@)Q2G/ z㯙4lZahJ1 ΛOt%u︘Q7=t1;.=7L,U5s=NGyk46(ʁ%PZB,bm$ZѨ:/;H'ra9õ8B.#>pqܵ !VΗ,Rm$[_9+S5af?ny3>TsNHRL/Wz%`nx細^9% a1"YBU i)ذ'ʺݷbMDᑯ]BaJP48$'n9aƑ^ԏxHׯaS$qvQ+PHxH;u݂&0p>bZVj 2(5H9̸;S\>6 *h-!ڤϝK>~-3ND]Л~yC!F&:S]4_0uxBUrP>,FP$ll+7N4'~=PWUTvRbvHQ:7wo0JA.¨1p8 C$|@ ԫd5M_`$KC y_l#hư"D'N|=4?`9ycxG6"L&s!Ji^J"m>r1q2=/Eizӎ mK9OV 0 #FkUAorWv^[4IHEv6?o>Yt?sJaT'=ukiF"lna4?&g&"c.q~D 87kcs>J.E<^[i\u 97'_!#ɍH H!]cAdVz׼VQ0w}1P$XјK%"Hi̹s%nM2x?A%Ԏo&9WJ[*OݝPHE{%_= )7&>TdK .hubGŽ0OKC9! ,fKR*fK Gp"d̨$/Vy>MeJh:R;MK(-K *@:(E7$v3v<}#HN3<10#6r+=޽.=e?JѹJ,gn >`~~og>?І\|LQWzjՕ{_y}r.#lĉb \sg;oٌyYԢ,` 4thf s/Uӣu$>a̍UyYF{P ¯h¸C;j_A0H*p ?vvzۻ0A{QdnބyT Q X;JIf0V(-ĢYq!-ɻP6)Vb$-Q;γoxJ% 3MnDo%վt|?ajys"ޫ2PBz"VXEO*9F}j@}%BGJϯ(,YV[OЀ7,[p'{=H} u-dhTK#aXt`~M7"BPd(~8|V>J"g9 Y?A}{e!f9ݚ.RQBكZ^teYs%R#jפ҇"qj `H1=Y@g'~L4Ĥl@ `鹑q #P}_} l"0yݬ[zxJY~/K$rcrm"h-@!eb t74(xAZu ]r[,g̒%(3#[.d!#\Q@n690(a}?Dyb!5!yCoOV4{=j(.72D~1ŗf<0='O Dyb6 1MiU>T߭q_{f<!t["D9`6Q`Sho8gR!GUi )-!3n!h./Gjc p\Yf"A,Lqo5!B#fG~۴jyA׆р"I = f6 ;zKÉig#p+VѸz?O#q1 =SzIݖ{]#U>qpDv AB#Tc ߟl|Ɩ8">8|]\@?T'cI\\urcMgC"5 LW,\g588l&dh2!I3BVmdu-گAR+gA£?sǢ4jKo9:U|/n\WuUĒ!3 ;>T*Vr?,45 jc)̅^_Sq4{Ab'(y^AuĎj~ gS/f!0^m!lhhjIO^ݕ _6 j9\0>ճamLߟӲ@ Bd(0~oEݻah)?LhX0ͫo YJI,d=9Mt]"X1;FN;'_r<~Sؑ<#}|Mit gt0a$p8GzQtޱ^J5]]kU^).W? [|ۂk+pQ'P4IQh80>7)l i( ]}ӦSPDg}o2[nj1#u4E$0pdM9>.M$[M7mևbv I4 "N`|@SfE߉K4߁i?-Dz % $gNǴ+G$U&-hf3#"2E_ũӍ "F@BmfkiiW!Z' #Mf?Zم+:g`b:w]Ni/N,ƺIb CYƞ3 M.QĊ"UaXocwjUl]V%Y{bEޏ0vƕph 2$i-SiR~hR|Sda7өY.‘G/wj/Sz);SzpzFz*.էV/ IDATu8eo C$6fv]K#v_ ;Hyq5,v'2h;]4bպ DZRSYs ϗ4Q4B3ȱ;.A@?O\B7S>oxVS@gz0RrE7#yZr;SV)"DRU m;1yT HrNaT<\ Z;c~x &8G⒄SG{dgPނk`F8J9,3"F♟мj-ֳiV9aڹk^݌aO~W9P&yؙA*[`Db6ʦ?ơGl8VTasM%N<L,]W|/suURΥVSf992d'7@o #ޔŎjYj01S@1@Pb쌎k@{l. McUFc"񔊒pL _t7*d};Odu *}߽w *l:'oR͏5;ð^3=HN?[&7@/)ܚOl|YʃFHSHH67`9k*xnht^}II@Q.ߙb7`WzXп"=reONJң{Vσ!`ʯ9t`˯lru tH6%r$IM$kP- XF5K)wO%}S}f}}&=Ѳ%P4%vpA$ 9i?@)$`s۷n0[bY)Uȍ0tr$ ZPP*sVjq(qL+K$YD +0OxUV2Q = 杍\y-֮PJΜp`N3sq|?]-:.[j! A4J#({̮jcQ)&iq[W y5|`K@߼c(]x'{) WAN9prl+hX0 #k!HV$ZJeJYE,&bkw]*gHWRH8htoJH׷(?DȤMϔW1ҝ%X%j0bbs0a١S3zʳc= e}밬+'|Vk,?=Bω3(5_'Qߏ~}/<h?Z?w wgظUұ˲1JlX5\ fйXrWߎaZE*<}(U4zĭ@t8 $jiw;ka&%pZ1ɶ8R^d)- *cC;UuߑZ zNS<&(";oj A6 ڀҴν5n}h0Պ&nʲl&b,~9 -З <>]W#ְXUriZg^r`R\a" 9JPOJ@_BSVN  1FT%PF]9Vg2x|(S* saf}}/(r!X$m[x+M%7]B˺W/xtO\jlmw Ns^ .:o֫71t6&4mb~ P^|>K;UA]4ʿH@H |Gҽ6!J"z[*i4W{8cl~c0/0BUYtW3x~=E=K#eJ{ubALgli VofcʶJ: aީs/fEF͹}VP~=C?mH&]Uhx?Ȗ߁= ≻zelB]`ROk^E.E>{b'W$ʹ,zQI."qj>]8zB&3F~J#/LMOa`N^<q)4;ϾYgD;?F$v"\z}3Z5fN7_ 7ujZx5b qR5d'Nh\=& n!fuT!d oLܤ |?T'mtt^ށَ s|VA6Ӏ׃(o($<#:gYcֵXk|Ta$0%h̪mh>Y'ɹ!!3.e'b E>?="z^ x=('fKv2g!Dj աe]I È"{Nޏ6B8A6[:y%EK6^{AC3Ӽ5>0۰.!hв6I"7 J=AeDH-|&%5PnFn> 'I D (~2N'?鄸@;  tW*D T߬vN \anɠ;Va\l:4ֹے ހ0$ۊ\ $;ØI+\x(caZ}:SBzjЊ2$KrQs ct0dqTD0- }RSZ}d}jOoyfZj+نA?6 bPb#a}pbT.cG`XslF"l \,0j  }㳣!쫫Fj׍g#,İ,Z:gO ',C:ɥe4>0J^KdP%ZP$P`O-ҳ @DbCԪ]n'kEzq$]Ֆ.2cה D<ОAA1É(V>6u꽴]VzC =)ñtJn@iNok'زj@%|(pBhA,8'ӗ#ӗ]lXN L̪ٴٍx~JAe1jS`%BkL%i(Ꮲ`@$>BWepq`r)׵JqkY:v/e ЈBDQJМGdE1Fb2]!$Eb:h-BxWy`)۽~*` 8ȫ}(h)n(O0ɉ=1 i)1q#$Z)^Qvl Z6+&(_l_D٩'UɿH˒TpbZr ؑ+ 2d ;o@nSfͅKOTjf޳'6,{Y(*1[@!XRFH ݳW{ur7$&[8J'GMU?A Wp~ kִhī9js+dF9Wtg%'҄=L~O4n@AtvR; !r\=j+IüdpxB^D7Sw8ietMIO׷ 0\ 0mHَtm<7 x#B\uv,)T7??BɤD%ؒ `pvnAT226G0XYi6 bƭukqZ[ 04؋RICsw`S7`ɍx:۽% 0?<}f3ysw{֢c ([ (jC5~P8^-21aeIc+yz(O5@2Gջ VX2 `~!; 0IuQQ*V+1 #l!]됕&]z)o8mmH7R V (&eC M$3CD04D4U#݃z*Z~@e[1w!Mx9g]w#^ĕeA;`{iePjo}'"`CH#T;qL^7X~*?ݴv#[g5|/q9q"oxL8 =| pٮcHNqsqR:HOjFفY|uzVeB 9s &Da.y @skh[aLk.OӜ91o(c!:DrzӾk .Jcs#]'r3k< aALH Vxq8j( ?oW |;aaQ:´@4tqK;=D)G; m(oj'ڊt|#B\?_G ~v ꤕ45ؠV"D# ˆ60_~ c|-tі_|U۩VU7a7c1q4_^DC1: ƴF<罘f+Waw/ijCe7bAHLψH~zW{dͶ>J$rMBcKDb08F'AJ֕$Xēkrnƒw3ۋRO@; EwۭU"s؋ l I\Ϟ6!(!DU5W^?tz-+䩖ՏY79Y &; Rrk'wSF0 hBjI6S499½8SEV3B8< p f4ʹ"bE])%١GYk}|SV%` =)Ͼ.] i[%C]KVӬ! X?Gi颤$JxtR!BPDVλq"řn)%'j|{Ϡ^u6V?!?WF 00m;wm(jd+GJviϵV I!Ĺ8\7Wae .x $}OZofZnEz&RH&3q"kO8|GӨ]$>J?ṢV BXY|9`O$W°Vc cCzQ9h'ASV|iT^Jy9iN1ǴH5[I5{.]vJXvӚyn&%L=aຒRírhrEZi_'x-wX `}(C?K㪛;A-Fb'L[WUfR6}?akֿ;rټH꛺C4 1IФr@ϦC1qf3(E= ص ZͣMX+DS 01.\ӬCzRB&O/Hi8ĸBxk*WxjHZ5IXb.:SZ18Q. רUjor%oJP .!7a^ ` jZt}em海<8<󿯯gp EHѦnY(k;qǷ8:NGmJI*NڜQIe;Nؑ-˒cVt٢$)M㛗$j zy1xGБ!*}LM]GR3kPZNpUWN 1G+q2JU0qqNÙ!5"%-K27"_0i`Ej!Qu(?->'ѦuSKd} q (uxn-thgfG8\$,3>\p>HQ! -r8#~Fxu~p*vpB}|C?KSԒpO[ 7MpF׊$ٺL;}((QFZ)O:^hVC\|ߜMQEa| &y"4Ǔ]0:ç+OT_%/ v W(^" `1` WuN\K۪v| |_o6v ӞZ6<UJhK4\J# ~`T&J<6!Gˢ[[)I~)s in/C EG=" `ʍ'^CCS( ; 9̵bCe+ʠ*(jF9_B/0HZv=[ _6\+Ab$Ji4LI~ hADb1MR*.)D8]Gn ?gW n&[1-@Q7=Q2)lL"{F=N2ރa?@0aHz]*.՟0)A1E4s9/+ÑzG#j%v}sgfj,g5 rt. sX\>r+&7%A=&^f0VŊ"YI8-{ӂ\n%Ϲ d1ZRr66Ty`ɡޱ';C<t 67y/8X, , 'XjD%:doǎ`)I=װ)9x @>9*)ɉ<;f2Hqύ[Lme+jE@K 1t'w2{V)zDX|%ۀn6䍿r3m=בjۀ[3 X$a>|?AgxТ#,-Hst]a }ZF\v_BĒ]zI#L,YN8k\k7xE"Xz@n Ie; DP ,g%WTf+eYUIv}@@^׈fD I^rW)9|MpMliC6Ǡ+#t u:τKr0"$V'\۫Ƈ,KlIҽӪI~`M,"XI/ZKaqm`Z%`L[V%&"a~ _5Y)S-Ny Dǔ%l4s0b孟Y[W V)6@\o߃8ɧ{~- <0iyVӉy&R-0r ] q ", ~w-ncm\sWi'0gU ôWʜ3J 2_@/hXDp ;B"^] =%A0E/<]<ߤV>~3qLg9=[:e@ bL""s@bvVW~߷Sh]4k}DZcƹsl s w|l@ Q `v|,[fcHf#u@M{s gTyox|лc x$It Mcsͩ8("a A4J_ckv%)O5%fSo=,[s/vQ;& SFs C[ yPT ɖa` ȧ{/OAKxs+:I@i %lkp=MJ0X1M5vRs$/K,I"p/xnk7Mup/G'H3">{p@^,J>s/‹<̣\,.oh?Mzzh}ٯԀƚ稣7 z֚ =J%F"{=2gв~q-5ϕl8Ĭf~lN'2O|u/Id߈l0,:[Rlڙmɉ=' a)nZ]*i>MzC}h}kd˝X sBeNp>ZE/b3OȺ}לDt{ji w!As~3C8!uUN>I2Uex^o]Guchx^+ml\x__@*z? @[~6^xObJ% Rsp%}x<)k'pGgEDCj8^P|C͇|6L*,#Ik6 Fq_A4䜢`}05$)yw\X;!r x9>ʆEBu' YVh=H`USZtks1;t, ][?+X,禚崙 %X@o\#"sCH@vl! b%xkc$l,Xfu|V1ݻϞ@B#2XzՠkNq3 ;|awzjV-et]~o%G~rXRj<&Ҹ^)N\͸ }Q)Msnҹ PF|}cE $=^a߯&pC,ZFT'YC<~+]~0*]Vìq7\ S@Wu 'Mm=ReĴކafbzť^e[ノLFz2Ж<c]iYaO9k2w^xf@npsҕJ>I,Zv3Fj}0a4aCh2( 5NvZZ?anR""-aJ!֬O<1U^DYh2A2eVaF'ю8ؔIX+ e:hLȞg-+_0kVӬ1ڷ XrHi)")VL{Z;vJm9t Gzr{O}Na;`; w$°vTnDy A'"IDATd ߛ=@&$0,9I "W>AG҆Lv]r]ir]i&+<89 ̽[I"{nC2wS~_|:(YB5}(kPטAy VI:T&N,CXwa=wY-z_C/# k}RYb89QA[c:֤/<*1"` b*PdxT *G{zvMwPʥRp9iPuT{lٚ-+Ύ@dG؁2(5 iT8Go$M‚&/ͰTbbOzʹ|3ߎ%0s>Б:96OL5F"N O'=xY$|nNJL30whBhO ,%d?.nAvOĴv+'ޱM ;Kk(iq;;qwe'hw!LtӪ }3)2th~/x$`rRt]數Wb4j6nݦQ܄a~eۿFͣZlз}AGp-?[~a5=or>xJ.+W',,J3""9%w/ff=.-3_"w0$T7+"lIȮ J)4 D<"ыE 9lGOmUAFa6,k},bɵ(s'>:Ss(qO61>y &L6:ws}cuN0A#Cn֦ z ɡpmXf.#WY}S&<}/md\Æބс– q8V4^ʜۧ}~UCJ3%׽k5=[.t4HF"wc3#Z´ :׵ 2Bmo'_r> 5ѓ i3#KoLYyRR&=7kt֢o0)8x+]T$cX1|*uJ.r"}izS}&lA?**H\r]pq~èP-7®oB;?cq'c}>ycb<?B戈  n'Bm d ǧ~P3y +x]}x:Ū3f28'*sQi.DSFA4ZKc__V=rʭꆍNzw0/R)@m>a^X@1zEL'c_BoVD$zu9O/~M໱ Ų5]\Y/g!Me*hru7V|}?;JJTeuЏ,5'y9í 39T0 do ~)R75˖ RźkV-yuDXmQVA+g {1<7ٺ5kӼRnp*n}ϛR04Fлͬ #2,L_{b'?5(IkzA?DjAX DJ_ M@FK㦴-O7|i?ԍ8I2_hg+zţ8wB.VxǞCOy.hYыR>َ-8]@Oajʨ2|t'225S0AЅ@BAzxP YXJ̠cxn K{:x{J-=2Aieʌ,7S0 'wU>Ce'X8m=>aRZ`zz ^/ L0 #,)gRBx~ށ9dyB2c -NV:xs'zg +ML*JP K@qL-ѓeEt| uVnMHdV=3gPf '9+8% U}aѐQ?Et%"M8SAP,jZp/{V ύ4{KXNu 2kQ؉$ɖuرg+\,*h3UCdD&L{r%+,${D R,G50 dXk/m+oGMiOW՟g5b&aǾTfx T ʠ(5I"F!!.zYY bc !T t6bxJ^ob nYpIC5jf BxS/ ">"/RS07!D Q"9^]V*RJċlPs75qsdDXjBGx45i +qHqݣ<Mk7$H]4(-VWR UK>l5 LMA. ipq@t.H}Az=s*qImϳY21RnB.<<7< JvEYDP+Tл,F ыD@Rp!/t _&$ R@$iG)35",K ½;^oQe@BB dO-zxpd/D!fB?K5B"<%̲/Zo>@B2|zB#FE E!%;_IENDB`(0` %*AQZ\aij_G+ &6HW8mZ`ĨkjkyypޘasI](+D]wzNViئjhgg|O\;fAa}~sgB~16V|Ocrzsgkkiew{~vQP3i~~[y#98$_]mӧjޛcܠfkrs~~yp^kD}Os~q='٦j~~];M  -S_jƲq߰pܴsӮnlQv|On}Ol{NozMr}P{jw~nD+̋Y}k)t~es1RktлwlbV7T9* <&?\xrb|G-^~y! R44i}u\xG. <&SyvKzuzzNtJ~{eOtVI+ qSTKuyMuK~oktO`6i6'uhd~YG eWmrz1$6W}\E C+axmZFpr9$]  =mp7#M!xP 4!8sh: |O;raf-@cxyhF  #8BCGTffP3A" 'i@(N0V5P1J.)t0:ivxyxiTj8#pU5\9\9\9\9\9\9>&{& ʨɧָá˨ꛁ%OCS3\9W6B)=&>&O1\9[94!VbQyyU>39bRZɧUFR<%k\9Y7+E;M0\9Q2   $xdaQCC N0r[8P1L g\9Z8&09/KƤ毑m0.g\9\9/3mʨXI8B.\9Z8&&7ABG¡oM;j4 T4\9R3`~i\pi~i~iwc¹S :p6!L/[8\9X7.+ɧͪͪͪͪͪͪ:U9#T4\9\9[8N0f* 'DPPPPL4  IM0[8\9X7F,/t= ?'\9Z8H-!r5 -iZ{N"0Q2\9J.   *-/SZsrI</U5\9C)}@S=+K>76Dy1?bmkDFR3\9L/ jStG,R35!TG;{^+ $So\˨3D,.mmGcr.J 6!X[8\9N034 J.\9\9<%Nţٿva|]D9>T.&xɧT-gXh)>`w\;q(D*y[9\9\9\9\9\9D*JG;>˨ޏwwbqâ˨"PrIduZ7hB{~WH /ML/S3S3L/2t9 (keɧʧʧʧإ^Nd4*hmkOn{'%)"#8CDB9&=wjK0r|kF|n}O~m0 >|}a>D+|}c?s'#W8$c))u~uM1h~vU6}F%  ",3RNpgSWk|~ufAd~z_H.{f[QIA7,).9ELU6VfqhnvK9 i|~}kZ`w|tlޫm٬nԮoϜcWX8uo[mvѴr[eK03 ~Pbs}~~~liVkdSU]opzzs`E.  +}OcjoĿzy~~~|yzsҬmarIiC/  *9IQg{NpzMrmEeMA6* ??|0??  ???p???( @ !%(  2vKiY_^\vK+f!NL0yMZӟeddXSf{c@(0(?(gY_hoirjdaximFys.D+YYndܡg¢gY[Y^nʹvxLbnjC~R1#{Ndo_iCd4 mFcrE,qO2ܼxdAR(ej\^.fqb>]hP3vY)c! sIc_W8|O2 ?(Ah֘a;!Rn3 YbQVzh7#L wK]me26/u#!VkolEkDx' ?E+Z8\9\9M0"賕ⵖⰒn"B)[9C*7"?'X7M/w~M@c;5r^gɱ5,U4O1Q @(\9$g , 7"\94 CQC <N0Y7 aQIr_lZjXo!0%F+X6X7<%&vεԵԶҊr'B)Z8W6G,&j %e@*j[8H- p xL`d}b>+C*\9*+KSJ=6@ RDa{,uJ4-X]./6!S[8C* P1J.ze3*F8G;㝂'W7N_8VhDJ.[8Y7Z8Y75!>46xq^ua~ӿ}<iX8C*qvE,/PF+A)"Wq^RTE]^S}lЍZdsIzmE |ODZ~Qo/ d>'ZpvKsI W/{NN1/kDt%z_̆U {N^/W)UrX ^9#?'(>3ZKiWcKK/" GS3Q2N1Y75!(Ɣ{_O$E+xR3 a@'R3j fTMK>*4 W6q,;n[y#e8#T4H,*dS+ߧ* 7"T4S3?'5 9II4qH>CW6=&>  &9XzMW@[8&T2/jk K[Lk)V}Ja];v M0V5J.X7:$o\7.r^w%XoFXX=&hE+.mkYK^Ne k^<od@ mßebf' ([:KTTnFvKU{lkkWR̆Ud@0X8[YTc3 jCGjvuppffdϕ_T6O!2 ?c?YU6V<'??(  @@)F_=qM1xG M1T}OXhdigjD9$*UZȍZ\s]ycYZk(xLSV:%'vKcqHϡf XsInF|OuxLy+UE+=&@aQ5smU< O1=&J.@(ْyBdSTs`PbQ./5!J. Et*IH-M03 b|| ;%#rHFN08#+"#UG:mEMJ/PSB*M0F+J.L:xL?TF}|zenSޖ`;&i B)b<%gt`5_OC,jgQ4C*0tJ5ipoYR|OŁR{O~P\'sIA`gaSi.0A3SimGrid-3.10/doc/html/group__XBT__dynar__array.html000640 007661 000620 00000076171 12242224150 022527 0ustar00gierschand000000 000000 SimGrid: Dynar as a regular array
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dynar as a regular array

Functions

void xbt_dynar_get_cpy (const xbt_dynar_t dynar, const unsigned long idx, void *const dst)
 Retrieve a copy of the Nth element of a dynar.
void xbt_dynar_set (xbt_dynar_t dynar, const int idx, const void *src)
 Set the Nth element of a dynar (expanded if needed). Previous value at this position is NOT freed.
void xbt_dynar_replace (xbt_dynar_t dynar, const unsigned long idx, const void *object)
 Set the Nth element of a dynar (expanded if needed). Previous value is freed.
void xbt_dynar_insert_at (xbt_dynar_t const dynar, const int idx, const void *src)
 Set the Nth dynar's element, expanding the dynar and sliding the previous values to the right.
void xbt_dynar_remove_at (xbt_dynar_t const dynar, const int idx, void *const dst)
 Remove the Nth dynar's element, sliding the previous values to the left.
void xbt_dynar_remove_n_at (xbt_dynar_t const dynar, const unsigned int n, const int idx)
 Remove a slice of the dynar, sliding the rest of the values to the left.
unsigned int xbt_dynar_search (xbt_dynar_t const dynar, void *elem)
 Returns the position of the element in the dynar.
signed int xbt_dynar_search_or_negative (xbt_dynar_t const dynar, void *const elem)
 Returns the position of the element in the dynar (or -1 if not found)
int xbt_dynar_member (xbt_dynar_t const dynar, void *elem)
 Returns a boolean indicating whether the element is part of the dynar.
void xbt_dynar_sort (xbt_dynar_t const dynar, int_f_cpvoid_cpvoid_t compar_fn)
 Sorts a dynar according to the function compar_fn
void xbt_dynar_three_way_partition (xbt_dynar_t const dynar, int_f_pvoid_t color)
 Sorts a dynar according to their color assuming elements can have only three colors. Since there are only three colors, it is linear and much faster than a classical sort. See for example http://en.wikipedia.org/wiki/Dutch_national_flag_problem.
void * xbt_dynar_to_array (xbt_dynar_t dynar)
 Transform a dynar into a NULL terminated array. The dynar won't be usable afterwards.

Detailed Description

Function Documentation

void xbt_dynar_get_cpy ( const xbt_dynar_t  dynar,
const unsigned long  idx,
void *const  dst 
)

Retrieve a copy of the Nth element of a dynar.

Parameters
dynarinformation dealer
idxindex of the slot we want to retrieve
[out]dstwhere to put the result to.
void xbt_dynar_set ( xbt_dynar_t  dynar,
const int  idx,
const void *const  src 
)

Set the Nth element of a dynar (expanded if needed). Previous value at this position is NOT freed.

Parameters
dynarinformation dealer
idxindex of the slot we want to modify
srcWhat will be feeded to the dynar

If you want to free the previous content, use xbt_dynar_replace().

void xbt_dynar_replace ( xbt_dynar_t  dynar,
const unsigned long  idx,
const void *const  object 
)

Set the Nth element of a dynar (expanded if needed). Previous value is freed.

Parameters
dynar
idx
objectSet the Nth element of a dynar, expanding the dynar if needed, AND DO free the previous value at this position. If you don't want to free the previous content, use xbt_dynar_set().
void xbt_dynar_insert_at ( xbt_dynar_t const  dynar,
const int  idx,
const void *const  src 
)

Set the Nth dynar's element, expanding the dynar and sliding the previous values to the right.

Set the Nth element of a dynar, expanding the dynar if needed, and moving the previously existing value and all subsequent ones to one position right in the dynar.

void xbt_dynar_remove_at ( xbt_dynar_t const  dynar,
const int  idx,
void *const  object 
)

Remove the Nth dynar's element, sliding the previous values to the left.

Get the Nth element of a dynar, removing it from the dynar and moving all subsequent values to one position left in the dynar.

If the object argument of this function is a non-null pointer, the removed element is copied to this address. If not, the element is freed using the free_f function passed at dynar creation.

void xbt_dynar_remove_n_at ( xbt_dynar_t const  dynar,
const unsigned int  n,
const int  idx 
)

Remove a slice of the dynar, sliding the rest of the values to the left.

This function removes an n-sized slice that starts at element idx. It is equivalent to xbt_dynar_remove_at with a NULL object argument if n equals to 1.

Each of the removed elements is freed using the free_f function passed at dynar creation.

unsigned int xbt_dynar_search ( xbt_dynar_t const  dynar,
void *const  elem 
)

Returns the position of the element in the dynar.

Beware that if your dynar contains pointed values (such as strings) instead of scalar, this function compares the pointer value, not what's pointed. The only solution to search for a pointed value is then to write the foreach loop yourself:

signed int position = -1;
xbt_dynar_foreach(dynar, iter, elem) {
if (!memcmp(elem, searched_element, sizeof(*elem))) {
position = iter;
break;
}
}

Raises not_found_error if not found. If you have less than 2 millions elements, you probably want to use xbt_dynar_search_or_negative() instead, so that you don't have to TRY/CATCH on element not found.

signed int xbt_dynar_search_or_negative ( xbt_dynar_t const  dynar,
void *const  elem 
)

Returns the position of the element in the dynar (or -1 if not found)

Beware that if your dynar contains pointed values (such as strings) instead of scalar, this function is probably not what you want. Check the documentation of xbt_dynar_search() for more info.

Note that usually, the dynar indices are unsigned integers. If you have more than 2 million elements in your dynar, this very function will not work (but the other will).

int xbt_dynar_member ( xbt_dynar_t const  dynar,
void *const  elem 
)

Returns a boolean indicating whether the element is part of the dynar.

Beware that if your dynar contains pointed values (such as strings) instead of scalar, this function is probably not what you want. Check the documentation of xbt_dynar_search() for more info.

void xbt_dynar_sort ( xbt_dynar_t  dynar,
int_f_cpvoid_cpvoid_t  compar_fn 
)

Sorts a dynar according to the function compar_fn

Parameters
dynarthe dynar to sort
compar_fncomparison function of type (int (compar_fn*) (void*) (void*)).

Remark: if the elements stored in the dynar are structures, the compar_fn function has to retrieve the field to sort first.

void xbt_dynar_three_way_partition ( xbt_dynar_t const  dynar,
int_f_pvoid_t  color 
)

Sorts a dynar according to their color assuming elements can have only three colors. Since there are only three colors, it is linear and much faster than a classical sort. See for example http://en.wikipedia.org/wiki/Dutch_national_flag_problem.

Parameters
dynarthe dynar to sort
colorthe color function of type (int (compar_fn*) (void*) (void*)). The return value of color is assumed to be 0, 1, or 2.

At the end of the call, elements with color 0 are at the beginning of the dynar, elements with color 2 are at the end and elements with color 1 are in the middle.

Remark: if the elements stored in the dynar are structures, the color function has to retrieve the field to sort first.

void* xbt_dynar_to_array ( xbt_dynar_t  dynar)

Transform a dynar into a NULL terminated array. The dynar won't be usable afterwards.

Parameters
dynarthe dynar to transform
SimGrid-3.10/doc/html/group__XBT__dynar__misc.js000640 007661 000620 00000000665 12242224150 022007 0ustar00gierschand000000 000000 var group__XBT__dynar__misc = [ [ "xbt_dynar_length", "group__XBT__dynar__misc.html#ga3beec123eb77ceda5b750f6f2ca48e18", null ], [ "xbt_dynar_is_empty", "group__XBT__dynar__misc.html#ga57aab83ad4ff1a1df5a1c293627c41d8", null ], [ "xbt_dynar_reset", "group__XBT__dynar__misc.html#gadbe6a462084ca281bab5ac3a1585097e", null ], [ "xbt_dynar_merge", "group__XBT__dynar__misc.html#ga92e52b3898cb02ad47244b88ab7895e4", null ] ];SimGrid-3.10/doc/html/group__simix__process__management.html000640 007661 000620 00000121354 12242224150 024554 0ustar00gierschand000000 000000 SimGrid: Process Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Process Management Functions

Functions

void simcall_process_create (smx_process_t *process, const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart)
 Creates and runs a new SIMIX process.
void simcall_process_kill (smx_process_t process)
 Kills a SIMIX process.
void simcall_process_killall (int reset_pid)
 Kills all SIMIX processes.
void simcall_process_cleanup (smx_process_t process)
 Cleans up a SIMIX process.
void simcall_process_change_host (smx_process_t process, smx_host_t dest)
 Migrates an agent to another location.
void simcall_process_suspend (smx_process_t process)
 Suspends a process.
void simcall_process_resume (smx_process_t process)
 Resumes a suspended process.
int simcall_process_count (void)
 Returns the amount of SIMIX processes in the system.
int simcall_process_get_PID (smx_process_t process)
 Return the PID of a smx_process_t.
int simcall_process_get_PPID (smx_process_t process)
 Return the parent PID of a smx_process_t.
void * simcall_process_get_data (smx_process_t process)
 Return the user data of a smx_process_t.
void simcall_process_set_data (smx_process_t process, void *data)
 Set the user data of a smx_process_t.
void simcall_process_set_kill_time (smx_process_t process, double kill_time)
 Set the kill time of a process.
smx_host_t simcall_process_get_host (smx_process_t process)
 Return the location on which an agent is running.
const char * simcall_process_get_name (smx_process_t process)
 Return the name of an agent.
int simcall_process_is_suspended (smx_process_t process)
 Returns true if the process is suspended .
xbt_dict_t simcall_process_get_properties (smx_process_t process)
 Return the properties.
void simcall_process_on_exit (smx_process_t process, int_f_pvoid_t fun, void *data)
 Add an on_exit function Add an on_exit function which will be executed when the process exits/is killed.
void simcall_process_auto_restart_set (smx_process_t process, int auto_restart)
 Sets the process to be auto-restarted or not by SIMIX when its host comes back up. Will restart the process when the host comes back up if auto_restart is set to 1.
smx_process_t simcall_process_restart (smx_process_t process)
 Restarts the process, killing it and starting it again from scratch.
e_smx_state_t simcall_process_sleep (double duration)
 Creates a new sleep SIMIX action.
typedef struct s_smx_processsmx_process_t
 Process datatypeA processt may be defined as a code, with some private data, executing in a location.

Detailed Description

Typedef Documentation

typedef struct s_smx_process* smx_process_t

Process datatypeA processt may be defined as a code, with some private data, executing in a location.

See Also
Process Management Functions

Function Documentation

void simcall_process_create ( smx_process_t process,
const char *  name,
xbt_main_func_t  code,
void *  data,
const char *  hostname,
double  kill_time,
int  argc,
char **  argv,
xbt_dict_t  properties,
int  auto_restart 
)

Creates and runs a new SIMIX process.

The structure and the corresponding thread are created and put in the list of ready processes.

Parameters
processthe process created will be stored in this pointer
namea name for the process. It is for user-level information and can be NULL.
codethe main function of the process
dataa pointer to any data one may want to attach to the new object. It is for user-level information and can be NULL. It can be retrieved with the function simcall_process_get_data.
hostnamename of the host where the new agent is executed.
kill_timetime when the process is killed
argcfirst argument passed to code
argvsecond argument passed to code
propertiesthe properties of the process
auto_restarteither it is autorestarting or not.
void simcall_process_kill ( smx_process_t  process)

Kills a SIMIX process.

This function simply kills a process.

Parameters
processpoor victim
void simcall_process_cleanup ( smx_process_t  process)

Cleans up a SIMIX process.

Parameters
processpoor victim (must have already been killed)
void simcall_process_change_host ( smx_process_t  process,
smx_host_t  dest 
)

Migrates an agent to another location.

This function changes the value of the host on which process is running.

Parameters
processthe process to migrate
destname of the new host
void simcall_process_suspend ( smx_process_t  process)

Suspends a process.

This function suspends the process by suspending the action it was waiting for completion.

Parameters
processa SIMIX process
void simcall_process_resume ( smx_process_t  process)

Resumes a suspended process.

This function resumes a suspended process by resuming the action it was waiting for completion.

Parameters
processa SIMIX process
int simcall_process_count ( void  )

Returns the amount of SIMIX processes in the system.

Maestro internal process is not counted, only user code processes are

int simcall_process_get_PID ( smx_process_t  process)

Return the PID of a smx_process_t.

Parameters
processa SIMIX process
Returns
the PID of this process
int simcall_process_get_PPID ( smx_process_t  process)

Return the parent PID of a smx_process_t.

Parameters
processa SIMIX process
Returns
the PID of this process parenrt
void* simcall_process_get_data ( smx_process_t  process)

Return the user data of a smx_process_t.

Parameters
processa SIMIX process
Returns
the user data of this process
void simcall_process_set_data ( smx_process_t  process,
void *  data 
)

Set the user data of a smx_process_t.

This functions sets the user data associated to process.

Parameters
processSIMIX process
dataUser data
void simcall_process_set_kill_time ( smx_process_t  process,
double  kill_time 
)

Set the kill time of a process.

Parameters
processa process
kill_timea double
smx_host_t simcall_process_get_host ( smx_process_t  process)

Return the location on which an agent is running.

This functions returns the smx_host_t corresponding to the location on which process is running.

Parameters
processSIMIX process
Returns
SIMIX host
const char* simcall_process_get_name ( smx_process_t  process)

Return the name of an agent.

This functions checks whether process is a valid pointer or not and return its name.

Parameters
processSIMIX process
Returns
The process name
int simcall_process_is_suspended ( smx_process_t  process)

Returns true if the process is suspended .

This checks whether a process is suspended or not by inspecting the task on which it was waiting for the completion.

Parameters
processSIMIX process
Returns
1, if the process is suspended, else 0.
xbt_dict_t simcall_process_get_properties ( smx_process_t  process)

Return the properties.

This functions returns the properties associated with this process

e_smx_state_t simcall_process_sleep ( double  duration)

Creates a new sleep SIMIX action.

This function creates a SURF action and allocates the data necessary to create the SIMIX action. It can raise a host_error exception if the host crashed. The default SIMIX name of the action is "sleep".

Parameters
durationTime duration of the sleep.
Returns
A result telling whether the sleep was successful
SimGrid-3.10/doc/html/output.goal.pdf000664 007661 000620 00000227372 12242224150 017723 0ustar00gierschand000000 000000 %PDF-1.4 %ρ\r 1 0 obj << /CreationDate (D:20121031152025) /ModDate (D:20121031152025) /Title (R Graphics Output) /Producer (R 2.14.1) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 31310 /Filter /FlateDecode >> stream xMo,9>߂ ^^=50/GDTUGGRӕb/I&I/ Dz%//!W^b_{/\߿ý:^? /]wT^{7}_k^kono^Sj:tOt/5^x?c\M/948/2Ryx||J~.go7h-MMJrZ%59P+|a_%r~a_L͕꫃ % cEMvb~ unP!~!!|!S\_4 ^K-/uwt襇ߧ)/SL?M1|bziOSL_>~BʯMA5՟zh^?M1 78DSOw'~ϼαsrkRs|:)#d%WWW-7c6s^<DGJ^ܯ7~k e "Nx_zooL_x{&?+pvLZ,f^^(6XjPCuķZK6eB!_ 8ˍhUWMvO̫ف70Zoߩe~?@y A sہgX ~Ro3'>#>k|;Ig~?dQگmUjG}S(+ 5)V}ZQ^kߣ3h־GcfC7{ɪkЙǁ]2hZK|Θy3X7C~yZC7`_%wyyu~.y Gjj9}_Gʖ_} ໢}yy<d5JTQUked8&:-2Ik^~% St}^"xy*'O?a橈5>v>Ϙe?e{6.ۇhOlF 3 q2a&VV20Yx^Ui_'Ώ ]8'cd8'¼C@m#=CYcw#'KV]ut=G[4JDg= =ڪCЭPULD)sN[ 0|kŗ̷y@3egjKYF_oǶe mb^s+ƹ ߜ Kb~ q⠈W^"O{u:~1=A8+|W".OxE EqQ{8qT U{E^Q1=$.yݾ:m:a~|=ym>c5ONplҵǴN:vq^$osaa/U88yI- U{ Ĭ$nmO"@)bY; @qb'4qVWTgq4qT"@L@111)bb|q􊸂CH*W$$YtA'@I8ۑ bz roUA~5ly+W0"'rb_\I^WD .y"q⪈+xE|skqGqT::J:.vnyE|gּAo .|gf ֨^=jWjzU::E@8( N UPL7'"@a??qR .?*en [R-Avːݢn[\T+||zȱ|cnri~q}18)򄎋^#o݈o⏩ [?x{'0ěx 3GQO^/W|Ⳉe; v?cnWcwĥϖNjs#ܶ'JCfq6pp^5  _Ib*'ۋ 9۹9ģqǹ>Mq}W $4qmsE@̊Of'E\NO5"nq|)3 8"c1q|"A rW$ .*WxE+2 |ױ1A>& |T>. :&1)C>.,4qU @\W' _%~Wܛ{^)'rE⤈ݹBze7RUCt앎=4*]JWUU U bWxկ/UoBov(Q}eȻ^z:fEAt\+G fE8qTӑCWCĩϑ"6"m:`orc7k3䭚woyy9!A'愲~>Ί"1d63* 8@UȜн KoX3Cf I"@*Wr\zZ-Cv*-'tzW5cǒ(8ft꼨|͐5|͐A:t &R^C5U .@\qBOK^8A*0\*0OOxEbfW8Uws{)>ޘ5}[UPj"Ps|xS~諼*T* Ct̠:.JtU}W88^qȫjB0Fq0Fqj`BBQFFE\ Q[5{jٚ/;?;vvtϬ CN' N8؁;[~|=_0\ 7y+FݹL?׫j˕'qP\Q]+q0`ߩ9|sAjaa ̙$CpgV8X1r]uO0/WԼ\y9?eoٯx+a\/2;B8}w5q9I}uJ<ߞw39=o'h+u|ޥ_gɲdYFSysk,׳d}k+,M풜Kv.v .ex'%&-K(K*(K*ZTPe-de,,\>=1*Ǩy9#-A*dF*d)UqY_ K(K"%?eI>``.1^{/eX1c'=F sm}ǂ/}/UX@M}u?LOǪm$je}dI􌓨J/jMx/>*ݷ*^)K^:e lɒe?dm`E/K¬]N}'3u߉DN&'hfmmØ>?>}lYYSv =%zm>m2;.bٙ1cd'0KvI.I؅g3((Z_Q zdrrh..h8*n#K1REo)Yj@Y'O΢ ;,Yd%_DEME|?ZsN[ n1n9V;}&4[5oX Kb@\*z$.$.$.QxaqOE8qVm}5(g v@1oyE⠈WyŬp'qbbR$U$@8+ ^ibܪż T0'<每sjY^+r|*gб{c:@\11+b ׇ#qUFeNog?:v W^g zBV^.Y+Wgv*AvUv@8(bxwn~|A\"+< r\b;+* \Q!WT|Z^鸂8)'1+`~ERrE\QT(@ ߞO,}\HFQ=1ąNB&V ~c?&WTկ(Я(Eq?.^_ xu0RjU)v','s#H}ek ͽ7&ěxoM7&ěxoM7&ěxvWF>/}k1ǩ=~ePN)q-mxy7ڽ٦ܛףc=qn06l1oⷈsڇ1??A"WI8(-oI|\x춉ۏ7EX[/c<ތ c'y6;V\RϽKi3mzs^y36~k3{ q>~k=3"f O3&Y$MI87(G$t|,s>3 >cEAN +2xEO +HyW1tJ :f|1Wd"1qT^@L@L+Xi⤈=3"f @qb^{ .OE8qR ESٍU'z,K\!"v+"䊨rEb'qqQ:.:Ί8( O8*C0"U% ~gĂO+q}_QObkT t\AUBvK5||ov||*:JǙ7+ȽUS+|?3_)?v@ 5~8)~lj :q⠈Cv*qxWf{nod7o:Aͣtꘒ1AߍWT+P*D^UW!}W;+7_QYqUc1H?.ʏ 1UYo|jT" BPA dOby&o^bԱOf qjOAm%9qf9oǽ6=K5k ͹M7&ěxob v@&ěxoM#.m -=tH3/#|"mSx 8gvl/[YS{j;[akc>je! )n#K Zv(K(KZ~~.YR(K>E,Yeaײ,deAB60~<#dUc!wž | Ǽ |E##$dɊR,"`b?"W5Z>漐% Yg[6"|RL})c,IԗTQT,,)){B/h%xI"^$%x&'{F/K gk%E$da! YeLЯe)"=y^RœEK(K&!e3E!K# ϶lR]c"Xvac$`Nľe {ZYKvI. eqY"-[H}KgN-߯إabR]K6vI.I%$aDLD/QK4ED/ x!1y~|"r2"';~D!K4D!K$1%cIX0,ޡ,^7>慏ymYŋ9%o攼S B28!(&#~|1Yt&YXȒ,Ȓ,,dIY%Y%Yp?"󛜜EN΢M?9~r99DN"^ %}NJcEbXy<&%1DLV&Q+SP?`q< c>x9=.z<8@h3e;s5 6&ěxoM7&ěxoM7&ĿWٶ5`jqvnxJA$ʧDc\7<%Gc0\7ܹnŧl7&ě)b~7&ěxo+=Lo6wܿ*\昒~]/Bk=یsǶfx mWyp8O41+x\z |<1}[Y; @qb'~ W4EL@L~0qU3gE 3{ q1MW#g^gkxE~\!^1=  8q9瞻'qE oWQ3NJ1اx|ncym<ی|le ƹ0}(E) ĬU|{:=IbO'@\%q'z?,k>|8)b:.t\qR:.@+b:.o?B8(p7WW8qR "W ;E8 fsEP^8qVqP g'S&uObWO#kL8GqT:@1yy^<5C#U*ԼZAUB>#WF[+t\K7W+><++I}"!!Ww^o,,⌏!K#KAYz[䶲Dc y,7he.I%y%y-K(KvNNj( N=-Y/>(nkKv).ԗ`|, "'GIX.=Sv9ٛ Bm3xQ_HBFxQ_7b쓉}Q_ +nkSQhXy,L'QI}2uDݧ,x#!rՁ,XY1,]}h.ivᬸW &CnLxacN,.ǜcR=Yq[YLҋ}KoH?۞$!K2$azUcXh^__>?&juj|, YD̛SO=c&},Aq[3ED/KEx3#1vYVO%da,je62Z]Kv .%[2B.m[Y ~5#L;GE>jcګ~{\vÿ-˭ң,IȒ, eimA`d( 9e,)KVF1ee;,)Kk{2w8YKQ K?dNq[KDYCYf dAK`ֲK2vI( 9mdc$c$|̙1/%x&^1,deAmOY2NJb|c<`쿟Ǫ,ŋx&^,d&^12>F+n%oRJB"^ xU {˫k3/H2OVp{ ˭̂,IK2D]V[v"^/⥵Ve$da! Ye$dFFYGYfd ^Ške g (c (K[g",]^;xu=%lj8x]#wAq Ȭf⥲ \m"'菱鏱菱$Ӈ$EǢE]v).إyEAxao"X-ƾ(|, ǂ(|GH#a NJ~`|,{,| sǜ1G%m..]0BF[A%fKrh]Ĭz"]o⥢]K4v.QT](]7v.8ʌ|ʼn1rZY+1212ZɦV13< dje2L3Cy'bΌЏ{՗>悩/o^}Ϥ)YH,,.XNJ'O.By1_Xo1rAK$!K0vx!7x! mda3S+⾚՜v}_1Ws鬒#s\Վk,d)B2D!K#KDmdF dAά r6hdF'dA.A%2nqK\ZkKK+ʦ, :#!KµG[䶲$#GY^38|h{ʒ,<@cBod( <p\[ɢ4c^^Opvɢ4&!KT#KvI{yLp]D#x!7x! נ8 &&IAY`=z=qmN/X9Dzl|, L.dBAt0c9,e!voy9srD! Y% Y% YⶲLU"r2L"'d匀\DN.&'KR6^a`]wV' >̹e8vaѣ)= (%x&^($dIBddI( 99P|g6mh>ENv(z8KV?ojч b,X Vmx1}'0Na8чqAqO9~ɟOV뛛nI"/z}GShdaav!c}~I$b?O"d/r9ٛENxI&^b› /.r?bOfEbrr9I˒DNeA˒ʒ~<' c 9)})1"ɟSn}qjs;}6zztosa&ěxKٯe[ڕ<Ϥ~6^_t^K.MJG9o){OSsaeC ΟI|a7~ NحԱo?8qVy^^kxx_x~Sy1u7usN_1KpFNs#}q7|O^8kIgt^/ƹ0߰  Y瓸YA8IM|=?~xnx8*'8*b~+Xm"7K|o>~8+".@8+ "@\{Wk*:՞xzW\J?'toJ[<%U~b#WKW;v*w?8qTq\M|#'{6?nYJ{|6 -clY]Ztn9Kqozv9~#g'Y >i)?jy0tnҡ0tS?k'?kS~B|B|O'~B'$Yu/#~&oL~-_ݏv+'9>C WQ; EwJx~ҙ<+qw/A}ޞ8d5:T<3Oՙb橘yXg'c:d<$]; ; ; l ;; Yw2vR&NCNcb]VNC֝e+鲕DrA?i_ +IWR}@Ww٢>!>#>k|F7G{}W3Z|=\3g!$dB|Y>>ϙy^Vyvy0y3}Fg'YyI˛Γu`i(iȺqӐt!a!V:ᅴy\Z oB& *yYf|>0ۤV15 A_"$$oX5ĭA< 8דx -v I)9^?踂qpϑ "*Ux8)jY:J$fwρ"f:΂O8(/q1+"@:fc ^QW;,c;,#hE$# xEQ^Q0ĤrEQGIGrEQq|ǐq|[~ʏ q~EQ~ʏq?NʏqJ5cy۬YYzY6s7݊n%c\!Wx^ "C>*WxrEV"CO똔 8qCvcd- (CUy5CfU/OGc3蘕tLt =!ctA,qi&P)GAFٗm};c~cr+䊤r*`^QW ΂OnGY+Xyq|:򊊼DKyE1=QH+J t@N؁(bbbV LO{W1T骪4Cߍƪw$ܟʫ^O;;yvM;o71nbv&NUΚU?x??$YӀ7IϚs֔#_dՓi3jߣ־G}3ާg\fz2UkjPO7*xãoxTk!~ ?DxK/#Lo$Y}w}Po}F?r$}}ݲUW'[Vݲw ާ/>}I֟}8 tt8 o7U8o7THV4CYg;U)fWY^e* ޫdA㇗>.3`̀qyύ(3g>)Nt\fP2UW:SY$>Oy crl9,[רTFq#](Y$H \%HYt,8Nﲕ h?J S)bqP:@'S E\@Aib+' N8qbW q|""S|WTE!]H @q5q|JGwvk彫ɀ=|2|J |2mףcw[O6eěxoM7!OM7&ěxoMCwxo8dn"+_wC.=؜loȵo;/v&L}'8 Nj_|{CjKmum:^~{\6=A"! Y( 2wZGYe)e,) +n%Kۧdee^ΟѺQ8;'y~ѷ%%K[/]L},rr299DN&'CT&^]&EgYľL%%")n[+,Ng"Wv)N#ڥDm.)n;3ỷ0} >+nc&Uj@YjвT"DzcYlXy,G܅c1'؃sV,js_:F"^*1r2cdvvB=JEL}o0tR,.,PGZG( Ƶ,=ydQɧ,|ES^}un!'WQӲ8FYDNm19\DNm̸2qeMGI+WWz1oͼ~Mh3mKc^h| q⨈#oC|7)q|[y'W\=kx|uu:QXq,Wx8\qnNJZqrkV]'6o89p8x8imOy8ԓx{ߎ!t|=xoM|q⤈&o?: :ۏGxo❏zWp| ߬m7?1\_dzͷs{Fs|nܞӜsM<׿7>M&ܿkL ibR#GE1)tzOxq;Ssʓ811)b|Ͻ'Ob"@&Ί8ĩE* ΒW @q8}|ǿƏcQ H㢈 W|Wyt앎EgzE⤈^q=?fES#"vO cbV|_OǟI8*-z;uNy+{8q⢈ GwzB)b~"W0xS^ A]+.WA.*ɶ2ҽ1*pȭw3 ͂v4ݮ|p4㨑 57+zK[ygX^oX=OVpߒ,YȒ,YBddB(dF(dNqY~]|ѲĄDBY"iYS- B e K?dimӲxv.ţ,-IYKV^G(q~r,QK0v .B]Kv).E%*n%Kh!Klo\Km<~/3-DO}D6ϛߞOKTm%]y x&Y؅]؅.L+B(dF(,Q,dd>*cU1z&\>e9,r2<&c%Y<ڥK-.Y%iYr!K0%ms79,|ǰraɧ#F[,IȒ,%e%ZLLV}Wc֫6r[Y%Y%Y,N22ߧy,<řL"'2B"^HdGJD+}c],^` YR/KTF,9x99 ʒ>DN&'}ULߋ>}~o^bB.Y%daRǂ}'d1oc^ǂ>,?D̙#! +n#K5}}}2}}}j0EŊӇ)SHq[c.]ٌ+ Y Y)n+ b}2?ϔ,,Nd?śy(}L,Ay/$BB2 9mcoE2ZMVFѷ Ȓ,b,Ff,Fb,FIqY`1wb>l.b@Y[Fӷo>]X,16>.b,X̉yaoQWݻ r=Zh%shk q3یz{ط764M,>{hh|kgM7&ěxoM7&?RAqgn#Sh۱M-_YmWֵqa;'<D"yǼcJdR.>+nk2>}XcǪ("lb?Qq[YLNv^"⥚x. YLNea/lⅅ]P|.e)e)ľ}gWaѷ̦oE2UEah"zc}w}B8'c 1\ه1E})S_/fObObOfObO/.إ,7a%YXFm'yLbKu<Ɗbb? YYDf&y,ab&vqFx!7^>Z)|"|, Dz ڻ%rѫXʟnn5ޜ<9f7hf7$3IOnOs9_%[ǿ_ǛxoM7&Ļ'boC|S9 +Xq~}f|A蘛5 [oxoM ⼉"vc]XbWy#^su|=713gEoěxu|%b.Cjɚj^8ڌCDGų55X6&ěxoM7&ěxoM7ߑWqi;g5f9@o> Oc'qxms^=Ǿ+d`?>wh͓N QN Qž@k% ʂssw% g㻁Xq?n{. vTA%E0^D\??gIno$QdQd%xɢǠ3%8Kp.]|V?{|1Y]t/]&ߕ%313 Y% YlU3'3Yؗv1ŋEN&'{/dvbǙ*⥚x"^jP.&(b?؏"@.;spJEmdI&'g!Kd#Kd!KZP d F d Iqۜlƕ^ży3b,X̙ءk6>&vfKԯ799D &Ǣ>iY$VAR33zϛ`X3anM7&ěxoM7&ěxW0~8ެӛ%&&&y)%x6pMVI皬ưMzv7b Ĭn⢈:N@\1=c|x{&J,y'o?޹:վێNtZ\ۢ?1^4s[=2>_`n|kJGy\oMZM7~kL )$1; @q>[8EOH'|fs8 >cV:@)b:cVt@I8||W:@qW)bb^{ fc3"f uLO1r11+b\A㤈 «\ၸ>M?8*b~&+ G 8W 8WTq|D^⠈W(roY'Ey)p@fͻ^Tѱ't|n+ߛ%~;__+)D=_ o[A&̚1e.دݹW{&TOT%qkFK+y+Rm5qn/Q[dzm/|_k3>yyڜlʢqp<)=OOI' v@qbN; ΂g Ί8K{}ȻW+ +~\^QW˛:NL>8}W' ?gV{#k]Q#^oz:Y#^}b:NontyڮWmb,\X9$y~f~8fϼ?ƹ0ġġJP @q&ěxo]A7 mooM?z}Zƛz)o:izT<>Jiim}Z曦}Z"R67&ěxoM7&ěxoM7X#NL$ߵ#o&xGoM|Y#&A]z^7$Ʒ#7"WvF8NmQyC"b)QDf|lGdxJDlQ;7F6&ěxoM7&RAM7MwmM7&~gk[w/>%X/w\/sӬrn^oJDt^]pܱ~n2wěxoM7&ěxoM7&ěxoF_?C'n6+5ytm<8ume>_osaM7&ěxq:ěxoM7equ,p[cFhAJ"Dc!HHʒȁDNI 6&ěxoM7&ěxoM#q>rh++kEItjswyj8w_swt|כhC}׵v.&ěxoM7&ěxoM7& ^++`&13beT9H0Hj&Lh|z\w'Ŀ'x+?q>Տy#^m?Wv_zz~u|}o+VkD+߾ SqHjyЗ2:ΕWܯ׿׏s}hsKuzs^y367lpYbZ$ "'qk3>Ib> Kvn{uq}\ǭұW 'u\qbN; N㢈 t@I81 >8qV@Q3@ǤtL@̂O8+Փx>]q\AtIU]܏ bVWx $E @WTW*+H @q:&EqU:fEq"vO G/w!򢊼gr*< cR~L>B)*?+o׻_Ĥ gqV:?Umc~b,@씎c .>ΣcI ~!Wx+< Xq?+rŢ?'"OTiI3;Gr}_u5΅z{8{M( .~<z6XI11+bbI @"4qT1qT1 >M^A@L߯_?W{u~ď{_ "N_V+Ϭy׫yݶ|ȋsZ<\.Jyg:wXWK #WV#W>GDȵF5rsěxoM7&ěx?G)b-M7&ěxoqUN[^9osU>]_x*tsn0os;z{+1_][`moK`⠈I~ Ns8 >MLq⨈# &Eq|X{ů~CU={E8ġ*b Ĭ{+:\g Ί8ĭ] WtwS^@8(^@q(EyE JV|W3"f ⨈ƒWxY}e>o߯^^\qoy;W\/}f1[wooȻ|}Wu|~홙K3j+ۈޝQqOeJ!pG9{FcvVm3=f9{F;BěxoM7&ěxoM7&';y;x8״tI;-|Zl3?cFr6J7]9w9[9C\|w' N8=N<):#?z~ĤI'໾7 ?]ǛWOmoM3WG+&!k/18f$hC.mImL֩\_G$Wu=xG/Ο>B;c>yF;xX?[[mKNhLhL.I*e ,Yk8m>,Vp<: XyXX`d>1Wȣ>F}-eiRrt]<2]<2۞VҲT!K#KT帶K1vIxH{]-إh dal.D>=Tk Y°lg] Y5 ncl|,Cc} jcc Kǒ񱄖Nq?OUX5>V~rD}Ĉ~r2dvvB=J撖O(K)[VXVq$d珊0Ck,XA[I9Vw>xhx1ÑLØu9#sYfvx1vg G 31s2'qQG .@L8q⢈ G㷈{txcr'19ILC$~'+vm׼_WbGO_ߏׯؑ#o{O띬;c}m_Y6XMG/ߴ?W~_ϏGIɑwy_<"GEձo]g ?7G|i:?ޑ#W[rw|#Yu~6sGډ943\s'uj~<[qg}oM7&ěxoM7&ě/ZQc(jy(\1΍5ͱ~colǶZQqpo܎'Co|j"O Ίq⠈W"& f fE@L@1?c|߭_%~_ǿJzĿӏ_K'T_\Jg JnE^⪈뷌Yn"?NǞBrmfXrQBx00@+ȯOd63+qA۷*&D?{gR 2]xW6۹|nQvmm[rˠ.{]BtՅ.|H׾օt_0]zuW]N.1\u uW]FuqqӅrXacꝍU m,X=llFW ^Y/r?_Kӥ^_/q/92u^.9^uq+u.3ץ֥y*ɵ/uǺc]ݺc]rpK>t.N~/r?/r/>=lL|u6ǟˁy2ez]J9֥_%.u1u.1\_;]K:tIwC|t .%]B}˘.'#/.c^u~}9}KujҏXbe?b^uGwO|r/w1dQIxmt {ś{H2N5I* 'K|vT$Gcŏgszާy#$y/o?Ϗ`o3y)UW_%~Sbj.z躝ߺIoosѠ)Fm>(jъ6aV5*ğf|蛃yl(zxa C;?40)Ѹ c6xh19,c35N#7i+|=/X?r[򧞶?mfun# ]aR^؇w`oE XxbM*-X/]:<[ˌ[ˌfD'b( ZB m+yZkN/Ī BMZ{!r/>B/~ ?7pC>  1f#XcE0Bp # Xue'ב82Q#Ck΍sqYe9"jLⲳ47Q`sq>p$ŒsDx(np'8G]⛂S9*4hx( Kp q8q.-f"&8Dž 0(!Υ,_p8G \\cKf8G^9v888$.s Ѳ̼q.5!s$1fej͏+Ͼ/;^D^5y*ɛD_ч>.^_!6Wyd>| o("W:s%VG׻|=I^[6ooMIHV{KĞ~"XM1wS"04xϜI_\׾f{klel/D/GCc{{#̸f1+06 0B-ۖ/suG8W?:f>\^=dŋug&J7 6f{yXؖލ~{qe1@za{>@qd^(otˮG76NazR6*eHc{q ^>؞#:cej) lJ8tea7ۋ+2ߛ%UAlhGwƐߕ  .%\Vӌmc(o0nn `w۱=oǮvef ޲llv7wV/Up[yxvrsh s6|9Jw.;Ӌ_#"¹ƈ"Jp.*]K֮ QaTzޠa'ŹBέg6**(Kw*w명e{qju;.&+% (Cp۔]B`E [#lXmö -Na[D>:oMؖ9s|zRac\]-2s\{$lˌѶ$&933.b[R"l+\q eBgXma[Be* pƶ±[JF+Y&84dǒN6*aكےb&{̚MĞVyK^ENO--6HfAL *ma`tF?`Ų Imq!D(mE[1XضgMct;2*veVl#7;zPplTlc7i85}h]OxT El~ 3ʊ_|v-6ߩ("^/lzo{(T՞4vo{{^93p,2.P/U 7?¥E$?}6^얐O E¥3;v|iv1^:L7L[&xOUNoUVmp%j?Blo!ZXäjg9X'frړcZ F) `16gL}X `8l쇣1;ߡ#3*^?c[zĺ'2՚KNdauPksGoculcGdhs Ʊ@ )sqDZv*lf3*ڟ -mes1OKZa Ghˬ.\Xn{xy! V.yVP,pXFfuR'bODm(X/(n邲x6@l@qv Qbz"KWX>R9QX] Db7}YɈe8V V/X2YL͂%E5o%%ckjs51~.A;H쥷x8܇E΋1Խ#H!wt4lVwd(xŋ%cEyg4q:udX.C;+WEЎ8#N#Z_oϾ7wuqBDNlt5/?S&،'+hf~|Ιޒ(Bx65?(Ի>_)mYŷRoxtx|a%+zm vnR]G[\r`⏽დc gB|Wv)o2~꧳2Smy|D]}nyr&Мor]G&%z?&GmⱞالLƟ&27)?&[MPN=l:.D/cmB˚˹: vpY®ۄ\zmI|&i~MԚM`IlB'Js$DW]jnyr}mv.%A-E.96$>jrf2foZIM%S|ӛPޤi'}L>=3?eMJ =s\\_Y5R}}7o?> endobj 10 0 obj << /Length 939 /Filter /FlateDecode >> stream xVnS1߯]dc[H@DbB JER}ƞCB!,x<=wl%nwOH'ma)މoռm ڀA\׋\$>ۗb Y I/VB5㳲+~t(_|Q|(AD<لvk&<ل1dLMXA΄&rH^5vPwy5x)1 /b^@TMNɱ Iΰɍq$gV)r3H[R~mձ*\e矨r$,`c2Yhq#h F`Ry`& ƍ`m׹` b_lZBV-cn}⾚j qcM qg7Z<e Av#F`aG(]fJ rmɜCyL$EOMsgO6y31 `dws=+k[YJѰ^+oq+QN @r㧮%Y hԮ D #aj@*H5F-C>/P+<3Nxg}h%̤;}+J)+UC+FI`oHA,ߛY^g2Ftב }q^c_X6t6}.*/xFObqSy D2ʬ̣ x\;?]kBpV/]~~Xv(z}+p:qmv|̴,EZJ ?ڵcendstream endobj 11 0 obj << /Type /Page /Parent 3 0 R /Contents 12 0 R /Resources 4 0 R >> endobj 12 0 obj << /Length 23592 /Filter /FlateDecode >> stream x[%q^SOo? zX{w79\z/.^^k~}7Wo?};.򙺡s{KFk_='è]~|X/~TvrxW7j{~.mr_p;Wж԰:꓇ƛyq*CXc e飸\ޡT?e>a~ Gt :WY]x?ĖAeT7ͿC`?%ѻ*Py *GUAC|R$>w8k^P,PɯPS[z{񿧣pWXAUBTBUBTB@~@αuFαtFޱuFޱtFqM%oaw-NE3ʻũm"Y(urEa`8A_.hUNV^J~0wyu8(\_;CHb>;Pǔ[^/W#}^_Pϣv0Ί?/⻥U/[[gIGqVTjͬ]X*/4 .|GqV_ï_?N$dk}WX_ptc=*Zx;NcP> ?ä~_W}m<O &Yۗܗ'nI~bYs׽"ƧeIsUQ;4~'4~Ng@+!+|8cu;q: N^$Z9O!wA' u8~UW44;S;-{]>/SsTRN!ӘKTW%ZR`^g3jб~|wX6+|^ !C_,> 1qWe)-Muq%0ʈ"0>kckc*G|?YYwi=zO5+B1ƃuz4 w3ףc׵Ӭ|Ǵt5Bebu8ꀾYwO6q}"c"n7FqW'ה&N;kڸ3ڸ*bLj#N81b'O|3;_=̎-=ج¬zҷ$8M&^ñI #M&E:vUfYEUVQYY7ƁqPmq|z#ǽv؆1庖{/PtlDHJ&Jz>7>9ͻ0p>i4b#~q52Έ",⢈&Nq(aE/#UOϕGɕQ ~y2*2*2 *,:swx-< X? ^HqWan/ܻ*w:Xm9EQZ. S$ e☨M):>.|-2Rx <' c>|Ր >h&x jTחno1u ~n[< 58jw ܱ)5♩Tn*UJe,Čs*S<U*Jq*po n }][s||||||||tn]x% ̧}wɺm9-Z8|ʭL۔JJڂeY;o \,"wި72N`*dճVֳV޳VݳV޳V޳fݳ&޳SWyG/05W-Μp-y w7{≷8wި72ݭOr/99:Y+Y YY Y+YYG#/S=kR=kb=n}:3L-ne w*mۂT ܺ'Y*f*U,|E-WRaj9v}J}U ݽ}~gTX;}<}YugiM8un,_ӵºľU]KJq|u,jM}ewJ,>O.+,_h.\W,K=k\ /az[/PWpC/n륍3zeǗ,.qYZ=dq\,t Ǚ,Nq6F1r#R^$8d(1b6<䵍Mu&RcxSd%! GV%KJL2JBҹ^se9^{Q܇^zղeq⺖u.X?&򱖸^ZziCSgrX63,)C1ؘ6 ^eq^q#l"dKJڸ,-pY9rYrԲ-Kj}eS㖿/}Ti)\W#ªJQ܇^R8bKN\/+19q,ByɝXGL"&gIqi"m,LpG&m k z)K;reaX,)YX6Iu,M=./Z/#zB/Y%zB/Y%z B/l̊%%K# 5&e\`У@ 5wcf^&.xx _u(W N7wxQ5zW·YP;#Ό8+̈+ _yG1,IM&NUʈ٫8"WH."fܼp>M$1,Ȉ"8[N\i}ľ1$o#O|?;fYŊbEaXQX,Vd+"ob-7qmlFM4jW;CPJ֕yfa :@T?ǩ*cm35GcȀ`|ğ_uAJ%Qce)Q L$jJ%:K$j["DotWbwFqRĉMLw%6qfĝwEq|o*G|?0bgC˘W<^2GlfC{Iuslꌝ|k_bCWDg`jxgor L{0_}7/ )^%o Ư6F~Mߌ7̺{湱kDJu97j}כ{Z,_,Twқy. leiE eϖiY\ ,&8du,NR&l6ָ,.疲\N7,qYRᲤeǗ,u’{K:G]}Ȓ!KeI2oY%y-KHB.d,2r 6V*y[KX%U}-K;;%DW\,=jYz䲴OY¡.dB|Ȓ^_ZzB/Kd}~=% q\q\=(i.~^WFWFx% D^Ћ;^WώcOC/Q%~?~~\襋~߉~>Ys?hLd%K \,Ե+ˊK/QǠAACzGE+W- Ys6 \ܸ,iYxfōs~ cX_Kh%19E??e.9;r~'r~IscO]<Eq0,Ys#s_j6.nYM:Y4ͦ1dj/>#6b#6b#6b#6b#6b#6b#6b#6b#6b#y*[X_ޥclw"%*IԘDMIԶD$*J%S"]Za >#6b#6b#6b#6b#6b#6b#qUee+4XF:z:y?GmNt#k1d:ψ؈؈؈؈7EȈ#nmb"8M$c y{µMϤr[Rڨ @ϣc6 mz^-lSe,OX&Qc} kgg 8Mu0w 1,0xu8[T଑G ^ϑ7x9 L sy[m[5Ю {y?ȿG_8Ʀ>vňJ:977¬;KuNo;]7d\ܨ$]qZZ,5rYjԲ- ݲe=2Y4. ܇,KzB/Ћz)\*z \KX,\XWp?[eɍ˒Ʋ1dZ,AX8l,I$Yjв4!KC&diB,-KC"dѾ_G.t.KB/KzB/Kzz),"di,M½g[sY%d! ܇,cqYt~u,c^ı |?mcO_]\/AR, !K>diƂpX4}ѿTѿѿ)GVl, K%. 8:I$,O'+[W.0Ycc1eiIR*z.KZ,*/[KϘMW=6V7ޞ%@j0uD_7cS[oѹ4~מ')ܨ7]Zڸ,5qYe_e%%.K\1YR@]-d$e%,$d$ ݒei- ߲@]X<_1fcQXrEEt~K=R^bP܇o߯K-_jhbP$^z"OEq?z''X=bUhbܺw"OctŒ%ݿHC=_=yRkuWsٗkqº[݋36pY2%EkY8=e4-KB"d),%;6TSeq⺖u. l¾ ,-qYZҲ$!K;ḻ HK󅣋oY\಴Ɗ*l6VOYZ:z% Y!KV% %qYJ㲔eXWpC/Eؘw⊐kY*Rp-=8拖%F.Kcr1>eк6q+DZiY1Ƣ ;| oM>8f$^ܡǭ /EK9)Nq?83j}Axؘ62189.KG+Ɯ1wؘYƞ#K)'WncQXV&pr5CNjy,T\kGq{t>?3ҵ<[/_0b#6b# 1~f 8?|GB3I<67zL#R/L(E셞c0_؈؈؈؈؈؈؈b_0a?RDTPO-cJ>m>Y@ӱT?'3$?-|{7ϿKf%+8UWF'8~c28~]w$ƿkn[v4~f~ҭx,Yf<]Oa-0>[+TnxĿyܷre<7woaOޡn whjTsOekVtY?KbF-zY,k2R8:m` SU-wn]x-W x'IxbN`WⅷxW࣑WExGe*Jƃ37M%pS T2L%j6gxTtxyUYT)7MqSiW37M%+STrU8<V+[ <0pU8,f'0bn ~8~[]m[& =U8xw\+/(Z)moke*k͞Ay}j6>uGZot}۠ͱ~7rw$cb3~ ?i`/oVv{>y8>IV=q}^~c12>ݭo[?on}6Ϊ§ O٘%Yxqc˫GwyR+(bFUat,,\A0:t>?t-< ]|qU#6b#6b#6b#6b#6b#6b#6b#q?ys4͵׫"ہę{Fgو؈؈؈؈؈؈؈sck:v`a&~+/xpwXv W( <~7ebu8g[TĝgFqf}l61m&.ON.2Έ"^XgI 81⤈&t[gƿ@0b#6_~b W,ӓdz2=0^O+ɀez2 :^OW,i@2_/q,n_X .c}6$J^qxH̺4΍߮κTk5 CԴ,%sYVdeǗ,Pw˒%z.K\,p|>dE˒#dYtKq|u,hY|粄e QǷ,PWp Y5JYܻ-˸dYw,t|wk4x璥2SIȂ')܇^ C/En(^ҡ$>R 4Kz ^[%p2%zKZ/qҒ8^ͤˉ%wz$K G1zKzC&dZrmf\/NEȒY%;}KZW/].p򖵿H/5h gG+\/5pԠ#eqkȵXz8V9jG'8}O_tISܧC&dBx"4C$diBv҄,Iq}ǺavX6EP"l6V妸8E_~~8E~?~GuSW:W:֋B'#O"O"OG\E\>JwXdϢϕXrƂYA~\,!sY}^},iYWY1<0_qI*.҅[>ƺ˸%8* Y8c]zi -K3/-(VL֘/0Lx k>u:Y?{ k>yExQSX}ψ؈؈؈؈؈؈؈؈tb/<ޥxha#6b#6b#6b#6b#6b#6b#6b#6b#'qWpo< >s_ ϨucAKqn5~StօYmKk<\.疲.}Y`Z%( YuϕLܸ,%pYJвKz%w^`q|e] e`1K ,m>d~܇^Zղ;KZ/sY\KK/qR82rCY8/'U. xeIB/*KFz,N% C/Y^!Ceu9ǚ%f^zǗ,I6έy/nG]}}eB/^ Z/-st~ OC/^/ѿT/ xsYF]}%Eacac˒"%:G.Z{Ys"-K+Zq|F-K.\,iY¹(G_DcwqLXU/#/et"WY@;RԲseɅRDLNGL"&%%K~#&GQ(br81'1'1wcNc.+39b1ى쎘DL#&W'7'#On"OMq?@>bU ϧY+W1X, KL޲db3,iYDX%(/,`I,dq+5.K\,MXUk\z_d1~%KNc{^?| gY3[ɞDߎ~~y}R~~~~~~9$,r|Y()=PyrǗ,$dDOuu-K \fXRTaU5(gϏ=hs4a>.gWg{O<):3-~鍞1g鍞a![:0b#6b#6b#6b#6b#6b#6b#6 O*8I#͑dxH3Mqu1"8Kq`AM||'HqbIM$qġm$:m|?b #6b_G?!_آ]*IX{id ߌwZE؂s0a 8K@n|s֝qn5}Sa{Tk no3guݲ^LR,qYhz& ߲@]}$e,% Y%8-u&C'diY.c$eIN˒%e!KӲxeB'`- ܇, &KI\"d),Eu, &Kt\(d,QV-eq绶,t|~\22θdv%KZM~|ı i4eZ .Xq,q, 6P,C%\,^ݗ,.hE_ُe}eǷU w dK ^% \XWp}=*)YZtܸ^Jz^~=I'*}e}e_+W&WƦG0a<~Êɳ.mWax.Kc"j /b~^zBP%\(D,1W,^zB/|4C~=g;i,M C/U C/I%K>/Y_RQOhAi]^&Ո5^x{Y&z:羉1~@k1d&.3?+^>\jı^(91ۻYn:`vM4?5놱^hKk} Y!K\/-qYJ=ℿY!KH@VƲ$%dac1/l,D.KZq|~?)&?ߏ,IȒ,% Y%x!\ߵ,sY|Rܧ,X,.K\,g-1 b,*%+%h8uƱ']#)")RacRD&&&9L9Ltٲ"ƕpYr9brqe:ƕA+C/brQz.(un6YX#6b#6b#6b#6b#6b#6b#6b#~.=ピȳ],%Jl'ؘDMIԶD)lBV-[ŷtpWU"81⤈#xa3#+Έ6~ #6b#6b#6b#6b#6b#6b#~Ү6vqbme86NIlju6u_1_]Vk<[]ƞtX{24x;h4F;5c.vjh]qO9eY,sYxCeiIv۩ KJ,IQxQRQq?22:.ˢ[Deb4㛖y.\,.sYXF3LjFg/ߗ36#Ԍ``3eflFsFlFlFlFlFlFlFlFl_W0]5%eK(-Q["%JyK()/[DoBqgĉ'EqYH"Ό3⮈;#΂O[mlFbfO 6;66K?6q=m+<)3\Ot,BKS<7~7:k:+?ߍka]M\&w#/Muq@ #.lE?'$[mX'im6qh84Ip[bffO 6;606~fv?*l_;Z ݮֱGQGk0i>O;P;ܿǐ0>#6b#6b#6?q>0ʈ",⬈&Nbz|UWOi%ZX*pHa ֊ᱹf|Dkru;ϧ-e9>Mq $m2kcāgI#8*⸉S|ƟoUXmlfOnFl ˆ =mfo2b#6b#6b#6b#6b#6b#6b#6b#6b# ]lq.SFl~gFx|66b#6b#6b#6b#ۑH]s^KoGYJ(-QjRDm%*iKD뚖DobŬu`FlFlFlFlFlFlFlFlFlF|3b>[ owwٻ[/7Xrsu~?ǑDp#6b#6b#6b#6b#6b#6_(ⰉsĹIb8#.ZđGE71>qFl5|FCeO FlFlFlFlFlFlFlFlFl_?VF񳈿`.Uy(G\ûuv ק^汋4:yonᬎFݸp>$EqVyoq>A #v)b:m\jˆ=#س6.taC{O\$jWn#nNM $GI)$nNGFqSčGggv|?0b3?![[? wU܏ج¬VeO$V\a]*l-W`kZZrZrU}oFlFlFlFlFlFlFlFlFlF|K/?o(ۍJĖwoyX{?q;,DZf<<~ci#ܘ8KbqeUM uqVmY'q F؈؈؈؈؈؈#͏Fm\aLGij9i\=rMa\CV#׶G~v]X5u[:ʩjZ.wN5u@x*k|$uVGuJݸp>ԁ񳈣"v8MLo0^pl;F%/3b&p*؈3og+ƈ#N81ⶉWĉ7FqcIݞ~Va3=p={=86{۳1߳.كŷB2b#6b#6b#6b#6b#6b#6b#6b#6&/%7G&q\"Mσ kʻY?a9[uy7>S %?zekt`FlFlFlFlFlFlF7E7qV,Muq=0ˆ".xN|?0b#6b#Cğb,nK3 d*5-e.{8K@ŐxŜ.knֹ4~Mצ nB;sYN0'7J\y|]SvnͰ:wkɅu{2^zVq|n;9q m u^.dztfe_rLz %4ZKH[r]KYK^[N^FI腎oMT!TAݘ%Kz,x|ǤOWacQXi)K_RYu#JF%!KXWp?8&w=l kM~6VXފ%ec%r{]q~:|s/l2J:OdMNZ/qK >6ŭacs% KB:N6ugirYȏ_\U_A^pœhip$g8Z3稌^b6D CԜL81bLj"v8mbMqfYgF"_ߏ~VaFl-Vq?b #6gƊ*<ӿFlFlFlFlFlFlĿ$5SEąOr;z[EU}pYĵӆuN\]N\ua|Flğ&ٌ؈؈؈؈؈Lor#6b#6b#6b#6b#6b#6b#6b#6b#S?/lq7[\FVs7~9ru"IiVylـ:O81b#6b#6b#ĥ(⸉úNb8&.EΈ##8n؈͎͎؈؈O$>BU_~}a$io_w>!Tj)M}gݚiyn,8qQ]έdY@_]'Z밯^N/:G]*},sYJⲔeǗ,.~,=hsۘhq|٘\Zdv`KQs4wr^zw0pMP%ˢ[(҄^ڡeu9icA:e.Kˇe.Kz^rC/EegkG¾; \ӲȴX|ıeQ7+>4&?ze 鰱$""?dBޅ^eG~Ԭedi_/M˨dYRa;O,e]eBǗU妸YRղvR^ʡ"R%U-Kt\,1kY>Q=Ep_ϻe+;jty,{~磻};qXgW< XMQaTHLZĹ1$"&8*⸉kc#6b#6b#6b#6b#6b#6b#xz)-T:ޙ^gzx ,~+ei|*3]w|^ka|8E\7qޞ7%֙4rWF\qěgĿ0ٱYY3؈͎`yO ߏجx6b#6b#~&XpV{aV h78ҔJWOF1*pXwR0]_ Wo_awC¬`JsLOW9C M̨{`*A'FC{8Y ǫ1`+CܡWe45,wk=z>(wX;=*W۳/5\ xb;ϰ$ 3 b аjƐF' W9FlXVLao hD!j<֛CaÛIB.|V;Q^eFRup%+@ P(2\͔F9G/WR$w)A 2WU\|*{O򶫡U.$ux/3Ey (g,(51&0k(g@bb!Y[L ]+KlF+4+;8VP2ʗ#(P +n0rQrA{+DrGW@|)B˱.Ê=˱2;!('P*X00@C@H|ex)XT˗:F{Az6OۇiԼ兇@2kcXޗP:qÈOS_9[=M}_0崇Hr˅'GJmێ?Ҙ=_ٻPo.;KO!1w$;d'9vOgolhǣ4:<+ŻɕȎxYwG,_Ew`_\X*o"*_%pݟ.c\Ce~W:~E<__ #o_jS>0nҳ||"ox:>2S@WTgiP#ˢiL.eTGUFaN)Y|5rbl_#꛿FO/{yNrˆ&K& ONrB'3:jARML]RTTQTXK^*3ffJ0,ʔb͔a.L 3ю!hp$&ަ t"CJ =DBb:4墙Bt2OOREf"3T 3% W*`,%VfQȞ!0cHY!pԱBltS+4#K X3 +%rV1c)Ð]:v+%VF)J  ΔBB %K =X ^]2 quCJ #zJv9+% +^RB޺RRBG)Lq2J:l3%L+jŮ00b RBR)7swEFѮ)ڑPKx F;n0h׆hfthw`/;]51BI uYtp>uHw9Hg=yF봣|t+R.S tHggKr`Hw]H#И\PKLHtab9PbXmG:#Q` # 0GNa02akO_ #$_bb/D’YHt <ҁX"Yt.br6#+93]&& w;ҍɃ# | =!40dLaO3Inᴇ'Ll 3ɿaxJ2_;^cyP'g?2[ʔWffʳsr@ wY/G`iμm4XqFg5ǻ?Ǒ@/xN'XuƝ$дp~ȌFƏog"Bg6<+qG| 0 %o^1me|#^|?%,fW{ M4$xfRB BEcje|8]5܊P,3Q,-n[hU_VޞoCGdԼaU趇M76-`~GwƇǎ@qUUƗU"f1vvNe1"296 bXtzvU쁺ꡨG[=wƇCvow@7"6ABӡӐ0#=|ˮ aDXE6fp;8P f(+áe|q3A5v2"224cWፌǶ}mgkz1~}v[vxfDc> Y`HWa{lL-iϹ?o{_hN"lbce;^`|$*?8ǵ[spp̼YY X - 2u0W< [1UFӎa-;_Dʀw"oҼK ?1J!;Qtm]1vƾvuu gG'hva fG3_fXJ=VbRld-nFFnd;#?L(,)q#v%k9ȼXVzekˎ&oG sk1| wW3c.R/*T~Ʊh8fxfx^$bq 3c@C ꊓT>ڙ}%8rX fr"cԺfŘ-8w`XoEk(ǰ#ZGq`d{91/\aÎ>u^<=x?l 1lR*]~+݌EӐFZ4N3q^-z[@☉߾^{o9=aϗ~=iLAg^~|ܯ^v\3XNs2B>A'vvcOPg Dx7b'M@e7PX02^[QƬ>/* [21%Yq*,㗹_SqlY\ǧiFHr|)ꊀ?L= Abø\z\?_>sq?n}L6voQROtg@c&=/Y 1X x3L<|&$> endobj 14 0 obj << /Length 972 /Filter /FlateDecode >> stream xV[o[7 ~?Ƀ]k@ Xm`E1]8,ֿ?J`{I>E$EI-hߧ_@R 7+V{46@Ƣ@VctZoV͇q o`}^n0ݼ7t7(ߺ* pU4nU\+ Z%4a0/7 &؄qSLMXk1Q&HEi013WK{.ng^% ߧOAI-kL lDa{XTkb< +r 0v厧/ˉhrYtum߿lϿP#\D1W痢ShR cj`U7@ycPq'% gBKfeYm_iyu ]7zBHJ!HJc6>{o|ʓ' :A@& BiP~ndhCN.Wpȡs4zHօ]s?̺Uە-+;R@fUvq-s?WQ|Ggy1[к0\Quە-+|kn"Dw21鲕 2EBMHI--* z!V VOhDoOJJk!tm2DʣԸWAZu!"8YP&U1~TTfTNyG =&\|Љk}j%,J ̉);ԊkMeW)<Іȟ,o3YFt,g{ua~cY0lT~Tp?]=nFpo_> endobj 16 0 obj << /Length 14457 /Filter /FlateDecode >> stream xY%qSG F/ll0vkƂJ-3~ ]շ>[ᒿ #d$iacO4a?~xǟX,-_xoSc9~ݛ.˛I/o5ʿqg߽}Ww|*g\Alğ]鈁++ qvJo!鷿kzO0ycoF.wo_Ur}՞؟j3i$ktdGF)~,'kûڨjڨ՗~ֻ#5)I57jW̠!x<3h2XcmTg%Ug. G#F ) ]2xՌ ]34lf.zkXTUF&UM72t SvX Q]3F  s> Yߘ8,Dm bλ' Ýw=iA|;īw ?+{j,tUI L#e8,q>g?"eR> s> YB$}Byn8zӊ_O+A_Aw 1m1Zm|=bhZEx_-D@ bV7"1p]zZq=I+6k%##]h+ܶʍ|n&:S7x8H|O7L<|qɵ$M§ _8}b Z^A71<1lA3 $ޝb_AQ>F%~N(ԅ װJԮi&e$u"#^D Y@ b 1A $ q=ק$^ 1A剗3QNFӳŒDgq4&t=Lsҋ΄3a;-8-lgx,Wž|,yyPw/|nYtCY0VBN d,\]/ zo#Zn[=dǝ=(a"}ZHS9L 7Oœi e1A b 1A b ~" y`_tTt-w`3􂭋ޔuR6stT?jK\ Hy-1-tҲd,|MMBYc<,S d,@Y( 05dJܽrd 䁷>jXȞz)#aOO#kIՓ-@ b 1A b 1A bu-5G*a]DY$zԲ'%HӄZtj%jDCbDQZ,|>q^8Zq61c? S BTG\HlkGaB9Ji(0$O#^9\K҄A,| 1A b 1AFrp0ˉ0qZ1"kx,efr"rNȍm9Y@XNDy"2ݸ_|+YgI9~,}~,becc_,_/ \{_5{ZC'r_CH8^ېךv6{yy3,#nIn+] e,,Bܩ_$˝tN@ t @N>d,/W;r',]|*t >×1lff{YIݒ[)mBZ7kkz'd,@%~FY YGRNYpއ,@Y d,@'R/Oklܟߴ|+ Ƕ7gxcӞYͺ9=ˮܧgQ@Y d,@Y d,@ 57~3B P-} "7#L0q@SM3>'{nÜO%i e>= 1KZ?xJS5J4v YXOqX%5HS(Ȉka'ג4a2 AJb{J1w Vz6Fzm X#VHmnӣXblGq % 1A b Ć'Lύr~F]xyY' iZ5p|xR&8Z& Rf1-D잒zm b 1A b?)q߃˾GƹGڹGN,{ī{ĩL#Փ{S{ēz qJ{ē4}E E\Oi! z ; 1w$z|O??n9qӸI'ڸ:'r8)ˎBٟgY9&ښI\v~q)d,@Y d,@Y d,岲|MϦ[蜌/|T$C:4,66/|yͷ_[ϛoݼͷ^6zy[/oݟ_>',%|,dSI|~A_~,wұ;C@_N~33va !N_ 3t}1Gu1Ik s}OI˴v(F0kiss 1A bx8S_A b ǼBOy}_7 n#Vz|61@ [6C 1c^]뉸 v ;; 1A b 1ACJ3ϛGEQD0]x[J/aI<5k6V0ki0I_8+B>1K= lA /Esyf˛娡֯G;93z2̀2o$3 HM sf@A,|w@ b 1A b 1A b>:4Jy }>ǧzb>9b1oUf7ݑ(1[r/>ˆLuKs5Jٍ@//K/@YG/@SY OBo9g4{M'/geojTհzZ]iQT&g4i7L<|qɵ$M ӊ_O+@ ="m?1qZq;c1mm|=O{9Rq8'N䞲SD]n4\^qrOg %m b9 ?TA|==#V\oC Uh"q_a9C6b>$1sg#FYqݒ[~ i f-1-tҲ7d,i%%]H dAY d,[-S;˝dIsʂ~rd{QMo>Ǔ3β'iXD;M >'|Teb"> s> Y@ b 1A b 1­t" jM^Cxf@o!kZ$Y>1) ,e"q{nM=M§}b 1A b hqxJ1_OgY}]V?yGXs:.Qi2'LGʽ>!ӄA,|@nb bb#uc1A =W&v <\"?Cvt}lj}lj9j;N8IkO;N08_qi'Y=>} 'Tfȼ.D\m bcA v=qxJbz CA ='1cK@Co`qGJ.GiuGU /Ph/Sh s},RBO> s>ąAʬ|'v؝+/O =V܁z6(}= h#?KvFTuOB+)'s_;çJh\rc-fY{YIݒ[ilGnqnwR)qK@Y d,@Y d,@Y d\|)>IQxa_=J2sh[{ s}OR&8Z& Rf] 1A b 1A ͮbXz9CչZq#>8=%֍mTGrmMW.-qK﬿l(},w;{~,@rNI d,_,wwN:v'Yc/fOߖHeK8y7nVBF[ݻ_t>w& û^cMl_AlA '#ޝbh;_O+G|=1A [9L* B{*CD"^*7=-.2T"'4p(4a2 ?8INLiG6 1{ g+@ =C_k `Ğ2<ιc*˞IL=-JwZ_'/E˴vL>wbӄA,| 1A b 1A b :eY.7̋7f -7f` 4{7f`O/r,嗖o ɂ~,_ d,<,+! d,saL}h3^KgiL/#y5hzxİoG4a2 a 1A b 1A b?w0ћ{Kfa!::FNѰJsOxcPGȽ>s> Y滐 W'Ɉw]zZq=iwhcİnT:a&qG*9 &<%LWN4H|Mer!'aג0Hq|q_A ;_V ( { VѮ9h={(գ^F\瓸;leaKÜO%i e> 1A b 1A b"bǧTs<EE 9 /C/aOI(TLLGZ9_KӄI,|?,D\m ;h Vc F84-(Ҕ|]4տ޿4/M%2W{H2h}|KS>/MQ {%#V|'&c1by V#VĸM|3@ u6z wm|=iA;s_G/"#JS_GI.]"HW!5EӘCHS{Se")#qX%kIU YFqxq"Vz|6z z w VI 4īboTì߲7rߝ=S/'>۲U"{Z/-YMO)~ 1A b 1A b 1A|9b{DKWkuzC>ߐ4@ )hXik s}JL|eZտ,~hk;Y@ b 1A b @.˅=fv]KXKDu\K)uDuKDi eS|9z8!Ēlhc1A|;z ׳#Vĸ.ƫ?fO]^ޖg%Pmr|6xON/앑wKaO%wecKKfty*=0 /El^Al@|s1A;m b-wA; ~;NDxI'O_<~$͓>'ûsxb 1A b W.ޖIv GtsGqa"(Nִ*e8,q>zI'I4M'}b 1A b 1A b FbRkסE^g\Sx=g\,|sA b 1A b 1A b_ouG"ţ)!04*ɢe$q>Æ^FR9\K҄A,| 1A b u!'kcӢVX BS$xiuMOt0W />ki e> 1A b 1A b *+v#JSgUzSv4Q푢i08kɅ~$Z){?J\^A\@ 1ah㯥A ;y#V<|zg;3q>_坞tzwzle$yLd^=( Cs| ؟S_G @z6~1A bX711y񴇅G{d$n;79苆 14e$lYIor&싆{ ٞ Zf> Rb1 ߁Z;hA|;zӊC+@ byP?B1])TO.B+lJcD=^ke{l|qi(mQ78ww.)qK@Y d,@Y d,QvGÑG:y8Huz8~qz8E'/_HTf;d@ Ix"OI|61A b 1A b 1A??ozh|32|3X}o囱uf+>7cqPi㛱i>1h~>1C+@ bAhcHl餫I\VKkj15mEpI<.2mz}|r-I)&lkzOZ! s?3<W?8,Dm ;hA;m|ObhA b?_S\ر?"}F sF-8}F2s7~poxvؼl| c z|=hc h=zW g+9N\4_K+r hs(Jι磬Lߛ 0n %&ښ\Zv,Kɒ^Ȓ.$ 9eS@N˝dAUxrXןoWѬ:z~=ͅ%Oiȩ0קO(MO)R9_KӄA,|y%A bSǣNXҞzm|=ihcS+@ĥ]?RoG<:X~߼ Țk)aI<i$Z&LRf1A b 1A b_·1A {^"{Z/բz^CNd?i=VQ,cuTOo=J1#GI[#-f#{KEZܚ#<>Yk"/䁷6Q-aZ~gP#5Fx%Ž%O5oV(-GB^Gr|616[AQoY>zCoX>jݖ5gZK@ e!UxoĖy8uƐO-Y(^ykii8 L=~x\Sp# Z3&B5k[GηNNOZva[ =жV ]ךkմͥ@N@:R~/GnV ,^a:oSui<ѓ yfey7-yZGobں@}wC\N: y>t?"} uhd";"ΉLP t7B(@)H?Vcsvy PZ&l)=M ibhZekȰu[&:l[ee4&RlXL\DL&zsb(91Dʊu] ުs2 'nN'+iĠLOOW,gʋ hY : ^7Y)ә0xVWՓym%S49]y2%&ygN@JZ~ L<_~@ٴĥJzڣ`v{%iS8]2=Lp>yi)cN@žN{-ϴdi4nkiw|q3>|CKs>Rd;+e;e#9/=]Sa{s>O?w[ j<v'}C:sTLJUm U7_iD"w/4n< WbB7xuU6x~( c'f`W< sSlk6(ks e' ^aW#+Y6xU_7̉ T2x ^ G5xґ8z^nz I#@tMG-?SkG9lm ~v3q1x/#?!Wǣ ^ ^ ޲y42x`t2x-?=:O qT q{[?OkS \5xUaLGM ^_0xg-Q 0xE_yvWĐ Ճ ^Qy%>Oa0xE}۸yg}suau']^1=pg `yzty,Qd8$xퟩO2f6L_0N}sܿS?mP}]pr0c<ݯt?֎qӂw>[ T^7-XW}egv}c~)ぇOe,x~iޏ4K9d^Oބ=+qN{6`CqN{i^C&nOxi>O{/{e23O*-z|mWxgʶ~c>o]Sc̷d+ܜm^9=:=nu ^^ ^>1xy5xoiW^5x"׹(-'jan1Y ޶4xx@75xf7xfd@^H5 4xe[]Nm=-GnЦ ㉫<1h'}*/Y,ۓv'NS{S{ٞ-1#<)չͧ'yu-xi ڳ6c3ۻ`М&4 [;Z&˂}</1 ^72/ ^Wi DK;/ ^es ۾WyY'2^ƞ8vu< ^I |ß#]ӝͅ6OJT ޾XN66|.ൟa6 ?K{x-ͽ]7w.>Oo I_ˮu^A/فN[Gq,Ҭ@{`;9{Uw{f;;³q: OOxɞ瓽ϧ ƋtOiO0vwҬ A4ƺ4 5ԓ{tk{FG =GG7L]y?Nݹg٢j"__߯w /fgfHzo~~i+{C :}[_MC7sw~N>xCX  _)L*m^hKcs*c3^Ǹn퉣cR^[ӕKˮt`?وxWG};KGa4mON:yԎ~<&U'4]\׽Dl)ԨcNtҲ+u❍Nxn mڡ,:!^׉]'<W<~ 4&U'4]\jL^u~%DOWR-rZ'وԉw=0Ц:!Ϣt*A:uq {G{rVts-c\Ď4n:ӕKˮܯ։w6;u]> mڡ:)1v9vzYG1&ko縦״>5-b^|}jmH Y׏oy>l_Ϗo?IU>endstream endobj 17 0 obj << /Type /Page /Parent 3 0 R /Contents 18 0 R /Resources 4 0 R >> endobj 18 0 obj << /Length 877 /Filter /FlateDecode >> stream xVKO1ﯘ#bk}HHT UhIPIT;RZ3u@ )a}ֿV(`&~:NΧhn) .ernuw)TS>Ig@-$ByfwݻY2WHofcQ1\UHϦ{"}[G $t .we#:+Ewb)sкl|zaT3=uT)ž>f1GϽdCY'L c6*06P|Tuq͚3\ J TJy'uUHPYT#FϾ cu09sJ/R6VbrlG!A{]e"i|ac#9#|Z&s7,7uFRe 58_o\tɮs>)f*CWwUPDQo<=Rmg~+cѤ/80&+S, PMǯ!SCB[-&;/z߾TFgۅϞ!}FBC @Ԑн\e*hQ`wMw2m3bٱ16SL&|9^ai(k.7p" {OvmpmV-JNߠEGV|mMbޙq e@3g^G~a1] #z<~9zp f%хXa3_,;<\> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << /GS1 22 0 R /GS257 23 0 R /GS258 24 0 R /GS259 25 0 R >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 19 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus 96/quoteleft 144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space] >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 19 0 R >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /Name /F3 /BaseFont /Helvetica-Bold /Encoding 19 0 R >> endobj 22 0 obj << /Type /ExtGState /CA 1.000 >> endobj 23 0 obj << /Type /ExtGState /ca 0.902 >> endobj 24 0 obj << /Type /ExtGState /ca 0.400 >> endobj 25 0 obj << /Type /ExtGState /ca 1.000 >> endobj xref 0 26 0000000000 65535 f 0000000021 00000 n 0000000164 00000 n 0000073286 00000 n 0000073403 00000 n 0000073580 00000 n 0000073613 00000 n 0000000213 00000 n 0000000293 00000 n 0000031676 00000 n 0000031757 00000 n 0000032768 00000 n 0000032850 00000 n 0000056516 00000 n 0000056598 00000 n 0000057642 00000 n 0000057724 00000 n 0000072255 00000 n 0000072337 00000 n 0000076308 00000 n 0000076566 00000 n 0000076664 00000 n 0000076767 00000 n 0000076816 00000 n 0000076865 00000 n 0000076914 00000 n trailer << /Size 26 /Info 1 0 R /Root 2 0 R >> startxref 76963 %%EOF SimGrid-3.10/doc/html/group__XBT__swag.html000640 007661 000620 00000015502 12242224150 021005 0ustar00gierschand000000 000000 SimGrid: Swag: O(1) set datatype
SimGrid  3.10
Versatile Simulation of Distributed Systems
Swag: O(1) set datatype

a O(1) set based on linked lists More...

Modules

 Swag types
 SWAG functions
 Swag cursor

Detailed Description

a O(1) set based on linked lists

Warning, this module is done to be efficient and performs tons of cast and dirty things. So make sure you know what you are doing while using it. It is basically a fifo but with restrictions so that it can be used as a set. Any operation (add, remove, belongs) is O(1) and no call to malloc/free is done.

SimGrid-3.10/doc/html/group__XBT__dict.js000640 007661 000620 00000000647 12242224150 020443 0ustar00gierschand000000 000000 var group__XBT__dict = [ [ "Dict constructor and destructor", "group__XBT__dict__cons.html", "group__XBT__dict__cons" ], [ "Dictionaries basic usage", "group__XBT__dict__basic.html", "group__XBT__dict__basic" ], [ "Dictionaries with non-nul terminated keys", "group__XBT__dict__nnul.html", "group__XBT__dict__nnul" ], [ "Cursors on dictionaries", "group__XBT__dict__curs.html", "group__XBT__dict__curs" ] ];SimGrid-3.10/doc/html/group__MSG__examples.html000640 007661 000620 00000043227 12242224150 021660 0ustar00gierschand000000 000000 SimGrid: MSG examples
SimGrid  3.10
Versatile Simulation of Distributed Systems
MSG examples

MSG examples from examples directory examples/msg. More...

MSG examples from examples directory examples/msg.

MSG comes with an extensive set of examples. It is sometimes difficult to find the one you need. This list aims at helping you finding the example from which you can learn what you want to.

Basic examples

  • sendrecv/sendrecv.c: Ping-pong example. It's hard to think of a simpler example. The tesh files laying in the directory are instructive concerning the way to pass options to the simulators (as described in Simgrid options and configurations).
  • masterslave/masterslave_forwarder.c: Master/slaves example. This good old example is also very simple. Its basic version is fully commented on this page: Basic Master/Slaves, but several variants can be found in the same directory.
  • migration/migration.c Demonstrates how to use the MSG_process_migrate function to let processes change the host they run on after their start.
  • parallel_task/parallel_task.c: Demonstrates the use of MSG_parallel_task_create, to create special tasks that run on several hosts at the same time. The resulting simulations are very close to what can be achieved in SimDag, but still allows to use the other features of MSG (it'd be cool to be able to mix interfaces, but it's not possible ATM).
  • priority/priority.c: Demonstrates the use of MSG_task_set_priority to change the computation priority of a given task.

Asynchronous communications

There is several examples of asynchronous communications coming in the archive. In addition to the fully documented example Asynchronous communications, there is several other examples in the archive:

Tracing and vizualization features

  • tracing/simple.c very simple program where each process creates, executes and destroy a task. You might want to run this program with the following parameters: –cfg=tracing/uncategorized:yes (See Tracing configuration Options for details)
  • tracing/ms.c This is a master/slave program where the master creates tasks, send them to the slaves. For each task received, the slave executes it and then destroys it. This program uses several tracing functions that enable the tracing of categorized resource utilization, the use of trace marks, and user variables associated to the hosts of the platform file. You might want to run this program with the following parameters: –cfg=tracing/categorized:yes –cfg=tracing/uncategorized:yes –cfg=viva/categorized:viva_cat.plist –cfg=viva/uncategorized:viva_uncat.plist (See Tracing configuration Options for details)
  • tracing/categories.c This is a master/slave program where the master creates tasks, send them to the slaves. For each task received, the slave executes it and then destroys it. This program declares several tracing categories that are used to classify tasks. When the program is executed, the tracing mechanism registers the resource utilization of hosts and links according to these categories. You might want to run this program with the following parameters: –cfg=tracing:yes –cfg=tracing/categorized:yes –cfg=tracing/uncategorized:yes –cfg=viva/categorized:viva_cat.plist –cfg=viva/uncategorized:viva_uncat.plist (See Tracing configuration Options for details)
  • tracing/procmig.c This program shows a process migration. Tracing this program with the options below enables a gantt-chart visualization of where the process has been during its execution. Migrations are represented by arrows from the origin to the destination host. You might want to run this program with the following parameters: –cfg=tracing:yes –cfg=tracing/msg/process:yes (See Tracing configuration Options for details)
  • tracing/trace_platform.c: This program demonstrates how a platform file is traced to a Paje trace file format using the tracing mechanism of Simgrid. You might want to run this program with the following parameters: –cfg=tracing:yes –cfg=tracing/categorized:yes (See Tracing configuration Options for details)
  • tracing/user_variables.c: This program demonstrates how to trace user variables associated to the hosts of the platform file. You might want to run this program with the following parameters: –cfg=tracing:yes –cfg=tracing/platform:yes (See Tracing configuration Options for details)
  • tracing/link_user_variables.c: This program demonstrates how to trace user variables associated to the links of the platform file. You need to provide the name of the link to update the value of the variable associated to that link. You might want to run this program with the following parameters: –cfg=tracing:yes –cfg=tracing/platform:yes (See Tracing configuration Options for details)
  • tracing/link_srcdst_user_variables.c: This program demonstrates how to trace user variables associated to the links of the platform file. Instead of providing the name of the link to update one of its variable, this example shows how to provide two hosts as parameter (source and destination, use their names as defined in the platform file). The tracing mechanism will get the route between these two hosts, if there is one defined in the platform file, and update the variable of all the links of that route to the value provided. You might want to run this program with the following parameters: –cfg=tracing:yes –cfg=tracing/platform:yes (See Tracing configuration Options for details)

Models-related examples

Packet level simulators

These examples demonstrate how to use the bindings to classical Packet-Level Simulators (PLS), as explained in Packet level simulation. The most interesting is probably not the C files since they are unchanged from the other simulations, but the associated files, such as the platform files to see how to declare a platform to be used with the PLS bindings of SimGrid and the tesh files to see how to actually start a simulation in these settings.

  • ns3: Simple ping-pong using ns3 instead of the SimGrid network models.
  • gtnets Simple ping-pong using GTNeTs instead of the SimGrid network models.

Other resource kinds

This section contains some sparse examples of how to use the other kind of resources, such as disk or GPU. These resources are quite experimental for now, but here we go anyway.

  • io/file.c Example with the disk resource
  • gpu/test_MSG_gpu_task_create.c Example of use of the very experimental (for now) GPU resource.

Trace driven simulations

The actions/actions.c example demonstrates how to run trace-driven simulations. It is very handy when you want to test an algorithm or protocol that does nothing unless it receives some events from outside. For example, a P2P protocol reacts to requests from the user, but does nothing if there is no such event.

In such situations, SimGrid allows to write your protocol in your C file, and the events to react to in a separate text file. Declare a function handling each of the events that you want to accept in your trace files, register them using xbt_replay_action_register in your main, and then use MSG_action_trace_run to launch the simulation. You can either have one trace file containing all your events, or a file per simulated process. Check the tesh files in the example directory for details on how to do it.

This example uses this approach to replay MPI-like traces. It comes with a set of event handlers reproducing MPI events. This is somehow similar to SMPI, yet differently implemented. This code should probably be changed to use SMPI internals instead, but wasn't, so far.

Examples of full applications

  • token_ring/ring_call.c: Classical token ring communication, where a token is exchanged along a ring to reach every participant.

Examples of full applications

  • token_ring/token_bypass.c: Classical token ring with a bypass deployment. A token is exchanged along a ring to reach every participant.
  • pmm/msg_pmm.c: Parallel Matrix Multiplication is a little application. This is something that most MPI developper have written during their class, here implemented using MSG instead of MPI.
  • chord/chord.c: Classical Chord P2P protocol This example implements the well known Chord P2P protocol. Its main advantage is that it constitute a fully working non-trivial example. In addition, its implementation is rather efficient, as demonstrated in http://hal.inria.fr/inria-00602216/
SimGrid-3.10/doc/html/group__XBT__fifo__cons.html000640 007661 000620 00000024572 12242224150 022157 0ustar00gierschand000000 000000 SimGrid: Fifo constructor and destructor
SimGrid  3.10
Versatile Simulation of Distributed Systems
Fifo constructor and destructor

Typedefs

typedef struct xbt_fifo_item * xbt_fifo_item_t
 Bucket structure.
typedef struct xbt_fifo * xbt_fifo_t
 FIFO structure.

Functions

xbt_fifo_t xbt_fifo_new (void)
void xbt_fifo_free (xbt_fifo_t)
void xbt_fifo_reset (xbt_fifo_t)
 Makes a fifo empty.

Detailed Description

Function Documentation

xbt_fifo_t xbt_fifo_new ( void  )

Constructor

Returns
a new fifo
void xbt_fifo_free ( xbt_fifo_t  l)

Destructor

Parameters
lpoor victim

Free the fifo structure. None of the objects that was in the fifo is however modified.

void xbt_fifo_reset ( xbt_fifo_t  l)

Makes a fifo empty.

Parameters
la fifo

None of the objects that was in the fifo is however modified.

SimGrid-3.10/doc/html/simgrid_logo_win_2011.bmp000664 007661 000620 00000030046 12242224150 021433 0ustar00gierschand000000 000000 BM&06(J+ʦ @ ` @@ @@@`@@@@`` `@`````` @` @` @` @`@@ @@@`@@@@@ @ @ @@ `@ @ @ @ @@@@ @@@@@`@@@@@@@@@`@` @`@@``@`@`@`@`@@ @@@`@@@@@@ @@@`@@@@@@ @@@`@@@@@@ @@@`@@@@ @` @ ` @@ @@@`@@@@`` `@`````` @` @` @` @` @` @ ` @@ @@@`@@@@`` `@`````` @` @` @`      @ ^   @  o U @  U o oooCB ooo U  o U oU oططo  U oU o moom oom^ o  oU U oo   PHPPPHPHHHHYHHY  PPPPPPPPPPPPPPPYHPP HPPPYPPPPPPPPPPPYPP  PPPQPPPPPPPHPPPPPP  PPPPPHPPPPPPPQHPP  PPPPPPPPPPPPPHPP  PPHPPPPPPPPPPPYPP PPPPPPPPPPPPPP  PPPPPPPHPPPPYPPP  PPPPPPPPPYPHPPP PPPPPPPPPPPYPP   PPPHPPPPPPPYPHPP  HPPHPPPPPPPPPYPP PPPPPPPPPHPPHPPHQPH QHPPPPPPQPPPPPPPPP HPPPPPPPPPPHPPHHPY  PPPPPPPPPPPYPPPP  PPPPPPPPQPPHPPPPP PPPPPPPPPPPPPPPH  PPPPQPPPPPPPPP  PPPPPPPPPQPPPY QPPPPPPPPPP PPPPPPHPPP PPPPHPPPPYPH QPPPPPHPPQHPP PPPPHPPHPPPPPPP  YHPPPPPPPPPZ YPPPP      SimGrid-3.10/doc/html/structs__xbt__strbuff__t.js000640 007661 000620 00000000455 12242224150 022365 0ustar00gierschand000000 000000 var structs__xbt__strbuff__t = [ [ "data", "structs__xbt__strbuff__t.html#a6234de4d442da30727575dbddd31b8d4", null ], [ "used", "structs__xbt__strbuff__t.html#a3b2c38009fddf97ec924a6bb9704d21b", null ], [ "size", "structs__xbt__strbuff__t.html#a039b27a338bdc7a9d54c36d1c2daf362", null ] ];SimGrid-3.10/doc/html/platform.html000640 007661 000620 00000220557 12242224150 017451 0ustar00gierschand000000 000000 SimGrid: Platform Description
SimGrid  3.10
Versatile Simulation of Distributed Systems
Platform Description

In order to run any simulation, SimGrid needs 3 things: something to run (so, your code), a description of the platform on which you want to run your application, and finally it needs something to know where to deploy what.

For the latest 2 entries, you have basically 2 ways to give it as an input :

For the deployment stuff, please take a look at Deployment Description

The platform description may be complicated. This documentation is all about how to write this file: what are the basic concept it relies on, what possibilities are offered, and some hints and tips on how to write a good platform description.

Some words about XML and DTD

We choose to use XML because of some of its possibilities: if you're using an accurate XML editor, or simply using any XML plug-in for eclipse, it will allow you to have cool stuff like auto-completion, validation and checking, so all syntax errors may be avoided this way.

the XML checking is done based on the dtd which is nowadays online at http://simgrid.gforge.inria.fr/simgrid.dtd while you might be tempted to read it, it will not help you that much.

If you read it, you should notice two or three important things :

  • The platform tags contains a version attributes. At the time of writing this doc the current version is 3.
  • The DTD contains definitions for the 2 files used by SimGrid (platform description and deployment).
  • There is a bunch of possibilities ! Let's see what's in it

Basic concepts

Nowadays, the Internet is composed of a bunch of independently managed networks. Within each of those networks, there are entry and exit points (most of the time, you can both enter and exit through the same point) that allows to go out of the current network and reach other networks. At the upper level, these networks are known as Autonomous System (AS), while at the lower level they are named sub-networks, or LAN. Indeed they are autonomous: routing is defined within the limits of his network by the administrator, and so, those networks can continue to operate without the existence of other networks. There are some rules to get out of networks by the entry points (or gateways). Those gateways allow you to go from a network to another one. Inside of each autonomous system, there is a bunch of equipments (cables, routers, switches, computers) that belong to the autonomous system owner.

SimGrid platform description file relies exactly on the same concepts as real life platform. Every resource (computers, network equipments, and so on) belongs to an AS. Within this AS, you can define the routing you want between its elements (that's done with the routing model attribute and eventually with some <route> tag). You define AS by using ... well ... the <AS> tag. An AS can also contain some AS : AS allows you to define the hierarchy of your platform.

Within each AS, you basically have the following type of resources:

  • host: an host, with cores in it, and so on
  • router: a router or a gateway.
  • link: a link, that defines a connection between two (or more) resources (and have a bandwidth and a latency)
  • cluster: like a real cluster, contains many hosts interconnected by some dedicated network.

Between those elements, a routing has to be defined. As the AS is supposed to be Autonomous, this has to be done at the AS level. As AS handles two different types of entities (host/router and AS) you will have to define routes between those elements. A network model have to be provided for AS, but you may/will need, depending of the network model, or because you want to bypass the default behavior to defines routes manually. There are 3 tags to use:

  • ASroute: to define routes between two AS
  • route: to define routes between two host/router
  • bypassRoute: to define routes between two AS that will bypass default routing.

Here is an illustration of the overall concepts:


Circles represent processing units and squares represent network routers. Bold lines represent communication links. AS2 models the core of a national network interconnecting a small flat cluster (AS4) and a larger hierarchical cluster (AS5), a subset of a LAN (AS6), and a set of peers scattered around the world (AS7).

This is all for the concepts ! To make a long story short, a SimGrid platform is made of a hierarchy of AS, each of them containing resources, and routing is defined at AS level. Let's have a deeper look in the tags.

Describing resources and their organization

Platform organization tag : AS

AS (or Autonomous System) is an organizational unit that contains resources and defines routing between them, and eventually some other AS. So it allows you to define a hierarchy into your platform. *ANY* resource *MUST* belong to an AS. There are a few attributes.

AS attributes :

  • id (mandatory): the identifier of AS to be used when referring to it.
  • routing (mandatory): the routing model used into it. By model we mean the internal way the simulator will manage routing. That also have a big impact on how many information you'll have to provide to help the simulator to route between the AS elements. routing possible values are Full, Floyd, Dijkstra, DijkstraCache, none, Vivaldi, Cluster. For more explanation about what to choose, take a look at the section devoted to it below.

Elements into an AS are basically resources (computers, network equipments) and some routing information if necessary (see below for more explanation).

AS example

<AS  id="AS0"  routing="Full">
   <host id="host1" power="1000000000"/>
   <host id="host2" power="1000000000"/>
   <link id="link1" bandwidth="125000000" latency="0.000100"/>
   <route src="host1" dst="host2"><link_ctn id="link1"/></route>
 </AS>

In this example, AS0 contains two hosts (host1 and host2). The route between the hosts goes through link1.

Computing resources: hosts, clusters and peers.

host

A host represents a computer, where you will be able to execute code and from which you can send and receive information. A host can contain more than 1 core. Here are the attributes of a host :

host attributes :

  • id (mandatory): the identifier of the host to be used when referring to it.
  • power (mandatory):the peak number FLOPS the CPU can manage. Expressed in flop/s.
  • core: The number of core of this host (by default, 1). If you specify the amount of cores, the 'power' parameter is the power of each core. For example, if you specify that your host has 6 cores, it will be available to up to 6 sequential tasks without sharing. If more tasks are placed on this host, the resource will be shared accordingly. For example, if you schedule 12 tasks on that host, each will get half of the specified computing power. Please note that although sound, this model were never scientifically assessed. Please keep this fact in mind when using it.
  • availability: specify if the percentage of power available.
  • availability_file: Allow you to use a file as input. This file will contain availability traces for this computer. The syntax of this file is defined below. Possible values : absolute or relative path, syntax similar to the one in use on your system.
  • state: the computer state, as in : is that computer ON or OFF. Possible values : "ON" or "OFF".
  • state_file: Same mechanism as availability_file, similar syntax for value.
  • coordinates: you'll have to give it if you choose the vivaldi, coordinate-based routing model for the AS the host belongs to. More details about it in the P2P coordinate based section.

An host can contain some mount that defines mounting points between some storage resource and the host. Please refer to the storage doc for more information.

An host can also contain the prop tag. the prop tag allows you to define additional information on this host following the attribute/value schema. You may want to use it to give information to the tool you use for rendering your simulation, for example.

host example

   <host id="host1" power="1000000000"/>
   <host id="host2" power="1000000000">
        <prop id="color" value="blue"/>
        <prop id="rendershape" value="square"/>
   </host>

Expressing dynamicity. It is also possible to seamlessly declare a host whose availability changes over time using the availability_file attribute and a separate text file whose syntax is exemplified below.

Adding a trace file

    <platform version="1">
      <host id="bob" power="500000000"
            availability_file="bob.trace" />
    </platform>

Example of "bob.trace" file

PERIODICITY 1.0
  0.0 1.0
  11.0 0.5
  20.0 0.8

At time 0, our host will deliver 500~Mflop/s. At time 11.0, it will deliver half, that is 250~Mflop/s until time 20.0 where it will will start delivering 80% of its power, that is 400~Mflop/s. Last, at time 21.0 (20.0 plus the periodicity 1.0), we loop back to the beginning and the host will deliver again 500~Mflop/s.

Changing initial state

It is also possible to specify whether the host is up or down by setting the state attribute to either ON (default value) or OFF.

Expliciting the default value "ON"

  <platform version="1">
     <host id="bob"
           power="500000000"
          state="ON" />
  </platform>

Host switched off

  <platform version="1">
     <host id="bob"
           power="500000000"
           state="OFF" />
  </platform>

Expressing churn To express the fact that a host can change state over time (as in P2P systems, for instance), it is possible to use a file describing the time at which the host is turned on or off. An example of the content of such a file is presented below. Adding a state file

    <platform version="1">
      <host id="bob" power="500000000"
           state_file="bob.fail" />
    </platform>

Example of "bob.fail" file

  PERIODICITY 10.0
  1.0 -1.0
  2.0 1.0

A negative value means down while a positive one means up and running. From time 0.0 to time 1.0, the host is on. At time 1.0, it is turned off and at time 2.0, it is turned on again until time 12 (2.0 plus the periodicity 10.0). It will be turned on again at time 13.0 until time 23.0, and so on.

cluster

A cluster represents a cluster. It is most of the time used when you want to have a bunch of machine defined quickly. It must be noted that cluster is meta-tag : from the inner SimGrid point of view, a cluster is an AS where some optimized routing is defined. The default inner organization of the cluster is as follow:

                 _________
                |          |
                |  router  |
    ____________|__________|_____________ backbone
      |   |   |              |     |   |
    l0| l1| l2|           l97| l96 |   | l99
      |   |   |   ........   |     |   |
      |                                |
    c-0.me                             c-99.me

You have a set of host defined. Each of them has a link to a central backbone (backbone is a link itself, as a link can be used to represent a switch, see the switch or link section below for more details about it). A router gives a way to the cluster to be connected to the outside world. Internally, cluster is then an AS containing all hosts : the router is the default gateway for the cluster.

There is an alternative organization, which is as follow :

                 _________
                |          |
                |  router  |
                |__________|
                    / | \
                   /  |  \
               l0 / l1|   \l2
                 /    |    \
                /     |     \
            host0   host1   host2

The principle is the same, except we don't have the backbone. The way to obtain it is simple : you just have to let bb_* attributes unset.

cluster attributes :

  • id (mandatory): the identifier of the cluster to be used when referring to it.
  • prefix (mandatory): each node of the cluster has to have a name. This is its prefix.
  • suffix (mandatory): node suffix name.
  • radical (mandatory): regexp used to generate cluster nodes name. Syntax is quite common, "10-20" will give you 11 machines numbered from 10 to 20, "10-20;2" will give you 12 machines, one with the number 2, others numbered as before. The produced number is concatenated between prefix and suffix to form machine names.
  • power (mandatory): same as host power.
  • core: same as host core.
  • bw (mandatory): bandwidth for the links between nodes and backbone (if any). See link section for syntax/details.
  • lat (mandatory): latency for the links between nodes and backbone (if any). See link section for syntax/details.
  • sharing_policy: sharing policy for the links between nodes and backbone (if any). See link section for syntax/details.
  • bb_bw : bandwidth for backbone (if any). See link section for syntax/details. If both bb_* attributes are omitted, no backbone is created (alternative cluster architecture described before).
  • bb_lat : latency for backbone (if any). See link section for syntax/details. If both bb_* attributes are omitted, no backbone is created (alternative cluster architecture described before).
  • bb_sharing_policy: sharing policy for the backbone (if any). See link section for syntax/details.
  • availability_file: Allow you to use a file as input for availability. Similar to hosts attribute.
  • state_file: Allow you to use a file as input for states. Similar to hosts attribute.

the router name is defined as the resulting String in the following java line of code:

router_name = prefix + clusterId + router_ + suffix;

cluster example

<cluster id="my_cluster_1" prefix="" suffix=""
                radical="0-262144"      power="1000000000"    bw="125000000"     lat="5E-5"/>
<cluster id="my_cluster_1" prefix="c-" suffix=".me"
                radical="0-99"  power="1000000000"    bw="125000000"     lat="5E-5"
        bb_bw="2250000000" bb_lat="5E-4"/>

The second examples creates 100 machines, which names are the following:

c-0.my_cluster_1.me
c-1.my_cluster_1.me
c-2.my_cluster_1.me
...
c-99.my_cluster_1.me

peer

A peer represents a peer, as in Peer-to-Peer (P2P). Basically, as cluster, A PEER IS INTERNALLY INTERPRETED AS AN <AS>. It's just a kind of shortcut that does the following :

  • It creates a tiny AS whose routing type is cluster
  • It creates an host
  • Two links : one for download and one for upload. This is convenient to use and simulate stuff under the last mile model (as ADSL peers).
  • It connects the two links to the host
  • It creates a router (a gateway) that serve as entry point for this peer zone. This router has coordinates.

peer attributes :

  • id (mandatory): the identifier of the peer to be used when referring to it.
  • power CDATA (mandatory): as in host
  • bw_in CDATA (mandatory): bandwidth in.
  • bw_out CDATA (mandatory):bandwidth out.
  • lat CDATA (mandatory): Latency for in and out links.
  • coordinates: coordinates of the gateway for this peer.
  • sharing_policy: sharing policy for links. Can be SHARED or FULLDUPLEX, FULLDUPLEX is the default. See link description for details.
  • availability_file: availability file for the peer. Same as host availability file. See host description for details.
  • state_file : state file for the peer. Same as host state file. See host description for details.

In term of XML, the peer construct can be explained as follows: it transforms

  <peer id="FOO"
        coordinates="12.8 14.4 6.4"
        power="1.5Gf"
        bw_in="2.25GBps"
        bw_out="2.25GBps"
        lat="500us" />

into

   <AS id="as_FOO" routing="Cluster">
      <host id="peer_FOO" power="1.5Gf"/>
      <link id="link_FOO_UP" bandwidth="2.25GBps" latency="500us"/>
      <link id="link_FOO_DOWN" bandwidth="2.25GBps" latency="500us"/>
      <router id="router_FOO" coordinates="25.5 9.4 1.4"/>
      <host_link id="peer_FOO" up="link_FOO_UP" down="link_FOO_DOWN"/>
   </AS>

Network equipments: links and routers

You have basically two entities available to represent network entities:

  • link: represents something that has a limited bandwidth, a latency, and that can be shared according to TCP way to share this bandwidth. LINKS ARE NOT EDGES BUT HYPEREDGES: it means that you can have more than 2 equipments connected to it.
  • router: represents something that one message can be routed to, but does not accept any code, nor have any influence on the performances (no bandwidth, no latency, not anything).ROUTERS ARE ENTITIES (ALMOST) IGNORED BY THE SIMULATOR WHEN THE SIMULATION HAS BEGUN. If you want to represent something like a switch, you must use link (see section below). Routers are used in order to run some routing algorithm and determine routes (see routing section for details).

let's see deeper what those entities hide.

router

As said before, router is used only to give some information for routing algorithms. So, it does not have any attributes except :

router attributes :

  • id (mandatory): the identifier of the router to be used when referring to it.
  • coordinates: you'll have to give it if you choose the vivaldi, coordinate-based routing model for the AS the host belongs to. More details about it in the P2P coordinates based section.

router example

 <router id="gw_dc1_horizdist"/>

link

Network links can represent one-hop network connections. They are characterized by their id and their bandwidth. The latency is optional with a default value of 0.0. For instance, we can declare a network link named link1 having bandwidth of 1Gb/s and a latency of 50µs. Example link:

 <link id="LINK1" bandwidth="125000000" latency="5E-5"/>

Expressing sharing policy

By default a network link is SHARED, that is if more than one flow go through a link, each gets a share of the available bandwidth similar to the share TCP connections offers.

Conversely if a link is defined as a FATPIPE, each flow going through this link will get all the available bandwidth, whatever the number of flows. The FATPIPE behavior allows to describe big backbones that won't affect performances (except latency). Finally a link can be considered as FULLDUPLEX, that means that in the simulator, 2 links (one named UP and the other DOWN) will be created for each link, so as the transfers from one side to the other will interact similarly as TCP when ACK returning packets circulate on the other direction. More discussion about it is available in link_ctn description.

 <link id="SWITCH" bandwidth="125000000" latency="5E-5" sharing_policy="FATPIPE" />

Expressing dynamicity and failures

As for hosts, it is possible to declare links whose state, bandwidth or latency change over the time. In this case, the bandwidth and latency attributes are respectively replaced by the bandwidth file and latency file attributes and the corresponding text files.

 <link id="LINK1" state_file="link1.fail" bandwidth="80000000" latency=".0001" bandwidth_file="link1.bw" latency_file="link1.lat" />

It has to be noted that even if the syntax is the same, the semantic of bandwidth and latency trace files differs from that of host availability files. Those files do not express availability as a fraction of the available capacity but directly in bytes per seconds for the bandwidth and in seconds for the latency. This is because most tools allowing to capture traces on real platforms (such as NWS) express their results this way.

Example of "link1.bw" file

1 PERIODICITY 12.0
2 4.0 40000000
3 8.0 60000000

Example of "link1.lat" file

 1 PERIODICITY 5.0
2 1.0 0.001
3 2.0 0.01
4 3.0 0.001

In this example, the bandwidth varies with a period of 12 seconds while the latency varies with a period of 5 seconds. At the beginning of simulation, the link’s bandwidth is of 80,000,000 B/s (i.e., 80 Mb/s). After four seconds, it drops at 40 Mb/s, and climbs back to 60 Mb/s after eight seconds. It keeps that way until second 12 (ie, until the end of the period), point at which it loops its behavior (seconds 12-16 will experience 80 Mb/s, 16-20 40 Mb/s and so on). In the same time, the latency values are 100µs (initial value) on the [0, 1[ time interval, 1ms on [1, 2[, 10ms on [2, 3[, 1ms on [3,5[ (i.e., until the end of period). It then loops back, starting at 100µs for one second.

link attributes :

  • id (mandatory): the identifier of the link to be used when referring to it.
  • bandwidth (mandatory): bandwidth for the link.
  • lat : latency for the link. Default is 0.0.
  • sharing_policy: sharing policy for the link.
  • state: Allow you to to set link as ON or OFF. Default is ON.
  • bandwidth_file: Allow you to use a file as input for bandwidth.
  • latency_file: Allow you to use a file as input for latency.
  • state_file: Allow you to use a file as input for states.

As an host, a link tag can also contain the prop tag.

link example

   <link id="link1" bandwidth="125000000" latency="0.000100"/>

Storage

Note : This is a prototype version that should evolve quickly, this is just some doc valuable only at the time of writing this doc This section describes the storage management under SimGrid ; nowadays it's only usable with MSG. It relies basically on linux-like concepts. You also may want to have a look to its corresponding section in File Management Functions ; functions access are organized as a POSIX-like interface.

Storage Main concepts

Basically there is 3 different entities to know :

  • the storage_type: here you define some kind of storage that you will instantiate many type on your platform. Think of it like a definition of throughput of a specific disk.
  • the storage: instance of a storage_type. Defines a new storage of storage_type
  • the mount: says that the storage is located into this specific resource.

the content of a storage has to be defined in a content file that contains the content. The path to this file has to be passed within the content attribute . Here is a way to generate it:

find /path/you/want -type f -exec ls -l {} \; 2>/dev/null > ./content.txt

storage_type

storage_type attributes :

  • id (mandatory): the identifier of the storage_type to be used when referring to it.
  • model (mandatory): Unused for now by the simulator (but mandatory, ok)
  • content: default value 0. The file containing the disk content. (may be moved soon or later to storage tag.

The tag must contains some predefined prop, as may do some other resources tags. This should moved to attributes soon or later. storage_type mandatory prop :

  • Bwrite: value in B/s. Write throughput
  • Bread: value in B/s. Read throughput
  • Bconnexion: value in B/s. Connection throughput (i.e. the throughput of the storage connector).

storage

storage_type attributes :

  • id (mandatory): the identifier of the storage to be used when referring to it.
  • typeId (mandatory): the identifier of the storage_type that this storage belongs to.

mount

mount attributes :

  • id (mandatory): the id of the storage that must be mounted on that computer.
  • name (mandatory): the name that will be the logical reference to this disk (the mount point).

mstorage

Note : unused for now mstorage attributes :

  • typeId (mandatory): the id of the storage that must be mounted on that computer.
  • name (mandatory): the name that will be the logical reference to this disk (the mount point).

Routing

In order to run fast, it has been chosen to use static routing within SimGrid. By static, it means that it is calculated once (or almost), and will not change during execution. We chose to do that because it is rare to have a real deficiency of a resource ; most of the time, a communication fails because the links are too overloaded, and so your connection stops before the time out, or because the computer at the other end is not answering.

We also chose to use shortest paths algorithms in order to emulate routing. Doing so is consistent with the reality: RIP, OSPF, BGP are all calculating shortest paths. They have some convergence time, but at the end, so when the platform is stable (and this should be the moment you want to simulate something using SimGrid) your packets will follow the shortest paths.

Routing models

Within each AS, you have to define a routing model to use. You have basically 3 main kind of routing models :

  • Shortest-path based models: you let SimGrid calculates shortest paths and manage it. Behaves more or less as most real life routing.
  • Manually-entered route models: you'll have to define all routes manually by yourself into the platform description file. Consistent with some manually managed real life routing.
  • Simple/fast models: those models offers fast, low memory routing algorithms. You should consider to use it if you can make some assumptions about your AS. Routing in this case is more or less ignored

The router affair

Expressing routers becomes mandatory when using shortest-path based models or when using ns-3 or the bindings to the GTNetS packet-level simulator instead of the native analytical network model implemented in SimGrid.

For graph-based shortest path algorithms, routers are mandatory, because both algorithms need a graph, and so we need to have source and destination for each edge.

Routers are naturally an important concept in GTNetS or ns-3 since the way they run the packet routing algorithms is actually simulated. Instead, the SimGrid’s analytical models aggregate the routing time with the transfer time. Rebuilding a graph representation only from the route information turns to be a very difficult task, because of the missing information about how routes intersect. That is why we introduced a <router> tag, which is simply used to express these intersection points. The only attribute accepted by this tag an id. It is important to understand that the <router> tag is only used to provide topological information.

To express those topological information, some route have to be defined saying which link is between which routers. Description or the route syntax is given below, as well as example for the different models.

Shortest-path based models

Here is the complete list of such models, that computes routes using classic shortest-paths algorithms. How to choose the best suited algorithm is discussed later in the section devoted to it.

  • Floyd: Floyd routing data. Pre-calculates all routes once.
  • Dijkstra: Dijkstra routing data ,calculating routes when necessary.
  • DijkstraCache: Dijkstra routing data. Handle some cache for already calculated routes.

All those shortest-path models are instanciated the same way. Here are some example of it:

Floyd example :

<AS  id="AS0"  routing="Floyd">

  <cluster id="my_cluster_1" prefix="c-" suffix=""
                radical="0-1"   power="1000000000"    bw="125000000"     lat="5E-5"
        router_id="router1"/>

 <AS id="AS1" routing="none">
    <host id="host1" power="1000000000"/>
 </AS>

  <link id="link1" bandwidth="100000" latency="0.01"/>

  <ASroute src="my_cluster_1" dst="AS1"
    gw_src="router1"
    gw_dst="host1">
    <link_ctn id="link1"/>
  </ASroute>

</AS>

ASroute given at the end gives a topological information: link1 is between router1 and host1.

Dijsktra example :

 <AS id="AS_2" routing="Dijsktra">
     <host id="AS_2_host1" power="1000000000"/>
     <host id="AS_2_host2" power="1000000000"/>
     <host id="AS_2_host3" power="1000000000"/>
     <link id="AS_2_link1" bandwidth="1250000000" latency="5E-4"/>
     <link id="AS_2_link2" bandwidth="1250000000" latency="5E-4"/>
     <link id="AS_2_link3" bandwidth="1250000000" latency="5E-4"/>
     <link id="AS_2_link4" bandwidth="1250000000" latency="5E-4"/>
     <router id="central_router"/>
     <router id="AS_2_gateway"/>
     <!-- routes providing topological information -->
     <route src="central_router" dst="AS_2_host1"><link_ctn id="AS_2_link1"/></route>
     <route src="central_router" dst="AS_2_host2"><link_ctn id="AS_2_link2"/></route>
     <route src="central_router" dst="AS_2_host3"><link_ctn id="AS_2_link3"/></route>
     <route src="central_router" dst="AS_2_gateway"><link_ctn id="AS_2_link4"/></route>
  </AS>

DijsktraCache example :

<AS id="AS_2" routing="DijsktraCache">
     <host id="AS_2_host1" power="1000000000"/>
     ...
(platform unchanged compared to upper example)

Manually-entered route models

  • Full: You have to enter all necessary routes manually

Full example :

<AS  id="AS0"  routing="Full">
   <host id="host1" power="1000000000"/>
   <host id="host2" power="1000000000"/>
   <link id="link1" bandwidth="125000000" latency="0.000100"/>
   <route src="host1" dst="host2"><link_ctn id="link1"/></route>
 </AS>

Simple/fast models

  • none: No routing (Unless you know what you are doing, avoid using this mode in combination with a non Constant network model). None Example :
    <AS id="exitAS"  routing="none">
            <router id="exit_gateway"/>
    </AS>
  • Vivaldi: Vivaldi routing, so when you want to use coordinates. See the corresponding section P2P below for details.
  • Cluster: Cluster routing, specific to cluster tag, should not be used, except internally.

Defining routes

The principle of route definition is the same for the 4 available tags for doing it. Those for tags are:

  • route: to define route between host/router
  • ASroute: to define route between AS
  • bypassRoute: to bypass normal routes as calculated by the network model between host/router
  • bypassASroute: same as bypassRoute, but for AS

Basically all those tags will contain an (ordered) list of references to link that compose the route you want to define.

Consider the example below:

<route src="Alice" dst="Bob">
        <link_ctn id="link1"/>
        <link_ctn id="link2"/>
        <link_ctn id="link3"/>
   </route>

The route here from host Alice to Bob will be first link1, then link2, and finally link3. What about the reverse route ? route and ASroute have an optional attribute symmetrical, that can be either YES or NO. YES means that the reverse route is the same route in the inverse order, and is set to YES by default. Note that this is not the case for bypass*Route, as it is more probable that you want to bypass only one default route.

For an ASroute, things are just slightly more complicated, as you have to give the id of the gateway which is inside the AS you're talking about you want to access ... So it looks like this :

  <ASroute src="AS1" dst="AS2"
    gw_src="router1" gw_dst="router2">
    <link_ctn id="link1"/>
  </ASroute>

gw == gateway, so when any message are trying to go from AS1 to AS2, it means that it must pass through router1 to get out of the AS, then pass through link1, and get into AS2 by being received by router2. router1 must belong to AS1 and router2 must belong to AS2.

link_ctn

a link_ctn is the tag that is used in order to reference a link in a route. Its id is the link id it refers to.

link_ctn attributes :

  • id (mandatory): Id of the link this tag refers to
  • direction: if the link referenced by id has been declared as FULLDUPLEX, this is used to indicate in which direction the route you're defining is going through this link. Possible values "UP" or "DOWN".

ASroute

ASroute tag purpose is to let people write manually their routes between AS. It's useful when you're in Full model.

ASroute attributes :

  • src (mandatory): the source AS id.
  • dst (mandatory): the destination AS id.
  • gw_src (mandatory): the gateway to be used within the AS. Can be any host or router defined into the src AS or into one of the AS it includes.
  • gw_dst (mandatory): the gateway to be used within the AS. Can be any host or router defined into the dst AS or into one of the AS it includes.
  • symmetrical: if the route is symmetric, the reverse route will be the opposite of the one defined. Can be either YES or NO, default is YES.

Example of ASroute with Full

<AS  id="AS0"  routing="Full">
  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
                radical="0-149" power="1000000000"    bw="125000000"     lat="5E-5"
        bb_bw="2250000000" bb_lat="5E-4"/>

  <cluster id="my_cluster_2" prefix="c-" suffix=".me"
            radical="150-299" power="1000000000"        bw="125000000"  lat="5E-5"
            bb_bw="2250000000" bb_lat="5E-4"/>

     <link id="backbone" bandwidth="1250000000" latency="5E-4"/>

     <ASroute src="my_cluster_1" dst="my_cluster_2"
         gw_src="c-my_cluster_1_router.me"
         gw_dst="c-my_cluster_2_router.me">
                <link_ctn id="backbone"/>
     </ASroute>
     <ASroute src="my_cluster_2" dst="my_cluster_1"
         gw_src="c-my_cluster_2_router.me"
         gw_dst="c-my_cluster_1_router.me">
                <link_ctn id="backbone"/>
     </ASroute>
</AS>

route

The principle is the same as ASroute : route contains list of links that are in the path between src and dst, except that it is for routes between a src that can be either host or router and a dst that can be either host or router. Useful for Full as well as for the shortest-paths based models, where you have to give topological information.

route attributes :

  • src (mandatory): the source id.
  • dst (mandatory): the destination id.
  • symmetrical: if the route is symmetric, the reverse route will be the opposite of the one defined. Can be either YES or NO, default is YES.

route example in Full

 <route src="Tremblay" dst="Bourassa">
     <link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="6"/><link_ctn id="7"/>
   </route>

route example in a shortest-path model

 <route src="Tremblay" dst="Bourassa">
     <link_ctn id="3"/>
   </route>

Note that when using route to give topological information, you have to give routes with one link only in it, as SimGrid needs to know which host are at the end of the link.

bypassRoute

Note : bypassASroute and bypassRoute are under rewriting to perform better ; so you may not use it yet As said before, once you choose a model, it (if so) calculates routes for you. But maybe you want to define some of your routes, which will be specific. You may also want to bypass some routes defined in lower level AS at an upper stage : bypassASroute is the tag you're looking for. It allows to bypass routes defined between already defined between AS (if you want to bypass route for a specific host, you should just use byPassRoute). The principle is the same as ASroute : bypassASroute contains list of links that are in the path between src and dst.

bypassASroute attributes :

  • src (mandatory): the source AS id.
  • dst (mandatory): the destination AS id.
  • gw_src (mandatory): the gateway to be used within the AS. Can be any host or router defined into the src AS or into one of the AS it includes.
  • gw_dst (mandatory): the gateway to be used within the AS. Can be any host or router defined into the dst AS or into one of the AS it includes.
  • symmetrical: if the route is symmetric, the reverse route will be the opposite of the one defined. Can be either YES or NO, default is YES.

bypassASroute Example

    <bypassASRoute src="my_cluster_1" dst="my_cluster_2"
     gw_src="my_cluster_1_router"
     gw_dst="my_cluster_2_router">
        <link_ctn id="link_tmp"/>
     </bypassASroute>

bypassRoute

Note : bypassASRoute and bypassRoute are under rewriting to perform better ; so you may not use it yet As said before, once you choose a model, it (if so) calculates routes for you. But maybe you want to define some of your routes, which will be specific. You may also want to bypass some routes defined in lower level AS at an upper stage : bypassRoute is the tag you're looking for. It allows to bypass routes defined between host/router. The principle is the same as route : bypassRoute contains list of links references of links that are in the path between src and dst.

bypassRoute attributes :

  • src (mandatory): the source AS id.
  • dst (mandatory): the destination AS id.
  • symmetrical: if the route is symmetric, the reverse route will be the opposite of the one defined. Can be either YES or NO, default is YES.

bypassRoute Example

<b>bypassRoute Example</b>
\verbatim
    <bypassRoute src="host_1" dst="host_2">
        <link_ctn id="link_tmp"/>
     </bypassRoute>

Basic Routing Example

Let's say you have an AS named AS_Big that contains two other AS, AS_1 and AS_2. If you want to make an host (h1) from AS_1 with another one (h2) from AS_2 then you'll have to proceed as follow:

  • First, you have to ensure that a route is defined from h1 to the AS_1's exit gateway and from h2 to AS_2's exit gateway.
  • Then, you'll have to define a route between AS_1 to AS_2. As those AS are both resources belonging to AS_Big, then it has to be done at AS_big level. To define such a route, you have to give the source AS (AS_1), the destination AS (AS_2), and their respective gateway (as the route is effectively defined between those two entry/exit points). Elements of this route can only be elements belonging to AS_Big, so links and routers in this route should be defined inside AS_Big. If you choose some shortest-path model, this route will be computed automatically.

As said before, there are mainly 2 tags for routing :

  • ASroute: to define routes between two AS
  • route: to define routes between two host/router

As we are dealing with routes between AS, it means that those we'll have some definition at AS_Big level. Let consider AS_1 contains 1 host, 1 link and one router and AS_2 3 hosts, 4 links and one router. There will be a central router, and a cross-like topology. At the end of the crosses arms, you'll find the 3 hosts and the router that will act as a gateway. We have to define routes inside those two AS. Let say that AS_1 contains full routes, and AS_2 contains some Floyd routing (as we don't want to bother with defining all routes). As we're using some shortest path algorithms to route into AS_2, we'll then have to define some route to gives some topological information to SimGrid. Here is a file doing it all :

<AS  id="AS_Big"  routing="Dijsktra">
  <AS id="AS_1" routing="Full">
     <host id="AS_1_host1" power="1000000000"/>
     <link id="AS_1_link" bandwidth="1250000000" latency="5E-4"/>
     <router id="AS_1_gateway"/>
     <route src="AS_1_host1" dst="AS_1_gateway">
            <link_ctn id="AS_1_link"/>
     </route>
  </AS>
  <AS id="AS_2" routing="Floyd">
     <host id="AS_2_host1" power="1000000000"/>
     <host id="AS_2_host2" power="1000000000"/>
     <host id="AS_2_host3" power="1000000000"/>
     <link id="AS_2_link1" bandwidth="1250000000" latency="5E-4"/>
     <link id="AS_2_link2" bandwidth="1250000000" latency="5E-4"/>
     <link id="AS_2_link3" bandwidth="1250000000" latency="5E-4"/>
     <link id="AS_2_link4" bandwidth="1250000000" latency="5E-4"/>
     <router id="central_router"/>
     <router id="AS_2_gateway"/>
     <!-- routes providing topological information -->
     <route src="central_router" dst="AS_2_host1"><link_ctn id="AS_2_link1"/></route>
     <route src="central_router" dst="AS_2_host2"><link_ctn id="AS_2_link2"/></route>
     <route src="central_router" dst="AS_2_host3"><link_ctn id="AS_2_link3"/></route>
     <route src="central_router" dst="AS_2_gateway"><link_ctn id="AS_2_link4"/></route>
  </AS>
    <link id="backbone" bandwidth="1250000000" latency="5E-4"/>

     <ASroute src="AS_1" dst="AS_2"
         gw_src="AS_1_gateway"
         gw_dst="AS_2_gateway">
                <link_ctn id="backbone"/>
     </ASroute>
</AS>

Tags not (directly) describing the platform

There are 3 tags, that you can use inside a <platform> tag that are not describing the platform:

  • random: it allows you to define random generators you want to use for your simulation.
  • config: it allows you to pass some configuration stuff like, for example, the network model and so on. It follows the
  • include: simply allows you to include another file into the current one.

config

config attributes :

  • id (mandatory): the identifier of the config to be used when referring to it.

config tag only purpose is to include prop tags. Valid id are basically the same as the list of possible parameters you can use by command line, except that "/" are used for namespace definition. See the Simgrid options and configurations config and options page for more information.

config example

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
<config id="General">
        <prop id="maxmin/precision" value="0.000010"></prop>
        <prop id="cpu/optim" value="TI"></prop>
        <prop id="workstation/model" value="compound"></prop>
        <prop id="network/model" value="SMPI"></prop>
        <prop id="path" value="~/"></prop>
        <prop id="smpi/bw_factor" value="65472:0.940694;15424:0.697866;9376:0.58729"></prop>
</config>

<AS  id="AS0"  routing="Full">
...

random

Not yet in use, and possibly subject to huge modifications.

include

include tag allows to import into a file platform parts located in another file. This is done with the intention to help people combine their different AS and provide new platforms. Those files should contains XML part that contains either include,cluster,peer,AS,trace,trace_connect tags.

include attributes :

  • file (mandatory): filename of the file to include. Possible values: absolute or relative path, syntax similar to the one in use on your system.

Note: due to some obscure technical reasons, you have to open and close tag in order to let it work. include Example

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
        <AS id="main" routing="Full">
                <include file="clusterA.xml"></include>
                <include file="clusterB.xml"></include>
        </AS>
</platform>

trace and trace_connect

Both tags are an alternate way to passe availability, state, and so on files to entity. Instead of referring to the file directly in the host, link, or cluster tag, you proceed by defining a trace with an id corresponding to a file, later an host/link/cluster, and finally using trace_connect you say that the file trace must be used by the entity. Get it ? Let's have a look at an example :

<AS  id="AS0"  routing="Full">
  <host id="bob" power="1000000000"/>
</AS>
  <trace id="myTrace" file="bob.trace" periodicity="1.0"/>
  <trace_connect trace="myTrace" element="bob" kind="POWER"/>

All constraints you have is that trace_connect is after trace and host definitions.

trace attributes :

  • id (mandatory): the identifier of the trace to be used when referring to it.
  • file: filename of the file to include. Possible values : absolute or relative path, syntax similar to the one in use on your system. If omitted, the system expects that you provide the trace values inside the trace tags (see below).
  • trace periodicity (mandatory): trace periodicity, same definition as in hosts (see upper for details).

Here is an example of trace when no file name is provided:

 <trace id="myTrace" periodicity="1.0">
    0.0 1.0
    11.0 0.5
    20.0 0.8
  </trace>

trace_connect attributes :

  • kind: the type of trace, possible values HOST_AVAIL|POWER|LINK_AVAIL|BANDWIDTH|LATENCY, default: HOST_AVAIL
  • trace (mandatory): the identifier of the trace referenced.
  • element (mandatory): the identifier of the entity referenced.

Hints and tips, or how to write a platform efficiently

Now you should know at least the syntax and be able to create a platform by your own. However, after having ourselves wrote some platforms, there are some best practices you should pay attention to in order to produce good platform and some choices you can make in order to have faster simulations. Here's some hints and tips, then.

AS Hierarchy

The AS design allows SimGrid to go fast, because computing route is done only for the set of resources defined in this AS. If you're using only a big AS containing all resource with no AS into it and you're using Full model, then ... you'll loose all interest into it. On the other hand, designing a binary tree of AS with, at the lower level, only one host, then you'll also loose all the good AS hierarchy can give you. Remind you should always be "reasonable" in your platform definition when choosing the hierarchy. A good choice if you try to describe a real life platform is to follow the AS described in reality, since this kind of trade-off works well for real life platforms.

Exit AS: why and how

Users that have looked at some of our platforms may have notice a non-intuitive schema ... Something like that :

<AS id="AS_4"  routing="Full">
<AS id="exitAS_4"  routing="Full">
        <router id="router_4"/>
</AS>
<cluster id="cl_4_1" prefix="c_4_1-" suffix="" radical="1-20" power="1000000000" bw="125000000" lat="5E-5" bb_bw="2250000000" bb_lat="5E-4"/>
<cluster id="cl_4_2" prefix="c_4_2-" suffix="" radical="1-20" power="1000000000" bw="125000000" lat="5E-5" bb_bw="2250000000" bb_lat="5E-4"/>
<link id="4_1" bandwidth="2250000000" latency="5E-5"/>
<link id="4_2" bandwidth="2250000000" latency="5E-5"/>
<link id="bb_4" bandwidth="2250000000" latency="5E-4"/>
<ASroute src="cl_4_1"
        dst="cl_4_2"
        gw_src="c_4_1-cl_4_1_router"
        gw_dst="c_4_2-cl_4_2_router"
        symmetrical="YES">
                <link_ctn id="4_1"/>
                <link_ctn id="bb_4"/>
                <link_ctn id="4_2"/>
</ASroute>
<ASroute src="cl_4_1"
        dst="exitAS_4"
        gw_src="c_4_1-cl_4_1_router"
        gw_dst="router_4"
        symmetrical="YES">
                <link_ctn id="4_1"/>
                <link_ctn id="bb_4"/>
</ASroute>
<ASroute src="cl_4_2"
        dst="exitAS_4"
        gw_src="c_4_2-cl_4_2_router"
        gw_dst="router_4"
        symmetrical="YES">
                <link_ctn id="4_2"/>
                <link_ctn id="bb_4"/>
</ASroute>
</AS>

In the AS_4, you have an exitAS_4 defined, containing only one router, and routes defined to that AS from all other AS (as cluster is only a shortcut for an AS, see cluster description for details). If there was an upper AS, it would define routes to and from AS_4 with the gateway router_4. It's just because, as we did not allowed (for performances issues) to have routes from an AS to a single host/router, you have to enclose your gateway, when you have AS included in your AS, within an AS to define routes to it.

P2P or how to use coordinates

SimGrid allows you to use some coordinated-based system, like vivaldi, to describe a platform. The main concept is that you have some peers that are located somewhere: this is the function of the coordinates of the <peer> or <host> tag. There's nothing complicated in using it, here is an example of it:

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">

<config id="General">
        <prop id="network/coordinates" value="yes"></prop>
</config>
 <AS  id="AS0"  routing="Vivaldi">
        <host id="100030591" coordinates="25.5 9.4 1.4" power="1500000000.0" />
        <host id="100036570" coordinates="-12.7 -9.9 2.1" power="730000000.0" />
        ...
        <host id="100429957" coordinates="17.5 6.7 18.8" power="830000000.0" />
        </AS>
</platform>

Coordinates are then used to calculate latency between two hosts by calculating the euclidean distance between the two hosts coordinates. The results express the latency in ms.

Note that the previous example defines a routing directly between hosts but it could be also used to define a routing between AS. That is for example what is commonly done when using peers (see Section peer).

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">

<config id="General">
        <prop id="network/coordinates" value="yes"></prop>
</config>
 <AS  id="AS0"  routing="Vivaldi">
   <peer id="peer-0" coordinates="173.0 96.8 0.1" power="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
   <peer id="peer-1" coordinates="247.0 57.3 0.6" power="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
   <peer id="peer-2" coordinates="243.4 58.8 1.4" power="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
</AS>
</platform>

In such a case though, we connect the AS created by the peer tag with the Vivaldi routing mechanism. This means that to route between AS1 and AS2, it will use the coordinates of router_AS1 and router_AS2. This is currently a convention and we may offer to change this convention in the DTD later if needed. You may have noted that conveniently, a peer named FOO defines an AS named FOO and a router named router_FOO, which is why it works seamlessly with the peer tag.

Choosing wisely the routing model to use

Choosing wisely the routing model to use can significantly fasten your simulation/save your time when writing the platform/save tremendous disk space. Here is the list of available model and their characteristics (lookup : time to resolve a route):

  • Full: Full routing data (fast, large memory requirements, fully expressive)
  • Floyd: Floyd routing data (slow initialization, fast lookup, lesser memory requirements, shortest path routing only). Calculates all routes at once at the beginning.
  • Dijkstra: Dijkstra routing data (fast initialization, slow lookup, small memory requirements, shortest path routing only). Calculates a route when necessary.
  • DijkstraCache: Dijkstra routing data (fast initialization, fast lookup, small memory requirements, shortest path routing only). Same as Dijkstra, except it handles a cache for latest used routes.
  • none: No routing (usable with Constant network only). Defines that there is no routes, so if you try to determine a route without constant network within this AS, SimGrid will raise an exception.
  • Vivaldi: Vivaldi routing, so when you want to use coordinates
  • Cluster: Cluster routing, specific to cluster tag, should not be used.

Hey, I want to describe a switch but there is no switch tag !

Actually we did not include switch tag, ok. But when you're trying to simulate a switch, the only major impact it has when you're using fluid model (and SimGrid uses fluid model unless you activate GTNetS, ns-3, or constant network mode) is the impact of the upper limit of the switch motherboard speed that will eventually be reached if you're using intensively your switch. So, the switch impact is similar to a link one. That's why we are used to describe a switch using a link tag (as a link is not an edge by a hyperedge, you can connect more than 2 other links to it).

How to express multipath routing in platform files?

It is unfortunately impossible to express the fact that there is more than one routing path between two given hosts. Let's consider the following platform file:

<route src="A" dst="B">
   <link_ctn id="1"/>
</route>
<route src="B" dst="C">
  <link_ctn id="2"/>
</route>
<route src="A" dst="C">
  <link_ctn id="3"/>
</route>

Although it is perfectly valid, it does not mean that data traveling from A to C can either go directly (using link 3) or through B (using links 1 and 2). It simply means that the routing on the graph is not trivial, and that data do not following the shortest path in number of hops on this graph. Another way to say it is that there is no implicit in these routing descriptions. The system will only use the routes you declare (such as <route src="A" dst="C"><link_ctn id="3"/></route>), without trying to build new routes by aggregating the provided ones.

You are also free to declare platform where the routing is not symmetric. For example, add the following to the previous file:

<route src="C" dst="A">
  <link_ctn id="2"/>
  <link_ctn id="1"/>
</route>

This makes sure that data from C to A go through B where data from A to C go directly. Don't worry about realism of such settings since we've seen ways more weird situation in real settings (in fact, that's the realism of very regular platforms which is questionable, but that's another story).

Bypassing the XML parser with your own C functions

NOTE THAT THIS DOCUMENTATION, WHILE STILL WORKING, IS STRONGLY DEPRECATED

So you want to bypass the XML files parser, uh? Maybe doing some parameter sweep experiments on your simulations or so? This is possible, and it's not even really difficult (well. Such a brutal idea could be harder to implement). Here is how it goes.

For this, you have to first remember that the XML parsing in SimGrid is done using a tool called FleXML. Given a DTD, this gives a flex-based parser. If you want to bypass the parser, you need to provide some code mimicking what it does and replacing it in its interactions with the SURF code. So, let's have a look at these interactions.

FleXML parser are close to classical SAX parsers. It means that a well-formed SimGrid platform XML file might result in the following "events":

  • start "platform_description" with attribute version="2"
  • start "host" with attributes id="host1" power="1.0"
  • end "host"
  • start "host" with attributes id="host2" power="2.0"
  • end "host"
  • start "link" with ...
  • end "link"
  • start "route" with ...
  • start "link_ctn" with ...
  • end "link_ctn"
  • end "route"
  • end "platform_description"

The communication from the parser to the SURF code uses two means: Attributes get copied into some global variables, and a surf-provided function gets called by the parser for each event. For example, the event

  • start "host" with attributes id="host1" power="1.0"

let the parser do something roughly equivalent to:

  strcpy(A_host_id,"host1");
  A_host_power = 1.0;
  STag_host();

In SURF, we attach callbacks to the different events by initializing the pointer functions to some the right surf functions. Since there can be more than one callback attached to the same event (if more than one model is in use, for example), they are stored in a dynar. Example in workstation_ptask_L07.c:

  /* Adding callback functions */
  surf_parse_reset_parser();
  surfxml_add_callback(STag_surfxml_host_cb_list, &parse_cpu_init);
  surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties);
  surfxml_add_callback(STag_surfxml_link_cb_list, &parse_link_init);
  surfxml_add_callback(STag_surfxml_route_cb_list, &parse_route_set_endpoints);
  surfxml_add_callback(ETag_surfxml_link_c_ctn_cb_list, &parse_route_elem);
  surfxml_add_callback(ETag_surfxml_route_cb_list, &parse_route_set_route);

  /* Parse the file */
  surf_parse_open(file);
  xbt_assert(!surf_parse(), "Parse error in %s", file);
  surf_parse_close();

So, to bypass the FleXML parser, you need to write your own version of the surf_parse function, which should do the following:

  • Fill the A_<tag>_<attribute> variables with the wanted values
  • Call the corresponding STag_<tag>_fun function to simulate tag start
  • Call the corresponding ETag_<tag>_fun function to simulate tag end
  • (do the same for the next set of values, and loop)

Then, tell SimGrid that you want to use your own "parser" instead of the stock one:

  surf_parse = surf_parse_bypass_environment;
  MSG_create_environment(NULL);
  surf_parse = surf_parse_bypass_application;
  MSG_launch_application(NULL);

A set of macros are provided at the end of include/surf/surfxml_parse.h to ease the writing of the bypass functions. An example of this trick is distributed in the file examples/msg/masterslave/masterslave_bypass.c

SimGrid-3.10/doc/html/dir_d1ee6547dfeb53e2a14268941f87af82.html000640 007661 000620 00000014027 12242224150 023052 0ustar00gierschand000000 000000 SimGrid: examples/msg/suspend/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__XBT__cfg__get.js000640 007661 000620 00000002160 12242224150 021245 0ustar00gierschand000000 000000 var group__XBT__cfg__get = [ [ "xbt_cfg_get_int", "group__XBT__cfg__get.html#gaf058b35acfe7f058412fece263b9bede", null ], [ "xbt_cfg_get_double", "group__XBT__cfg__get.html#ga31012ed478ffd718fafac27b66f653b2", null ], [ "xbt_cfg_get_string", "group__XBT__cfg__get.html#ga6e8854c299ca293a8531f3ac477babdd", null ], [ "xbt_cfg_get_boolean", "group__XBT__cfg__get.html#ga09f8bb0889e37d084a28c43a86adb0c8", null ], [ "xbt_cfg_get_peer", "group__XBT__cfg__get.html#gad5690b3e30986f2b43e0fd0a92b3b553", null ], [ "xbt_cfg_get_dynar", "group__XBT__cfg__get.html#gab69701ad4dbc805b23573f0e4ac02a6f", null ], [ "xbt_cfg_get_int_at", "group__XBT__cfg__get.html#gae59bb89c4d59bcc7a47193444369141f", null ], [ "xbt_cfg_get_double_at", "group__XBT__cfg__get.html#gab893722f0ee3b17a6fe0ae7534f60d73", null ], [ "xbt_cfg_get_string_at", "group__XBT__cfg__get.html#ga436a50804f44ad8d4cb7e3b4282c3cf4", null ], [ "xbt_cfg_get_boolean_at", "group__XBT__cfg__get.html#ga0802bc4a5f9d6e418c1ff9bdefa1e782", null ], [ "xbt_cfg_get_peer_at", "group__XBT__cfg__get.html#ga0555ea640404cc5214c7243e6e91b070", null ] ];SimGrid-3.10/doc/html/smpi_simgrid_alltoall_ring_16.png000664 007661 000620 00000250646 12242224150 023354 0ustar00gierschand000000 000000 PNG  IHDR_&DsBITO pHYs+ IDATxy|Oe$"orA A DvA(A@ IO%d a%" ^ UAA4V!?:izzzz{z>}3o*uea7n  b!e„ ן8qQvҥG5j駟VXq%z& "@*|+x{5""bĈ#?~|팱~u ۷vڂ  S߽{|„ 7o_Kիcǎ~w%S0իW^[n?k/G|+Uȑ#-[Ϝ9ӣG~oe۷o{6&&f+VO+W333##C@y^@p'Of͜9Sh)((X`A m裏6klʔ)cǎ-,,\y=VpUqZ[QQљ3gb7,+W_pcpppAcFgAgϞSNN>LꫯA_|y7nѢEʕ{MOOrrr^z%>h> Wz^z۷СCĚ5k>K./++KbHV6K5s)Ƙ$?=> TVyٳg=[  Mz^3gN^^ށ˷~u|H[EZjjj߾}j|*|+g ]fā7o17޸sss?󨨨Hn.;@(fggs=F69ED@h3QhԨќ9s<=#eر={7oWZնmk׮Y}zǎj.;@l3gμ;yyy[lٳg6m,Y;k֬WZ'AA9tP~~!CbccԩӹsO?/]J̐aÆ]>5jŀ-$W6PFׯ/#{u]<#<knҤIՏ <" Y&_ʓݻ\r֭7nAAs8A{=~˗?cnڵk׮]DA;[ti֭Ϟ=<\^@]6c,;;ی0N<9x`Ib7AARR|:6/w`?,v͘-#'3pФ&M+4c:I ͘V^pJpxuOVy^O5 `v6_H3 G|A$D ~<|/1Hz 'Gfx\M!!> I'.qh? л ܡb9lZSϜ)Oi`ĉ|d4it4iTT[;7srY16WOjSiݺ&EN 1yrTrrfR36oѫWwߍ̬͘/LZSOUڼ+D4i>i*d=ƟҌ)3bD5֯k:Ѥ"66|Ϟ۞}ҬYPIɌQvgi͘OZ 駢ڵ##oISG XQ7hP GϘqܹ ;c ;W/[_sr+X93z -4 8Q,{5 1/ iƔ)(~+\^x!b͚_;}&MNڵ ;7OhS&* 3GU;]*4i>h$8;7; ISǿE|R*Qa'*AAB  JJ-4jh 83ڻCi|R DG?_ҡCXjA)PzЬYÆҌ)Sj'9RԠA駛4iDEu>{v^7tժjGӤ$* 1"?3F~Nr[?i+8Mf'<5Vhq\ɛo),Q&M*?xNR%eːfBhƔ)3&/rxGxp4e E۶ڕ&7ݻWxoK+U#Oɱcw}/kw|hEe,4tjUī_[hƔi*d=Z|mA4i Z'L0!;w SEa"P~iҔ"|odn·n!V#Oz2ƞycBݻ +63OMpg/+JO\3|M"㸨6mBc ?L?Q'節={ gJ=w,Iis}wk ;cqs(,^lk;//%IS <Ύ[ky+挑'ŧgZ/\(),uA31eBC!&&ԩbZU4Ќ)bbϟ/qФ) t$/&M?pƨa.cdAAAAAQ OAAAAQ!OAAuW1ƘYᠼYs:1%k˼]<=^j쇥Wc^^[m>dxz-:查*c햾}Y2zUa,ԭA[{} 16m j]bP   ?  C   ?gmӬ~giԪm JAAJ11YY=m in{w!AA&FPJvg+矇ff   *8nz23$$/}vG?xIk׎\@qZKz1݂BBz~܂?ξW9=z40  [?22o߆;vdpR޽0`W_i-[ܽ#"B\O?.))-kg>梢q D׭W6jAA<|BC^~ZZXnۿ4c/;w~3BB&Nɫ_6VjƘP߾M:tpuI+ܸQ${gAAA!%%xDc,7usvhܸ_],''?q(84'.qLLd.\뭎#Fb]pQyy7#"B#"B.]*0  Ad|N \v'];6\\(1C ˗|ylP̛w06vsl޽1ƎԨѭĞƍ>|!öD ۅ@% qX Xmvdv@h`ۅk&Mս{OY^0E?\)6zJ;pܡC3ƾ4cfcmz#D@l::NOh] ұ^0?>}:UuD^XS9z2Bm!c ]e숈̃>UuD?_PPlM4p7d(Hdp*F)'@qT_ x8h3YD1V^D>= Ɋ߲pgc9Ly^Dv"M 'HNGXO"yo' HDB?'~{S}Ģ/ ߚ.{k~ q~O#~IHHmIg vۅr#c?Pd`O)u8`SEgcXaވ`ϖt?D,ˊ~G)~Bߖ蟇-yo;K1G\OXxhD,Na3?g|&|-Nl2'սa3 Z_ϧH;'g#yp3O~ѤAILǠh۳ 7]9ORծx' Aw&a<'~QY8,-g*D%Pbw9IoW`wAXwBj{_췚u8R}qRſԼQ~"`ॿ]Q{c Bșur 08lt?Hg`;\; 9>}apc4챠g'l G8m]F+M|3EI;D %P<WNN!d&ٱaQ/+)¢^0v/îv{)g83܌#{P3I=j"(q麯uc, ].xܻ>9gWSy[x}K2$M.iu:s,ZU$-;-^}f_o[iŌ}C/~FqEZ^^nT! v y ??ڪVMj>^VSCaȏl>zVa)c{ ތWcAI3 ~ao<ª_5F_6*ne>D6>ܧ&mbV(J `,\O DbI^0UOhB$ )#`2ۋa5Yv{Q~؈6>&o6!K<!8)'yʆ +2k`=1`_f+8'3)p3nw$0un/+ë^D9O B3br&7Ⰽ8,Vo9 Uݺ7dPP /MU.w'^"ccpla}a{~ЄQJ11YY=X>;2(A,a& |aI!'d[Vrhس;S3e`OkTVc]}F`DTWόxܐ)Pa"{P_n/BṘPU8U>Jp2a:`xྐ8t#TpEefvIH_vZ76֭ݏ`IJzڑkv>C;n\kI3f[SHm4zga/d(L.S7sSYO!.⩌]!,G)Շb8rː IDATH\%}hEC~Aׁ[=Ȑ}ؑåK{k_}u];lyrkԯsٲ'>4ttjjgiJ$#MUI ;#$ʤ? ݎA^][>D?}FCC^~k=z[[yxx>|RFƑG/jUow۷IΛϝ9݀ l' M߁ ?N 8si [o!$GKJĉGlV*# ^؆sR}|TR?qQo b^I>d%pNO pd]޽\>ݷlAAQv3O:tؐ~N6͛wp͚#7  C^WkFrpͨ!>|׍^"> tCo! *"^4iR{gE(sJi֫WWfg_=p܁hf:Jd(0:ب2F؛nv]c HFn/8s{dYB)bhY]v«fx񣔧?u_ 98џcp^xū-""Cw<Ѳe |SS;4mꈪIV1*OoTl=NI~S}|1ge\ ԙ)Α>GR^ѿ{ OʎDr3DjM" G ,>?>}:UuD^XS9z2Bm!c ]e숈 ۶߶M/?|16! ^' ]D'ct"\ A*+xZ3Nsw|+nHD*+~~iX*sjz.3YTgu8` o#q®pgE?S޷ Sg3 ECR}Ģ߲TE,gN HzE_|b_D`|^,ᓅQ3+%YFQ848;肞>s.Hqfz~HDb|Lؒ>ꑈ~[}$%dⳃ#5Ɖ Z2J3բ_O/X x4:]3Cpw9Cˮ׍*G ⯲V:;o D'c _=6X/c`QZϯDZǓ lA4nl w_V3OUp1G'1.jj:J4]wpv|֓:S yY;NzS!li/Fp1^v`#WWQ!@Of`5սa X+SuY8@Q<'GAt ؎ Q(IIBc-#>b1_ٴk>e~؆2>j v{a3>e։~ Vco ) A3úW*8,z^PFK<}ҿ,/%mu8; kCqƽ7`Xi$eG 7~~T/_QP %R ]!!ɇg:O; \Ta^qOI><`V`V~KoQqTW<)Iji?،1L\_HFd1oHጁ!!Q> XrQ3{a>"|gbe^+8g(lw~)OQqq`?Xi8CD?_N<ٌ#y_nD?#O P 30$\E˖}! 7 S}(̯a"lo?**P56e`gF787|P?[=j"(Wq麯uc, c.~܉G]M>$aY(7wcZ"%Aj<>[Yv!jԹb_\g\.6GHNڞ3))J 9YM}lͫq+yԲ:0no/kw>[䃵/Y8K=?~<}ё1V ⱺWu5wq!9U݆ÿS 9GCN'I[lf3M8mreۛq9i,~Zp^ Zr [z%hD;IJ%0p8(O.W˕|:ۃ)8y(8R(_:\ZIvb"@FoWZ.:/ oY%5lX6YO|Nܲ t?q%AlvX͛)ץ&}>44Qq?p\0òjf'\8N;!^LP2_3}ZJ04nYz(x8.J7(LD[m)X=.̀JXl^S5 Ě^gapc3/TȑSब({(˒1Ļ_bmbIp̳tlGeP~C[ml*f,*s[a'/~_nGo>[ ?y%e;y!cLLJBlRY1KE~,S5Z2WvhKhٳ15Ludi}Ǖ*'W`a?Yy"%@<{  [G;6yFI_g[zeuؿ?Z~[zezxD`#r{}N6XX3ćq[G,B~`K47$X@`:}5]s_ N9 댍{=y~5HKwu /cG^X׌:Q)2ѯYo=p&evb5rE*kR~= =՗O+&U hBlczx8fv5Oou__a Sx85>>*$دhK߉^ ˷~ԉ~1zE-ԣ& P'!ZտM!Y ;>n/Y^VZ'|^al]<~8MA'-e?då|];Z?K9T`(W=K^C|bS`~Rb>ЧY&՞~dR(NדD[BS!gcR}ƽrza Eؿ}i,{Ϧ }ǟ$NI 䶢1;'I1FDdePy㍎{>7p`ի+4@XG*%`H7QI ճ2 p)kܟTqZimQ/3|biص 텉hM_}\n߄60R,sۿ XՠAՁ[34A@QOPGqu?/E {CL!Ip,TozK{oBBE(l_O*aNv8l#+W$D׫%!_~۵kغ[v?r}'M*];rڮÇ7?t}Ǎk-qƌv t q9/ѻO+,,>v,f3 Ro7DN1pQ! t; 0Gk1S}BKs@'؅``k@!!y+H{MGFHIҥ?~r_~S=ض팱Fݻoشi55IID^Y4ԪmOw4cGٳs&Ax$/+H)fdd:w` 8??Te,(z}@K{}If\U<Ga=k8߬We Ty֭k…[t,'TܸQ\I\\㘘co17wlncdž W=p7{9[3o |oו7})ym {"T|¨E|.+x5Xp68X+v$`~DVR޽\&OWv}m|PbI/eؠ 7`lͽ{o_O>yv„=iipII( 3['H+C2>_o1SI>sQۊ} y׹>W YG/P60 |rJQ{OVtյ{1,婉r/ ;Tg]k=&Mս{OY^0\)6zJ;pܡC34ç&OOԪYVd*F ,Ν'Z?/ /|Aؗ16bDѧO9}zLR2 , td|[J &/ ^C7k( ~5E<}bA_wd+zy[kLYZ6z@{XXߵ؋>Uau_7Fo!q٣h% Gsg69|87$d |t~Vԉx ?`sei۶C|Ν ; &$|Svfy LҀ1g& 1, }I|}Y؇Jj g?KO[6ꚥ7ÇO#b>|<5[!?[1,^A/C>Ŷf>(>=-¾X0ry?_;Ⱦ;G!ϗut$>2.s*E-p G{6:Y3}ɓOJ#XO6>oTߖlW%ߚn(~R}¦7f3|t+,ulgrD[gKD]>$]C`[>mgh~LѿHD33|%H^!9ݻ!7ӈYX/)gcmxuз2S]SNK~yyN=E$ |³2>.V'F!/5'5Os`:^Kf~:7~"0V'`PKNE_??韊V7!C"sU}7TG6ҿ>8}#~VQ%}G _Ի{Zy7 9|[Y? G%?_#ݸ ?Ҡħ?7FfO?v"ix4Q?˜pڐR3 bCx.6ǬD\ml*|f_|uNŲeA>߲<+ab|t |^g$|v m3v0+P#?>Nyރ`p:6i3/?W/9@l_&(O(iP2p2&b}%o ʅ}fcT85N9S}T.굀xʝzÏQ@$TŧKqK+IeŸ``y){!O6Pj7C" E{R1{^5زII.A]{U5i8DoQ OyC.90NJ>~LA%U}LcjLOK^KX$$R[eKykLYW{6H^HT(5gg>>k^+SYxQn"_IgrHGg|-5߷K Ky|^ѿGnƑrypUDKwcIs;/? }gb\XRRXNɤ\߼IJs:ܭ.wez~.ԩ.w@2V=NwR'$(?QhhZӹ'p?ސ{`83]7TZJOqcOqz{:xyef-Sz?=FkNR40P(\o :7g;4fљ^_!b߾5Eޚ-9j>"oS䨟>5{b̓'&Pv?ǤxH_ޏ :`P}3tvu4Q9WMC o375Ɓ"TH!oIT? 2Eq< R(2ĸ܋ y 'o$lpP^ͬ9y‰!yہ^5,mHPX SK/=Z&ae\Ao> 0* ~[$w_2VMˊ2n`u67cvp=|$F™x48'ye&֜g=|RzOga SG/_g*:S!Wnsd8!i| c!_MұQ<cx8ʏ(| L߽6}x4#m%66ܣwx~y?3Vг`==zۈvێN{Nj-,;FYEgEЋ1ۏ}׽·vo_筏 Ѣ[ƋRh_Xa}T,N m#٦W|2|b/KtuxwJAWtfJ./KhA IDAT dSC`1VaUJ>V&>#*/TyVc//yݞ~߮QbFb:IQf.:?*ƞr#{߄#2w ϡ/KX:{ 7yo. 0 \%:yR*zY/0 _S>7 Ģ߳x8ݻdEګrr1vy٨kZnPI_s>ggbM 9K&WWYxIц"w jl`, Ŋ_|~JB!]L/˭i##C}Ofͪ?Lƍ( )Pa~CO!>biƘGr $=Jqg`i1~YiǮѰwv5p.c3ChݯWIѢ޽`Ȋ#U.5]z5ٳ繄  $ Iׁ!M5]⹨0aY=w5 |X٘`z2@8L" +(ϧi꯽v|cRR;fh|@G?õvkwa?W%dW5ِPG^?!etP{KW^ˣ,ʁEE7I[t"f啅Z<ύvʉvü$_Ve|LqO_/)'c[ؿ ÷lq(811ի3zcnܱǎ :sZb]n ?aP ?Q猐]0Z I3j,Ļ_?Mvq=_7ޱX[nJX3Ug>$ITbDR⠾Z@j ůT#dj7yڵ3o˅3O:tذ|/˗ycc7n{cm;^}>Ç/q% @"j'K)/3 xNS !8*_.ߍtdN񲨷EbQw~*ğ$h^s^D_}_+&uqm&U޽ {_^ϕWNmzU^ymv8pСc7o̜}kܸSO5رl2t" F_$%S[gXgx+1] gBV;dAgI7<߂`×r!1_4sd,cRJ""B~m? |-[yy7_xž0nwO݀9s߾t?ҀA`3V]G48g`~>ol_TObc[x 4[Z2rQeK{eEpصpyI>f/V?5u\1k5'7P,+^,)!ÇsCBǧOjNȋ o;?z2Bm!c ]e숈̃>yժuD(0~ L߽hZԫ^O{&Si]_% Dax o` 3!]&{ I>C`*_[w )`>,S4ѿ*oeYOf QJAd'O^/2jǯ'dILp BgXg9;:0a~o3[|0mृ݂R~lTSI(O)O؀CEdhYH?mE8 A<~dDjDaoUY>xʾ4#pv2/ѷW\G"66SW"u-/빨~& ,‡> oÇe_#STg)g|c7CU)3ئ[`&>+K}<3pO/X x4:T33qr_U+Uπ  F89KDwU@A7q>ښ/,+II>+ ,)E8o_oBsd[Mb5Q6!;#0i0^@~:oߨD?.Y648?Tڿgfa-,O)VV͓Y _^+ۨͲM>pԧ>1pTYs??S!`+ -Nॲ ;LJ_%Bc+C3GU|IbzF1>a Pμ%rOJy2wI$G(c`8@6g=gZ 8 ypsWW<'M`LǠg7֫D]+˲}L]k Slv:Iϋ~_R%r<2_errI_2`6]njmzç%}%[w9g{߬WS)O jwǁ`CHQ`i@} R!KA $&IH8klٍ^IC:RT !_ ʛB];v}޶ x{O>Jx㓡^j0a*|ڳ}yXtyR3E"8js_j~ EʤBIԿք.,%)9 cI>V>fH GLGτv'p^^TF%^TMX3/ܒ|w [V~"* e?xkB`_U}\Rc_cCcWᨯ3o^)vQcX0 hg޿3U}fK0<ؿ{kk𹁖% Gߐt?Bq*c׊nTcQ70G}ņ8` VkŤ*bVSޒ|t(~I7-oFGnƑ!y-n!q@[t.wX3\.ėpQ j_qrǻ\Aѓ=FE|̧M(B|rT@II.Wz*?ùU/\l.U_1.Wze1_wg{nwŞ![|ѣEmh*V9ءޒ-1VIY5N"eWf63kQWElsohU㣰vדַq|nJO] 0Jw>[!N?w_[ [}|JCRRZr[9+]ә?B]C;˕r'%?6r 5sjT9ۼ?(CG-(̌? oĂ7Q#GK⃱j 1uD[nG8r\k O m6 %]9AX1M䌽Z==LM#lޯnoC(?8Azo`9q/惬h]oվYa:6KZ&Bi1^'ZMd}`׽%clx&RPS8@֒"i. c?@ʎ?(b> /;v{EǮҧ=l?1a{ 0+ۚW __+RRh+i ,Σ ɽ0Ɩ\1ُ[zw3Kh\WxT!q{2^ވ/9y󑾳i~!G~-{2GgAYb1568~'/Z^r sJoϞ78X`-|twpgKx?Q>I|#t\(~$e5=SxѯBox9 c \7nq1CQ.Uܩ6U޵/y"e^SQ޵׋7AP.)婩Hb]K7M8BDy7x78?(3.Z/͆kʲ!zWb5ZSG@~p&U(Hi}_D,x?NO9(|cU866f,J#[ߴNwU?н_/{\MO?Xۮ,Go#k EH_7c!OTH&`5#* BZտ3Nzt3GGrfo/F>/Bl+O7ѰGk|׀L|f>?[Ϻ@R?1?22g}:uc&}(LDKԿ-?rS, RC ?YlQoEx8)R||Q}X䓁O },σyv¯5uؿ_<ѿ 1FDdePcٶ{<ױc+<R0 RKF'cyJBB ? !qVR}`]E||3 oE8?~%.1di/_ɧ3gZ]vkxVV{׌`:ۧla}`)~K|*U 薟_d!KrO1< |#^*4`P_ @X1S˾ \MO:R}^w)QHE|E< K{PH_*/#WSII?~qrr5e~c`5Y6: E8`?0ۀM׫%!_~۵kغ[v?r}'M* ԮvmÛ:Ƶ8cF :|xGm;~XI7C:͑tH?*ud(ã2o8"Rŋzdx~q=3<>ro`IؽL{tTzIQ ظw @L;܈Y>pS39P7\qP;!PYl2H & "ȌߌqqT lbMWnַnUW=ybu۝yQ#-+IVgwW^i77Q kѢ.Tya:w0}in yQPpC?<~Lsnt4]KBB'?Zwy{? HeS'%3l> nqc?gI[9Sn}~K'IG6M>v/RLJqu#DCo*_j[bڶ}}o9}QrqZZCeޢ۷k޼\+Dge5kݺxÚi<ٳ~ ~f4 AZe}X}܇8Y} nG/L^ s 1n4h3So؎߷Mv#&G_C=?5?12ڹ 3> cϞ׮] av7:rI'Oٴ^u SZZڿW_[t۵v퓯х1ã식Iח@CKT?=/a>IoXn0f&޽R~7kꑉKB22G׎~-WwL3Lύ7^hEUigdAW3'纜իѡCgb' HSg%n} t?i(X}XY3>zLFJ\ ئ+Yty)>ګ7o75PoJګg݂Vg k7+wWvWb2yl+?dSy:%aӬi~{?zk԰ajl65dH;.)ٽi/н[ny}m?q%?ԡa Z8<:N;=cq4O?-K.eHk:IË~7z59zt˙`kd3w GL,3UZwI)gJlo+_w?tQ_&{-qJmիm3/ٰae%6<{~/(UG'qx7χL%ЙR y x __CQ_Yٕ~3a߁b>(~} uZ_~E}[f+k HΤo%gw/sga03t$Ģ׳tvu֦^_/bK\M~lOzM|4_0G/hYF7}Xǟ2KcѿgtyF'(~!!? 1#/@`-`mz  ,^~{'ehqWo nՋ~j,xs=$=oH{^Gp i7$B,[B9P@aO=c%̭>8 `Qu;B_CCJ!b#IKAP9z8hy<-8)ɺATQr)>Z-6ϓpk` [&]#XE>eHqGc\Z>o3Z dO^/6F48+ۯeRzNb$Ey{';~(.W;d6RT!!z rx$N83?-x:,#ݻHg(~iS}ωڿJ oQ?nXBXz41>Et7}>)C/Š^ AԻzggEKXPPOJZLSYɟU}GwbLϡmjF]ryk:v3N}G^CsHOFh޽ͣ<5g̊#{ DbE1=F*~FCR,+? xXnɿ|@uVŭ>>ד3ԘXth ?$}\mߊKkBjch c ~ K޽,ŗŗ*I1OB(ղuJSSS;'&aa> t,]d?.ufOYi^W[{g5#{O3ߢLhԾEEՃb*zsbzd-@:i E9up q\(@E *RLwsEeQD.72U9*fEH|UeQ`z6ŠGE(D01J8S[lo8K;\;0 oPlhuO=Gy;vP!wfszz{9z7@}ecyɭʿc8Gggf1>yxP38J2ic 58M@|1PHu/՞Og/K| TO~O43 ]Fk2XDj0wDj8w˙DkM5Lg*jy9Ѕl͚*Sk֫K@,]̚vݻzѥCPkVg֜QviSR6^oe#fu`lqܨ[zܭFu/T7`1fOw"wX'Ro2I>t1>VS/7wW֯a\m6 /÷#6/ 6:Ku¥փE^SkgG\dõԫ#.EF-{Rx<|(ʣ'}qtRHu?Ե;S}x/4OU/1>ry?կIYѣE'ċ~A^gp?@D^?AuH$ϥ>(RK'ԐϐoثkzΓ2DX?٫pb]&>^ߴ+ t;ƊGN5Z;X!f zcEnG?`~7)RZ O(WdK[|KcJܧG޽RGJpPP6.Ro>K?[ĭ&H_ |.Oa!ƿQYퟙ|,ӷ5ģ^]b#Xb*z8\b#GרQ~r'_~W~0BNX|˕y? %qx:}yFŭ>zDԿ7-%~^L3sAi]e=ڴV.q,V=`.b.uQ[xd x:vUԕ~7%zb rtz׭z̠A->ov|7lRCBD`\KՒOKL|]ɟȶNzO]HR:.::kTi+tGamzn٦^=;93/UԵ3p9Kh.CRO8??UW޹=9;wv%OH;| 㱱TmlL3j_#Hq .Tb_] 84ei4NJ`"7Ѳomq\g_ QP`N3R%FcaV jć0f)XO9)~ f5.:ƙ?YDwk}DpoQ鎯T莯,Yoo #.RwWItÆ5-37Ym4HOon'YÆG1֯_cŊ6ٗlԥ$k@psr14'-裟6Uf I&8?YUdI(>!R?[}X_c9=,+ ï2sty*}7fOo>|j5ËH7&"pGRNAb!>_OE깆zv͟ĩ5ҲjuV~{}vqM/-@ioߨs ӧo6֋.,йs/gUZ&͙s׻fӦFh1{&kXa<ܯ9Ēű#FyL|,j 5ut^kkٲxd:HO12&5?aX(VN3ş3C*_j[bڶ}}o9}QrVemٲh7/^լuݻkS:ިт͗<%ݺ#rHDXߟk)[B/X?Vb+ӓcg{YY<ݽp-ǂ]>|^w[{Ep/FTJ<5hj?)&i`E2zQ\xU$?ThuYyJK]q|gOk׮\~׮mG?I23֫WN`[KK꫞cǁ>l|e[۴jH-?xQylg|{]w7uPwTY S-?amgzamڛ^<.#}HYJw3wNkGDPVF8vĈlz߾caznqE-JRM$=8=8#5ʺToVrq&$8<ʾ~ITb <ז@O"aҟt^7)M[{yO|כ"}mrS}SDvץO+]NEF"߰ohOVߙg6]i\nK],;|,eYBo>^y\JR'.3qI&.8,Qu7٫Tm^=m۶}Ɇ ;/,{Af_26t}A?wJX~H RPAW~J~x]wOCF.O7LFoMfX~o^HZR`>,{ Q,//!bJr,\~%*kdMrHolR6áWw^_=zPEg7[X@<;aÎgٳ?7 jo&BC'Mx`_!qtXܗpd.S\ܛpdBar Gd0I8LV?nt?K?n"}?3u(O),xFuFZpGobZߖ_E rE"=jݵOMu."$/Q)D*Db?Pãc/fV7%ݙ0&e,od]OI0D>AL#oZ^L>LL> }x_dR" ^/;U%u T5u_CݥL%u'UD?ٯ7$ &ϤAŝK.ͧ:sp {5XxZꓐaF%Z}ĭj OMA;?I$Nf3/^[X}ۂ,g⎶= ef`g=ry(Ctu3VSAR8ӝ P(?y&]ޕJJ,̇9'vïЅ.z6 7FcI`nA-LA_c7ǂ9&M>"}Q>1omz EMl3,D{bS@9|# 2;zY@1 8?$@p?(̨gg s@ODVo+ՇwnŦ^ke+!ݻZZ8~8~;gw}rw zKs,Ԯ';_g_;.1s)=ͼ(̾Q\Ǿy>zDyV +Ճ.:G{& ~M?ȢB@ KY1>%n:3)!i#qDj wUpVp3X2.~$np']gǮǽ1'ִ/&҇mu|w&= )]dGڸ|~5; w9YI]ѻѯ'u{iI`Wݸ}4~XsлWqA-GV>,z5t=+a!#go6~|Tн=te~>;fW[OVÝP\w^m!BB )IJ, K,̇8S/~=ϾT'[{HA߳kwU,Gpkc| M>Eȥ/KWV~Lgg?$5(:)NJJ^Yw<oo3 0L%Ӂׅ|.IokGSEi:])/Ҭb2,S3 VJL>ϰ]J".O>Se+)a\#e*gU$_Lcqz@Jqe;Fyh4$2e Y!"W@e:srf!ʢR]ENV,?MS7H"*fQSO*ePVC4 ʟHM458vZJqA܅j)%h"M0r"uמhD%+yyӕ s^^gÙ:he\~A=3Q v3fLoWU, -* #Ws˳[p[Vg+mub﯍s=zʿ@xnFSw)_nef[n9)6h}(%{4,_^놊;WwrWgIol2 \);&&3]cEA}cEM^^[b㏣)*7*"T.rfJEn,]Xb蔋y.Q!gS]*$ͽp"gkr+JEtW{ -*y H"a?$  IDATňFcRѥOd=  l1bǷKģi0ed,Ŋb!<)rJe/?ϕu٥ruuHJd]=_v/鳭B}惉?Wzή,!Z/BOn _-^'fOKr|)~ H'!)L .=8fI"gdakZ7kMńr&|&Ty`[pd2փ(6_ ԵZyx N҄ HB<# C@PHuxN 4nOsؾ tz]jx?qwz g~4'R~5FItKפ]3K0j< 0e1ЅJ)4(LS |*M/Es|],̇bLKƽ_4zm%5b>ueI>lk/;NWBC7 j1?e{ԒLjB<41Lj5KX@&!C]y>/Ѝ{nRv͡=sfv0OR||3/6,Çg>ٸ lݦ^vbS/a ]BƚV f5s<-XHm~rcPEK$f8@/cDO^qa."!|N 7#TwTR;HR]qx:ۣe-='zk^N{bBz{ Kd&ۺ]/ q Jdaز#E/*bD^L{tsRU.X{x?Uvy ^B3OVIG/ҴKVXK þ{Gel֬w.xm mzlx.; }8~m^gH 䢟g-e3~kԨCќu֩zNtU,.0KqX-}Mn5,;mz+bIdb~fX$O9E]r5/87X&BJqTQm%xGke4sf1{!-ؗ%\0L&RN>vLLJ0/(${GUit]n~[Vwy ?Ew k9"6'DDN_ ^Gk);>D$N7lXsٲ;ss[nޜզM~.|5lX~+VξdӦ.%%Y^1'3nOK;}/첢k]ծBBl+W˥jL{$a 4jGc,|zT췋ai:^|u38a%v7? ^NzZ?n_%f7]L.&5҇%{kO /5'wp~YK=cƞZFרդU?޻+?nzyԨ׵hQWO̼}F;o>}Ӵi^tQEAΝxx?󥗞7/cܟ~7w7>蜧'Y1FU&;kl_kAs稹5zf W74wzG?+b+c$ԥ%z4 IPϵԳ#.?CZX}}m۾~7{_w>ܨQy`ZZCeޢ۷k޼\+Dge5kݺxÚikժ֮]m֩3S&M;zBB) ǺStfa3'2̰?R'3]3G+)iMVo^Qsz;zE~\wkM<= Ng+cqCHmǣb!A~u*P_I]J[3GTg⎸؋S/+;@i+82^}ՐKٵܢpN*$3iz59NiiɆ}o'tSkm߾CNXr)oܫ|<ƟL 3SXؽkHMcIwH^p]gz.;K@Edey$EHLTBDPVF8vĈlz߾caznqE-JRM$=8=8#5ضM0'$YcN՟{)3S`ߌKup'HN(+P~9_[O+;{uӮo>zQ\/qB[a>]eDyW?1͚~GF ֬V-R߿7lXkȐ;v()]R{Ӧ_Vj:5 jfd4]+$$Uc1Y0?N>,Gy1]y>vqзk~g zm1.0 󱅳~$,;٩WX"#h[{5{|͐Ao3Л:7,vMg&3M>`73~(_y1 D:%a*勊Um[׏?ξdÆ]x;|FƫkFb7Gp:˾:d%4Ɩ-ii?j|yףپ},fgg6lQ,ۻ7^x9|1B(/c!iM &wZicqy C'! ,ED4Et^{eXOg,Λؿ3v3 kWaoMu."2"録2a""!CxxVM_W"QD\3T?.|172S bTf:kl}86qn5}-HtGozSpk!vwD$|+%@b H_G}/|E?֯7$ČB$ϤGGTUD\'Vݽo#ǝzG~;pgUV)e~?dZ{d7cl.˿?n#}F'e&xBoTRk7hDYDv黔-XIWRg&"p^;D ){! KR+>3!UR!wzݣՂ`Yw׈~=~~kqɧ75;{HOO|c1s`H7|u)=`^])wS厧 ,үW$!AA-AKGIDOJw G|Soe~M~¾'Ts:߿D]Xy_f_2bǗfQ"ٝ+3]p%ryu/*km~YWzBD ˜I)ãczZ'Pv쾇7V}7̜zO},Gşv )^],$Y}a>iAS]*g~<5 J6<|^(|KgvX$}ڄ0ş3RS3BI_:"S8cf?r3 wM+ĝ3 wиw*5sI"^pe1fl}-bMױ>_үW׻|##pj nHfaU\VSNg?$e(?r$տG?*?Ǜ9| $?u1zOXX 7@3{OB?c`S,,"ɵ`PL>;v.rs=/V~RLc CCQ$k;TW8o4 GF 牔)9ߜ(3EYj"F!JGH"IS:왬,֜)#'+KO9EYשʊFakt>RCW0RCYj*k"KLDSj*B^^ W;R[yf̵m0 ;ykOW^tŰyiES (1 M~s T7gTv /[Ux)yYarYEiyvq˳.x?ZESfƽ*=Gypͦ)*gIF־*?,'/󩯰}7 nzbW  - *qv|?w|nHz#eɏܽF (@Lzc5VJo|ޫpo%A3;htʅ @S%OmM/BM7f{)_[XFdDi=-RElqS]"7 r%@QTZ_bb*yM.a?$F0?WZҧh&w.]xt%Poӻ4Ztt׏,nU?PٽVקey~ !rќ/{v9P*WxF_.%B4ϒoi|?Qj%Kp/q3u[,z63[p7 _߾^ )E.7[黺 v{<)!^+ukBYO />woIv{<6Ϥ{&5}4Kx*%1G燔 G*Hiѯ}V@EyF(b',*0?WI]~iJh$$9\^F?0lx6Na<ϢT3 7.pi@@Ob|{( ~~ZB;1\žGn555e7'йjӮ@4ߛ=:D:o$~Zh"5;ܡ :rrlk/e|ǟ')taROM N9FK,,S_,] \߮g'q5._kV|f~0ߩm4" StB4٩X jnbk˚vxM,&L0XBX<}@h6]vj},6п<ȟ u}nc̡ u:B4n嘆c7+~Sjr?ͣInko|j0> o&Scsj;wL5z<> ԻWB^Y8HyKfzZcر6_Af$lӛv]GyE +3&Ojg1&ǚPT*x>?oLQTGΉb'sQ S"f?O+E̠fy#Yݻ$ē/ _ݨ EEZꕁ JpuH%$R\%KH Kr,|{׬b&(#Aޡm*]d1j cm=~5~fp6]<cäjߚON6GSj #hb)=9-KAJ?ZZ굖z@I,_FՇjb13Ni,oBN|ko f2}D> ^z\E ǯX}480s˫CJ~kJ zͺw 4~̧;z?v#]WOIAOgX7kkȣ2z$)3g?sscؿDS 9^c1]Fo!QRHNN!!Qտ{H(Ֆ8ylS19k)8RozU-Pkzo3b4Req<[Yyej!yek^ :Z Xwܲ ,}F7ΖWwz`xm]@weöTb{ݼqщڠU^|9.m IDATq/{.7/=/}.rKi\Oc08cc-Y_#V`"ݫY}x*ײ/ >H)yosԜm}.;?NWN+T {R`[{YnZ >|To=ԮggN5g9ux9øF _A+ވMm#.Ovą'aÚ˖ݙr6m7x[v䓬a-XMv%6u))8P[ɹvƌҌPv ~0N5 XZ.Ucg\"Zr-XOuMXgpB<%0U~,/%oCfS;z5[{- C٦^qs^va&85ܭII p9AE_󮢮q9k);V_xte'NרդU?޻+?nzyԨ׵hQWO̼}F;o>}Ӵi^tQΝxxFv_4$# Ru)S_Ihp. ]ߴkLOw#I.S#y~̤k3wm:˚7_oYBHxq +(e_Xx3TUU ފ۷o׶gϑ?uÍdcҪ -[mݾ}_ YYZ.޽PV'2?w'$Vy{IC",_FsgŽJiQ՟GM{ܛ|^0jл}|W?{7|]p tHַp^mYG$+G3X XL{N#)XBwšנeesA(-=vg|Aƞ=׷]"v:9~Idf6WF:'ԩ/-W={ed4o!!fqxL_')"zxy@O ;w$aYkLwWghט|G05Llܐ}o铼bKǙL幆zq?K-22G׎~-WwL3Lύ7^hEUigdT|b~&WIuƘ5qcX:ˉx_ݻ?"y>003 k;'!k;GJ] |j򗈦?K&Gӷ qjodI#Ri2٢ߺدFy/Ug?g&[]9͚~GF ֬V-AF~aZCر@Iݛ6Uo޻Ԥ"8<*EG"]Z}!K-S:xyZ[}1Dgpx^kfk(^ܯ4Ͷo,Xnj(O"ez _G};. S)_Tzmۺ~qfv%6Ľ<_oerJZz5ov!SrwNO3Kqx:Gp`_9BWD4;  Ex~oa>I5lwqܴ;ü: g,*z,U!?˨?J*}ΗQY$nXG}QV߲4-m;C͛Wn7ko߇8KK֬پ}>ٙ vT>k۶R͕98m6rcH1G'"<K}+~\Z}&qPo7eLMvm#l[*~A8R:<=׽_kwY2s!@ "}G ~5~EK#џ\Nzqa1r| ~Dw:9R(D*D]"h%J_%q72gG+/r_uib)GuXUfuO^%g,;57ÿs<;z"} M>K^[pV>",,z rpe%uqyi}{ѿznfpF ,!!>d/D&;^`woMԹz[}oyn'߳:7[{oNtx/w1'nQ zſ\R?av^_%R'W3:8Ow2~uHpH_q!5B+k. TrKzHpZ.^y'} |ɺlG/z]6>v *kߟB,=/Kb}Uzu .IAdS`t:]9ՠW@0o1jz` TO=x/;nKŷm}m/> aXHwM7OP!i gQz4>EL8F-wŗVP\tzR *kGLzN姄臰@ ˘OX:D"W _]J*H˒uԻO'!Iqx$Ow?D|J S}&Qqa>Vnᜭ߱Y_ FZTy>9ݻ>dz?JXt+Ʒubie Q\$}z3џ셸"! ,'?4vw%CoDG%ItH].JY ^ͦ^k?C7a9~Χֽ-G0bI~%eszS B| *Ir(?Cg{鯧C<5Ȓ,;}YTj6`4 ?ҜAW%c+xko`14p?g{!M>]sRXAzWYSISI 0!QKqI͒8V`D$0CPM : $nEZe+ֵW^O,-S{"}$|D.EbKH.G;J1= *g(ʁdu!F!"DPs)&H4:FAM8U5)  RUYď,hE#'+"蔓ySDcFaX~e2&RCYY 5;`klEj):;  3DNSTwA4Fa*Et5ENWě]:.FQ4/FESP }9sI.wU#3fUu`ܢEE>K{-R,5?g+o\sDmˋ,.rsI POS8oh~G]on9O1Tp+@*(-ˋ4P*Mu_uC}#v|?5~is   gyyLhtb@cEA& ~b1$n04UTk|h$ޟLJb\|kqqb]Di=9{*N?O<=TW^!W) r7J"a?$ňFw[ou9Sǻ؝{Al-zUi g:ݧT&bcx!)0/xUѬ:]zD??=.ZI!!)?Pz!$o~>ή%kl2bJٚ%I_ R)P%ﮚ|d*'wfs\Qd]B?IJ\*g?$Og*z?I)W/.9[PNʽ ^H}.IjvEוfuJc=O _~.&N$R?AeJ3KRyiJh$O~f<8ʷW#iM~@ytj@F'^^.ſ|(ÃG}d ]t$:SC&k+c#c{5 Ǝ3To~ot7; IP"}Fp[xَ߿avLkrPa?Py_ڝw 5H|,?Y>t1<[c[ fitY|x稹=G-__4/373Fߠyj`&t,afQ'g]WlN??п ֱ+֔¸e#p!,/֑W3֦b7sQjw֖vv?:1ϧ ]OY@w\B{_BJX.c ĝi4n#/!%%tO]J"/W[ګt>2ڶ[>2:y0qFĶR즦#oo%u=vfkӜ4{?" :R`NZ5|QL&1v5E #T x>ϥ\JK<:(t?G֌ ,LsO)c>SΘCzl?]. ̤V}gu㇬KWEpߠ&%Nh(< )}^~FOڨ+%|+^AرN`%ub !)/xSL{x10 uHjÇW]1T)Sɒ_~$1s$~7X ;3EB-&0/?U=zݻTٴG;>ZTcQQM> ֮wX ۯs.22Y!z:v- s7Y../#?DZ>sJ GרQ ׸qoҼR.bީ[ҟ3TKƢR@IXoś!5ez5=zECqsKĺQ3~r 1 `ݻ4^<̡? 0su3`yA$|lZ}K7\Ê%WJ~U/^D3hիn=c jqcΝ/z}V|S/XoRW7&m,BF^G3l꣖XSn;C?W ؾ^f~ow̥[X@wɚJcok+KM>k+8-DDKwe}yc{-.ז+0JO ҪLx]w}>ԝ;{§[CNdwȥ1c'g?0(b3vtz. ` ^U >/bq+%?%o'Q#>ՇXe2'UeƯVpyj Y}xm:X>'kbj#{eI_P'd5u.;BhzÆ5-37Ym4HOon'YÆ֯_cŊ6ٗlԥ$k@mE''3nOKj*iiU:;~jժ #VKR5`yTݩfj2xɿϰ[w &zxa1$٦^Bsfy_gO`,[ZU[{a[{ݛ5&[[{uSO /rYKOBD:Q#-+IVgwW^i77Q kѢ.Tya:w0}in wAA ;72~ÇMpof.^yIr䚻}f44α yw[w2g`8~_pS7C!9> `tbT̼=s?^klSK6~3~c80Gx%#}`+(}#WSNX~(5hUV<+o߾mׯfϞ#݇5*OIK2t迶l[Tu}͛Gge5kݺxnMW#8$s:~{f#McDX.v,^?'TlvKztX?L><sz~ݫn}Ey>v *H&w =*vG؂;Gc+¿k!&iW_Kk)#. !Z_VF;wcW\qdٓ~}ڵ!:l׮ #O:|̦ըSd:'<@o}llf) nHx,HW=?~aL=rqa>/e|t'/Rv mSu5'qt+?{gEk((*GD@Xa x}ZT$!9<"w rDuŏwE`aYYQ>&K{jk&<ԧa)fzoW;xg`q{u-J?ַGYޟC|S0;|fQDG,e=C"N"l"7Y[/>pฦ6m/+˨V Ǐ*#cYFƲРAͭ[KJknܸ'"R6E!/}Mg G$#o'?AO>fVB8=f B?<>jԧ鵞~֬ٽfu~Uv^R;h|DKuxK.;+Glmͫ_gypY}"ş_7k0ڬvJ1sG8_C?`&\Fw]= b/\C| ٝ"SA(L|yԔM]շo+w\uU݄>|bРۨ?;X n?=#BB B H@8L&wxi{Yrip.mz3'KQk>^,ڰH IDAT^O)߻i}6=p_Oy_Dݻ|ǧ+.ER^J~* PA+h`E߿aix׮#-[.j0mcG>߼$fV_c-+WnOM:fZ_^mÆ5H" 7& g~3 LGASrF)s'pt!?;}ֱpi0RJrp͂;Y0e/ߙ-۱%li/g5??ҴOQ:Dc 2ly~Ou J>Ǯ/,_DE z9K([4x~^;;D?}!:E;vD)00qo]w%_KᮄV3 ?;^O7f)D-군iz.Y'0h^uHXvHwSg~Ýz ϰ('_88K-~o$-_xЅ=.JM\Vuz^0k>vQ|3|uvo;5Nޕxi(djk@3y>ӌ~~34;@9=߱{!QSw],?!XzeXwip1YE?D?"$(?vc| t+ypXU<|-lQ&mD`l|67ܮe_ ~ԅp Y8KDPA_5 tDiF_MB<>'OX}H fz^,~X\&B~[I> ϊL۵̢-{9|;u9[<ي^g>=p)I>)K_ K |W9 &p;(&Ÿ9|Ԋ?E?D?"l \PYZB<6~#d({/q_q9%<%ËV/0/f.|^ˇ|𴑛)FqmQMha&eK'4wGyڪ[l>Dy DQ>0P~xayԋO~Cg5K([ j*B_C#H *Sy h*N^6RpQoBDN_X,D1S\`T}w|X_TVM>}= ßSכ2Ei w^%("^TU J_Krز8f$tV^x.iaa>wy͢^5Y_na+z^;~ 8|(vB)'*{<#ǹw\+g&5x*@/jw:9E?@݋0a ].0'hD7kyioBO/X12!XB}˨2Y?#I@LGg|i%IWt2 g%5Y8XF.G3q A_$ j*PwQ8):;Q (G9JM򺪋Z&Ǒb8}q%Zc"d\Zd( rd5,C S.z}/(HsY4Z/p]+i!|Nsu7sΕމ|έ Y.-(9OZwǙ:6#)a)-W3_WZɎe% ,y3v0 zb;i $}MnxĜ7>bOE~E{ ŒvgN/{68}3Nu`@J9\PXCKw4| {L⟱/p7\"٫S.}]ckKO_J{>a6MsfK B,ryE[p?>|lד ՃuV3/z+KZoo)fC T_3"()y .lhA'u 73QҎxxT$E,_A W]Ra]c3⟃.b(X?*֓ō0K3A4ZfӮthb!?,؇EW!/'];kH7HA|'F4Uq-T]鹽N7>k`,PL{ 25n۲۸w*g e>Ro*:?J@*oǽpkFw wedNw@tKo쮻 :ּ֮c̤ ̤vb);eto_\%'4cx͢쀝9ګ7 ]NPNΆo/s 9p/\=6$Kzb<:efY~ԩV&,NM* kW\l8q̆oRO0 ԻOƮk"XJ};bYu=3'|kozDO|JɧĽ] /t L58ҹB L0 hRr4O΍{_}7)zѯ5jp%@OlmP~PD]fsoUN+ wCW't"QP]E|WDu]?P=[|^ԫJ(љu%,Ǡo M@cXW~|Ob$fQ<]i)Ujjjo kR}401-+ NRa BPe+suo6 ?}}ag}*Rs=+;&Dr?gGT)5ν;?۵kwo:V۠Aڂmn]5k:?񄶮wĉwč|]o}Gz(/("B Ex"jS vst%L>(v7şĺ?wH LB<<ߋPٔ43VMa{Z'еO}0\.G>χi5U St{-PSV~2s.IbM>b?[nDbDo8uҹsoWTv߾co}߶mȑܪլ}]0a]~yŷtҼ苓'OG>pXyA u"4 >BrSRPU) 03YYzV~,¹WZڪBiE@k,Fw 3ӂYt$br<+w?ә_B}P,Ŕ0ZՆ Y`͛{˗goٻ{/W*jC~aþ7hٲ^(˿ܹw.۽[k{Xr[5&L[ܪUգ(`F"G?R`Sk(C6yYɟ/y|>J?cHF]&֋z?[ҟkcQ&M_LmE}PKwogݶ3s+yLgL>GhoYDyΥ^\mڥDyz{]ѯ(H;@+O;ǯgwk@\sgeyѓgU9HVeթs6m޿-ZҠAڤIwsN?R cX@oүGQJJ{yUX/|LN Pg]N}>}l^랊ܯliu_ۯH~ia |goM>mk/دDyv½EݣDp@ffYiĈ4(oz5il}YYFj8~W22ef5jձ֭孾:pDT%rE (?yy? KHʽ[}-굕9|ZNx)X56eL5^L?OCoNwig].M>"}Ě|fgKzu)S~ew.n~;Y z m7?w۶CVpد>8=f 95ZO?jCk^fu?y]5;׫!¦(C<,09 R,G񻗩u39gpz0Ge՟-{uNQ|(~[{gQ{ WĊy>)_ѿoRO&>PA+h`DL1RSS6mvmV߾-VqUe' z/y>n~{ڴvYY+;*`I V J~[Kޥ{CD/I2Pd@YoBQ7Wbr^SA*h+Y&Æ))]GZ\԰a޽ǎ9ټ$fV_c-+WnOM:ƍ[;e?0)(A%z(`D?+Aၕp?9wˬ>#׵AlX8>*+)j;H2%ػ -`~t L>7]:r{]'#_Cy?!@|4,'@_A!`_/|Gu#GNӔ /Uh6|]gFqxqkB1eBg GiϿ7@Z}GSc{u(~h7.bB_M}|+#}#bF\_|')QfDG 4KxD4!C''<]dKٽ|{woCYpAV}'0/,5zQoX}D%d;uu_k !a>zXX8EyΡz;B^;4]K؋`!T^B;%yދF/p:GcT*_X37b nG-l],g0_)ɧl3/%޽gѽf~חy V;{򹮣<v9_?C<ՌV!)" ^Q3;5DDyvEߐ*^=j{X[Ffe 4Ӡa) K7:Mqv^LB(U*AO-5x*e_{o!./0V/R} Z ߽ː7?x{^3l-e nC7Xc+ \gb}oYFQWHGb<Sgy5H7.oV|.v|  %Ga8n󺺯a>leQ@-],L>A7ijWE' aI>֛Φ{YY_~,9E? gLWHSyt׵Ux~@φN'U Q鶬>c00bhO v0ǃ! n)cA0o;:}/'o=qJҡuURsdrd ebPRl(oY3Y IDATIfrRݪKe /Wl9[|9gK19\zt/ppS)6 {*R ï(<MR,X[9{f|본?O8xĤEfHJdgo}7,[S_t/gD53[O]3RnN:ç‡6I?o6ݼ cat?%h*94V!Ib U3 NIL8R$!"yTOvΣ@# :od=O*yŎFx.z~@]ku~J痨ѳ=(lޗ(}Cl]/_{25^S2]:Sw~ ǭٌ&?Mc7 R,R3ķ.1_1٤yPܤ`"LUE~^z~ O_h]3 ʁ2zū &R'+uXxikt= Q/%S|<>'D7= QͲ -7v}NJ$LmjBmSցmo/JuLO5ENvLEr Aw?t;ݏUޗb-2j^ԫZ㫝C,џ ꓍EehWBgQ>ljaWNz۪g#~#=B8 ~Qf\jt|Pnآ& +7uA,{CMkyklٱv2+,~8bpEVXC# kQJCLO>vMרD{zx E3(ȟ~gHFE&э`/EG̠{[F3I}l|OC=q\zXnGDW~cKoLYD?"iP)Ɠx2RWz HD53=liw/ /%#b=͖aԔ+~Q M}| T8˓D)ְ23PUy!v5,'D):˟]9B_(.>!b?/l쥏|zژ şPfj"<U ;ɸ=2Lu6[,6}kZ̄wkvz 5ͼ y`@N6 i3(jOK59ΊnD?gË- #FU䑦\׫yٸqnֲ[IIԿX/RETǣ~IXulRY}t~*#[l<{N7hٻ7lܫc~Z?u~Lзtm19!ӳ'VfxMBbvEDRbt,.nꫧ/ѳ|IõQyDS+Su/Ɨo!,F7%s_뒿'!kZ}RaUӨ[{zQoZcps~o`\=َfQZ3VVzmQ@|? Í/_/%guY~^7gNO5yݷhìV&ծ/%s63"< @L ֘OՋe%#/@^[|}KL.l((8Nr2.O1Y}3|*>;^g%F[ì>JP ] nd7JOştUPߥU|QW0Gs3sCoXWca1#i磇)SS8Ϣ e@V$UkΝ{w~~;k(#;߸W_u6A bݺkt~ nn8_|ƍ 8%{۶ ?~2"‚"78?Oc3g-]/(kgoXj6L^C/0T<!/%S֢_=_i ~ew#puo6)fH(r->K(; gE_C:OKKܹ7+*Zo߱߾oo۶}kJJnnHMMj־}.]VNn.tHHq-]4/*ImȑE&Mjoۦd퇚6=דGqƣFvsx8(+ ^Z}̈[~5ҵVz[}lI=b}zCV~c>a>ޠ[?Wcy>?$西5A9z  /f!ڪ|Ն Y`͛{˗goٻ{/W$SR Ɇ 7n|e˺]۹s;\{A)S_ǎz/F zг0Sp=z͎]=Gk6}:ՇGwDcPܨegzE~C_˫F^Bߍ3҇uvZYw!p$xZW|RN)(O?)˖B֕[/kРutӦⲲeeժ_ed,Xiy}͚]vY E&ڴExxjn>%tg5~&~(fj/6ǁ7[g^;|{>?0/YkhيqC/|ۇ Y0v/"s!u ZDݻxBWULs<7?w۶CVpد>8=f B?<>jԧ鵞~֬ٽfuLM~tzrKnh E\\Q (详*s8SC.TBǐ%˻~0k4y>! n^/C뉎< ٬?~d ď|5T(ecw7&Yt2A k^V.&=K*h` zJM)6u[6o+Wꪺ ;|ĠAQ/5ĉS:3f6]ÀGM?")A(P?UPvanpWw(<]%FNu!/Q#e9K|F1 z0Z< 0s⯘|4/it{U>U ?6^b@RW[wE Pt*[Gaix׮#-[.j0mcGCo|qrUE+NVغbul|C6|دfgETmJ L ?R@2JA`_X"էDiVkց˿cՇD鎧d;!̄gQ''{-dj;87y>.^{r޴ˍw ߴs.޶&'4@|IOg@(%Hz˪:Ig?k֗]lץ/rbx(̇{}ֻwo,}~3H}ڹLqoqNGvO[O(RTSp iC%ZGDL R!ո\k[B<0Rm񷻨׽Ƿzį'u>\(ᖽt%gO[)b8F{-F~x Փmץkit e.M>e_Nb_$݌"yERA M>$a)\G\E}@D06K3ýŔ80!.a> nb|4/myAmI\ga=^'SAzV"3l35$5GߚKx1;YDݺxbsߚ _A;'bHG$%xOC%}XF{W}֫{YW^.ǭc]h~z~QfS|D!di?׌W0Y똙~OM>^7߅eӓKC#r LE'0~QoPogK{ǵSd_L[_Xhp}o.Ofw2T+D8~3qzf)~F#b\S͐gks''$S8nJIdnNw_ ?`jd‰KsmEٵ3_uEy:n|:E T{F?#I ",'R9'q۲ P@9 ˜8Dr,F&4ILrΒT/럓"LtRt rd95$fd|ze^H@9OJUNқcI, |rjJK5ǚtf\ԖyԖ)Z8OZaԷyV@}H$[֕/%^{M%c'L4zؔ.7F P;`T|.ݲjLdbݺbc՝Ʌ,:rdT0Hw]؁ YbQ,64wHJhtKk-HczD2 Lik,}mR͸OK rfQ{Y.hDb_\74`o*}:vM2$eteRRqP/ r)Aҗ+x+Wi!YdӐ+->WYb~K\-XF,^L\#Y.eM>\*~^?^OXLLy?)xsIgC}~&@<}!{v&BtD>#~{I,m7B u3[BYwcXȇnJ59'!*/ !2Dy8Z*~çjt~Q5- PBFzUB@?5SuEo5/p$TI WGDl(}`K6른_KwyLǭ9KMMOu.S)5~4~(gpҮG-oAx5ObMB^f~ Zv@&uO:uDj$~eY3 ";|m8yn|r^ȓKud5c1go*'~SwcBď5#J ďox߮ӃWRM8[fRF?@ݙ-dUI>o 7:ܬ7'ԾMսܘC%TΡ{VW0e<4: vwz+-|\@ℝYB! kW\aj b&N8g1s;m_J@Aj^2:-ȭB6GT9ḑ^ .Q&Sex֎fu[Yzp.g,5Uo WbɌvߵ%Lp!5L=KB|l֫q7~$߾,S'c)ę0#YtDդOSu/Կh?O![.yη{VUsFqB9Z~EWyxEI?KϖwV%4%_8VVPJsߊ_xn|IU'SY]O+\n1CWỌ=)wSY!ue7 ),KbtZZGHV キR!ӈ0CQ e86凣|k$RAᗓ'a ~>XK,wt(>0ϓhQ+#XůZ5a*ݮkI ia~er#?-Wnxuo-̝}c)3M3~kM|7ڹ%CA)"snKMV{~,S8E⯤y2_iSqr |-Z$A7{!c9ѯe~M$[̠{;|hu%W?@̣Lo> 0txcş3TQIL'=ܹw^sv22N~Ua*. -XЮou]O\1/黎HI:|ƍ @rƍ{ p&`4fn]p ~|4~~Q`._&߰E BzEo 9|+z+QqS>UI q<--s7Xh}~ӿm#?+)U 55%+YtY9aºooҥyQ'Ojk#G~: ܏ot.eR]ȭ⟇{ ?.0 w?O:na[w9aս? `><uAYk^ 8ށ3LKp|'ߩ0Qy$*{^{⹄Rڪ|Ն Y`͛{˗goٻ{/WRR Ɇ 7n|e˺]۹s;\{AS->PǕvgҟxĽŸc+B^.G,G-^[Jku'7#j^K~JK{0ӥɇg oB3"POYnl^OҿPvꈳ3?sګ?? geE_VU33M#F|֠Ay֋8馧Mee2UX,3sgHJrCgB xγ\II1E-zZHxd.gV0 0Q0@<}۩ϖ:۱KԆ'pj+d|],bQxڮKXg(SVw\b'@ϛZWnH z 7o~mVر_|qzz5 nT<x>0*_˃˥CMFϤ M>~ߛMv.^@Og~ *W =JL|yԔM]շo+w\uUbpA>,.n^{K q%kYr{jM^oŊM`Ŋh>)A(A)c7 䯐EtYx͒?g@?yǚRx2>Ӎ7n~gFЙ~[Ů(&_!K{5Q;b,Ws.GW> WAW7JE>ro8a?B<_8±dO* Kܩ׷0Djσa~L6SPEt˫̤ 3/s.{T7#G^(A /ģAKKxQ QVoz}ujy>_ZXa]T <IG@|~+GyΣb? sD>ZUHGE=8dK͐Di.'P.ەf52s(x`ij}>'!4MY}I\_ldߵWY&kא L>zC~z[/zz`t7?{f_!RW<*Go{_ Kf_Pk]ɇ{l\SHO9=ٌ)G~"wIVg2%x Z^)G;OBF/RC>0(#? > 0)ۢ^&u,UUcoHHL>NM>v^oj nE2D WwL*"‚b!. !b\=| D/˨&NO:-T$Ϥ씒Q TE]n$LXc]ww]EncbIts2pq/#}Y\zb!oxWT/YX0şOytV_ƣ~ ޭ#ρ#ocVQz'xQ83'\;nN 'XO|Yb/\>~<`1~:s1_Ff /* I:Y`b~XHv޺Ԥ[_(i7v,}Eh"#vĦw1ԗV>5g7ֆ6 q[Ci[̸3]RJ, Fsd*#Ψ]ck\z[4M%ﴲa҃ͤGߌ{fh.mQz\_.ms|X}ZH;6RWwo6Up[8Y.NN2 ?Q?"R6ܜ~] dt|zJʱ1 ËJf#}~+skDQv?]WPîXe#?_G\w@[W q<1/E? kWof->D3i~ y,'IRYC( J|Ex:3^{48_|9a%irCj,j7?gA$R$ۙz%,ARݭI F;;[Y@m(MöQHG؁Ѱr":/kpb{3(5,z<Q?dm;HGf=_#qgiDYς @{4%#pn6fej2 jRau0XAx?RoIi~]}] O㷪uբtV/UzNk?5'еCkDI44M_-^ί ,uq\Ӎ@cD7Pq|X7fWz ;O O)t Xs*:?J ď J3͍15ܦW}^g=_/Ek\Vŕ/۳= ;Ϧz㻚vՊ^<! $رz^ԡ^_;2{RU͗~/獛s,Ƈk!uEBhUﲵ&l~(Q_3e'FP,#k1̣]"/~$Y˓ }ETs0 i)~S<x+]VgUp]orz@ݢtϰ=bu`c@eoQpzt2F1,“7_v$SOK0;;PYm 5aJ J2z5(&`7%xۯH;xD|bݍBXH H3_ZgfLA7CMo!`Q(Ɨ񨨡 lJ [?,Js~O`(j.|J-8wR8q{t}M!1^] sី?0 gzg  ?2 cl_cwbyYO Q.h+SNX_J} Tzzz͹so~}ved4z7vÆUF16h`A}[[u͚O<]wĉwh+O>j}{ ?ݲEExOSu2f8M[}*;lb7|ӋT!,^paRߥԷ#4?--s7Xh}~ӿm#?+)U 55%+YtY9aºooҥyQ'O\iȏ]u"w?e>0.EDDI#.Î/7ҹvM>V3;%b磱JE8>l|:owkt]s?o(u:Pgy?ʓ3G|Jbw#u2#'ڪ|Ն Y`͛{˗goٻ{/W$SR Ɇ 7n|e˺]۹s;\{f#SLc7_|k4V׷LK6n38B_B{q`w$LXWp"*B/N굼VIx B.4XDb~.ϧ,X*2a?uv8 暺gO׮]nGѓgU9HVeթs6m޿-3h۶]LY'I=c7 ɑWԿLO4+YV> apJ3̬><JzJKIO5ZF2z gEt9/\D.|Re8O0Do1 [^|qM7=m,.+[_VQUFƲeVaX:<_KJ<8pi?ExB<>jحsx:PM )}v[z>k?{m5 MN N?'O.%[l&Ӭ?2™b@O LT768 Y*K)#ΊLs37?w۶CVpد>8=f B6<>jԧ鵞~֬ٽfuL?4971?qi_V'ВKOLaL{13xȺ䟏.O<ܓAg#p6# WP.}L2Bl_F2Nz{cB\lk%g 4uukL|yԔM]շo+w\uUbqpA>,.n^kF~WU2%c׮Av ޵kpAA{ӏHrJJ0;Kx' .P1 Zw/mBU`^F?zg(,:? X/5q_ɇ Aa+s e/,E Lwp$.Æ))]GZ\԰a޽ǎ9޼$fV_c-+WnOM&XuŊ?pI잪"Q V/LooG$Jg[g?gpo1ýGC(,?$0PqQ ?WRoz"]*s?Cٽ+iEvjD}m`^&QRM>ߚn %SP e.zh?ʺC#'}MęL R S$Y4WlbMX׬} Q.c0qMyMVAϢ޹WQ{=H-jj5!*|%ɞEm HłrQ8=U+Z+[8XKsX0۞=5fZ{2g?፮zX?dioG~g$Tl3ZzYKYo1~xIROsBP 狰U󚑴ߌbK~=Kp"?P+H~F y`f oӼ __!)=LYWf>N xQ;K^jq)?~^~kKW+z=N84d:Υx*XaYTTD(2+f 5%KW#M[̂O~?0gط+8-Dziȧ0mmvo +zu?B\^ϻsѿPS+28(P u}s韀S2)5.Rsto>02 mս72+WS4Nq߮c߰(I %,U9x\k}K_ј`-"dʳq}+Ok(?W0S%L%N QD$)oKॿHPc_'lENL<#֥>\'-g+DwEo0{F> s6̃5^9<7E(4گW|; bK4Oז_+ͷpYf gɲ~<cLG<}e!HKK%oU3ZJʕ77^o%9ؓEٓbV֒!e8)_6eUEHvR1c@2or2{ey,oy}ޗI)wAr/kd(n~]' ձƂw-\]͆me,oO$+ecYbYz 1Y~Fm]*u\ƙQ;2$O3$R_DrS;gH'1C_yWH{J5CsW/鐝2*vWKoD,WfyDz*G?.~&bYwm3% 6Dy2Qſm/s> }wtU#‰_?5aOk +_Hq W vGS()>G_"롚{?:}=vXP} ނ劊b&NogI}`r?t?!)^?ێ^לQixA< . pO!O u\ 9zY7<ʏ)~Iܐ$7kA\8$KԿ3ٴK35,4X Zwaؓ1ڷ˴푵=el2MId1Tvi;uFJ8jֳ ;6x"k烍{81 uOLzo| +|S|T>h0a>1ĉ ð>bpnMQ+2cpq+2ƞƫMylЬ?U~}|`zg&d-kb4ح>&ugM<~IEx._ S`l  T[wvqecxdx[o V, -.AKxpWWc+Ϫ;ckpH+\{|~7lCaЋ@3 꿅c*P#p,Łl,}7Tb7WT%'>]uj|jӮ)Exɶ 2;7w'5'M8 D) Co/KKcՓ9( 80{ەzl낆"7eA(.'AL|Re2_jخk h]kWu ~>ǐxl^lqp\L+'%p[/^PzpJ#yqqw?)Oy>g&h}Fج W޾ Ŀc"gu>~wL]Je%u0e?K=Zm|ܝʀ|$ר]F>(7C߄cc$5x퐑kxK^gͺG^ӫe{{9XHPxE gaKuc1 ,kduֿN{a7q!EGgi\}xS%~ ,dQx[3|i&KIΘCO;A7g Uk}6+CsWoȆ:+OiT瓑fꁅ4[VVW_ݻfάv^Q1hܸ{ ߵ+ok4#ܰpii i2?>i/>uuǀӧ/4kZlS$a+GI{*87ľp ]xU{R֟ʢ^LLAo~]ayʊ^"GBLmem`#I8vc' hz\}?+?_[o}ywnk:-7g,XпW7ֳdgmmfٳߞ1c{MŲgk=ںuZ~?oۖ[V怈%C_d/xkH*cϣW /EHB?`4_I7R80O}RYkw G".KmVEf?NEOu͛?>z;rmҚ͘}?xD߾x,ߔ;*1(w3]V^ꫯNqGF.%pG.T_eUY',^p3S7EfnC/&f.Kgі_Og|Ԥ.__z *ߏU{EG!oO?aUW;v=:nڵRlm^ٹszc~>kW_.*zgР Z56:A8@}}8ҟSNρIqQO+|m|4 ~.Sa7S{lUo+Ow5z}"QT5׹V㯝&,o$>v:qFC>ZݏX,vRޯ߆'k +W]2Y3X`wVVeVVeN33;=?+wS)>"Z n]GsWLI33`}8/uzOOaQb!?5K{RSKq'_jIWyw.saU.0Oa`Ϟ~ɩۿ8w!Cgdi2ɓ/mO<|Ԯ]Gv:gDp'~үwcW^yw~&D)6ET4>Ƌ,N@J}b 6J*GY(c= 6x'ٯ_+4X 'lXv,J[80rǍmۧ}tH:\Mͅxb_3>ԩoO;G7;n yK"xʠ^ ZEW7O e1$CǺ_!EAعXC&[Kp@nKI&cliE楘~;>AR)g}]HL߾vM?vܙ3>X\Q-۶nz3a˖C[\˗?ڵgpAkD4) c gZ3>d#;/cXmx) ^^McF] wmK=I]"TS](xy5f ϸFKaͮ'r_Q"Cd}v̙Z_#8CN'ce\E3Rt}J1Wyfǿ:}<"G`$뵏~QocFXE>ǂ5~V8;ހ-%gֺ BAL#$\0OQO2lb^|[yNXSWǾO9rt +zd޽xɹk|6,U>De^(?@Q8J߿սO``3 %M f¡OxџdH1zK8*ϞwT$gt?!8esD EsOG)Ř|a}M)pQ4x_Q4س3=vK|(/|y̱޾7r. 8!Qٰ_@HQ @m%^hॿӔT _$-Ga|l]37RG`O>Ms^;,ƛ-'FK{x\W3ج赓wj? *}ˆDA/~h_$9 Vc,1c ̗e#$#1 e&Do&% $ȗy%I.^J-UF.ew0D"1ZZbTvbh#Y淕 tm%&=.hs5av=[pmG5]cfGuM?;I:II}QIoogc77m]tM)/\Q}gwiQ Xw}W{=}}dUؐ+6g敒{J%i r2OtZr4#}i':}%dɗue )5ׂL8 |=_rE#"Hf8!yP~C 5xP51:faQ6Z1~7="uY7!OĊPԿ۹Wp,@kRx =۝4ZKSS Ijc ,-Hߐ$ԑ#Mg|Ф'0ܨg!1J֢mC*sx Yt jz^lkYmxiP7jzepьѨء{kG@Fwu~|. m:U `|ly.p&Rk|bQSKiݳ=}zf5xdQAgʤg? iGsB̜b~Ǯg:yTX7LjƇ`x`c,uz m-Kp$خn4ZkvU1nr8H֓1+0k<4Z4N>7g4lմѰЏ"Jc²GB5Xl|\{G;`8ZG F^̃51({Euln1 ܹ 3Ɔ Ǣ 'eRu{+f |?[Jj 1[0 8rഄm'E h)^v.̰]}4(r?N2?4L,}B3DF[ZEWɻS%X&?Vp!OĜ- J!T`` 'O<}"B.Cѐ6d]u8~a?ۄP'OMSofo $ȢfO?_= rԱNM"!G<oP+J_'otzz{akfp]7ܹkWAJ;8 ߸ ]q1p)¢ԇxS1L`pcE>zBL{(]$=ľR;?4ffvzaw$@[7 gm} v{(mY f>.Jdz9aL.+"$m?|Ko±%m{n>FOV^>̙"!r_ cEB*73Qc#3pPMR:^֏P?/>~Xx8䔿!KTy5K{=)o,};U_#̧!ͻQ`?ٿGK },x G-Wu>l#e ͔.mVXXo޼Aeeu{߽;okn.ƍg]NF3bA ޞ&aڴOoo>yDrJ|1/–E fHS2 f30lU|Q9x@cNqQd4l_7 R?}g=א1UhuQ6Y00l_T/z;rSiif}1CYGҥ_ 'Nts-VܻreVf`ʬʜӏ~[׵k nܹMvC\s"C0)sa%8#a ޚxjp/DY!\o? tQDn3Կb/>INIl_W-r?LF L}<{ONmŹs=#M˖IL?O<h;}zçv:kב={L?Fn[?&IoK1f=W/mџ .>WObgG W[o瘉G`xuF@/z֟ GrۑоSѿѓS3ƪpr6, ; SL|y֭{޶>}:$QZzz/AXPl ũM< y ' pH\9aG /Hok 'U$&g}Җ/<ӷ]ӏ;w')733s{Tgy˶m[^LزЖ-y믏@$A`A?p/ X؁|$v~ ;"h\OO)&ޝ"NĘ%x//E۫+d<߾WZ?ZX >;M;jPX8"l6^qfǿ |y>\R5e!~PO3kO!/%|aSaG1xEzY'ƈ쏥gelXvn OP?JA8ŎO||^ ; qd4~| O'g%lv1VDNDEPJ}dYaGA4FrvndTDE+ x**"$Iˠ.?u ~="KXȖ_kv"ZDTlXԾ!$AԿ5!'ѤgQ,XDz'a?_;T"JԕB]AԿ5ҟR^RZKrJc='_+qb,ghQzQ7;H#GRiJ "Zlnߛ")*qW9PD(RWyHJ!f%"[k ||e-0J9땤SaštDl~,3d l*dw\K^[H+i)Kb%_D"_]"9暾m3j^cб\$ݝ#~Oܛ'p&*n*-:P A8~s\a:3* .-Ž/H'Nѥ֧묰BrzӣH觍 #`H.'˄=3#:.!aH18͔4Cށ$UnHR[c`qnAF" $IZG4)MG: 11VhְL62M)뀋Rݦ]pT߹y&Ѥ]ߨv _h:7Q;5vq2;58Tf>Cyh;L<=;tt^`mՙ~j%-JnQOaO%2lWߡZbj5h_'vrE)flqYC9 [4w/Gë,ҷPi弛̇e%ZÇ:˞l=0ZBy#ɅUQ7nXa* K|?7Jj 1[{pJƶaGAL847RFbyjbT,;> b oCaEo*'I ԖBlBliFҿanl)nQ'A.6 o-Ͱ4aK9 ; ST~!0IG61IKޅ "K \`b ~@8KuѤz-߹ȇаG p&kM?==5_3.kuT~#\A$ŽpL84m]a:|Urpû(7M8n(lʢy;wn]U ;=KKoܜ6;FZkk]O! %pA ;g$d_j}O$P-%"CsѮD\'ٿ'r_WKW瓑kkTPOhbb845) 8Ydq"8idj2 .ŗʢ^%/W$.6Eb)HXU,zzr:Ӣg$PXs DWn &W/݈cA.!U$dX4F6W,,woޠAݲޝ7sf5KA޳g]yS^ oOK~0mZ'Mj학?댌mDp3J|T~cE c;/6_ 'raEL|΀gtdxK QcT|w*A'Uޝ*N-~l±~X6,7&FN%%?~W~lهݘّ1ֺuZnw6l3Y^)#1CYGҥ_ 'Nts-VܻreVf`ʬʜߢӿťZ-Z4;sL։ip \PR_"'@4"eE+QF]1j"T(XTJ?pkb&OϞ~ɩۿ@dCthӲeϓ'?_ӧgΟ_bY ]_~CyDDE3ƊdXbJH/WK)a{x1L /YD+dÒL) L0ƌuS.:tr۶Ot ZBA IiRQgf؈&F}0lȩwN=`hΆ=Mc3eOѨѰ9}uv2?[GnGý9Erؔ:q8D=M ")22Vv!>;wuBAAA4AAHAAD!OAAt?AAAAAHAAD!OAAt?AAAAA@AAAB~  ?  "'  C   ~  ?  "'  C   ~  ?  "'  C   ~  ?  "/C1g_IENDB`SimGrid-3.10/doc/html/group__XBT__dynar__misc.html000640 007661 000620 00000027156 12242224150 022343 0ustar00gierschand000000 000000 SimGrid: Dynar miscellaneous functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dynar miscellaneous functions

Functions

unsigned long xbt_dynar_length (const xbt_dynar_t dynar)
 Count of dynar's elements.
int xbt_dynar_is_empty (const xbt_dynar_t dynar)
 check if a dynar is empty
void xbt_dynar_reset (xbt_dynar_t const dynar)
 Frees the content and set the size to 0.
void xbt_dynar_merge (xbt_dynar_t *d1, xbt_dynar_t *d2)
 Merge dynar d2 into d1.

Detailed Description

Function Documentation

unsigned long xbt_dynar_length ( const xbt_dynar_t  dynar)

Count of dynar's elements.

Parameters
dynarthe dynar we want to mesure
int xbt_dynar_is_empty ( const xbt_dynar_t  dynar)

check if a dynar is empty

Parameters
dynarthe dynat we want to check
void xbt_dynar_reset ( xbt_dynar_t const  dynar)

Frees the content and set the size to 0.

Parameters
dynarwho to squeeze
void xbt_dynar_merge ( xbt_dynar_t d1,
xbt_dynar_t d2 
)

Merge dynar d2 into d1.

Parameters
d1dynar to keep
d2dynar to merge into d1. This dynar is free at end.
SimGrid-3.10/doc/html/install.html000640 007661 000620 00000073153 12242224150 017271 0ustar00gierschand000000 000000 SimGrid: Installing Simgrid
SimGrid  3.10
Versatile Simulation of Distributed Systems
Installing Simgrid

The easiest way to install SimGrid is to go for a binary package. Under Debian or Ubuntu, this is very easy as SimGrid is directly integrated to the official repositories. Under Windows, SimGrid can be installed in a few clicks once you downloaded the installer from gforge. If you just want to use Java, simply copy the jar file on your disk and you're set.

Recompiling an official archive is not much more complex, actually. SimGrid has very few dependencies and rely only on very standard tools. First, download the SimGrid-3.10.tar.gz archive from the download page. Then, recompiling the archive should be done in a few lines:

tar xf SimGrid-3.10.tar.gz
cd SimGrid-3.10
cmake -DCMAKE_INSTALL_PREFIX=/opt/simgrid .
make
make install

If you want to stay on the bleeding edge, you should get the latest git version, and recompile it as you would do for an official archive. Depending on the files you change in the source tree, some extra tools may be needed.

Installing a binary package

Binary packages for linux

Most of the developers use a Debian or Ubuntu system, and some of us happen to be Debian Maintainers, so the packages for these systems are well integrated with these systems and very uptodate. To install them, simply type:

apt-get install simgrid

On other Linux variants, you probably want to go for a source install. Please contact us if you want to contribute the build scripts for your prefered distribution.

Installation wizard for Windows

Before starting the installation, make sure that you have the following dependencies:

Then download the package SimGrid Installer, execute it and follow instructions.

win_install_01.png
Step 1: Accept the license.
win_install_02.png
Step 2: Select packets to install.
win_install_03.png
Step 3: Choice where to install packets previously selected. Please don't use spaces in path.
win_install_04.png
Step 4: Add CLASSPATH to environment variables.
win_install_05.png
Step 5: Add PATH to environment variables.
win_install_06.png
Step 6: Restart your computer to take in consideration environment variables.

Using the binary jar file

The easiest way to install the Java bindings of SimGrid is to grab the jar file from the Download page, and copy it in your classpath (typically, in the same directory than your source code). If you go for that version, there is no need to install the C library as it is bundled within the jar file. Actually, only a bunch of architectures are supported this way to keep the jarfile size under control and because we don't have access to every exotic architectures ourselves.

If the jarfile fails on you, complaining that your architecture is not supported, drop us an email: we may extend the jarfile for you, if we have access to your architecture to build SimGrid on it.

Installing from source

Resolving the dependencies

SimGrid only uses very standard tools:

  • C compiler, C++ compiler, make and friends.
  • perl (but you may try to go without it)
  • We use cmake to configure our compilation (download page). You need cmake version 2.8 or higher. You may want to use ccmake for a graphical interface over cmake.

On MacOSX, it is advised to use the clang compiler (version 3.0 or higher), from either MacPort or XCode. If you insist on using gcc on this system, you still need a recent version of this compiler, so you need an unofficial gcc47 from MacPort because the version provided by Apple is ways to ancient to suffice. See also Cmake on Mac OSX.

On Windows, it is strongly advised to use the MinGW environment to build SimGrid. Any other compilers are not tests (and thus probably broken). We usually use the activestate version of Perl, and the msys version of git on this architecture, but YMMV. See also Cmake on Windows (with MinGW).

Retrieving the source

If you just want to use SimGrid, you should probably grab the latest stable version available from the download page. We do our best to release soon and release often, but sometimes you need to install the developer version of SimGrid, directly from the git repository. Avoid the git version if you are not sure, as it may break on you, or even worse.

git clone git://scm.gforge.inria.fr/simgrid/simgrid.git simgrid

Configuring the build

Note that compile-time options are very different from run-time options.

Setting compilation options

The default configuration should be ok for most usages, but if you need to change something, there is several ways to do so. First, you can use environment variable. For example, you can change the used compilers by issuing these commands before launching cmake:

export CC=gcc-4.4 
export CXX=g++-4.4

Another way to do so is to use the -D argument of cmake as follows. Note that the terminating dot is mandatory (see Compiling into a separate directory to understand its meaning).

cmake -DCC=clang -DCXX=clang++ .

Finally, you can use a graphical interface such as ccmake to change these settings. Simply follow the instructions after starting the interface.

ccmake .

SimGrid compilation options

In addition to the classical cmake configuration variables, SimGrid accepts several options, as listed below.

  • CMAKE_INSTALL_PREFIX (path): Where to install SimGrid (e.g. /usr/local or /opt).
  • enable_compile_optimizations (ON/OFF): request the compiler to produce efficient code. You want to activate it, unless you want to debug SimGrid itself (as efficient code may be appear mangled to the debugers).
  • enable_debug (ON/OFF): disable this if simulation speed really matters to you. All log messages of gravity debug or below will be discarded at compilation time. Since there is quite a bunch of such log messages in SimGrid itself, this can reveal faster than discarding them at runtime as usually. But of course, it is then impossible to get any debug message from SimGrid if something goes wrong.
  • enable_msg_deprecated (ON/OFF): enable this option if your code used a feature of Simgrid that was droped or modified in recent releases of SimGrid. You should update your code if possible, but with this option, SimGrid will try to emulate its old behavior.
  • enable_model-checking (ON/OFF): Only enable this if you actually plan to use the model-checking aspect of SimGrid. This mode of execution is still under heavy work, but it should be rather usable now. Be warned that this option will hinder your simulation speed even if you simulate without activating the model-checker. We are working on improving this situation.
  • enable_supernovae (ON/OFF): If you use an ancient compiler (such as gcc prior to 4.6), you want to enable this option to ensure that the whole SimGrid library is presented to the compiler as a unique compilation unit to allow cross-units optimizations. This is useless on modern compilers (and will soon be droped).
  • enable_compile_warnings (ON/OFF): request the compiler to issue error message whenever the source code is not perfectly clean. If you develop SimGrid itself, you must activate it to ensure the code quality, but as a user, that option will only bring you issues.
  • enable_lib_static (ON/OFF): enable this if you want to compile the static library (but you should consider enjoying this new century instead).
  • enable_maintainer_mode (ON/OFF): you only need to set this option if you modify very specific parts of SimGrid itself (the XML parsers and other related elements). Adds an extra dependency on flex and flexml.
  • enable_tracing (ON/OFF): disable this if you have issues with the tracing module. But this module is now very stable and you really should try to enjoy this beauty.
  • enable_smpi (ON/OFF): disable this if you have issues with the module allowing to run MPI code on top of SimGrid. This module very stable, but if you really don't need it, you can disable it.
  • enable_mallocators (ON/OFF): disable this when tracking memory issues within SimGrid, or the caching mechanism used internally will fool the debugers.
  • enable_jedule (ON/OFF): enable this to get SimDag producing traces that can then be vizualized with the Jedule external tool.
  • enable_lua (ON/OFF): enable this if you want to enjoy the lua bindings of SimGrid. Adds an extra dependency on lua library and developper header files.
  • enable_gtnets (ON/OFF): whether you want to use gtnets. See section Using GTNetS.
  • gtnets_path (path): GTNetS installation directory (eg /usr or /opt).
  • enable_ns3 (ON/OFF): whether you want to use ns3. See section Using NS3.
  • ns3_path (path): NS3 installation directory (eg /usr or /opt).
  • enable_latency_bound_tracking (ON/OFF): enable it if you want to be warned when communications are limited by round trip time while doing packet-level simulation.

Resetting the compilation configuration

If you need to empty the cache of values saved by cmake (either because you added a new library or because something seriously went wrong), you can simply delete the file CMakeCache.txt that is created at the root of the source tree. You may also want to edit this file directly in some circumstances.

Compiling into a separate directory

By default, the files produced during the compilation are placed in the source directory. As the compilation generates a lot of files, it is advised to to put them all in a separate directory. It is then easier to cleanup, and this allows to compile several configurations out of the same source tree. For that, simply enter the directory where you want the produced files to land, and invoke cmake (or ccmake) with the full path to the simgrid source as last argument. This approach is called "compilation out of source tree".

mkdir build
cd build
cmake [options] ..
make

Cmake on Windows (with MinGW)

Cmake can produce several kind of of makefiles. Under Windows, it has no way of determining what kind you want to use, so you have to hint it:

cmake -G"MinGW Makefiles" (other options) .
mingw32-make

Cmake on Mac OSX

SimGrid compiles like a charm with clang on Mac OSX:

cmake -DCMAKE_C_COMPILER=/path/to/clang -DCMAKE_CXX_COMPILER=/path/to/clang++ .
make

With the XCode version of clang 4.1, you may get the following error message:

CMake Error: Parse error in cache file build_dir/CMakeCache.txt. Offending entry: /SDKs/MacOSX10.8.sdk

In that case, edit the CMakeCache.txt file directly, so that the CMAKE_OSX_SYSROOT is similar to the following. Don't worry about the warning that the "-pthread" argument is not used, if it appears.

CMAKE_OSX_SYSROOT:PATH=/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer

Compiling SimGrid

In most cases, compiling and installing simgrid is enough:

make
make install # try "sudo make install" if you don't have the permission to write

In addition, several compilation targets are provided in SimGrid. If your system is well configured, the full list of targets is available for completion when using the Tab key. Note that some of the existing targets are not really for publc consumption so don't worry if some stuff don't work for you.

make simgrid                    Builds only the simgrid library and not any example
make masterslave                Builds only this example (and its dependencies)
make clean                      Clean the results of a previous compilation
make install                    Install the project (doc/ bin/ lib/ include/)
make uninstall                  Uninstall the project (doc/ bin/ lib/ include/)
make dist                       Cuild a distribution archive (tgz)
make distcheck                  Check the dist (make + make dist + tests on the distribution)
make simgrid_documentation      Create simgrid documentation

If you want to see what is really happening, try adding VERBOSE=1 to your compilation requests:

make VERBOSE=1  

Testing SimGrid

Once everything is built, you may want to test the result. SimGrid comes with an extensive set of regression tests (see that page of the insider manual for more details). Running the tests is done using the ctest binary that comes with cmake. These tests are run every night and the result is publicly available.

ctest                     # Launch all tests
ctest -D Experimental     # Launch all tests and report the result to
                          # http://cdash.inria.fr/CDash/index.php?project=SimGrid
ctest -R msg              # Launch only the tests which name match the string "msg"
ctest -j4                 # Launch all tests in parallel, at most 4 at the same time
ctest --verbose           # Display all details on what's going on
ctest --output-on-failure # Only get verbose for the tests that fail

ctest -R msg- -j5 --output-on-failure # You changed MSG and want to check that you didn't break anything, huh?
                                      # That's fine, I do so all the time myself.

Setting up your own code

MSG code on Unix (Linux or Mac OSX)

Do not build your simulator by modifying the SimGrid examples. Go outside the SimGrid source tree and create your own working directory (say /home/joe/SimGrid/MyFirstScheduler/).

Suppose your simulation has the following structure (remember it is just an example to illustrate a possible way to compile everything; feel free to organize it as you want).

  • sched.h: a description of the core of the scheduler (i.e. which functions are can be used by the agents). For example we could find the following functions (master, forwarder, slave).
  • sched.c: a C file including sched.h and implementing the core of the scheduler. Most of these functions use the MSG functions defined in section Task Actions.
  • masterslave.c: a C file with the main function, i.e. the MSG initialization (MSG_init()), the platform creation (e.g. with MSG_create_environment()), the deployment phase (e.g. with MSG_function_register() and MSG_launch_application()) and the call to MSG_main()).

To compile such a program, we suggest to use the following Makefile. It is a generic Makefile that we have used many times with our students when we teach the C language.

all: masterslave
masterslave: masterslave.o sched.o

INSTALL_PATH = $$HOME
CC = gcc
PEDANTIC_PARANOID_FREAK =       -O0 -Wshadow -Wcast-align \
                                -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \
                                -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
                                -Wmissing-noreturn -Wredundant-decls -Wnested-externs \
                                -Wpointer-arith -Wwrite-strings -finline-functions
REASONABLY_CAREFUL_DUDE =       -Wall
NO_PRAYER_FOR_THE_WICKED =      -w -O2
WARNINGS =                      $(REASONABLY_CAREFUL_DUDE)
CFLAGS = -g $(WARNINGS)

INCLUDES = -I$(INSTALL_PATH)/include
DEFS = -L$(INSTALL_PATH)/lib/
LDADD = -lm -lsimgrid
LIBS =

%: %.o
        $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@

%.o: %.c
        $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $<

clean:
        rm -f $(BIN_FILES) *.o *~
.SUFFIXES:
.PHONY: clean

The first two lines indicates what should be build when typing make (masterslave) and of which files it is to be made of (masterslave.o and sched.o). This makefile assumes that you have set up correctly your LD_LIBRARY_PATH variable (look, there is a LDADD = -lm -lsimgrid). If you prefer using the static version, remove the -lsimgrid and add a /lib/libsimgrid.a on the next line, right after the LIBS = .

More generally, if you have never written a Makefile by yourself, type in a terminal: info make and read the introduction. The previous example should be enough for a first try but you may want to perform some more complex compilations...

Compile the "HelloWorld" project on Windows

In the SimGrid install directory you should have an HelloWorld project to explain you how to start compiling a source file. There are:

- HelloWorld.c          The example source file.
- CMakeLists.txt        It allows to configure the project.
- README                This explaination.

Now let's compile this example:

  • Run windows shell "cmd".
  • Open HelloWorld Directory ('cd' command line).
  • Create a build directory and change directory. (optional)
  • Type 'cmake -G"MinGW Makefiles" <path_to_HelloWorld_project>'
  • Run mingw32-make
  • You should obtain a runnable example ("HelloWorld.exe").

For compiling your own code you can simply copy the HelloWorld project and rename source name. It will create a target with the same name of the source.

Adding and Compiling a new example on Windows

  • Put your source file into the helloWord directory.
  • Edit CMakeLists.txt by removing the Find Targets section and add those two lines into this section
    ################
    # FIND TARGETS #
    ################
    #It creates a target called 'TARGET_NAME.exe' with the sources 'SOURCES'
    add_executable(TARGET_NAME SOURCES)
    #Links TARGET_NAME with simgrid
    target_link_libraries(TARGET_NAME simgrid)
    
  • To initialize and build your project, you'll need to run
    cmake -G"MinGW Makefiles" <path_to_HelloWorld_project>
    
  • Run "mingw32-make"
  • You should obtain "TARGET_NAME.exe".

Setup a virtualbox to use SimGrid-Ruby on windows

Allan Espinosa made these set of Vagrant rules available so that you can use the SimGrid Ruby bindings in a virtual machine using VirtualBox. Thanks to him for that. You can find his project here: https://github.com/aespinosa/simgrid-vagrant

SimGrid-3.10/doc/html/group__msg__simulation.html000640 007661 000620 00000061261 12242224150 022364 0ustar00gierschand000000 000000 SimGrid: Main MSG simulation Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Main MSG simulation Functions

Describes how to setup and control your simulation. More...

Macros

#define MSG_init(argc, argv)
 Initialize the MSG internal data.

Functions

void MSG_launch_application (const char *file)
 An application deployer.
void MSG_function_register (const char *name, xbt_main_func_t code)
 Registers the main function of a process in a global table.
void MSG_function_register_default (xbt_main_func_t code)
 Registers a function as the default main function of processes.
xbt_main_func_t MSG_get_registered_function (const char *name)
 Retrieves a registered main function.
void MSG_create_environment (const char *file)
 A platform constructor.
void MSG_init_nocheck (int *argc, char **argv)
 Initialize MSG with less verifications You should use the MSG_init() function instead. Failing to do so may turn into PEBKAC some day. You've been warned.
msg_error_t MSG_main (void)
 Launch the MSG simulation.
void MSG_config (const char *key, const char *value)
 set a configuration variable
int MSG_process_killall (int reset_PIDs)
 Kill all running process.
double MSG_get_clock (void)
 A clock (in second).
enum  msg_error_t {
  MSG_OK = 0, MSG_TIMEOUT = 1, MSG_TRANSFER_FAILURE = 2, MSG_HOST_FAILURE = 4,
  MSG_TASK_CANCELED = 8
}
 Return code of most MSG functions. More...

Detailed Description

Describes how to setup and control your simulation.

The basic workflow is the following (check the MSG examples for details).

  1. Initialize the library with MSG_init
  2. Create a platform (usually by parsing a file with MSG_create_environment)
  3. Register the functions that your processes are supposed to run with MSG_function_register (and maybe MSG_function_register_default)
  4. Launch your processes from a deployment file with MSG_launch_application
  5. Run the simulation with MSG_main

Macro Definition Documentation

#define MSG_init (   argc,
  argv 
)

Initialize the MSG internal data.

It also check that the link-time and compile-time versions of SimGrid do match, so you should use this version instead of the MSG_init_nocheck function that does the same initializations, but without this check.

We allow to link against compiled versions that differ in the patch level.

Enumeration Type Documentation

Return code of most MSG functions.

Enumerator:
MSG_OK 

Everything is right. Keep on going this way !

MSG_TIMEOUT 

nothing good happened before the timer you provided elapsed

MSG_TRANSFER_FAILURE 

There has been a problem during you task transfer. Either the network is down or the remote host has been shutdown.

MSG_HOST_FAILURE 

System shutdown. The host on which you are running has just been rebooted. Free your datastructures and return now !

MSG_TASK_CANCELED 

Canceled task. This task has been canceled by somebody!

Function Documentation

void MSG_launch_application ( const char *  file)

An application deployer.

Creates the process described in file.

Parameters
filea filename of a xml description of the application. This file follows this DTD :
\include simgrid.dtd

Here is a small example of such a platform

\include msg/masterslave/deployment_masterslave.xml

Have a look in the directory examples/msg/ to have a bigger example.

void MSG_function_register ( const char *  name,
xbt_main_func_t  code 
)

Registers the main function of a process in a global table.

Registers a code function in a global table. This table is then used by MSG_launch_application.

Parameters
namethe reference name of the function.
codethe function (must have the same prototype than the main function of any C program: int ..(int argc, char *argv[]))
void MSG_function_register_default ( xbt_main_func_t  code)

Registers a function as the default main function of processes.

Registers a code function as being the default value. This function will get used by MSG_launch_application() when there is no registered function of the requested name in.

Parameters
codethe function (must have the same prototype than the main function of any C program: int ..(int argc, char *argv[]))
xbt_main_func_t MSG_get_registered_function ( const char *  name)

Retrieves a registered main function.

Registers a code function in a global table. This table is then used by MSG_launch_application.

Parameters
namethe reference name of the function.
void MSG_create_environment ( const char *  file)

A platform constructor.

Creates a new platform, including hosts, links and the routing_table.

Parameters
filea filename of a xml description of a platform. This file follows this DTD :
\include simgrid.dtd

Here is a small example of such a platform

\include small_platform.xml

Have a look in the directory examples/msg/ to have a big example.

void MSG_config ( const char *  key,
const char *  value 
)

set a configuration variable

Do –help on any simgrid binary to see the list of currently existing configuration variables, and see Section Simgrid options and configurations.

Example: MSG_config("workstation/model","ptask_L07");

int MSG_process_killall ( int  reset_PIDs)

Kill all running process.

Parameters
reset_PIDsshould we reset the PID numbers. A negative number means no reset and a positive number will be used to set the PID of the next newly created process.
SimGrid-3.10/doc/html/bdwn.png000640 007661 000620 00000000223 12242224150 016361 0ustar00gierschand000000 000000 PNG  IHDR5ZIDATx DP1lm rj.e D[ɾ|6V3?Ls'(}>+ Kch` ^ލnIENDB`SimGrid-3.10/doc/html/ftv2ns.png000640 007661 000620 00000000604 12242224150 016654 0ustar00gierschand000000 000000 PNG  IHDR}\KIDATx1K1 G⁂n lE(nࢋMA@ tK%ܕ ]BI%uͅa,e v祫i\tun0oV\$G.&@Y=%$um6'߫9Q\b)0-ZTH`pcsm 5:>ަI F] jgo[ on Ԭvq?\ 6Tee lQ c3*dWTM\rh61F fIENDB`SimGrid-3.10/doc/html/dir_97129c8f3d5a79dcab50d9d2e0877c56.html000640 007661 000620 00000014061 12242224150 023056 0ustar00gierschand000000 000000 SimGrid: examples/msg/gpu/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
gpu Directory Reference

Files

file  test_MSG_gpu_task_create.c
SimGrid-3.10/doc/html/structsurf__model__description.js000640 007661 000620 00000000533 12242224150 023570 0ustar00gierschand000000 000000 var structsurf__model__description = [ [ "name", "structsurf__model__description.html#a740c20b38e538e3696a09c873b6fd36d", null ], [ "description", "structsurf__model__description.html#a5eaeaa936d28f0f7ba00ba8eb59a80b4", null ], [ "model_init_preparse", "structsurf__model__description.html#ae86f5b47c6be7110e8b6af4f30c60353", null ] ];SimGrid-3.10/doc/html/tracing.html000640 007661 000620 00000102217 12242224150 017244 0ustar00gierschand000000 000000 SimGrid: Tracing Simulations
SimGrid  3.10
Versatile Simulation of Distributed Systems
Tracing Simulations

Tracing is widely used to observe and understand the behavior of parallel applications and distributed algorithms. Usually, this is done in a two-step fashion: the user instruments the application and the traces are analyzed after the end of the execution. The analysis can highlights unexpected behaviors, bottlenecks and sometimes can be used to correct distributed algorithms. The SimGrid team has instrumented the library in order to let users trace their simulations and analyze them. This part of the user manual explains how the tracing-related features can be enabled and used during the development of simulators using the SimGrid library.

Enabling using CMake

With the sources of SimGrid, it is possible to enable the tracing using the parameter -Denable_tracing=ON when the cmake is executed. The sections Tracing categories functions, Tracing marks functions, and Tracing user variables functions describe all the functions available when this Cmake options is activated. These functions will have no effect if SimGrid is configured without this option (they are wiped-out by the C-preprocessor).

$ cmake -Denable_tracing=ON .
$ make

Tracing categories functions

The SimGrid library is instrumented so users can trace the platform utilization using MSG, SimDAG and SMPI interfaces. It registers how much power is used for each host and how much bandwidth is used for each link of the platform. The idea with this type of tracing is to observe the overall view of resources utilization in the first place, especially the identification of bottlenecks, load-balancing among hosts, and so on.

Another possibility is to trace resource utilization by categories. Categorized resource utilization tracing gives SimGrid users to possibility to classify MSG and SimDAG tasks by category, tracing resource utilization for each of the categories. The functions below let the user declare a category and apply it to tasks. The tasks that are not classified according to a category are not traced. Even if the user does not specify any category, the simulations can still be traced in terms of resource utilization by using a special parameter that is detailed below (see section Tracing configuration Options).

Tracing marks functions

Tracing user variables functions

For hosts:

For links:

For links, but use source and destination to get route:

Tracing configuration Options

To check which tracing options are available for your simulator, you can just run it with the option

--help-tracing 

to get a very detailed and updated explanation of each tracing parameter. These are some of the options accepted by the tracing system of SimGrid, you can use them by running your simulator with the –cfg= switch:

  • tracing : Safe switch. It activates (or deactivates) the tracing system. No other tracing options take effect if this one is not activated.
    --cfg=tracing:yes
    
  • tracing/categorized : It activates the categorized resource utilization tracing. It should be enabled if tracing categories are used by this simulator.
    --cfg=tracing/categorized:yes
    
  • tracing/uncategorized : It activates the uncategorized resource utilization tracing. Use it if this simulator do not use tracing categories and resource use have to be traced.
    --cfg=tracing/uncategorized:yes
    
  • tracing/filename : A file with this name will be created to register the simulation. The file is in the Paje format and can be analyzed using Viva or Paje visualization tools. More information can be found in these webpages: http://github.com/schnorr/viva/ http://github.com/schnorr/pajeng/
    --cfg=tracing/filename:mytracefile.trace
    
    If you do not provide this parameter, the trace file will be named simgrid.trace.
  • tracing/onelink_only : By default, the tracing system uses all routes in the platform file to re-create a "graph" of the platform and register it in the trace file. This option let the user tell the tracing system to use only the routes that are composed with just one link.
    --cfg=tracing/onelink_only:yes
    
  • tracing/smpi : This option only has effect if this simulator is SMPI-based. Traces the MPI interface and generates a trace that can be analyzed using Gantt-like visualizations. Every MPI function (implemented by SMPI) is transformed in a state, and point-to-point communications can be analyzed with arrows.
    --cfg=tracing/smpi:yes
    
  • tracing/smpi/group : This option only has effect if this simulator is SMPI-based. The processes are grouped by the hosts where they were executed.
    --cfg=tracing/smpi/group:yes
    
  • tracing/smpi/computing : This option only has effect if this simulator is SMPI-based. The parts external to SMPI are also outputted to the trace. Provides better way to analyze the data automatically.
    --cfg=tracing/smpi/computing:yes
    
  • tracing/smpi/internals : This option only has effect if this simulator is SMPI-based. Display internal communications happening during a collective MPI call.
    --cfg=tracing/smpi/internals:yes
    
  • tracing/smpi/display_sizes : This option only has effect if this simulator is SMPI-based. Display the sizes of the messages exchanged in the trace, both in the links and on the states. For collective, size means the global size of data sent by the process in general.
    --cfg=tracing/smpi/display_sizes:yes
    
  • tracing/msg/process : This option only has effect if this simulator is MSG-based. It traces the behavior of all categorized MSG processes, grouping them by hosts. This option can be used to track process location if this simulator has process migration.
    --cfg=tracing/msg/process:yes
    
  • tracing/buffer : This option put some events in a time-ordered buffer using the insertion sort algorithm. The process of acquiring and releasing locks to access this buffer and the cost of the sorting algorithm make this process slow. The simulator performance can be severely impacted if this option is activated, but you are sure to get a trace file with events sorted.
    --cfg=tracing/buffer:yes
    
  • tracing/onelink_only : This option changes the way SimGrid register its platform on the trace file. Normally, the tracing considers all routes (no matter their size) on the platform file to re-create the resource topology. If this option is activated, only the routes with one link are used to register the topology within an AS. Routes among AS continue to be traced as usual.
    --cfg=tracing/onelink_only:yes
    
  • tracing/disable_destroy : Disable the destruction of containers at the end of simulation. This can be used with simulators that have a different notion of time (different from the simulated time).
    --cfg=tracing/disable_destroy:yes
    
  • tracing/basic : Some visualization tools are not able to parse correctly the Paje file format. Use this option if you are using one of these tools to visualize the simulation trace. Keep in mind that the trace might be incomplete, without all the information that would be registered otherwise.
    --cfg=tracing/basic:yes
    
  • tracing/comment : Use this to add a comment line to the top of the trace file.
    --cfg=tracing/comment:my_string
    
  • tracing/comment_file : Use this to add the contents of a file to the top of the trace file as comment.
    --cfg=tracing/comment_file:textual_file.txt
    
  • viva/categorized : This option generates a graph configuration file for Viva considering categorized resource utilization.
    --cfg=viva/categorized:graph_categorized.plist
    
  • viva/uncategorized : This option generates a graph configuration file for Viva considering uncategorized resource utilization.
    --cfg=viva/uncategorized:graph_uncategorized.plist
    

Please pass

--help-tracing 

to your simulator for the updated list of tracing options.

Case studies

Some scenarios that might help you decide which tracing options you should use to analyze your simulator.

  • I want to trace the resource utilization of all hosts and links of the platform, and my simulator does not use the tracing API. For that, you can run a uncategorized trace with the following parameters (it will work with any Simgrid simulator):
    ./your_simulator \
              --cfg=tracing:yes \
              --cfg=tracing/uncategorized:yes \
              --cfg=tracing/filename:mytracefile.trace \
              --cfg=viva/uncategorized:uncat.plist
    
  • I want to trace only a subset of my MSG (or SimDAG) tasks. For that, you will need to create tracing categories using the TRACE_category (...) function (as explained above), and then classify your tasks to a previously declared category using the MSG_task_set_category (...) (or SD_task_set_category (...) for SimDAG tasks). After recompiling, run your simulator with the following parameters:
    ./your_simulator \
              --cfg=tracing:yes \
              --cfg=tracing/categorized:yes \
              --cfg=tracing/filename:mytracefile.trace \
              --cfg=viva/categorized:cat.plist
    

Example of Instrumentation

A simplified example using the tracing mandatory functions.

int main (int argc, char **argv)
{
  MSG_init (&argc, &argv);

  //(... after deployment ...)

  //note that category declaration must be called after MSG_create_environment
  TRACE_category_with_color ("request", "1 0 0");
  TRACE_category_with_color ("computation", "0.3 1 0.4");
  TRACE_category ("finalize");

  msg_task_t req1 = MSG_task_create("1st_request_task", 10, 10, NULL);
  msg_task_t req2 = MSG_task_create("2nd_request_task", 10, 10, NULL);
  msg_task_t req3 = MSG_task_create("3rd_request_task", 10, 10, NULL);
  msg_task_t req4 = MSG_task_create("4th_request_task", 10, 10, NULL);
  MSG_task_set_category (req1, "request");
  MSG_task_set_category (req2, "request");
  MSG_task_set_category (req3, "request");
  MSG_task_set_category (req4, "request");

  msg_task_t comp = MSG_task_create ("comp_task", 100, 100, NULL);
  MSG_task_set_category (comp, "computation");

  msg_task_t finalize = MSG_task_create ("finalize", 0, 0, NULL);
  MSG_task_set_category (finalize, "finalize");

  //(...)

  MSG_clean();
  return 0;
}

Analyzing SimGrid Simulation Traces

A SimGrid-based simulator, when executed with the correct parameters (see above) creates a trace file in the Paje file format holding the simulated behavior of the application or the platform. You have several options to analyze this trace file:

  • Dump its contents to a CSV-like format using pj_dump (see PajeNG's wiki on pj_dump and more generally the PajeNG suite) and use gnuplot to plot resource usage, time spent on blocking/executing functions, and so on. Filtering capabilities are at your hand by doing grep, with the best regular expression you can provide, to get only parts of the trace (for instance, only a subset of resources or processes).
  • Derive statistics from trace metrics (the ones built-in with any SimGrid simulation, but also those metrics you injected in the trace using the TRACE module) using the R project and all its modules. You can also combine R with ggplot2 to get a number of high quality plots from your simulation metrics. You need to pj_dump the contents of the SimGrid trace file to use R.
  • Visualize the behavior of your simulation using classic space/time views (gantt-charts) provided by the PajeNG suite and any other tool that supports the Paje file format. Consider this option if you need to understand the causality of your distributed simulation.
  • Visualize the behavior of your simulation with treemaps (specially if your simulation has a platform with several thousand resources), provided by the Viva visualization tool. See Viva's wiki for further details on what is a treemap and how to use it.
  • Correlate the behavior of your simulator with the platform topology with an interactive, force-directed, and hierarchical graph visualization, provided by Viva. Check Viva's wiki for further details. This research report, published at ISPASS 2013, has a detailed description of this visualization technique.
  • You can also check our online tutorial section that contains a dedicated tutorial with several suggestions on how to use the tracing infrastructure. Look for the SimGrid User::Visualization 101 tutorial.
  • Ask for help on the simgrid-user@lists.gforge.inria.fr mailing list, giving us a detailed explanation on what your simulator does and what kind of information you want to trace. You can also check the mailing list archive for old messages regarding tracing and analysis.

Viva Visualization Tool

This subsection describe some of the concepts regarding the Viva Visualization Tool and its relation with SimGrid traces. You should refer to Viva's website for further details on all its visualization techniques.

Time Slice

The analysis of a trace file using the tool always takes into account the concept of the time-slice. This concept means that what is being visualized in the screen is always calculated considering a specific time frame, with its beggining and end timestamp. The time-slice is configured by the user and can be changed dynamically through the window called Time Interval that is opened whenever a trace file is being analyzed. Users are capable to select the beggining and size of the time slice.

Hierarchical Graph View

As stated above (see section Analyzing SimGrid Simulation Traces), one possibility to analyze SimGrid traces is to use Viva's graph view with a graph configuration to customize the graph according to the traces. A valid graph configuration (we are using the non-XML Property List Format to describe the configuration) can be created for any SimGrid-based simulator using the –cfg=viva/uncategorized:graph_uncategorized.plist or –cfg=viva/categorized:graph_categorized.plist (if the simulator defines resource utilization categories) when executing the simulation.

Basic Graph Configuration

The basic description of the configuration is as follows:

{
  node = (LINK, HOST, );
  edge = (HOST-LINK, LINK-HOST, LINK-LINK, );

The nodes of the graph will be created based on the node parameter, which in this case is the different "HOST"s and "LINK"s of the platform used to simulate. The edge parameter indicates that the edges of the graph will be created based on the "HOST-LINK"s, "LINK-HOST"s, and "LINK-LINK"s of the platform. After the definition of these two parameters, the configuration must detail how the nodes (HOSTs and LINKs) should be drawn.

For that, the configuration must have an entry for each of the types used. For HOST, as basic configuration, we have:

  HOST = {
    type = square;
    size = power;
    values = (power_used);
  };

The parameter size indicates which variable from the trace file will be used to define the size of the node HOST in the visualization. If the simulation was executed with availability traces, the size of the nodes will be changed according to these traces. The parameter type indicates which geometrical shape will be used to represent HOST, and the values parameter indicates which values from the trace will be used to fill the shape.

For LINK we have:

  LINK = {
    type = rhombus;
    size = bandwidth;
    values = (bandwidth_used);
  };
}

The same configuration parameters are used here: type (with a rhombus), the size (whose value is from trace's bandwidth variable) and the values.

Customizing the Graph Representation

Viva is capable to handle a customized graph representation based on the variables present in the trace file. In the case of SimGrid, every time a category is created for tasks, two variables in the trace file are defined: one to indicate node utilization (how much power was used by that task category), and another to indicate link utilization (how much bandwidth was used by that category). For instance, if the user declares a category named request, there will be variables named prequest and a brequest (p for power and b for bandwidth). It is important to notice that the variable prequest in this case is only available for HOST, and brequest is only available for LINK. Example: suppose there are two categories for tasks: request and compute. To create a customized graph representation with a proportional separation of host and link utilization, use as configuration for HOST and LINK this:

  HOST = {
    type = square;
    size = power;
    values = (prequest, pcomputation);
  };
  LINK = {
    type = rhombus;
    size = bandwidth;
    values = (brequest, bcomputation);
  };

This configuration enables the analysis of resource utilization by MSG tasks through the identification of load-balancing issues and network bottlenecks, for instance.

SimGrid-3.10/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html000640 007661 000620 00000015660 12242224150 023133 0ustar00gierschand000000 000000 SimGrid: include/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
include Directory Reference

Directories

directory  msg
directory  simdag
directory  simgrid
directory  xbt

Files

file  xbt.h
SimGrid-3.10/doc/html/closed.png000640 007661 000620 00000000204 12242224150 016677 0ustar00gierschand000000 000000 PNG  IHDR KIDATxm @!Gk7-`&sts@k}2 P%_N .:0Dk›x" ֛)x5IENDB`SimGrid-3.10/doc/html/ftv2cl.png000640 007661 000620 00000000705 12242224150 016634 0ustar00gierschand000000 000000 PNG  IHDR}\IDATx;H#Ao4ႇK ,m vڞJ XY B|drcvoİ 0Ò3ͤe״1X8nQ88֧3*rb-$P1@Z-#011HkK wO@!fuc;sB[EA\>]Pzf| +g5b i5mM_q,cod!,{Y,zT8H]𤕘7/8Q!F~6?Y A@Ũ.@TYr8*>?e[6xIENDB`SimGrid-3.10/doc/html/navtree.css000640 007661 000620 00000003764 12242224150 017114 0ustar00gierschand000000 000000 #nav-tree .children_ul { margin:0; padding:4px; } #nav-tree ul { list-style:none outside none; margin:0px; padding:0px; } #nav-tree li { white-space:nowrap; margin:0px; padding:0px; } #nav-tree .plus { margin:0px; } #nav-tree .selected { background-image: url('tab_a.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } #nav-tree img { margin:0px; padding:0px; border:0px; vertical-align: middle; } #nav-tree a { text-decoration:none; padding:0px; margin:0px; outline:none; } #nav-tree .label { margin:0px; padding:0px; font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } #nav-tree .label a { padding:2px; } #nav-tree .selected a { text-decoration:none; color:#fff; } #nav-tree .children_ul { margin:0px; padding:0px; } #nav-tree .item { margin:0px; padding:0px; } #nav-tree { padding: 0px 0px; background-color: #FAFAFF; font-size:14px; overflow:auto; } #doc-content { overflow:auto; display:block; padding:0px; margin:0px; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #side-nav { padding:0 6px 0 0; margin: 0px; display:block; position: absolute; left: 0px; width: 300px; } .ui-resizable .ui-resizable-handle { display:block; } .ui-resizable-e { background:url("ftv2splitbar.png") repeat scroll right center transparent; cursor:e-resize; height:100%; right:0; top:0; width:6px; } .ui-resizable-handle { display:none; font-size:0.1px; position:absolute; z-index:1; } #nav-tree-contents { margin: 6px 0px 0px 0px; } #nav-tree { background-image:url('nav_h.png'); background-repeat:repeat-x; background-color: #F9FAFC; -webkit-overflow-scrolling : touch; /* iOS 5+ */ } #nav-sync { position:absolute; top:5px; right:24px; z-index:0; } #nav-sync img { opacity:0.3; } #nav-sync img:hover { opacity:0.9; } @media print { #nav-tree { display: none; } div.ui-resizable-handle { display: none; position: relative; } } SimGrid-3.10/doc/html/structsurf__model.html000640 007661 000620 00000050224 12242224150 021360 0ustar00gierschand000000 000000 SimGrid: surf_model Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_model Struct Reference

Model datatype. More...

#include <surf.h>

Data Fields

const char * name
s_surf_action_state_t states
e_surf_action_state_t(* action_state_get )(surf_action_t action)
void(* action_state_set )(surf_action_t action, e_surf_action_state_t state)
double(* action_get_start_time )(surf_action_t action)
double(* action_get_finish_time )(surf_action_t action)
int(* action_unref )(surf_action_t action)
void(* action_cancel )(surf_action_t action)
void(* action_recycle )(surf_action_t action)
void(* action_data_set )(surf_action_t action, void *data)
void(* suspend )(surf_action_t action)
void(* resume )(surf_action_t action)
int(* is_suspended )(surf_action_t action)
void(* set_max_duration )(surf_action_t action, double duration)
void(* set_priority )(surf_action_t action, double priority)
void(* set_category )(surf_action_t action, const char *category)
double(* get_remains )(surf_action_t action)

Detailed Description

Model datatype.

Generic data structure for a model. The workstations, the CPUs and the network links are examples of models.

Field Documentation

const char* surf_model::name

Name of this model

s_surf_action_state_t surf_model::states

Any living action on this model

e_surf_action_state_t(* surf_model::action_state_get)(surf_action_t action)

Return the state of an action

void(* surf_model::action_state_set)(surf_action_t action, e_surf_action_state_t state)

Change an action state

double(* surf_model::action_get_start_time)(surf_action_t action)

Return the start time of an action

double(* surf_model::action_get_finish_time)(surf_action_t action)

Return the finish time of an action

int(* surf_model::action_unref)(surf_action_t action)

Specify that we don't use that action anymore. Returns true if the action was destroyed and false if someone still has references on it.

void(* surf_model::action_cancel)(surf_action_t action)

Cancel a running action

void(* surf_model::action_recycle)(surf_action_t action)

Recycle an action

void(* surf_model::action_data_set)(surf_action_t action, void *data)

Set the user data of an action

void(* surf_model::suspend)(surf_action_t action)

Suspend an action

void(* surf_model::resume)(surf_action_t action)

Resume a suspended action

int(* surf_model::is_suspended)(surf_action_t action)

Return whether an action is suspended

void(* surf_model::set_max_duration)(surf_action_t action, double duration)

Set the max duration of an action

void(* surf_model::set_priority)(surf_action_t action, double priority)

Set the priority of an action

void(* surf_model::set_category)(surf_action_t action, const char *category)

Set the category of an action

double(* surf_model::get_remains)(surf_action_t action)

Get the remains of an action


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/dir_92db932c96b71876a62b1386c1d468d9.html000640 007661 000620 00000021502 12242224150 022633 0ustar00gierschand000000 000000 SimGrid: src/msg/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
msg Directory Reference

Files

file  instr_msg_process.c
file  instr_msg_task.c
file  instr_msg_vm.c
file  msg_actions.c
file  msg_deployment.c
file  msg_environment.c
file  msg_global.c
file  msg_gos.c
file  msg_host.c
file  msg_io.c
file  msg_mailbox.c
file  msg_mailbox.h
file  msg_new_api.c
file  msg_private.h
file  msg_process.c
file  msg_synchro.c
file  msg_task.c
file  msg_vm.c
SimGrid-3.10/doc/html/group__XBT__replay.html000640 007661 000620 00000024713 12242224150 021344 0ustar00gierschand000000 000000 SimGrid: Replay
SimGrid  3.10
Versatile Simulation of Distributed Systems

Functions

void xbt_replay_action_register (const char *action_name, action_fun function)
 Registers a function to handle a kind of action.
void xbt_replay_action_unregister (const char *action_name)
 Unregisters a function, which handled a kind of action.
int xbt_replay_action_runner (int argc, char *argv[])
 TODO.

Detailed Description

Function Documentation

void xbt_replay_action_register ( const char *  action_name,
action_fun  function 
)

Registers a function to handle a kind of action.

Registers a function to handle a kind of action This table is then used by xbt_replay_action_runner

The argument of the function is the line describing the action, splitted on spaces with xbt_str_split_quoted()

Parameters
action_namethe reference name of the action.
functionprototype given by the type: void...(xbt_dynar_t action)
void xbt_replay_action_unregister ( const char *  action_name)

Unregisters a function, which handled a kind of action.

Parameters
action_namethe reference name of the action.
int xbt_replay_action_runner ( int  argc,
char *  argv[] 
)

TODO.

Parameters
argcargc .
argvargv
SimGrid-3.10/doc/html/group__SURF__resources.html000640 007661 000620 00000013405 12242224150 022200 0ustar00gierschand000000 000000 SimGrid: SURF resources
SimGrid  3.10
Versatile Simulation of Distributed Systems
SURF resources

This section describes the different datatypes and operations related to the resources in SURF. More...

This section describes the different datatypes and operations related to the resources in SURF.

SimGrid-3.10/doc/html/introduction.html000640 007661 000620 00000112131 12242224150 020332 0ustar00gierschand000000 000000 SimGrid: Introduction to SimGrid
SimGrid  3.10
Versatile Simulation of Distributed Systems
Introduction to SimGrid

SimGrid is a toolkit that provides core functionalities for the simulation of distributed applications in heterogeneous distributed environments.

The specific goal of the project is to facilitate research in the area of distributed and parallel application scheduling on distributed computing platforms ranging from simple network of workstations to Computational Grids.

Scenario

The goal of this practical session is to illustrate various usage of the MSG interface. To this end we will use the following simple setting:

Assume we have a (possibly large) bunch of (possibly large) data to process and which originally reside on a server (a.k.a. master). For sake of simplicity, we assume all input file require the same amount of computation. We assume the server can be helped by a (possibly large) set of worker machines. What is the best way to organize the computations ?

Although this looks like a very simple setting it raises several interesting questions:

  • Which algorithm should the master use to send workload?

    The most obvious algorithm would be to send tasks to workers in a round-robin fashion. This is the initial code we provide you.

    A less obvious one but probably more efficient would be to set up a request mechanism where client first ask for tasks, which allows the server to decide which request to answer and possibly to send the tasks to the fastest machines. Maybe you can think of a smarter mechanism...

  • How much tasks should the client ask for?

    Indeed, if we set up a request mechanism and that workers only send request whenever they have no more task to process, they are likely to be poorly exploited since they will have to wait for the master to consider their request and for the input data to be transferred. A client should thus probably request a pool of tasks but if it requests too much task, it is likely to lead to a poor load-balancing...

  • How is the quality of such algorithm dependent on the platform characteristics? on the task characteristics?

    Whenever the input communication time is very small compared to processing time and workers are homogeneous, it is likely that the round-robin algorithm performs very well. Would it still hold true when transfer time is not negligible and the platform is, say, a volunteer computing system ?

  • The network topology interconnecting the master and the workers may be quite complicated. How does such topology impact the previous result?

    When data transfers are the bottleneck, it is likely that a good modeling of the platform becomes essential, in which case, you may want to be able to account for complex platform topologies.

  • Do the algorithms depend on a perfect knowledge of this topology?

    Should we still use a flat master worker deployment or should we use a

  • How is such algorithm sensitive to external workload variation?

    What if bandwidth, latency and power can vary with no warning? Shouldn't you study whether your algorithm is sensitive to such load variations?

  • Although an algorithm may be more efficient than another, how does it interfere with other applications?

    As you can see, this very simple setting may need to evolve way beyond what you initially imagined.

    Premature optimization is the root of all evil. – D.E.Knuth

    Furthermore, writing your own simulator is much harder that what you may imagine. This is why should rely on an established and flexible one.

The following figure is a screenshot of triva visualizing a SimGrid simulation of two master worker applications (one in light gray and the other in dark gray) running in concurrence and showing resource usage over a long period of time.

sc3-description.png
Test

Prerequisites

Tutorials

A lot of information on how to install and use Simgrid are available on the online documentation and in the tutorials:

Installing SimGrid

sudo apt-get install simgrid   

This tutorial requires simgrid 3.8 at last so you may need to get the debian package. Here is a shortcut:

Then

sudo dpkg -i simgrid_3.8*.deb

Recommended Steps

Installing Viva

This software will be useful to make fancy graph or treemap visualizations and get a better understanding of simulations. You will first need to install pajeng:

sudo apt-get install git cmake build-essential libqt4-dev libboost-dev freeglut3-dev ;
git clone https://github.com/schnorr/pajeng.git
cd pajeng && mkdir -p build && cd build && cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME && make -j install
cd ../../

Then you can install viva.

sudo apt-get install libboost-dev libconfig++-dev libconfig8-dev libgtk2.0-dev freeglut3-dev
git clone https://github.com/schnorr/viva.git
cd viva && mkdir -p build_graph && cd build_graph && cmake ../ -DTUPI_LIBRARY=ON -DVIVA=ON -DCMAKE_INSTALL_PREFIX=$HOME && make -j install
cd ../../

Installing Paje

This software provides a Gantt-chart visualization.

sudo apt-get install paje.app

Installing Vite

This software provides a Gantt-chart visualization.

sudo apt-get install vite

Let's get Started

Setting up and Compiling

The corresponding archive with all source files and platform files can be obtained here.

tar zxf msg-tuto.tgz
cd msg-tuto/src
make

As you can see, there is already a nice Makefile that compiles everything for you. Now the tiny example has been compiled and it can be easily run as follows:

./masterworker0 platforms/platform.xml deployment0.xml 2>&1

If you create a single self-content C-file named foo.c, the corresponding program will be simply compiled and linked with SimGrid by typing:

make foo

For a more "fancy" output, you can try:

./masterworker0 platforms/platform.xml deployment0.xml 2>&1 | simgrid-colorizer

For a really fancy output, you should use viva/triva:

./masterworker0 platforms/platform.xml deployment0.xml --cfg=tracing:yes \
--cfg=tracing/uncategorized:yes --cfg=viva/uncategorized:uncat.plist
LANG=C ; viva simgrid.trace uncat.plist

For a more classical Gantt-Chart visualization, you can produce a Paje trace:

./masterworker0 platforms/platform.xml deployment0.xml --cfg=tracing:yes \
--cfg=tracing/msg/process:yes
LANG=C ; Paje simgrid.trace

Alternatively, you can use vite.

./masterworker0 platforms/platform.xml deployment0.xml --cfg=tracing:yes \
--cfg=tracing/msg/process:yes --cfg=tracing/basic:yes
vite simgrid.trace

Getting Rid of Workers in the Deployment File

In the previous example, the deployment file deployment0.xml is tightly connected to the platform file platform.xml and a worker process is launched on each host:

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
<process host="Tremblay" function="master">
<argument value="20"/>
<argument value="50000000"/>
<argument value="1000000"/>
<argument value="Jupiter"/>
<argument value="Fafard"/>
<argument value="Ginette"/>
<argument value="Bourassa"/>
<argument value="Tremblay"/>
</process>
<process host="Tremblay" function="worker" on_failure="RESTART"/>
<process host="Jupiter" function="worker" on_failure="RESTART"/>
<process host="Fafard" function="worker" on_failure="RESTART"/>
<process host="Ginette" function="worker" on_failure="RESTART"/>
<process host="Bourassa" function="worker" on_failure="RESTART"/>
</platform>

This is ok as the platform is rather small but will be painful when using larger platforms. Instead, modify the simulator masterworker0.c into masterworker1.c so that the master launches a worker process on all the other machines at startup. The new deployment file deployment1.xml should thus now simply be:

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
<process host="Tremblay" function="master">
<argument value="20"/>
<argument value="50000000"/>
<argument value="1000000"/>
</process>
</platform>

To this end you may need the following MSG functions, whose behavior is described in the online documentation (hint: use the search field to access directly the function you are looking for):

msg_process_t MSG_process_create(const char *name, xbt_main_func_t code,
void *data, msg_host_t host);

Note that it may avoid bugs later to avoid launching a worker on the master host so you probably want to remove it from the host list.

The data field of the MSG_process_create can be used to pass a channel name that will be private between master and workers (e.g., master_name:worker_name). Adding the master_name in the channel name will allow to easily have several masters and a worker per master on each machine. To this end, you may need to use the following functions:

Again, you should check the online documentation for more information. If you are not too much familiar with string manipulation in C, you may want to use the following functions

char *strcpy(char *dest, const char *src);
char *strcat(char *dest, const char *src);

Setting up a Time Limit Mechanism

In the current version, the number of tasks is defined in the worker arguments. Hence, tasks are created at the very beginning of the simulation. Instead, create tasks as needed and provide a time limit indicating when it stops sending tasks. To this end, you will obviously need to know what time it is (reference manual):

double MSG_get_clock(void);

Otherwise, a quite effective way of terminating the simulation would be to use some of the following function:

int MSG_process_killall(int reset_PIDs);

Anyway, the new deployment deployment2.xml file should thus look like this:

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
<process host="Tremblay" function="master">
<argument value="3600"/>
<argument value="50000000"/>
<argument value="1000000"/>
</process>
</platform>

It may also be a good idea to transform most of the XBT_INFO into XBT_DEBUG (e.g., keep the information on the total number of tasks processed). These debug messages can be activated as follows:

./masterworker2 platforms/platform.xml deployment2.xml --log=msg_test.thres:debug

Using the Tracing Mechanism

SimGrid can trace all resource consumption and the outcome can be displayed with viva as illustrated in the section "Setting up and Compiling". However, when several masters are deployed, it is hard to understand what happens.

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
<process host="Tremblay" function="master">
<argument value="3600"/>
<argument value="50000000"/>
<argument value="10"/>
</process>
<process host="Fafard" function="master">
<argument value="3600"/>
<argument value="50000000"/>
<argument value="10"/>
</process>
<process host="Jupiter" function="master">
<argument value="3600"/>
<argument value="50000000"/>
<argument value="10"/>
</process>
</platform>

So let's use categories to track more precisely who does what and when.

void TRACE_category(const char *category);
void MSG_task_set_category (msg_task_t task, const char *category);

The outcome can then be visualized as follows:

./masterworker3 platforms/platform.xml deployment3.xml --cfg=tracing:yes\
--cfg=tracing/categorized:yes --cfg=viva/categorized:viva_cat.plist
LANG=C; viva simgrid.trace viva_cat.plist

Right now, you should realize that nothing is behaving like you expect. Most workers are idle even though input data are ridiculous and there are several masters deployed on the platform. Using a Gantt-chart visualization may help:

./masterworker3 platforms/platform.xml deployment3.xml --cfg=tracing:yes \
--cfg=tracing/msg/process:yes
LANG=C; Paje simgrid.trace

OK, so it should now be obvious that round robin is actually very bad.

Improving the Scheduling

Instead of a round-robin scheduling, let's implement a first-come first-served mechanism. To this end, workers need to send a tiny request first. A possible way to implement such a request with MSG is to send on a specific channel (e.g., the name of the master name) a task with payload 0 and whose attached data is the worker name. This way, the master can keep track of which workers are idle and willing to work.

To know whether it has pending requests, the master can use the following function:

int MSG_task_listen(const char *alias);

If so, it should get the request and push the corresponding host into a dynar so that they can later be retrieved when sending a real task.

xbt_dynar_t xbt_dynar_new(const unsigned long elm_size,
void_f_pvoid_t const free_f);
void xbt_dynar_push(xbt_dynar_t const dynar, const void *src);
void xbt_dynar_shift(xbt_dynar_t const dynar, void *const dst);
unsigned long xbt_dynar_length(const xbt_dynar_t dynar);

As you will soon realize, with such simple mechanisms, simple deadlocks will soon appear. They can easily be removed with a simple polling mechanism, hence the need for the following function:

As you should quickly realize, on the simple previous example, it will double the throughput of the platform but will be quite ineffective when input size of the tasks is not negligible anymore.

From this, many things can easily be added. For example, you could:

  • add a performance measurement mechanism;
  • enable the master to make smart scheduling choices using measurement information;
  • allow workers to have several pending requests so as to overlap communication and computations as much as possible;
  • ...

Using More Elaborate Platforms

SimGrid offers a rather powerful platform modeling mechanism. The src/platform/ repository comprises a variety of platform ranging from simple ones to quite elaborated ones. Associated to a good visualization tool to ensure your simulation is meaningful, they can allow you to study to which extent your algorithm scales...

What is the largest number of tasks requiring 50e6 flops and 1e5 bytes that you manage to distribute and process in one hour on g5k.xml (you should use deployment_general.xml)?

Points to improve for the next time

  • Propose equivalent exercises and skeleton in java.
  • Propose a virtualbox image with everything (simgrid, paje, viva, ...) already set up.
  • Ease the installation on mac OS X (binary installer) and windows.
  • Explain that programming in C or java and having a working development environment is a prerequisite.
SimGrid-3.10/doc/html/group__XBT__parmap.html000640 007661 000620 00000040606 12242224150 021327 0ustar00gierschand000000 000000 SimGrid: Parallel map
SimGrid  3.10
Versatile Simulation of Distributed Systems

Parallel map. More...

Typedefs

typedef struct s_xbt_parmapxbt_parmap_t
 Parallel map data type (opaque type)

Enumerations

enum  e_xbt_parmap_mode_t { XBT_PARMAP_POSIX, XBT_PARMAP_FUTEX, XBT_PARMAP_BUSY_WAIT, XBT_PARMAP_DEFAULT }
 Synchronization mode of the worker threads of a parmap. More...

Functions

xbt_parmap_t xbt_parmap_new (unsigned int num_workers, e_xbt_parmap_mode_t mode)
 Creates a parallel map object.
void xbt_parmap_destroy (xbt_parmap_t parmap)
 Destroys a parmap.
void xbt_parmap_apply (xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data)
 Applies a list of tasks in parallel.
void * xbt_parmap_next (xbt_parmap_t parmap)
 Returns a next task to process.

Detailed Description

Parallel map.

A function is applied to all elements of a dynar in parallel with n worker threads. The worker threads are persistent until the destruction of the parmap.

If there are more than n elements in the dynar, the worker threads are allowed to fetch themselves remaining work with xbt_parmap_next() and execute it.

Enumeration Type Documentation

Synchronization mode of the worker threads of a parmap.

Enumerator:
XBT_PARMAP_POSIX 

use POSIX synchronization primitives

XBT_PARMAP_FUTEX 

use Linux futex system call

XBT_PARMAP_BUSY_WAIT 

busy waits (no system calls, maximum CPU usage)

XBT_PARMAP_DEFAULT 

futex if available, posix otherwise

Function Documentation

xbt_parmap_t xbt_parmap_new ( unsigned int  num_workers,
e_xbt_parmap_mode_t  mode 
)

Creates a parallel map object.

Parameters
num_workersnumber of worker threads to create
modehow to synchronize the worker threads
Returns
the parmap created
void xbt_parmap_destroy ( xbt_parmap_t  parmap)

Destroys a parmap.

Parameters
parmapthe parmap to destroy
void xbt_parmap_apply ( xbt_parmap_t  parmap,
void_f_pvoid_t  fun,
xbt_dynar_t  data 
)

Applies a list of tasks in parallel.

Parameters
parmapa parallel map object
funthe function to call in parallel
dataeach element of this dynar will be passed as an argument to fun
void* xbt_parmap_next ( xbt_parmap_t  parmap)

Returns a next task to process.

Worker threads call this function to get more work.

Returns
the next task to process, or NULL if there is no more work
SimGrid-3.10/doc/html/smpi_simgrid_alltoall_pair_16.png000664 007661 000620 00000243741 12242224150 023346 0ustar00gierschand000000 000000 PNG  IHDR_&DsBITO pHYs+ IDATxwxUM6U*HQP^QAAD&d$R BW!諀yyEAjHH!Mi;S|ŋ|ӧO9  ~^m^@hŊ/\ {ѭ[>sK֭[7mԩS]v=y$3sk;d|t^~eSڵ[o'TZ'x˔)l2S:GAЫ ګz#rrrfΜIyZn=o޼U>ccF^X+˗/'lذŋݺu{BȞ={{n鹑C On%^z&Mo;w,YRҥKB2227o$*U  :I履~_zuhh諯ڸqCO>drrW_}5eʔƍdz&OrH>n _lٲ/ž={<(lP!C:vHrJ߾}7o̟n tu?bڴUG !>{DRL.]x/3t'Ξ=;333--|w4i"< 4 TXQF{^m^@zfC3gN-222p~qu@&##̙376ݴ4/9 *m3RUٳ8СCC\`!#F޽  jժf͚ݾ}mz[{u{ !6m9иq㠠C9r}9G@#_|#4i҄o4hЍ7~/z  5jԠر!!!L:BHݺu?q1cԮ]{;׫ ګh\֭O<.ҥKn^5!$44t.\5G,'>>;tp{O9s233lҽ{M.[,::z̙nݲ+AA}z !Ν0`p[q4 ?xJ||LTgQJjrSݾm*֑^#wGL/8bz T\8=yݻGL6pkn`P5VH8)! 3呓'4n Jl8rDt8A!=]fmp77ˏ7 A#o~1r A?"8O_Vf⥋Fݏ   ~AA |P#  HAAA  GAAu?  >AA$Aݏ   y pc.y "=^p#1GL/8bzx?  >o; RrpFS=m_ Sž>oTFڵ.:7∩PvGN7∹y]vqĔ(UFFg#JA-Z\ PЈ#D2AQQ.1 HOGa>{rz_ vǟ4)bƌ. ӦElT/^\*5A*'G[WgoTnܸpֈ#F6}blGLCöo/~}YӤIS%::?|3K[cСe.?vl8)ƒ~DDЄR_?p 7**.wN̢MJflݺŋc#BzW^ {≫.凄o- %.5kFXW/^̯Y3HMs.J.,}N.UӰaٙ˖e-8b*w-5fv8?<ХK~Sa滛7e;ΛWj޼̢|a2-[ܼ@.!$=޾}:z)?`'Nܛ8&߂#BVLxҥ|BHn.:upTHO׿a*YYDBB([Mع3ԩ1u5r[^JᔵŮ^lJI^iwq4R$MN.5m˗GL*NOWj=xLHp=>Smb?#Bv6;W}5k.\x…{8bkWUy21""hjg⋲?tGL:uϜ7wn:p4W٤h ^xq}7'soHjF2g[n!8b,IK r%Mbe=BٲA3gz啌<A1J̣Gjr#BDDPfe6hpGBV*s=1-DDÆ`Ey0ޏx,(Q[TF#閖-CܪUw3 ._Ο;7_ŊCKPСܨBK jQGL{ÇgR*'O⋻O=#Bv6\tn޽9۶GL]_~)}W u?eNWתW>~U2Iu:v ]l\ܭ o15r ƶʗS=Rbرcdž?PP׮ѡ8b*4hx0~7$޹8b*w\c%tֻnQ48*Gr!=z'4o!ve<[}UGn?9=CAGLh^yVWzb}#rt?9q"/9S9 @8.iBH=z˻8b*G!'"v^ܭ[8bZZٷ-Ey(HtZ,YR(W.(6֖-wU!ѡqqO=uH*1iRGY3fSӦE\xq֒% cr~GLAJL\p-Zxub }z(hŊ;l9:jߟ[d u?b꺟B)X1ڵcg8zS!$FF?O8WGL/8b*8$22ʕw AA$**L1CAz> mAA4ߏ   ~AA |P#  Hq% !T6NO|k]f \%Da5c1]J {h %c%{4 d߸]15j0vo-u]»7{<ČE{oVcAg%{yemF5].͸[ 6b0ޏ   ~AA |!?_ӭYjzըQyS.   Fa7wS40]6\AAA-شnWɒ.l߹_TjÃSS\AAA8.*U"RS;N?t\9:֭]w@  JTvm!CݻO?]l-[޵܁W{ wǣ>|yo9_PK(1u5;uڔ/FRO߯1ṱ5KAA!<1c~>}V2źt!sj"Bq8ƏϹs>ujF5BX>uڴxQ%J8w[AA)DLBHFFN&kSvӧo*URʛgw Rzz^lkwo;th#Bȵkwj4337,,?=,qz/ AAA ,igNg޽ٳRvvޙ3EfRڴ٘zŊv>_5G !!G^U~bOeVׂ   ޼RxҊn?Vt/gLsgΓG ޶av^K!$Q 6&CHM#9 FIbU_($XL'D?t E5lFD?b ;WBH';++D@ÆK#$**ʕ{{NO|k]8s:}7=vt%P'!$u.cc. BL"iBR.c%{@H=1)^gvk`,o?I~Db65ֳGNq*޺y4~?*TOZ<3Y!t&+@Νb r\fGI$B,X1G.3p.xl_j]H>'Ț &  # }Y(h^?܊DacN_D(/JD = (M"DY>/~~M11",ë#`T{V9!D(m3 "</Jgu#xŠnHx?`"k%xzo;fىjjf'Ӊ./!0D+MQn2 ^6VXXA,χ7v$Εld/M% ?v,"w,[uYPIB5nn\>ӈa>O/S=yއo_/kD<9%]\)tAU@07fc"yQ~tgzx/]d3 .՞/iF?M "P*L`BH"S{Rb͑H ~PSy~{D̅)BDzxxz  qA !0+Ϥdjä`j FM- W3^/uWAkB0)@^y>HDh~,M{{'{&̰+_$el%b$x拲` ͩ>0oEa +rbg [7P#HO4f%lZD_}'ƏYF;Bo?^uP#Kbg7.J´x鄒yb56Sh, )|O=>f !P#N"7]̠9qjn@[:MkD%nX@S{pq*@BN[al|xm"N'Sew|||әL9MƮqKa"쵄pn̜Ndj񧄂?N'eRcKlu)4UX .̥.זfpz[-\w'+q{ٖӹwiwZH*\Q[MH3maq}zܹ O(4.6BH3=H>+dl;>>Faݚn b,(/_;G&exoMOi]/߆:*2sS$^AA&WҬoO_WtXT s@?޽C'Ӊ.ZW}Q^Q0#7sWmBIZ=KCq'RU;u(<0Jћ6}MB]WC|J/)\*ƳŠbPy2='jtiLEi`]^SA wMVt#ޅzy]߅oQlc"h6Q=iC7ir Iu7Ev8Qش75oזE]}.jX :7NgaR Md =/Tx^녛GXYku:ߗ3awx]7}h;j*츿y&cRau=+ד@shtaqһPBYS*5\EpbޢGޅviK0tRx^ b-f:F:;]tGo΀R&v #*T0sllF@ÕZŸ`~C#6Mm)`'cb?BP#KlAߐ@shߢH9J-ADI>4>M_% ч텿byDtfE"K,BP0, 4'_W׵(_`{L(Rg͙aW,ʫ8zCz"ٲT~#c( IDATǀ1}^7/ϧJ۷=ZGi 4_@85$ N ؏;* SG_lj2 _W\t*Oo}:w]y֮G;pτ zRk;R~ii}Fj"qڴVs8OG7;zaU=@3hqUƥ=fYTL͆*^b.&C7텙,'HG\x"! wS$$~={O[zp˖w:w0G޵-_o=ziS^8(;eOн{ ^%xEBg3N<9i]a} kAKOUbݖ[ ʇڵǏѥ-[N]v._SZq8Əϑ#SR?~Qr|O:o|Yf"A |b3fy!'OLB2jL쏱2_ o#B/: >K <3n7[,≘CgfB22r4)7o^ڵK>}TbR,==mܽ\лweC]3~ۡCB]S֧6$`BIDuS[J& t'CGLΆ*Yo;mr?cbh>%AA(Yl5iҞJR7xFLJ6WcŊ `Mћzrb$Q&}4Ax(,&!*TJm$xCf%X]C]QϻP[d45O->wS{>@Gs{F\|O,|)}ݻgg޽Z*Ŋ)sfԩTRrܸfgJKvAߪ8EhC w,Rl^c'VKP]oS}\>Rxr8I2x (Y xс(郥%XXر2g6,綻_.1MݺeLA|'6%TN(ɶMoE_(PҫBgC σZ6(~ǐ? kL?C27ul_ 10\Y~"?r$Xƶ/\jh}TT?dge6Ǐߠt ۬zMbֲcǙ%DmNn"o¤SO?'r_DI5| kdD(/m* \w2=;L^E!_7}"H#+D?3GoP3{'^EV Lu8KQo!H2hgC跟B_%᧨e{ AA$E?YJ<Oo -RG3 KF dE,zB r `r9iBUY,g>Եo|E?Իg"+m=WdEQ~? SGgp6*PR'\& 'B9BH@L͆ޝ; Y$C-S1(Xp_d"h:\MGWBh z6a nv70hWwY+ !+t=m1`lå-/]6CtJ~?_s܇2߇Wx.ea~Lv`_k ce!4޳b3Bݚ4ğʲQIj̃Ґ>UyS}| &=;M5^L#-^+Wb&|_YG3 S'B9&=3XJa%5F%lj|\ijz)b|AO+"~^U^Tτȷ ۏlr~FV0ߩ:|vX)O]%|a'~1Qfte ൌE>$+)~z `Iƫ;G/qqE @%H"3g<|s.N'CmtNp oNI! CafvHE*ƥ$3%`t0~N2mDp/ɩ؋)y) WW&gV 't:Z{. BHo5t{ iv?؟LNhG=XϓQ^-v >>2'/̥)Ѿ 6'CUt'>qxLܑg!]5jqjsǕNnB tuyBHC!L^z{4.JOi]m6G|}Mz)KәvLCQdչe 1}LG,,W}_h= ~1{Vk/io$o.5%+}  shл@G_Džޗ/ȂJfSyOO--r<~JBèlN'ֺqLsp?f3ccA zW%k0'xjI>ZY1zNp.BH^nAuESe-Jw&T)ٯvHvgCV:@j 5&Г*̃rsvN:_Z] ߢdMxj]AQk_ ] %g*AC7ioZ*-coн~t(ُ25c)A=~"\C{[=:ոd{f!z(Eq)kBYUzSف9B@n !RAzL7IWCBkK3%oϑ5B[Zn/UƂ]^.€g07]ɷ|{O}2'oOMΠٺNqҬxhAD<͌N{X4}&f|% Sw!#=M/̄HS‹~uD|&s)sD7PǢ7h9atڔtr& ;Cgoȉ~bu>4 9ͧPgxP:<z}yPs`n$~|pEltA&~A~э~Ν \( a~!?44z-T> eQυM!3_ t5 aKc˂$mՑ5ݚթSgkhQ"W0"*ҟp5"g@ yke=3Uk/߃F޺Iއ& Vv1^6@o{##6on3gNݻ_|zWwBB0.Ux鄒u;JπqF;/ ˊ~߬f$̆ʓ9`T-I>q 0g14~tχ~cm/|U^6I$7.M[Xӿ?F/TߞK#Y(!ψPR*Ccn}0$|p;PDO˅Bl!E)}(S{/Rys+ j*U"RS;N?t\9:֭]w@  J1Vvm!C5[|0!a_~_L')f 9zյk}w,\xpu{HLlݷo}yyžOfMʍԩ]gubqP̊fq!ҟ (5Jy !BZ 7~R}ޅz|#I1g)~87Pb=qOHHИ1?]{]l߲Եkw;ժ,t8Əϑ#SR?~QNc}i~wWN~a֬_݃ HAsR o 8zȅ^ 'YBFTגcO$͘ x{Ro'ԋ >Xٳ&Mڵ![t-U7KO/>޽\I޵##˖ %̟6#cDFƈ'^zȟG8+_0m5"US< $WmJ77)2~t^ӧ5Y,c/Àe(Sӷv>}{jUD+͛9SRJq㚝9s+-rZBj(a3&wg+V X1db&$+xiҟx(牥WbFgAWRNC]|ރAc_djrBRhkiRJpSy~V vAu.y\sb3*l]|Jʱ0DZc=dH;6l^dfwm} !C6 N. pa qF%In?BCPf_Ю_g>ƙJ/Z 5 zyPGhIH/f)eyb^/jrC.#m'~Jyb>X-v~!9r$Xƶ/\jh}TT?dge6Ǐߠt ۬zBBbֲcǙ%ĕ>=FqP$jm3BD-6=VBkzB,6O j M*lމ%̃lc۬l3ski_aX;!=h6A CK]%}BkNCJG~#!5ۊ_uN\'{қ~*{fςV1 r<ۼA)I$Q ԽC'xzGosaEgLgBŷECSyW/gW*ϋ~ֹ1jyЎRߢ'%/JA|_ x!c %O\E fX`zb$ @s%x`?G3x?) D#߻D?SVKQQc,J~}ڻģH=)V>[vYFѿz\G$xTӻD?>>Ϋku?OCS@`" tW鯎ېJB MgCU}=cQO==RF4]) i z.)Ȋ~r~dE!U@31oߺffQϦpo >$X BwD)4 W 2|bwlcTs/3 5&ғIB<15XNPa>|{ЈUK2k4=6hz.ɇ%k4I¨tt^o16BGˠ0 }<.S,CNbW`X J6nrn thŮt3H^}2=7΋4e# zxvz+!@0'^fLx?$XtpLGͳT zE>nm_,?B5ق |_l@d-󠖉/KWd,}~FY o-tχ"gA~ďII4MӦ߾PIx~?hO$By<1^C鳽HOU1H6&ݦ[oEД{(}+WV.,϶4W1Oӫ|?x]J>kBu#D~I4pL]âkN3LV꼲!~kDW"ƀWR}1D%7EBKgS{^Js{UR_=EBX17t%k z ߯ !v*MSb^+-| V@ݏ4?ND_!e8oPO=gDM^!6XRG{RB֬km^"^Qz£RŸ]au 6KǥgdPR<|u: !$b!˜YNiI]okI`B < &cB9pcsq jqNk~(ńq +f.!&Nv:I||Lin+!췋e4_][||L9\4*P훅Z_Q]4s:﫝!NnYS͏V~>VIάuE?626GH(WB2ޮ2UlR;NU9NgBǜC1չC<1BܟgjrGܝҽ'Ύ)~V;ŏ: Sr2Rqi7 vp:GmȹOl]66. !+Cn}o]0wan` 4c؟:% tXN7ؿ{YEn%[=^ RLc=FY7=+1߹a>fG ^]տՒEv+uuK)R?sџb W G>/=ī|V\f oXI/d ҏマ6)_S(>Xww yDZYj*jf'Ӊ.qxN%'6W2yHUT^s+RϺ}M݊ZU Z&1(;TJ/Z w dAK\r6TL -})=a%P}"=IZ_2j VR$Csf6WX|p=,j4KWv!<<4X '.AQa1<2 Se=śƖ# Zٖco=Ro>#/"?tޥ0I [g{~rE&:BJ@Ww d9t*\W-L/Ba+_~Wׇ¾]@/(LBH jAB^ xP#G7҉@3O<ghHѵVdzn6Tx' M_˭K K%>v-ZKmabƵEkC:71K&v^+o5^$BD}IXkI'Q|CHArx[lC7⏘ˋ43m/6ԭ[vmڬ8:t,>Csi߉ 4g͙!Pq~}GBX_I[Oi_PƇ=*;Kz&sݚ6|TQsg ҨR%"5OΕ+o~0cJkv2Di-jp|GYI};7(+S 7RA4As! ,q-&-yP4WK~@;{R7S{Mg)Ny>NC鷲|3ݞMp%}VCL1saXZ/p>}jl`B׳?ǿ2eORң͚=@ s]kj}Xmֽغo: \Bw11-v虔ܹL{^!ج !S}|*Oq-O!ҫ&Q67? 3׳\ DG!b_ ?Yȟ_Mٮϖ4M,"xbcލ0Ⱥ)CBƌyǏe-]{?/ߩV-8Aȑ))GѨQ9t>֧O7],_ޤTҥ]x}U!~M,~R}؏]5ψ7 Q =1LB!$ƨk3~)c Amxo|jOU*IHN}~ t2қ,>$`^u 򴴤 "|8{6ӤI{{^6d˖Jf,crn^ppA'{׎ /[62~ی#Nx?qqtyhhњpE@b$Qb1fK8<bXzH34B5at_@OZ#d<=Ƥ~DFU{GӃ|_W#K sb)^d9D{+g+3HAH~>Bzt4iOJ)͛oq#Gd&M+VbEtP]@tM={n#4k[o5=r^ąBm?\4>,ylKxPg*4SwR?HY".+ٽPkI1 Rxʊn?:Yڍm3]K a5O߁\Ly CSM Kk@qrm:O{{ݻWR%Lܛ7sNJ5;sVZ崴^%͛?D]3k`k_0x+1oKG5e`ǩ>sDzZ%ݫN2Ԋ'nK׮5\n# MWzt= []̇@ΝgrrO+)i9;G^3z@f?J1D26r qd/p cBtET$GV~S?pWګHReBwX?nLޭ)xKk|RėAݏ x^,Gdz-C*(g14LjuǻHS}D@C^~ !!4QLُJ9:׃IY?GVg8=tuLi~0y2/M>R¿]'ݗKz-+ME{NgթAaQg6D),֫ 5&3j_i"JZ.L/&Z|Ä&=.އY_W~{2Z\%<"1g?VK׬̺;iMIu? KcvȟB/̂J|&iKiJ_ ]_ YM7X󌡿B_Mخ^݆uݢToJ笤O@' ݩ'(-𼷽uE< P#g W7C?/ߢG߅E5#Bz27i)c<şa]C迍3T {At; @wo2lzr`,U]E/fKk"<.vq-o!J6"Ab<@}w|L(JbY9WO)--b$1 8dUXs!LPNf~IS>$ɊŔ涺k!Nw!RSS<54{9S||| Kq:\Nӛ:ɋ^bC !l/o ӿ'Kg·l-zo|sü!ca~x'[ a)"hƶAٷ|Iϛ4Y,#鯄%ЊmH}<#>*M*xG!$~r]K<?e=_GXc }J}-E?a9tf%ҝDmi_]^'j~`%te3WB7B`6p%?\U|`;فKYUЃm [RG/Xc*z:aCtf^v- `!D"-&noRh M?қ~mnnW{O4+Oz> 0Oa_xȃ ?9^KR_#驹: 3bdUq=:B{ O~@Xzx,=DV-%-32^_$} |O.>unCk/D~~Ƕ/P#b9J?n!!s/a.醵H ~1޿`~APQI`DzV_Ik ρj<,G[çx,y/ PB>_wBhzP_ ؜<&׾|~RuN5! )1n]=p: t+{(^ܑ%++΋" `!-x}-zכ35&ГOa`?`6/MIh5S1 !DKC@?-SТB[ZCU} 2Dܯ%ɇ--+⛸THM8}z?ӹs[v=z߁}&L(Tvm!C6@b>V~s'?{gUuVEPDP\@+Rĥ.JŅa ĺRP@$E-uEJ[-R Afg63Os̹'+} s9}UvZwfY֭[x㋫Ws￿kǎ[W7feպ޿mmi[С1.k׵kŎuӞzꉳf]?p~A?a|_p%0HVS+Eo}~O<ѵ3ltMg5jT⋛vpj]DDDQ_?oS]{ ?O ymz=l^b=u_)+~zi)[;lW߱-.ᴩWtt!>4'Oٝa%i]z}7/iŞ=uÌ\qŊ???V-1슜E&t0Kf{~]kbe~j)z^Wj.tߺu_:c[jPNϽ{?[Z5瞎}jGUՎMA^ur~]Q("(2Lsb:1 Ũap4~>_>Dͽ\H+?Jp3#2|^3.Nb &{XmܟI]_=}>sZW}d}[Vڄx..^8W+'#(~_kD ü/-R^֖-7v'nF|u+f߈ `fc}1/}i.KI 51R$uCØ䣓6]/z}"bs]Sw~HܱK_DpBg4~%R^]N˨7؄c2^0Ӧ^_'3_I#BbB~ͻ_СEv:p1f=3Î3k~VLs~>SEPit0Ob:)w(6.&^h4g/C|<~μ?ӝT,3OUzY;goP)\˝v; ׻I+>) IDATac_=ʓ Ceg3hw!=Ha>_J7;xCVԯO~ŅWO%?.f+"  @ʱ}ǨN>Hג?<;j^ߑ!CSU_h+ /~SϏ <`!ugo{#,<H/e~Xc߯k핢HY ?""H?D?߾̟nu1+.j\ G<LcVٝM@{p\7UF_m_VB]/OL1*aZ#aH?5߽$;X~_qI%;SK2bzwɇ>a6xoM7oo ;ӯݛ/Z{ ױȬ+SSNTgnwo% O# ѐ֢EǨboŸ/F<^/"F"ibto aܟ%S^ctnpRBDyr,]OnUd46#~/&Wo=; "[`8_,&%X1GZ&}p)xhQy8">g"=qNOg7|7 K ITǨPEXsp,M|t{qKRG6wfRE~z]{Sp;شkEgSqNޞ ڵ M G''QITg2v^?QW:g^&%.%Xu_گ0.L#jSP?|1,=KVߩg]pKl#{O唀vo=CW>V6!ݻdUc^bD$׫iƅ"Ghc1b*18@zI@$ˏX &'< xu4/Šv]O◗Ey,k+e\\}Jf!Пٔ>ucNeһqi;|E&V@ߊAQӦ(~栦 s%3IK4;4ǘ,FSd#f&'\.bx0~peĨ/Y|gV耀R Kqd 5)¯M&I7 ~KWG?Dc9zZݏ۬FZ-#G_Ө8X?r8/np<ϽHS'yͿ,2K)&s~Ø0Ow'b>nC;7&^rOSgU0:*<.|H fewOy.l'? +Gk>681t57u9tp\'ϡk9G9R̥V_Y;q QP|9~Rd7M{ELcM|0 L}p -qGw2=tI{e>qԕXSlQkuBJma}`ѯ>Lg$R!.C%T<*iS7Xwoˇ̢? kQj#Ƌ "{?B~#yw=NU3o{4+g1rb?;_؟A-Ոb?3_ `Y9>Un+n_KϠOto=ɦ3'\ OoSG2>)9:ŋq&%;|RUK3Al/L>eÏ"B/Fg;ӧG |䟉{M>Ί2c&_038C|R?YzIv뮎6r_}NN6Q /3L#(kb_cxVgۇ)Eu~.6{-r%LJ,M2BN~'ֹD$XO,e /8)&y83xͷx"B/G!!B:e"~U!jol:z=@Qj3L ?0M ,꣓Ax_oP{o5zƌ}P)Re Y+ME?d_"A3~&û?kL>Ɠ >:X;b,='s$FLC8ij`e'doO!ϧvZwfY֭[x㋫Ws￿kǎ[71YYo7[Z֭{:thcuZc^МrJ݊{غs:,E? hO1hޣ }ĻwTW$i7x3.[Y}גNs4jP؇dQ?Mr<3cS2V&]koX}"dW:6m|[Qڶm?}oؐsg5R~|GN8zs5)uǮ޽{ݣ>h|پ.+[3"|T [})|ޗ1]O(RuR#H`ϯ;M<]M>:>~Z}j6g&,s湀nr#3_,uׅx2q1s1nmᐏ塵&n 0t@Q6إݷyNVsX7W?k3ήήy~&cZ֮]#0EE%>*~#Sgҳ꟞~Go~c}!uGg=g42c~w~^ߟ7U#ܟU^@C<%POݑ4:y>O[šC?ѺUu$ ٻժU{gvTUش s]=<#=iB\zQVDF fA:Q?Gy^b}_Ѹүõ]_/%'b酙t"/s:ש>0:҇qq0n,nuMp)"g>}JV.> [ZSŅ~Me)KKԫeKƍ]}Iۿ#_: ok?nؐo6q◙IΥb@ן5pĜ}D[~=zCش+%_F8S⴩i s^}+G20# GuL>:Ï׍W'0l>I>~|n]~+A#2,R_I#|-yqYYA_~yC-uc.[ ;v, @|Ϭ]Yz3Y3_-[6L>d<Ω}WzM 9Ǘb+znp^},k/gU# g.]7 TxINjJ; UW2f4sszOo,]AzciP E?EF#G~HGoxL7ʵKST~ӝ]"v޴…GccWό,Y3lZ7Lc W!Gg1 c'Й+hXY.waQØYW /ɹR쟀;'~v]1xw?Jm~ROb߅l=AˮI1ߵ?MCO^b)[3a>Fغ60/Bi3tiS#sQ+v(&xEkg(oSn/z/[m%Ǫ7b?|"L]^HGDxFO~js?~㾤?4;|&Ωtj~ofHa~}uόd ~9Ǿ׊iݻdFch|g4c;YNZ{e[(|ˋg$ogP[{k5Vy-<㋃En/ #l#B9=qNȎDu'!.!z!~L?I::y"V_@(~S=RSrb~z]Sc|l?'x :p/0U# ~S|]~Σ/SY47E<ž]q\-L>ދq>WHޯW}rOaq=yXx;+iDOgbc,&>0O⡿߈)#w}wߨG?#x[lw%w7*yۦ] : qR1_cq!](*>˨o_\*r q 5HGDdK¿bTj<wM]VYO||ؚ̠Eo;ƹ_[}\3=Z3MC0 ?r">G}OS${r/^|&ᑿ?""a/~5&dž_jaB(kgFcHX%鰵Gzm>?ש\E޵<|X> fck/]{{ѭM{K@R+D~/U@AD#? .>R\\M b1(B/-8(MZґgLBŦb0dYZ>$Nֶ\jamm hV[*՜x O@缸~ZX_3ٽb1x7Caüyy?dʳ?EK~acYq^\5ь\D{%{I*&tl Pj43?3M?z%Nt]Пa.;Crlpfڛ!7lnU͵ Zhoպ5-*[Z.k+]T;Js1@66d6?I6x/nj?Fuo} ޷>f)x!@ul-ggk[㝣ts};mT;#sq8O˙m|  \}.I d{/u:h|%3߷jd {+.Ҿ?Y_hk{LGv&>_GVŅ<~ό`"r@ I|2/!|˅UCqr>!$2_-|&YK>=VurⵎP|m oꌄyK~^l0Y^@ -pLdA\(U>߫NxUHEF?"V?ދ=(V:ø<fTV[d}u _WLϡ qiLa{L*ix 􏀣T_5ȨauP@ IDATӦPAMJg`inR4̆s# sndGc#^ k_y@hL:&da*5c2qxFפK d#totxDE$uX1|~ώw$b.I]FV#ge'nQcyFzy3t(|Kyo ǫ;)?1t{oUy]yђ|9ԵF9w%n/Ki<$VoCp-7 3$ 闃&O,U撜ǥc1y"U#Q<܉,Ec]B=cr8w?V+/^R?.-~R3,,<s\]Kf N[ԏ#i9 0r͸qq +hPo,"6t+i zUT };tD—oz`u;!z#"\2N6 `1>iT%3SVqi)=6ȢcOӨM3 jotڿ[lOq;۔7L>^n]6lqNs y]&ߗq<_M:iӓnh>~j7.χt8-bp&Lvǻܷ! Ol7r c0n-?Eřt {̺#  ono֬^e/̙7Rڵ?5Dd$N+gI.ecO})ajĴI>42)ɇVхwfIɑ$}HCho=CWp_X}RWM>!0;}醻*z=]R]S/Q˭+ukD;/T0ߝ]'V!~p'̟A?|7ֳW#"µ" /$oȰg/?7q~OZ %9 /J\؟(3w]Г)rߨ#}TI`{~|eMr.EO|^([Hp_/[}`b[gA#Go_jiwTר^@2đG.G ş)h!<ΫHb1GFy#s< Y}/xzH[={{W-^fW*97gY'ap` 篢<yYyym;wn:eo=7͝+KJt={}}M3f\}'NOvS}Qy .h3'#p>ү%J{&tqQ`*Kb:]V?l>c+/~&W'\L5Fj ag Z9 9ߗ5Fe[̠נ7׮],+ۺuo|qOvwqu<&+ֽmoKK?ܺuOEX첼v]VqP7mÆun-ߞrʬ޽_x䑫U[D_L:>{XkTO~iL % t#u? Կ/C@\R]`[:*|lgze Cphյ?3t0g_L=wZDOa>^.HyH z(m۶v>|E7lٹ`A)g|GN8zs5)uǮ޽{ݣ>h}C~|+Vl?$3z1Vq7H~Sl>{ ~`C, |d©[Gӗ]ce1m .z}>2ߙI]t'g~nMA + 0}o},;2O.rG~_Y&-wv?}}qЏ=znժA:I޽xVsO>WUjǦMiÆuzn-[69gFEEf1'FV^bU7պ3a ?_Fmǥ_=A>>O{_}S/&O]wXxkon*2ՓRwnyv)[T.i+WXgg?M zߙspn sJ2RʗnW/k˖s _v[߿#_: ٗ䬙6i37g>,?RPaT{"ՙHu&Q]<~g*&%P)x7u?bמp,jJpSo aѯ(@i., E?GyZ=4K\)wi(+kr$ߴFs â?m߼ywV>:hQ׮C lݺqxرc9S|f՛ ֭ަͼ3ls}2-&%PD%Dm<菙54_S%]DD܅=I5wcfLԘ)~ ?^]Xg| ?F|E1\wo#]4Tsg?ωc˖y^|isq!|.eeϿ;p_;z>do$#RTTD7ZϤꯎGˇצ#Sz|36[F04.6&+oS/Xw[}Ա),[wڛ|POY_Wy+iy8ӴϞp.'&!?QsmD ԿN gji> 'PGԓ|~(|hUܯw!J72ۥn *^XB= gr+TŲrי|8FNG~ADWpoCqq_Q!T{"՞?#$b?!% ?p]D`"}!?ݢ<s:"}!u4c%Ja>)!mߦ+h.>ߴB+9=qSH#2xVHYBڿww3%?w"ӄ㎐>hoƷN|ޤvy#u~ng]; buݽk(j|EY>kbN |ݾ].XLgTcRzIN~.S9> o |H8'W L"5HY)k  BPLrva?l^UOSg/ˌ· :|t_AB)ݢk|\Jeg372ݮ"4 ;}J~y]?Vxܩ)!| N G'([;_XO)H4uzA1_j.p\7ljHa>:K-(t ݻ% B:O/.Ys'ƬW67EkڛZdbWIE>?|L8%r<_בǨ5 uD@#jS:a;?N@YS*7h?L?{5R4)ƯGMWQ⟪^gwgq#,zHګRי]` "w:G;y.|z##XF}b9X] Þ~P B D?F1? Sǩa)~CWL/G&.$lXYMwԅ;zәt >Mط8/krVT{W,6^DHدWjh889 M^iMfe5mk=+ 'h^02 #'iI i[TMaҰ˟ZXkX쏿/n IGXN45t Oӌj5}$N,zqq軜p֗&W4%4ޒ?zyUo>帺6-4qrM˄cM|\JXls.}ÙYvkm8?_?KNxO_ LnjpSd uf~9*&\s-Vsx?vGL/..lΕp|ĺeƏc_?YN7=?,6M<д@65uX+II]mgi- !?ԝ#'RX̕0v@fOtV3ۭ!F QᙯA3|,> d97YBM@f#/;i;!j1'8v(ii͞,?7ڌÏuI>J_Mi+tM;]$Gv1GEzfNaOhw]Iu;v!poUT gwyPACuQ쯠;rp.TаK4'Εg?3эB Gd̡k]&E$g߳;YG*Ԥ\دC=G', .b|ko%}YS"LZIa /Wq(CL*g.|?Ħ]2"(a>oB9?8D)N%x*2泘nNol?\e8r)ϙtk^Xf{bNmkJ띹t*u~8"'tD{Nţ.^+ԿeӉ1c]x>M? +>wxm?GU@}3RO&?3K\OSo`ܣw|~t& 0Mݙ3tòƍOرvhZߝx/)qW"MGCܟqwfҥ|l4Mq?xߨYHmv b_ɕ~?cMoR\75.'q hphIk7fUVX7O˩?aBF##RK*Z% ^32a5Ēd1?Kڱ+C-F^aw6V~S/ěz_=ƓVnf0JJV*>Ia_)^1zM>RLܨKGV!~tKVo_5gNvq[/)"侎)x&Q_~إqdIO½8U_W/¯>_&!Sg]4H,wY/8AQw*"In"S$PoժOukr͚~ƍUۼynoԷ*o؋t3NpO^eF<\˗_~Q#)",A*A?'IT'Vwյ*1jh_jo^1LVtO<3 rgz?ӡuQo5Ew/V2Gzqup"rgRD"Kgtw= w&cwV@=`U\ytKMYRrk۹s)S6~矿i_yǏ__Rҥc&P^VnݻgOl1s=Y0u}2#G_**L0RDȢ?M2}LJ+lMII䐋?s~0?N(3{F`i;/[ݙ rG/QieTZ{g#uMרA[}ꨨ/> ⿂5 rq#B⟓,'?~|ڵͲ[Wd׎[ncj{6oí[tИbڵbLÆ )SDMG''N3ŸX2{~Rk7%'U IDAT!f?̔0޷k$ɻtmu^k&')>^{ c) ~^*Q95$5؈~+pGҶm`]xÆ; VިQDöo'=YR{ݻG=꣏W_{-?NNL½)oRU~I#KL7Ȥ3i47.%R5dWL y.:&6.Z{m]˨#9M>I ?N[~"8z 'M,v}o޼S{ 3r+`Zpƌ++rrm}mmWDDM!xH8}25J ћ&Wտ}&x>IY;:AMάĪkFWlz>JSXY}QP|y($j@O#چ+ؘ|Sf~2.̧K~cpi{?h69O[šC?ѺUu$ ܻժU{gvTUش_/oF(~# @n":MD?nҿFY^&u oY1w[}A @Д:Et@|~BIF+x7"=Ͳ;ulrʏl5J\uV44FN-emْqcnAknk߾qaWNBneN<1Y[EI2"""& Bޥ;6߉]Zxo̶nMIIuVa_H7L>ҿzm趁1ݦXׅp&䓤Ϣ_Hw*4Ի TWаBg] 7ʪ&:hQ׮C lݺqxرc9S|f՛  ? v X{@J2{@^^tuA¿k`ӎ^_> J4O{8W-^ W:i)r_>XT_~NO๒;|rq/\ z| *<p% 7h׵agYu̡k[|_l"}\_LD(7.fy!k2 >:2qJiSJ,D~GTаrߑ跑HbُH-*MݻT=醨[3[}zx2uZew&RA,`bP7\ם~^eg_#}ʩEM~G~{/ `i׫`Yo{81n._#,X76~N1oTF|t >TEbiѾ]p**PQy;#cHGDDDDDȰmZ{+2p;x?)˝g(2X6ŗD||eO:l0ȭE/O~?VݻPN@M'%&ϧ/.e˄9GEs~Sf*i,sq!Mտ][{eӐHGDDDDdb.ݻNcرkw"}\+WYY42VXvڤ{L l"9 YD?V g-=&G~e/ٯXg!}dJ,}n^tiH#""""wݻž^g[{}Dެk[{m\=F?]E"k.1ou|,?w.ӗ-\_F}&UTARD#?a>_A8SecOZ| -F?3 w$,],E=Io`(< S\~Mn,TQc|*Gc=FO> Q~㳽p**tGeşssjNL#"""""LPYUoZyko)]VU9t-'3؄KI/Bߦ/;|UkN^`/L>}LO+>~+[z5m_J"hiwg 7}D DzګQT @'8MK=OXw5siӵ377l:W@3Bhp%Xld# jmVZt ׶ԪVߠt\JZ$Ņt;K@7gi4\Ƴٮ6=~ Vw,Tȏ*|Vl\&~Z¼h%Ŧ8RiiՍŦ/I\O3/ k{hio0y˥<!q|+jM_Bkq>)i;VQ!Te7k{^Q۫;8zDDDDD;wTNO:YP3՘ө/1j)eO:] wm>"_*OO%>*=t48"/~/z;szP@Y}a*""/x-oeMoZ4ItDDDDD /Um|IƩBn&*?ȋr!$rxӊI߅O%c)d,nKr'(LOtcM,$|9K n.~(,[wUO+Rin᭻ϛXL%`˖PO^8U6r944@#"""""fJw۱K%_MqiLaui \7yԍ+c(?y,q'elReD, c'-|-!j^/N%UT z|⯰Kl٫;D?""""&&_ƷgQ_.we oq~18RbܵWo폟_򖽺B/h}6:/# jZ $o1ٺKzj,SR?~ڷ66mrKN5? ]\WV\pZٵ|: iߞ;_e+ 2XXVN3ˢߪoF+igÏ,yJV&5WYi4뮎_ǯiȝd2T#MEg븩ks?߹7^\G([6zU=?FbmV\ ?{yRf`w2;#>o_3Q됥J `18'J'+_uk S.eG_|ys鈈MOS1^awko|8_ [{snG?|{O{Ƌr?IRc;z,^}6uVeWڻ.k}ӪG,ř޸(臸GQ!jX}.q% IJn H') U_?qb>֭evv5ka7:yee ߴoUUرf0'6++aڵkee:pjذNWDDDDD*JnN^߉'xgL>spM^^9)"㒘KOR |nzVg/J4oŴI ?*L;zE +izzMIadpku/Ig韠k۹s)S6~矿i_yǏ__Rҥc&P^VnݻgOl1s=Y0u}2#G3:ouKo'7)64ϤXF_I#\\(%}>k׺7ʶnݺ_\;];vlݺʪuۼnӡCc>]׮k׊;=38rЏ}Cv'GSz@[{SI0|MXuM#}{/Z{!Y곀nJҟ;zZ1z{joC.+MM>:t!~A.9)./Ԛzeg|'8ǘҿFmGi۶{.jaCΝWwoԨ"a۷?r ՓӬYSN =vݣvGC[fgy+4m}nN<1aO\{5te%G[\WޤެWe1_~4߆!=0O \cc1e60b?#%6+A w:!c㓋 Y% fcO1me7@r ^ѣ99mbKo}楝:سn+X1gת3f]]4o طKΛSJ=l|EtiJ}(I|d_\faXl%B/~uX~EۏڮI /1u8>¿F[ڲ%܂׮־}ȑNz 7cƼfͭ6 ؼyȲe.]هGDXxh2~_PŸ/FtVPitv}(VgC(|T(? G͚~1Ed>%IT'Pݟ O?$4E2+gCP,ݡbgF:MTgrj]I#}co=ꭽ sk/ڱ˾=.l:"e 1s}/'I/tr ꫨ%U44Pc|'T;ǡp(m۶0fSTBC~&oTŸq䔖K^]̩ ry@n>zN\/,weF*}*;>< G]kS}0˄YL-{#}15lc,GGX}n߫ DHFD&%2g-c ]3Nj&ӧ04,VOOݽ)/s?HkM6'㣱G4ΛX}LzoS o_Xza9L>O 98O%Gr_@?oVŸ?^g' w'D3qxܞU(1k<rO:w]wgIGc; ׻x/)ø(۸5Vvg~lXD侻bSds?\4o&FC.foS^7bO I4G/LjQP߷B˕c)}&L7 KMSq4 `??*w_ᇿWҁw?xpx O*#uckU9t_%>$\1>cdwQT?aq0" hq]AU"eQ\ REE$dG 0:\aqEA@Zo]oUtw:O<繡tڲiYF=5!b >x' XǤxSѾ1TmsQp|*L5 )dZ?z4>3qn<'"=M2d)C?|Լ#R/ >I!S dGB<5 o1EyK{wa>bmGÏa'Q.V5+M>IKxCU h+QߥJ5lEJJEtSOS>zâ:G4e1/G탯 U5FBl?Hdzru|Ar/aߣc@40> fa^2.&uLZSTOrw1Tu U-_/Tz銾Y&RaAz{҈itI ?q]JﮩWoMdMs?#h?cbu^H^M^ f+Χ?܋$13~C"fI>DhWzo_FR&1iO/ߜJ}>KEthb?#%3F/XGmkt`]Yz^0yR;Is~.I{pBŁ.Gy~ 7d7% 6bmĜ@S\~PVU(<]P S]f9ȿ1SEqvqF ʍ IDAT<1փ=(fe*)X6՚ZfӔ۪^<\\[qZ$Yq7h0ҳ'isš\۰(R~Ybqʻ^qbP}WSQ\m U\#H}S>.LK `qTk,w7[&gYL'`2m|x;4YvֿMPB6O&ֻFNOGt#H5OQ64O!\?yjiMf0{@"އ4@=|.|O҄Yx"l_+||0?Lf@3Z,uxVI<ǿF}y@@sQAb^s=)[$;E|?zW"֓ ^;)s_e<_v+c[c/\i1\Lz+ޞ|1u)o>R7dT?XF= ˨}hꊋxKDaSrrm{خWo'b>,ۧ SI+>铃s;+V凕,=Llo6"?TNFI"c7ßF֤|b$c'!?{F fzJ& wcNM$Hzybc~_S}ʄB~bS`y1w ? &\%*A;#pGj='RaUW4)+iYA\;]"]~d?NdzZy'fyT^ +C"o)I^wTb^~}ψuLb4Uay[є1&\o-T𐏗NxSɊa.nL¹Vgخ~brg~䓼}G@\+aq͹Ԟ,[c|?ɬ0[Ë if~ .ܫտ5z3ty+t;|tUᄏ /<hؠ\4&F$oEX! YSdJ!O=Ga/_`a^3`p~,fz5tن|~P25ϾZ\ɿ'XL~XTܷ˜k 7{A0;Fv GשYVfzܸ>GNcảI>Uɧ*e~CM>Ӫؿ~@voDJܙ/߶?ߛIw r/-~_KQ ߅}_*N=?B} >2t¹+Z{yw5UIdg5|xK/]qO?yӦ{xuc*+PD1`ҿe;PU/L tIh`tV>ꉜL&CqkgI>Œ?s&þB~شM#M7ޏ~vpXgsfys.Y*x~ZÚzwqs_M;|wBS/ hb>Շì>=e],̇mwe,҇?/44l}ٮ|l|_=GX߰)|; >YY5.i̘֛6umv{۶l'] +b[%ssm}ݺ=Jsѣ/63_~9ڸq7sĘOOXTfBu Ue} )L(H{O!S#OlX1?AWve򱆛|<0&Gy{1|U n9+gJ?YNf^>]o 4#iǺO3vmئY9꫷Ξy۶9rmqٵ 33sFV[5Sn2&MNg(*[ƅ;Tݷhڧ ߬[Fz5b*)~)~^)PǑvB:} e&˩%Tnyj=89џ7>OʘǶ} \;I_k V_7qW/-^Gƞ|,w)2tWoG4E_jG`ɒm۶U޽ƍ?KJ=#Сo޼g-۶k _Uڵ 7ܵKPYMZզN+_}VժqPcx{P5`Uc|)DSBM>S#o[{S_9"/ߑՇcaYwd^ &{J/RT4Xx-|juci׊iwV補ݻsWVj;vd;t|a:O?d4ڽ{;/޽Gnux{T -)H]b "'LOZ }ELB¥&/"&p|O@a>&'U =qyO gFwXwTgnջtęⒽQCqzk֝ߺ}j奥JKUS|ҮvVիVvRN[^#; G_揬754n|7x;geըVƙQ>ʪ9dHXn׺u6l N;>ިѩСC/Nb*+a*~ xtK)*&YHj~LMb1m^&P0/pgL̓L yot|_ov{,:ɏſH4KGYezW|3_c~;<;zEzVGeԳǣh.)9G]fWJS)?̌[{_97ٚ5[8t:pEEW;c'xz|fy=}~LL" L< ݉":b?Zɟp>^DVJ.czz]Kk@|_"?$gCGi,]^\W=҇a^ !ž<䳌zxZ@/S淦 G7K_Ii߿yތ?UyeeU#U8mۇ 9g͚o33_'13<[ 혘`jg%LOAXxTYM Etfp]>k BwP!yg4$SA4'\g]m@kQO!tYY}%YKcTG~ `% tWʺC}CuCmu߶/Q^W\Tb^ɒdd4m~Jt@𫉩pHes(h5mx"9zޏ1l ^ߓ|B#|E/iaD'uLL /iQB5T̟g?[L;wcXߗ?ި?`2Ȣߑ?]D %+ޛzKzGVd?nub))/N %{=⨯w#RɎ^ ջ:\Lb:\4uLLP8+?3_ yک 9Y_T| E_ЅPO WQ*~/Mzq5n. -[{sq<&^F|',N=q`ﺻ7XA}CqǺ?&X:Yfdi#/?',T?5yi_^oV?w#p#;n 8~8~q jy 7G0n`aD+^O N[{>a~F.]K`?GgB?-D?ĺ?&)/ߩ<C /3ǖQt_rTIS ]?8] } 7!y%GLK/[EKS/>z%WHwo?|TY (Ϩ/>SoOoHcb`!]9W~X'P'-e~ӈ㓋z,/gi ѻ}/⟒z`1\^^Nhد)K}YJ,݌Bep+tzTΕOSbC]3l./^C twe~Q˝'b?#hO6hՇ| a r<>2MfzYᴵW3 [{BENy.)$7a>>RF;,Hcbܣ~~B5~ cqX o& t[9~Y/#h}=(Gg?x.X µ*0s jE{g6tc&H}H[tku)y`o|uҮYL{+2Qr)[{GX}# < RYWQlBBBu1'4ǔQU(ds>M;)yGZ5&sIm-1U"y`k8K@^llۦ;/$^6\~nb8Wy=:w7U\]WaltMb@=O ם?OYۣtCV Kᡨ7ʿ쮫]}6ii#|K)ݢ%gQ.P>@pke# m (,v4TEk%B?Z 1 m@UKڽ6Q*"KRo2*_z3e~gs;hi||s'jFK"eEZ)V+m2%ʞ^a^ _=f+U ;Zڔ >VOXDAA^Ԋ"ͯb>T>@_3)y} Uo'U/ZC>YypqqiLoʂ_ĺ?&+oBxe? d[DG 埝R>_lQ l;CBוLezJD/_=!4b 7̀ı~ 7DK6#oIFE%TO.9X|ھzmix_~(O -]֟|ēDTJبœItN%?Zd43Y_wi07Ny}P3J5L%jF^fY;/Y~ɻs'Qn>Ig4#'|H7xbN0 5 ݱV=țذzMKq̳YB,Fj|dDrPĪ4Z M˿H !/DA]O=!0; tكpoՄ$v5{NW ŝHbOAWh]3ߛ ]39̧:]]彁t}7C7@r_ s]?|xt kv.^<5y5nọ/胯k^N{5hWE*N썫]qUb]oۿ,"+ԉv^^=qbM` u`ܹ^Λh%X\F=.^ԻzvE}#VXO"҇^]pkyŶ쯛WOg!_i>+(- KD؊]9X궒Kl+^^SF;2׸*.߹>|k^m?#y>:sx33²Ec~q: NG-8WL>^wKR;t/_]w5jL_fTK~K,e:!A0q]gDoFM>^ڊ]/~N÷?4uИ}Ĩؿ߰f'boaX78"z_0_N̲2Ů>lŚu=z:pĤ [ϐNEXWJlGSZ}Ò?'}|nX~/&jǑ_oq$}43ďş_ySS zD#o9|t p'1|[sŀR Qv IDATzex`t|C~E+Q楻2&RԝHPz )hk}*&^G\l/g|>YY5_vYԩ7qGY.bСm7611Q@R3dJ?*Ք1$>.'2wљL _> /~3T?1p̺{E^+ZVh a>B_#\:.zrz._bໄr_o2 M/֬~98w%[Ije>f/b=$ݟUc›ƌiiSk^m˖|uذr^n%K6۰u]z挣G_6mO?e˞{ڶw{ooD?Z+GAa]g btnNK)'POlyxzqi <wXezY tz`|%2#؆hNGZiOh9eJlǎlc'T~Ν/S駟 &]w{}E_k1 O4h}N7fP[}~@|FnMw~uk/HIRX^L/ &ɇ\ׂԯSG^k,K'*/4Pˆ_[֭wT3LUW-/-TZڮJ2vVk2'-{5]x7囉L/U6c/Qދ",VOS1vSUs4ޢ2L&Q L>S\` Í=HW#~זp,ofGjOݮ {ti.C"\~_cVHc?`Ӹ|sw?r;ײַUZ5aVV!Cu֭۵aOf?{޽)\yeK/=g/~#1b|JKXcäcQw!i40)n&}>&D_R^ANKu?k_0>ɥw\*]prQ2VNXY. r<ߚuk;6[f{:_|*׌_=ޥk&\ys?bҗbG:j?q`Uf%)so]0*)_/o7H~4Ot(gҵ΁s?m6h?.\۴~dcHp~%n$,0S h6ћ|0L_h7oޛQFs硖-իW矏:+m>eϱ=k|zWWoϪW?ȑ̎9)F|b ?w. (SCFhLbJ?OlY˿yNC?ՠ?<}L;%Ц^f(?N+Z3;5_@ibdâ<{rlaoOw0DY}:K4^oLGR/t\GkS''\_3Euwf&gkLMRK׵f]0nF+փl.ArgЭѴx%^L>#},N.nAxZ+Z{%#ErpD4CP>zP1Te-ģ~-V߷ g$`ĝ%yz_HaDj<\.O%??`q-^Bj|Rn0[ W,vwAJzy`ț+IKx>UE>q?<;FI&w>Cc'RaX~L͇$FM\)aD29}+vbf>Ju]'&)[Gml5,ϧ;$34QNh!N"'dRLcҘb<^G;c(c eb*+xHA\GO%'QXwz#Kޭ>g_Sdj7Lf{bQg*]0~owVC&JaSҮoyVI{h"X!۰r?*<^7wXp? (IG|ϜG<!AXh̔ntϣ[!n0(Sv \dB<"m4W)(,{y}㨖ڽqU1% R}९Qdjnnʊ~VK>Z}ŏ$L>!/qEJÕzSã=wx]|!NJO 4B t8Wq ꏋ}Het⼀ALTĺ?"*~u=AG{yB^GJCˋO&ߙ3B rQ~qU;:V~#SGXXT*5տGԴߒ/I]f3t=o8a qn)v_?/"9,jo@kCrzڋ2P@uX3Id4&BFC>tRG 0Oi;I/M5PFCWvfg&ǜQDgd:7b:k2ȧ'qOѹON㩎QOX%ԏ|FDv> u=C"$R!DMVÑok:17Z/ҕp Angy@ i:t [kfFHó};,ڕcMEHLld|Ue%ޘKsMD ˖b75!>BO^5f.ubXo {pB4k):2"G[o1u⽼ޤ't u,Sכ4Խ;.CLa+vi|MSϚz!/Ի Ol˷m=OԋֿْV98(;l60ʨGɶ!5q?22|t_ CU}wu6"}D0bx\K\tŮԢ_W uy)s3>NoZzmspcqMw\T0&fOŤ҃/_NfYg袢>{c5{bb,ȧ*x؛IjcW??wSm~Sܖǰg}.hY}~yB\Jo ulAmfz]oՠQǺ s y{hWlaC|"+7]wy;vXO>*~B< c8L7/c~@_Y5 2g_#hoɒ5.>b3=l`d qڻږ;üΫWڵa6g߳ȫ:{mqȵŗgǧΝv[nLaʔk49n~|옶(;r{CsQaϻCa11!*~"cdȱa `zFT]0Gd<ϒ&><++z}v 筽ƩN'h  zԿ&J?G/ ;zSi#>63R>ڪ|ժUy%Km۶CWz7k/GddT:̟͛e۶}-[]6ᆕv?m=11|?ãzoFDž< 5|m vJz~JO|\3O PѐJϋAT(gUnU"aܑN*?I֩SOIݻw޽oFL%#!4ůacqx$%տJ5 q*¬??/CoOtR(Z%s3_.>;SJ{u+T@h!ݵ+V "ul(HHDezk֝ߺ}j奥JKUS|ҮvVl1|*Q`GK'Ps"hq$YQzM1H,xǯ(PIvUIdg?Ze._: ;?z, kf+2)YΫfVע)~Cdx0{O@&>L;!D7lo9;9۝wʪQMGG0+!~{`ݺ]ڰ!54"EOghl?Q rxęmLIjkd?ǝg 5,!2ݽStNK|\yG`\^b GiO&׸, {r3ſIJWO7\4҇8:w:ai\Jffflcι֬ޢ;xׁ.*Jl_f'pxՇ|S];J:Œ8~5Q(a1P*y~CP)Ԝm3T;e*]<.F@|w [{;N-).bcNm?Wo'{:sH߼yoFFyWΝZ\V^>rPEζm_7 >Ymf `_^e/5{bbbVOݟD?#p; y>?0? ЅI1ǣr_dnm| kohBd7{lM smt_-]Xz?ϣ[4ƄIJt¹+_Ε?Lz/U-)(ȋHu m6111'b$|.gdrɟ+~a㒿5L>`/(I2!ISl7%?%ׇ/?oHZ7)fXcbbb$q{_7x5cW\"Ǭ/cL&D\?gDo^~ۦ^nЛt@|߯[ IDATRj }6}O|А#40s$de~}?1M8n@;=ʌavޡpc7QhVg~a+=,PV=̢6:bsZ|ҋ{pU@1uvK_>'XF>TLg+][}߳H; t"Ka0Rc_NFrs6{Z]B͇Gq#X_a;E~ Z~Yk zfaF|V0g u$'kF',]ANk| E,0K7d5[ezCq|dj._p/cJ8 Nϒө-LOæ^KsoR'(OJ]p+v!SP)ĺ?&&_GÒ? w=I8:YZ0/㷢g=gXr/J̥GKI&Sǜ~Nszyɟy;~;X$""}\ζ_/z 8;=*:;4OѹOnj.Oyy9p^? pYJЛ|4!JOffGb)[{벰÷l-s}bks_|C7&]Hk//+A~cbb,g/)Gl^3DM--<V^e0?d.̲\k]/뺈q_T'W" /6hrp1@ϰU#;Q?M,s/&m>f!YE}?oe?J~0O8V( D2  tę I*ʁTCu1'ǔxE\Y^yՔlSxbSar) n%YӰGU5GU0=Y.z \H~8(=5P֓fht  ͉ډ42:BM`nc {i*LfÚfJq uUՒfhKZ('ܩ`LT۫0.R~dZJ٭ߣbef%^id+WV QX7O[$}.ܝb-NįD'y/g-8z=FAĸd^~!2I?xNu9}2㻼GD`v+yry-ˬԢd\ |'wb74Pq1$iB?' Wxs~,)+iAEo(JM:,̙D$NIQA E)"!dr?Fa:љY>D5lrڊ7$O9`28 O;zx2L굘C7݇9t3ɚK[9XiAPJ ׈5 ?־7@lI䅽Xo|]Ow&+Z@7Z@wU`^D{vEԩH>Wҭԙ%勩 wjXJݺRXJFb{ zt%XF=Z~YNvSئto/^NvƗl T Lr;a`ve%ݗs4WV}?׺ PzLLLq1[70o|;JB}~u25_ז)b `E\:ܓ~Q;- 0PX̢냞@Ld?DhRp KWPh_rGcbb"||xkv/+.5B .- CP8Cw jAa%Xb/=b߼"Ao|] b'shWzRT{7>hx8tV>(/_wW >>=}o5Y}[KWz~gH}>Q#ջ8-}V~nyf'M>~!~BR뛛|BbjQHGשYV&g>{#9auӵg9U9yΑ)?EuFΑSS.s*_#SwZט|M&]K)c&P ׇ'~l _\\\I/O?qފސ(v?zVV o3M]۷?]^{-[Ia#Y֭dIf6t_CiFlڴ32޲eO??G9'o1&&&OY}O$}$TWc[H ?{>=~Xw)| 5[~kϦ&[}@p{>eit 芮zyG#1bSo@c? D)uI>H6ʣ p" <@>!笤wY) WMRիgtڰM sWo=m8r˳k@ffF΍n~nkN0eʵMPTten ?>vJ#G7t;{z奦-ϼz[IsaXߋ~n Tb.ijjQש>LCS¿ט|B0kD/$xVfz+A_B/a 4XG`j*<%۶mסV}{޵k1U}=oٶm_˖gzE׮oa]tYN-4n|ot?bbb҂Qt0GW#SNyAﮝw~W_c\Zÿr&S31'|>"elNT0ډ~>Z{w>c/,xB_SYDZIM޽G[:㣏rv]Z!"=;t|a:O?d4ڽ{;/ZϠmۺ|}ƌ SLLLC5U3FwOS0 E3Cx56`] Off[ǿ3M>G3~}#øa dYDKLwPi)'h%/g+v-;'8xO@ngƞȢDzk֝ߺ}j奥JKUS|ҮvVXnGV\HLLGg.%{ss;yi__L>(V?1%~Xk`'a0b`\OqUC@`k+&L>a¤??xa>\WOvCS^ǰotLGdhg֕~M_cu#" Xte+05 T&g$+`*ߚuk;6[f{g؞_|*׌~.^vs砝;1)Fȧt27x8%?jG}?/3jJVu'Sm%*?IhP 3ѯ10>N5DW2@(opb^3l||'a>,g_%庖Q@wO'1#)IC;wjrYzȡC1۶C|^@۳fͷ/ Wzunjy̘DUńH1SK'k#lI3Qjp.-I1*}ܯi!M>~ȴr~ VNOS^+#"E:_ɋ{g+SBr|\FhsҨϱwСc&& GX6Y~F8U}Eȋ~ÒKNU0d ?_Mxd(v%{L ȸ}-22uZ鷰hpa㽵7XOo\I/!1#,(KciRYZLZ/jom?hJ~(c}ADp$M>,χ~(74 hVXnJxrFL$^DO [}8'NgcҀ:~Q/_@WqM> ?O Tifx{jaM>%?jHWDܟ-A4 Rn?ĺ?&m(T%8(k>xN bJ*F@3|'lbp,W엧$9SH-f^|?-6F'sKgO\:{!0 KͪA`N8cK^IWOcҏ"<^CUPB%juL"\PK;\G.1LS#q|_ۯ/b:?M>`rsGtYtnZ{5!)qOʩd!to$ya,!q;O VP>g-.Ji YSb @ėbQ8z% !ۈ9!8>VU (TKyfhs /Bs: _:(jvUdJpM=yzF;OGF|IF9칫X&BQաIrECe;)[dN"IcejK_Yo||wF;w PdN钋_/R~t}0z\IWK}2q?%f<~8v dg B{(,._NQx^`k5pj0'"?Iï 76O_LH'(寨O;lK/R'piˏ4LJE-9%!|m>.Dm>DbK-1)$1^OaK15+F뾩!ԇ3"~%<lt~xFɊҥZAEo(JM:,̙D$NIQ9@FC>tR6Y 6{))އ`:]5?6*fPہ/t@|ߗ<&61:w99t}>kblMc.o&nS)ݒ1\JR5`KF7%^kDw5-&퍫tw'ZHw߃;&e>nS/\ASO\a=S@O%Ե}H'XJݻ~mkQԻ .`RC3B};<vR~ $#WRw ȿ2gf[c*,ۇ~(ߊє12 x2=807U>f o gD^ ML\3,ż>I`,3׽q"\PXIS?DXTJ^Lk*cExl4e ][K2iA1R fGL42kx1p[½z] x>q.}^ߜKٶI?药b83&ĺ?2PNjŰ"FBFQ(JbOQ?C|Ѝ [ j45W. {"z1)sh՝ 4妥#kfyYkm̌9zyǘ/hWKGIMxk2בd-%޻7!K4+Ocok߫'Cܟ*f_tCq.שs=̦&Spuu<o^;EEEYUU:5#VAi$~HoČ!ʔt(G;%ج%`)>7G~[F,G~2Z}U7/KN7,5~s7mvs8@ IDATJ⿞n&^D/5%G ߴJ"*Ilxr__ky7mk{WynCC~xر/:1~;K{#GP3XSA1Vo).kyc,33 !ʔiC(Ws |7SI'k)-Q t,ft([}o-[&6/Cq_--5Q ]K{\RcK\gɟ2U߹/fyKXګGrE?;{7 ʏ$)S *"m/[P_h{ :"}Ӣyy/|CU;M]P07g]}{=5Q6nVZ:aǎPleW4=]/ }z︾e2ԩ4OxzNh.eur])Wwb+8*ڃn?Vvb>'{~hW&-q[}x:冞?>k;XsriӴ-)37D.YS@//NwK\AT:J/.;eʈ?;v7nZ/\L/*pƌ1f5Zcʩ]5kָڏϝSb˷-Zz̹;23]R_P&~Ag d˩\+'stl~a^ws?c=E* |{{o׍44w6qmuoqNUub#ݣ߼|1I]?m6nlmm=>}[7vϏ91bLzzڢEulÆݭ'N*W#Geqm S_7ty}jJ>j2Z]#-MR^oW*%⯛BBFEU>Gi*;Kf(;/32љZL꣌nhy6ޮ+]}\s wiWJ('ćߡ ˓[>{[og':yy9>ɖ#--Gvh|WWO\;y?1.h-}mnsoB-_rBD }4ܳ?Q,onl䟨D[}T|:t^~m ɑbK 06&&)&c ̙3~Ϟ;NڷDsK.t]t˖-i=xw):|#77{ɒz˳0" ?%~Z,[ܾ6L9j~1&x9~YӳT%i n_&|mqR(?k|}Hoc Z}Ol<'kMroB[yz%*՞xW'N|577ѳOv<|f~cGgfalٷeKo~fҖg{m|TV$#?d+Z}ěxr3H^x׳pD"vӧ9:;>WVӀD?*nD7y0B7i_KC1L~-xW.}8>&%T7-UdEe ]t, $zBlsrooHqZ@h7bTת'D_*J^]*wjqB*Y@-]O3X*y`>'MCkkqe7|ѰJVc|XomO;CX^[i͍l~ɦ}J[@J@Hoo2)GˀDgI ~9'C7;~[}ӅN4'j%]l^-Ip~ܮ )|,,r?@bGg'nCZl 2̟I*'|aߝբ{[;dMRwQ4>r?F?Dd#)rW?nP[Bf_BGs?$zƔ[ԛ_m⩻y?|]#,CHnSvw$j^Kx{+&s'/X.;׹Vtaęe-~zSg ]qM>`w&qǤ^~ OImٌҿQ߉orߟL.ܯWVlZGly'Kf~0DݷKlh!H<ꝫ- Y匕1?|pI=gfPY8Oՙk#go2j1. ]to"yJӅl2C|U3 eJIvY"^{)ZW6Hz3k06aVH3~ӬpˆIQ]6\})ߗcK[\}IH5?F_;J0A\Ss%_sD8W6F1Ҡ7/}g/_ Ϸm*87Ϳ1Wlە_ fKnwˤ1T=d9o*B_,9z=_6W>ck̳`ׯ[_}'23<*h>gWJ +xuڅ9~W+z]ZK1J%i$0ȁ:͙$NIY%r7ާ;}{αjZkylcARlsO29[Z\ŏrQ/1bPƘb9i)\6<$1v0Udv 6A !~G- s]gs9]}.S 1x I;Dcl%]]*UtB`Sa|7C̑Qc?krcOo/_5:h4?kmk'|[ӊw77t-uߥ5x L,3S엉o/5?{| bUvy;U%=?B%ocpXFcz8bI*9/\b~G}>&eÒg5Y k"+z\]xl'Hy_.lc_l7n˅Eڃs6]~> LҋN2ǎ}㍛֭5+323Ӌ.1c̬YͫVXr[]5kָڏϝV]|ۢE[;::oq̵B8 BFD+ڍkhvdįP6諎ӈ k'Wy$1 y%EOFO|-}"*+ijuYs&_kLp7>͛hk;Gv̘uikױ v8gcpq_xNcCw Æ3wvWETS/!}WB_f|/jDz:"uT ~W;޻j --ι̘4iĉ~\#}\5eb /Q/kh`5?#'׈hǵ5U=̿x Fs.9aQ{|^&3mh_şU|r?b*nD= yQ6L㝪aZW_ZCΆ4rƂ-Fʫ*+92{̋nB>'U(S⧓&?XM7% ֢^uOZwpG-V=g*WM?U_Qw(Dw*54&^)~g!t],M Et'oRvOs N>Osr"Zޥ9T)nFgBRɏQ>0/Z}l=݌Ms}>uwWR?VRz?nk\+(.d ˋz=,MiwW4[yjRǿ~/ެs73K~{>7i)>y= bEt׫!`|$WP[p1BTys9cILʬP,^{0L9Id8"3C|2$G8̖^YUYd>(9:kHt0Iår}& {FHۼ\c͑b& ?yQe|S[/2c^9M/Mx3a],}7MzhNA-_:tz?P(T"_G<~cS4!Kqc+՛x?`3Q*LWWĽ(qrg_ΕO3#Թ=qp-]w_ 4oL9"Ɲv>n2itx?"la"/UM$6>dcdQ$祐'ԋmޙyM4w&_Uq*_.Z~wUQ*o4ڧ?O)&Ѱy.ߧ=w=EG4% t׳!UURZ%n3_wٛCts7J({{w^?(燗P׳0e12,eߟ|&*))C CIݖ`Wya~&3ĿZm4\], o|j,BlzYxϞܟ?7UJKӧZVH;v)=@\A]=1^4aKHUU嗟<ٳ|&/0.Ó8;%Vgnb-1IDiѡj< SX+^T@bCkWoDῂb2K#eϣqa)^ VEj<#_xʺ^3tu1eOu1U)OuʷgFul(ߡYګr]o#ݫzw^b5\?IMr}}P|pҤ<ԟ'9s' IDATȿ]D\k%4)Z2+㾷R@Ӵ}lWhW-/'h?S~ugL瓗7TUM޹xڴ|s%۷/^S5*kiv(ii)~KUg|꟦;,߽}Ew=?ğlt 9s7^zpݸb;w`\Jrd>7;xzn!)X$oߩ8M\HwDdN͛B/w'|S_T:J/.;eʈ?;v7nZ/\L/*pƌ1f5ZcʩPWwլYjk?>wN~]^mѢ}99czmJ}`ʟq jsCFmG|#ߟe~ABUݷ/hߨGkoϴzO[[[[O_G|;fLhv۰awk㮿= mȐ߾e̘'N|i?AHIݼh (Jծ~*@n_]>,=߹?= G)R9UR!eNsMt0;/tGn1׿۸q״iA* VA3CJ g~9WӀB,O"A߫/To+z2q_I髪Sw~kQ'/D ADֲT(3m')^_#a׎T Ӻv64+44n1eկzwz?d>Hu<Dgi@5 0Zj~į/K.>pq}ɭ[=ݭȈ?Ǽ߿dKˑ#;vf"ZS|16nܐ gį,l~nQv]S?Ś|da) (+p ̙3~Ϟ;NڷDsK.t]t˖-i=Oy|O<ѻO3xbݷs:zFC&6zt~o%p )u.AwaI$;ݘsp(nyiE%ȨwHfl&g88858$oWrzuGl$1 O}mbu."v)gp\_0~ YqZ    z?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!r?@!m"%<IENDB`SimGrid-3.10/doc/html/group__XBT__synchro.js000640 007661 000620 00000004003 12242224150 021173 0ustar00gierschand000000 000000 var group__XBT__synchro = [ [ "xbt_thread_t", "group__XBT__synchro.html#gabe2e83a69fdb54e7513cfde241a8b6e9", null ], [ "xbt_mutex_t", "group__XBT__synchro.html#ga6e01b815cfcb1b932c9ad5c334ee82cd", null ], [ "xbt_cond_t", "group__XBT__synchro.html#gace9e6b68048d41411b38765f614c1301", null ], [ "xbt_thread_create", "group__XBT__synchro.html#ga7faf7010fd7bc47cd1487fe7bfba2214", null ], [ "xbt_thread_self", "group__XBT__synchro.html#gab781e679c968c3a7ae12d32ffa3dd63e", null ], [ "xbt_thread_name", "group__XBT__synchro.html#ga3b74bd7c7a6fbdf1ef7e4a9c9f6035c0", null ], [ "xbt_thread_self_name", "group__XBT__synchro.html#ga44f3eaa106769bb7bd269b95e4dc46e8", null ], [ "xbt_thread_join", "group__XBT__synchro.html#ga4633b9357c418a88723d3a11f02b9280", null ], [ "xbt_thread_cancel", "group__XBT__synchro.html#gaeaeb76bcf1386f57104957ffe50dd913", null ], [ "xbt_thread_exit", "group__XBT__synchro.html#ga2c8ac4c62ee9788b889dd135db67871f", null ], [ "xbt_thread_yield", "group__XBT__synchro.html#gad94ddaafcea741ad2cce5b97184ccb1f", null ], [ "xbt_mutex_init", "group__XBT__synchro.html#ga2b5f21533b44d2dd61c9335d0db48e93", null ], [ "xbt_mutex_acquire", "group__XBT__synchro.html#gaa6e5de3feee929f5212a988cc67159b5", null ], [ "xbt_mutex_release", "group__XBT__synchro.html#ga90c18013e0a7a19ee22cb668b6082b39", null ], [ "xbt_mutex_destroy", "group__XBT__synchro.html#ga4deb9869591b5673738ae97a7d12dd10", null ], [ "xbt_cond_init", "group__XBT__synchro.html#ga9ec2fa18ad2edb1356034fb6c488a9a3", null ], [ "xbt_cond_wait", "group__XBT__synchro.html#ga083997cea536a10a81ed9cbdee741ab4", null ], [ "xbt_cond_timedwait", "group__XBT__synchro.html#ga2283204fd8b68891a404c4101542a7e3", null ], [ "xbt_cond_signal", "group__XBT__synchro.html#ga20471db1f98e58b75d8d58ed66e48438", null ], [ "xbt_cond_broadcast", "group__XBT__synchro.html#ga0d3469f3d7692423b82786ffa4e30c70", null ], [ "xbt_cond_destroy", "group__XBT__synchro.html#ga8382820073c787494cafa0634e86c96f", null ] ];SimGrid-3.10/doc/html/group__XBT__misc.js000640 007661 000620 00000001214 12242224150 020442 0ustar00gierschand000000 000000 var group__XBT__misc = [ [ "General purpose graph library", "group__XBT__graph.html", "group__XBT__graph" ], [ "Parallel map", "group__XBT__parmap.html", "group__XBT__parmap" ], [ "Peer", "group__XBT__peer.html", "group__XBT__peer" ], [ "Queue", "group__XBT__queue.html", "group__XBT__queue" ], [ "Sock", "group__XBT__sock.html", null ], [ "Synchro stuff", "group__XBT__synchro.html", "group__XBT__synchro" ], [ "Thread stuff", "group__XBT__thread.html", "group__XBT__thread" ], [ "Portable context implementation", "group__XBT__context.html", null ], [ "Replay", "group__XBT__replay.html", "group__XBT__replay" ] ];SimGrid-3.10/doc/html/group__XBT__mallocator__objects.html000640 007661 000620 00000026075 12242224150 024060 0ustar00gierschand000000 000000 SimGrid: Mallocator object handling
SimGrid  3.10
Versatile Simulation of Distributed Systems
Mallocator object handling

Functions

void * xbt_mallocator_get (xbt_mallocator_t mallocator)
 Extract an object from a mallocator.
void xbt_mallocator_release (xbt_mallocator_t mallocator, void *object)
 Push an object into a mallocator.
void xbt_mallocator_initialization_is_done (int protect)

Detailed Description

Function Documentation

void* xbt_mallocator_get ( xbt_mallocator_t  m)

Extract an object from a mallocator.

Parameters
ma mallocator

Remove an object from the mallocator and return it. This function is designed to be used instead of malloc(). If the mallocator is not empty, an object is extracted from the mallocator and no malloc is done.

If the mallocator is empty, a new object is created, by calling the function new_f().

In both cases, the function reset_f() (if defined) is called on the object.

See Also
xbt_mallocator_release()
void xbt_mallocator_release ( xbt_mallocator_t  m,
void *  object 
)

Push an object into a mallocator.

Parameters
ma mallocator
objectan object you don't need anymore

Push into the mallocator an object you don't need anymore. This function is designed to be used instead of free(). If the mallocator is not full, your object if stored into the mallocator and no free is done. If the mallocator is full, the object is freed by calling the function free_f().

See Also
xbt_mallocator_get()
void xbt_mallocator_initialization_is_done ( int  protect)

This function must be called once the framework configuration is done. If not, mallocators will never get used. Check the implementation notes in src/xbt/mallocator.c for the justification of this.

For example, surf_config uses this function to tell to the mallocators that the simgrid configuration is now finished and that it can create them if not done yet

SimGrid-3.10/doc/html/group__m__host__management.html000640 007661 000620 00000105632 12242224150 023157 0ustar00gierschand000000 000000 SimGrid: Host Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Host Management Functions

This section describes the host structure of MSG. More...

Typedefs

typedef xbt_dictelm_t msg_host_t
 Host datatype.A location (or host) is any possible place where a process may run. Thus it is represented as a physical resource with computing capabilities, some mailboxes to enable running process to communicate with remote ones, and some private data that can be only accessed by local process.

Functions

msg_error_t MSG_host_set_data (msg_host_t host, void *data)
 Set the user data of a msg_host_t.
void * MSG_host_get_data (msg_host_t host)
 Return the user data of a msg_host_t.
const char * MSG_host_get_name (msg_host_t host)
 Return the name of the msg_host_t.
msg_host_t MSG_host_self (void)
 Return the location on which the current process is executed.
int MSG_get_host_number (void)
 Return the current number MSG hosts.
xbt_dynar_t MSG_hosts_as_dynar (void)
 Return a dynar containing all the hosts declared at a given point of time.
int MSG_get_host_msgload (msg_host_t h)
 Return the number of MSG tasks currently running on a msg_host_t. The external load is not taken in account.
double MSG_get_host_speed (msg_host_t h)
 Return the speed of the processor (in flop/s), regardless of the current load on the machine.
int MSG_host_get_core_number (msg_host_t host)
 Return the number of cores.
xbt_swag_t MSG_host_get_process_list (msg_host_t host)
 Return the list of processes attached to an host.
const char * MSG_host_get_property_value (msg_host_t host, const char *name)
 Returns the value of a given host property.
xbt_dict_t MSG_host_get_properties (msg_host_t host)
 Returns a xbt_dict_t consisting of the list of properties assigned to this host.
void MSG_host_set_property_value (msg_host_t host, const char *name, char *value, void_f_pvoid_t free_ctn)
 Change the value of a given host property.
double MSG_get_host_power_peak_at (msg_host_t host, int pstate_index)
 Return the speed of the processor (in flop/s) at a given pstate.
double MSG_get_host_current_power_peak (msg_host_t host)
 Return the current speed of the processor (in flop/s)
int MSG_get_host_nb_pstates (msg_host_t host)
 Return the number of pstates defined for a host.
void MSG_set_host_power_peak_at (msg_host_t host, int pstate_index)
 Sets the speed of the processor (in flop/s) at a given pstate.
double MSG_get_host_consumed_energy (msg_host_t host)
 Return the total energy consumed by a host (in Joules)
xbt_dict_t MSG_host_get_storage_list (msg_host_t host)
 Return the list of mount point names on an host.

Detailed Description

This section describes the host structure of MSG.

(msg_host_t) and the functions for managing it.

A location (or host) is any possible place where a process may run. Thus it may be represented as a physical resource with computing capabilities, some mailboxes to enable running process to communicate with remote ones, and some private data that can be only accessed by local process.

See Also
msg_host_t

Function Documentation

msg_error_t MSG_host_set_data ( msg_host_t  host,
void *  data 
)

Set the user data of a msg_host_t.

This functions checks whether some data has already been associated to host or not and attach data to host if it is possible.

void* MSG_host_get_data ( msg_host_t  host)

Return the user data of a msg_host_t.

This functions checks whether host is a valid pointer or not and return the user data associated to host if it is possible.

const char* MSG_host_get_name ( msg_host_t  host)

Return the name of the msg_host_t.

This functions checks whether host is a valid pointer or not and return its name.

int MSG_host_get_core_number ( msg_host_t  host)

Return the number of cores.

Parameters
hosta host
Returns
the number of cores
xbt_swag_t MSG_host_get_process_list ( msg_host_t  host)

Return the list of processes attached to an host.

Parameters
hosta host
Returns
a swag with the attached processes
const char* MSG_host_get_property_value ( msg_host_t  host,
const char *  name 
)

Returns the value of a given host property.

Parameters
hosta host
namea property name
Returns
value of a property (or NULL if property not set)
xbt_dict_t MSG_host_get_properties ( msg_host_t  host)

Returns a xbt_dict_t consisting of the list of properties assigned to this host.

Parameters
hosta host
Returns
a dict containing the properties
void MSG_host_set_property_value ( msg_host_t  host,
const char *  name,
char *  value,
void_f_pvoid_t  free_ctn 
)

Change the value of a given host property.

Parameters
hosta host
namea property name
valuewhat to change the property to
free_ctnthe freeing function to use to kill the value on need
double MSG_get_host_power_peak_at ( msg_host_t  host,
int  pstate_index 
)

Return the speed of the processor (in flop/s) at a given pstate.

Parameters
hosthost to test
pstate_indexpstate to test
Returns
Returns the processor speed associated with pstate_index
double MSG_get_host_current_power_peak ( msg_host_t  host)

Return the current speed of the processor (in flop/s)

Parameters
hosthost to test
Returns
Returns the current processor speed
int MSG_get_host_nb_pstates ( msg_host_t  host)

Return the number of pstates defined for a host.

Parameters
hosthost to test
void MSG_set_host_power_peak_at ( msg_host_t  host,
int  pstate_index 
)

Sets the speed of the processor (in flop/s) at a given pstate.

Parameters
hosthost to test
pstate_indexpstate to switch to
double MSG_get_host_consumed_energy ( msg_host_t  host)

Return the total energy consumed by a host (in Joules)

Parameters
hosthost to test
Returns
Returns the consumed energy
xbt_dict_t MSG_host_get_storage_list ( msg_host_t  host)

Return the list of mount point names on an host.

Parameters
hosta host
Returns
a dict containing all mount point on the host (mount_name => msg_storage_t)
SimGrid-3.10/doc/html/win_install_04.png000664 007661 000620 00000061164 12242224150 020276 0ustar00gierschand000000 000000 PNG  IHDR|+sRGBbKGD pHYs  tIME m IDATxy|\U߹3ٓ6ڦ -eڲ& RD^^QEDQQDEBPvZ  t̽͞ޙLI2I.|se\ i* XSe<ʪ%.`Oʳ1b?Ģ.j?!7걫@NC^F5]1p=ux;Lj^=ϯz*ժ(d\m7Wۉ wUU\m(GQ,8rckwV3!yi9%"_5n"m2_ڭgp=K̵DPYw+W|g0d!+5^϶xc7X*c̰*+0-,uszJj*%9zx.17!op--1ƪtp(v1Kǁ BAPO&J&ڠ")W#HPKqiGUKp03` > >kp%XR!;é9,Ģ3X r6To8_uVq1XX/=ؠ[ &EB!#W dX| E5`_SN`hȁ}>XUG?1~c\I ~珗<HpX|174vz6j66hꁵ/kc)z~6}D lMNZϵn@TDŽk\]>|?*ex{}r yi&};6 (ttw:@$FMx 1C̫ 6F?~ 9&xGyO,<~?~]2^qRc ]5Z.=%K k5/[kOiV'4g~Eᵃ]8/ݝW%1GU?OXh&2x/g^߾O6]pZ3zykE+ґ+x!bwkZ-^D+lL3S5~R  ZzMpAckX]|I):/ ҝs0bp._8rizx[<+<6t%"kк?O< Y?G 0ATĊOw0&3> ߼*,Y˨}Xx#FK4.^NڇDcNdÎG;w5?~|-w 0䭿?䨓j0_c֚e_ږhN1*\j7m}eexhuXk<$`ᰡxpoԭfek*`a- c~,^Q#'FXd]ٝPPx@P8.\OaA8s׍cgwav=%jBzdf83ywWeV^lk0.k7W1O6y9!"Qū*X㭺k,{JcZu.׷[^\H4i(/DcpI])#<깽ˎOo~|.Ͻn "S%qlM ~yɍ^ҙn"454uXw3hMtQH'[,K71jDF/Y[ a"b.h=l0>Cpf6=JUE }Qoq=iLoݖj\ҥS_>ǎ-H zwdsbUM݆.^rMY9o1Xc?Rj]%nvkZ\k`'8aL8[Z^ l8˕fA\DUں$/XkͣlyM<>\XƮ咗ЁdޛW'KƏ`Ѫz,54PK;=~SxM<.Ѣrv)%C)?rOK)P[??&{gdkMCf9g i4m'^4֟8+M)/NejV``,Z_,&~&cUc {St4=;a0\{ј!D0l\=7< rblc6F8t)3wfAyH dN8Ku? ;L(OL|li>msY=VlocuvDD:k M^pp@ y5X` XjlMh!'‹cpC`VNƎE]4e,_@IW򳫃J2K^;LHYܽ?Cz'G|[y5y$k%\A3uIyKTq! e&[w&'ojrZtmr:g7ji/A?xpfWxx[_x?:IW6haMܶ&55WٲԱ8gmMW8'Sy$u}5cWrX*hZF $33̘1CX`U A?Ze(CqIᵃHjop4A;Br77N] UNI| 'qu-gۉ,~ݥz!ʂu-]Wɜ*l%.] L<<}ܙG5-;c)Gs-fOJjz1ae;nrH넠O\|VC({@_vSgKyc0Fn֡fX*IwKh` !l! %zyIk;~@Mʰ`¢k3vXØqX8wERkFp0d(v7xwN"^xCT*_<䯧Ssg2O׳(zuG,hƄ %;Fa Z62kIyN}Zʹt_L.إ5-o/9L1u׳aGA=3䔮s?"¦]1wడT .‰]vxR}H2WJu&a^﷾&`Hac 9 F܉_k1HqXVeXF~nVq%"ҡggpS.{WpbSp1$Nb75]!b_`eI!#Xj.w]N `^۷fI849W"\s;!rxGQxB᧗ݫ7ėFvmMda?4yk?L'TUD$Mzpu< ~/hL_ezEDڱGAv5~ 9Cj.4x85,^|qgkXvAJMG)HjyM?%O%+Z#x ea!P;B0Vky@I+/ XڴlZu♽mMwq4)gJiYqS] ,#Te=/s=.9U%>Tfr"QϘت+!Wî"+1jpjNyC(۰/պLIX6b32)8h x*vPkq8`qao9޳hjUuVQ"( s݅SP|[ze;+cn宇gٹ6u6NݱewKk!+//LyY6F&Fi۟@nXC(vab ÿv~Gٺ3x&qvH(oZ}6)}VT)kYKf $Mʩ;[w=/glϋUᵃr"8 `\rs[.ޯ38"""*-VpKa#.6Nux7gymcO .J\Ϟe; |XLw/1Cr«49%\vTĨ{SFC|49633p6S3I X 8wt'qEdo1 : 'EDDD^e1"1 zp8!8[xY4}s8g ZˀH$ƤIy~r~ rB~LO\0?㉕[/OWďZ=9wt6_ f/+{|N5Ec+3W[< ]`!zDDDDÉzd_x#%^']==(w:较r~Ctqx=9׎>%~l}}YW+>sF_׵07Dan>ϵG""""SS%n{~ivcuVp_ְ59Ǭ?w΄\OI1n(9OpR]kwFy`7빷ۘ~Z"""ͤg Vsk'ͭyn 0c)/cɒ%X%ۗ}?E{™ef<ǴfGǏ -1c&59++XY`x*ɠPf? x]BQKn|!=d 3ESG89s«2y삱\OXj=u x<3/ѹyNJs~'FKs7z&<n ~V~x鉵`zk2n4B;<[z?̜9; s̙ܵŵ1`@F@x 2>4<6blm(O @Rו;y=X۶Ԛ%묁;2>&ֳjAMnM.RjIL[OSZtW:+ x |krpwg\*ƱU m <HkYS={xz8yw9xpNJ/5ߤwaaw?֭q=}nw]Ilе3gԑ/ߥe̮W7\p./ )~`xzOo?^{` 9 OUO汸.՗ԑxn9K*XOKK,6,u;ud>ϟWqXTF s\ ,R;qU<ڃςkSA1*՚*""-g NfʲWob Q>y;KW~E~G篷^~ap-}0˶FX\+C ,.='Cxyv.`Cqtl(?cs5Y8z~h/>ܯb:-ɭ ""׀rxI =M;R\֛$nptiWnlۯ0W~X/i`fowJN0D%;gғ_ ;wO&L UK[Tυ^6# &qj,VqaXU?ً«앣ś:kyya7W*uiܵn]Ó̬u̜vXnO>PiK/؞p[jt8^ճ7ǘN&x Mo[۲nQx#rp:-q{Ohʡ]1܁m&*Ċk;џOw~o(ݧ|3o'^~WgeKɖϼn׿3n{li^/wBDΣh|70}Kl G};+;uq};PHjgF7ŒO?g鏦}2[)كC&kρP^uOVH.:"=O,ѽGs/_]lO-J߶ ;wN4  y|coX A-""9L<'wL1e:3`Gt} IDAT3?]]?c__V1.8mOr Sߞ yn S_1w|/<= 2(aL6y+{Q57c fG~o x8.>ac`<#7Be׎aq8S8SXy{k><~FuGy}ytkxȬW Ե+NBkWǞ|x߂Q?nνN9dMfw`0|֬_οq_g[ﱧDfčsO5{6҅s>u|~:&tv)͌T뙛k;f~GmMqݢ fQ!Wi _eͮ5/e8~ԑ>Z =#gGߛwV[Ϟw֬zx~9:Uփi_ͺ<=.]MDUnyݸ'OG_Nq#| np]M`mZN[6N~Sk?kV?4ypM?s!\۱k'᫋JtZ; gl6{1P2Ĥڧ~ͩ֨%u(\k;RUw ~ς5[6:<sC2y) ?knp2T ;us8|X?~x%>1`ԾX VR^̀'J.#OJS2#O☜ ]T;}Nz>vS]Lng78؂A[^%uc\ZGQ.>!"{C x#s7o>N0үq?Ϥ ?!lڴ7X_>iMk8n(Ok:X)'y4G(w]a5#cfmjFpT4.U–lGҷw>r8{i%nKVQZZc;ykA%op>\>|sL%ќ [75u;Uuu7ںOu@KڷM=yNS}ij[/9ݮl(~e=ǽ]^z'ߚE׮]dv1/yg{RuΟ_y"Bj)|첱fp,*G-Yص麃za@AӪ[)%\ _8qXɉ#8fLk/`z7Vd>0lcWJA%`P>.C[m\~ȧjMLҩ9coZYt#U@mhYte4ojnw:e7_kz«];V翜)^݃o΀Yb哸R;7qg9':9u x?c=]#./GYbn[277Y5c0L  _*Z)?Гӷ0WL"t:g7j]<_׹Zuް ~&N|=oiz=:Z, {SGKnɾڛ v/P{~ " r8l"o>6Yt ooѣG7)O~HӿI 5p./=0ZWZu.;,eGu&[λaS5k{t˺xB58>HU!F'NB~G2z#lKik(P43nkMu8;unα>"틱zUn_7 kEX o_Jwɉ#G8_MڜZϸ?7MεF-T_t i.{_#9džtl?{U;nnTFV82=)b]I{+~9?-JgޖwmlH}/֦soOgZkd}"*HnFݍ4 odVjfH>cl/WַYFu}J5=945o7[FcI5OCuZ֫&zݦ쯦'crcQx*ϳWN.~u.wɇ^7OoGa''޶ |n9}>\Z꛷j|sUR.7y}w~Gy#1[E:mֶ«^؁<#ydzK J}K Jٸ!nFzJ+閹]s{l`WPTTDQQΞ G@=&fZ0qIrkQzn]{EcwlK=ߐgYe'YIًv_yB.,O~!e8X-~`ɒ%zKo{oL[W<ȑw)hګ3/S٣MwLE^.u׳TT_}(Px >%9܃L1>=c7M.L網iMkG󣇏?< ͫkkitYb+V\Ϲ\n13*QO,-\*J(??3^_wZt=B bvp:npe3~<0k&3a`Ċy9Ktzϖy\!>J^&gy) ω'nc x0$~D_usw^l-'80 XXggo`y}|M^_bW/y>{qlY'"""tq^b-Q2Bg>)|X縮:XDD䀥q^<6p0"zV[k9o ںUϣ(vZɳ{Sw}Bi]b`iK~8y(/+WvpR`X KT«_ KrrGsV1YÀ|2L̀~KmWIY,,すσdkY,㖙Z&#& W=[WՕqxw 7m kV.Plްv];z7W֋Q}2kך5zqYY~Z^TSIQxZN2SG[7tCAbTP>Yg;氲5%\_YD>}_gʰn=>問k LOM9\O(Jú 1@|ikZbWP!e>?2 c)=\Eu sPs_>^O(JKN|>zoع+Cpw JKarqZ>1>0wo>v >Wi%\02cE ׳m+lmۀ0UWAE>vBphr Ft}+""" ҆ & t1"""ڮM{ """Ӵ ^;)_F;ADD ݫ^;ۖi'2 0v((«««(((«««(((«H t5Rۤc@mへ s(JX}~غUlzz-ٗm}ۺS.ŗSw߶q}yJg_MM=<]k zCr~/kG8PCܐ{SgPKjs8}P^Yoty7,nLS=%-Mt7Kw_6ܶY}לujh{:9}M6.1TCoڜcc:mlXCۑ{T:lCchycgkȖ|yhhύ(J; a4wzCon|OԺM~k,d;R~n*s]a'sNkOSԒtahiY:}k5l9Mg5v̥~ҜXc᭱}2Z(y5Eg_55Qxv9?55/*[}}Gk sS;mM7{ӊVO[8iPkМ_K'}«FҜoqgmɇZC%@Zh_=Om罥h_/r |jeoZZdZes9>hjٜ}Put嵝k ntssBWSӒHwZk_&I$ƶݜ}n?W:7_uUKttNhkOq霄k#_kMf->Om`ә :UaVeVtJL,75N鄁ܵ:_zhWΠj֭Ϟ'WPq z~EDUd~Z,o_f<}Q:%"""" """""Mrz`ڳdlݶ];DDD: 7U;BU&Ӟ?g!""ԩS9s&}v«L,X~vt««l]M)绰5M*WU|lYA@Ufl۶ `ͳ-r\*Wy+W9Hmn_bQUrC«E\*WU!5ާ«[bUr\*o}~W9m ~Vir\*Wy{)WxUxv-& }\*WK(J;a2MK~\*WU^EUځnn&Ur\*o/*@>v7wr\*Wy;,W9 u\*Way)Wx]>Xr\*Wy.Wx혌VmWb7nj͖Cg9"""ٞ={wr.keTúջySjy=ȍ;^{-^/h#iG(fʅ~w/[mvWux\x1;-Qxm˘0_Y18&DFv!'MDDDUVq˫xf Vl,Ni=rW&`]^EDD^eyYΊ-R& :o_0F;DDDd?Sv+g!Xk Ez/ 2tgjym'XqjcZa3+62pc)""" 1zѕh$B4RUk«s^[+Zpc1 WiJ**JzZ>k-u cQK«alZyy)/=.lBM-+u)//nuOu@DDD^ `sWCuN.+ۓ_Xoz~~a%בN^z?Qx&JKw_Hin ^w QPkmu]FS됪(J:`w 69+: ̂MgSlOs(JEVt7Խ_Revԭ|:uK<[Z^EDD,QxFAx5 \-ϭX<7F4RM, « g\|a`W«xK,eŦ=쒋 CTFDDDU qC!1vބWa>Rï,‰2cDDD^UȌ ~yձ|~Vl,Ni=rѤqv« eO_9ck e幑AeNh""" pcոj it-QxQxWWWQxQxQxWWWQxQxQxWWWQxQxQxWWWQxQxQxWWQx.WW騌֛xΧF!S3Cf?+\0ֵqh%USV;!EDZʆR|竎߈Af#d"b_4ȗ CB;cι;C~CV_p6Z r qȥ^do8'b i 7RM=${ʡ%`1a?=~xuΝ҇pn 34YA#lfopM i/bI J*NxӪWTWYzk_9&SfCtMNFdSm-!뗇Kd?`%n""x BNXl\S SbEXB4.d]R &)<;`PQUU5_U @$;c58rbj簃<<'#gy9CcoB ஫#@DDvHUy/߳xX$Z/XL6)o~qcX7H4BPVkbP IDAT0LnL1dTQ+SE'aZD~Pqςk y<<=3y9{uokw"AB/X:s0yجFk2[ 6ʺGomDDDD*ɝ^M-1 xىWQƢh?+ _\]/REN=tyu]_.y9(TU@va8)K~{o6N*f`i>_/Dϒëk^{o&Գ/&++-݃TC$ &XXVU+/eOq12 '^T-!LYtbl02jo5oM56a+uhEDDDZP<,%  Ƅ3s^Vm`-ֱ 83(۲A$ ֠t/bjl1; \N"~p~FEZDDdxXNDJ[^WV UJlu56F#hF~WLw]pPpTfD]:-j3r37Mw.˷sLSLk/- =}Gd  N}-','/}IlޥE#X5DGfQsXboK@pWjcAUҟI~+V%l(x\c==/LVa#-Q^z>M-ozҫs67{[DD  F؊r9G@>Ŧk"\<=.`? 4EOv^#nvg_TYQbF^]jC^cX@wvqRKF ޞY 7 EoP9sF!NQ0Wn @Dd_ k?ƋD0FzI>": <X"HpBؤfUGWv+wxp =p %4ZBcP6v10pM+{~W|6_ZŸ3!{2otlxjg4G0o_E۱S{G 9agfU=Dqo^kЕCTG-cZu[cpO+w[^\⊺[SB m {0np8?]g;b΅eǧ7u?u;\}s^D"""Dq οPBa`=k,}^q,68!X0^͵(pl0y~$3o2A:Br1]FBa™?;,́P] 6L Bue^?ޅ?~/ %5r}SdGE {%J::tN&a*8ZyCzvv8KVɦ˘vrV[y!_wa`/~IH>H=dX (PA=}8=xRLY<)-J:E<NpGx$!@ yژltILw미A7_d4ss%IopK]$3gi.y'^(Fw-Ͱ^*||UxRy)9_;5 ,ٜ;s}dO=|?y0!;7ݲPPK]0H֑Vpqm}ױ5_@ |ɗLPdkxHakFvXX9AϕYvs+睏*}E8n^G<߬[+∲l^ꆇ|}u~V~uC~Yءs{6/>}hlϞ;&<k6 W (tWL fI\Y~`FfFi+j<9L@/^-k@)Sj=rݲ7֫Z,gSt$7e+a/S!i Osq5()~G-&'K爿_P 9 ڌ+rZI찎|3 `_95kdn_嗞$IFo ~Z r^WO|ɯ=L VT<׹rG?z<йKYwR{ vmY{@za |xtw6j 6ܴ2yL5ʯ=h?>/I9s~_[K\t$iޤϬ;MPal_9oe8}G wKvsr֍G /N_d&_369OٺQy a]GV^](+"@A۔-S}*M=W[&hT[>`[ 2^Nχ'~gdyya9lA#)hVG\fhPD UnsҊMOWpX߻TvLL7@7׍:vX~Ն.hTf`P8&LrXNPW v^6LI|ʜ=%kogXiٞDi]v֐>vc:_^񦖎 V5sl֔@ݵC*XśȄ-@rK~A&ev Vɬѻ@pTWoir fdQ`):a4֗k}c~ \([SoWwtI[6LZ:yu3܌lqMV $ u*&ڙ3cmgprx8ɼo\Eg,mj}= f柔uUxufAIx׌#ٌ܁VDԸ-᭾$Y++%%JƗ@T9OsV7z^FZP ŅA_W nTҶ i1<-Av7w}n&U[jm]L,w6tR $W*1bL 9śT`gPU^k`Hpcv$p: RNmc )Hl:ܪ^zoE ITfpՈ^D{vҟRz7I3?ϑ^*y ^I539gk.Z@ׇWJ V/L+zW ^ 5@73lZiymtumCsei_XvNKԸҌ|vařD%E>W0s㌿z\3mbtsl~cKiDewiַtܝgw˳DuzoF٥Ņ/^*iV+A<+4ڻN1ݹwXkIPA[w܊@&mhn:>-mwCab_L'_ HNj H|։F-KzO騷5_Z-F5J38ZkWeZӸ;qqu`>0ˤ]J>ŪQyjegUǨE'/}+nlk ;`+ei-ʹNZQkYINS䖴2:a^!BKG/B@lDVF%b5ӪdglM 6qz ]I|thQ+TwB}*I rqqwV/u%-M@35<[}wt[whX[m$V~cJkE*Y۹״Gj}M{*q&kvVZlf^L|4[lKVLS׳;V84ˤU:F 1 gg+gI3>[:N5[vIZ@pZ!Iwzq%Q4:y"8Zbߎpd7z^}[QVc>I/.wvIRZ.i~q_Qߋ$Y%߫bduZ"U55zo϶\_nQKHztS7VRt$&bq2I{~Eu-HV?<ڱLkxQI-"IiEky ,I9Hg/ja%WkxIDi6IfXsnOIWc~+EuִƝz'2$QatkJ.8kZbNDu`Fi ͼ{j5%;g]m6O oX|I֕Vn Ihώ]W R hR|^aa~2 +=DwЋq3viy@w$\iz'l =^M>@W2 o txW ^@x Au~0xv4y\6忍121Cr:08guIR|ٰ}Qd}_" @g׍?xJw+)HwF_^H* 7kПwUns_'޹F@2%Zm|aRxŀ[Kh rܬ|/GQ4+?7FVXOQXJf9!3axᵼ@DV$k&[ %+ @@OjK۷g!,^;ë5aרv䜀Ztӄyk ^^s!ѥ='NMȘvd^ɯzl@(=?:T{mk VW ox~PT;Ú|cx+_x@:틇 Z^٩ŋҞ=;] _+ ^ 59SK`:6>.MkOx-}|Կ}-;x.- KxЇ5]}r;fbŸwQGW6^Qx-DNX+װ&N j @2m@(EBP-ܰfeRF dؔqˆˏo}Ж#6{ˆWʹI>ḮyQuoa(J~s.8r,zC;1 ߧ(E˗ ]-rm>g Yf@?^Wg'~Q;бq~rJdLxvMJ6-{9}StC!+j5nf$C+-JYfV-+@X+zʇС>rTCiώ]M8hi}ߤ{43̲6.yhņiiBnE[r9gj۪ mP;n~Hlkl{U~WR IRFiz/@3Z'zFf4l^^Ѓ5y.{י pW ^@xW ^@xW ^@xW ^@xW +%M?9|vۼ+ު[ wcd|~οp^~lq-MLzR9 =\qn:d(A8xڹ}Cǝilοp$%fCm#ݯOm\+znH FR8*BgJQvnp@k`U?_=Zӓ4x֫K~8j:k:>S9JhBKTGRj,y(4U4UK:HFեz#N]*Sk:kZed}mW jiKR0IZ5VZA<.AVѭ駣UױiVNCfh8V|F6,WJi}ugVp;Ќ/\K,+ZWj LgY:ntkxҶ|*x@xEl HGRk$ LGqEF(Yf2c>y32FպzPe.ULQ'Z'E:QKWV+ghϵ^78uo4 *tuf5s6oڥ{:^ HtYpp-N?  W^+@x  d(.흚VȰVV)k: }\e\422JArm߶U4>Z%`ChS:qBC!tNMSb|]Ax9?cSb|]Ax "u= @/87|wAϱ~W@€Պ- +e!:&\Tz_Tsչ44ˡk;~B2Bkꅒ~jiR+kPF'.s"+AJ$IDAT^@Jm!VXY @igꨖ4k8m!$V._PَVa^ _I絴Je<+q =$*CWeè@P||VϬ Uz_hViEXk-ehO^̨d3n֫;BGV k:^wkV3;wk]3)dT.7CbօZ:D] Ȱo۪)Qo۪ёajV+WXb\s* RVV)j: }k||ǗQjE]yD^+  ^+H%C ǖZy"G};+Jy@0FAׅ#75)MQkؼiEh;^ IENDB`SimGrid-3.10/doc/html/group__XBT__dynar__cons.html000640 007661 000620 00000034046 12242224150 022346 0ustar00gierschand000000 000000 SimGrid: Dynar constructor and destructor
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dynar constructor and destructor

Typedefs

typedef struct xbt_dynar_s * xbt_dynar_t
 Dynar data type (opaque type)

Functions

xbt_dynar_t xbt_dynar_new (const unsigned long elm_size, void_f_pvoid_t const free_f)
 Constructor.
void xbt_dynar_free (xbt_dynar_t *dynar)
 Destructor.
void xbt_dynar_free_voidp (void *dynar)
 free a dynar passed as void* (handy to store dynar in dynars or dict)
void xbt_dynar_free_container (xbt_dynar_t *dynar)
 Destructor of the structure not touching to the content.
void xbt_dynar_shrink (xbt_dynar_t dynar, int empty_slots)
 Shrink the dynar by removing empty slots at the end of the internal array.

Detailed Description

Function Documentation

xbt_dynar_t xbt_dynar_new ( const unsigned long  elmsize,
void_f_pvoid_t const  free_f 
)

Constructor.

Parameters
elmsizesize of each element in the dynar
free_ffunction to call each time we want to get rid of an element (or NULL if nothing to do).

Creates a new dynar. If a free_func is provided, the elements have to be pointer of pointer. That is to say that dynars can contain either base types (int, char, double, etc) or pointer of pointers (struct **).

void xbt_dynar_free ( xbt_dynar_t dynar)

Destructor.

Parameters
dynarpoor victim

kilkil a dynar and its content

void xbt_dynar_free_container ( xbt_dynar_t dynar)

Destructor of the structure not touching to the content.

Parameters
dynarpoor victim

kilkil a dynar BUT NOT its content. Ie, the array is freed, but the content is not touched (the free_f function is not used)

void xbt_dynar_shrink ( xbt_dynar_t  dynar,
int  empty_slots_wanted 
)

Shrink the dynar by removing empty slots at the end of the internal array.

Parameters
dynara dynar
empty_slots_wantednumber of empty slots you want to keep at the end of the internal array for further insertions

Reduces the internal array size of the dynar to the number of elements plus empty_slots_wanted. After removing elements from the dynar, you can call this function to make the dynar use less memory. Set empty_slots_wanted to zero to reduce the dynar internal array as much as possible. Note that if empty_slots_wanted is greater than the array size, the internal array is expanded instead of shriked.

SimGrid-3.10/doc/html/structxbt__set__elm__.html000640 007661 000620 00000020017 12242224150 022160 0ustar00gierschand000000 000000 SimGrid: xbt_set_elm_ Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems

It must be possible to cast set elements to this type. More...

#include <set.h>

Data Fields

unsigned int ID
char * name
unsigned int name_len

Detailed Description

It must be possible to cast set elements to this type.

Field Documentation

unsigned int xbt_set_elm_::ID

Identificator (system assigned)

char* xbt_set_elm_::name

Name (user assigned)

unsigned int xbt_set_elm_::name_len

Length of the name


The documentation for this struct was generated from the following file:
  • include/xbt/set.h
SimGrid-3.10/doc/html/inside_doxygen.html000640 007661 000620 00000037221 12242224150 020627 0ustar00gierschand000000 000000 SimGrid: Documenting SimGrid
SimGrid  3.10
Versatile Simulation of Distributed Systems
Documenting SimGrid

We use doxygen for our documentation. This tool is sometimes anoying but that's the best we've found so far. Remember, we all bitch about doxygen, but at the end of the day, it kinda delivers what we need. So stop bitching about the doc or the tools, and start improving the documentation text itself.

Good documentation is rare and there is not much project of which we can get inspiration. The best exception I know is TikZ and latex-beamer. I'd be so happy if SimGrid documentation could follow the organisation (and reach half the quality) of the TikZ one. But anyway. As they say: Documentation is like sex; when it's not good it's still better than nothing and when it's good it's very very good.

Adding a new module to the reference guide

If you add a new file to the project, you want to document it. It's more urgent if it's user-visible, but it should be done in any case if possible.

Declaring the module to doxygen

First declare your sub-module in the corresponding (project)/doc/doxygen/module-(englobingmodule).doc Two edits are needed in this file:

  • Most of the englobing modules (xbt, msg, sd, etc) have a manually maintained table of contents as content of the module main page, at the top of the corresponding file. You want to add a reference to your submodule there. For that, simply add something like the following. The dash (-) will help building item lists. The ref command requests for a link to your module, that is identified with the word after that (here, I used xbt_cunit as a submodule identifier.
     - @ref XBT_cunit
    
  • Create your module below in the file as follows. the first world after the defgroup keyword must be the submodule identifier you used above.
         /** @defgroup XBT_cunit Unit testing support */
    
    Warning, the location of this block decides where it appears in the documentation. In particular, the order of the defgroups is not inocuitous at all.

Adding symbols to your module

Once your group is created and referenced from the group containing it, you must populate it. For that, edit the corresponding header file to add something like this near the top.

/** @addtogroup XBT_cunit
  * @brief <write here a one-line description of your module>
  *
  * <Write here an introduction to your module>
  * 
  * @{
  */
  
<all the C declarations of your module>

/** @} */

Any informative stuff is welcomed in the module introduction, on top. This includes examples that the users can copy/paste to fit their needs. If your module is too large to be nicely documented on one unique page, you may want to split its documentation in submodules. See dynar.h for an example of how to do so.

Make sure to only include the public declarations of your module. For example, if you have black magic macro voodoo, you probably have some symbols that are there only for the compiler, but that the users should not see. In this case, do not put the symbols you want to hide between the @ { and @ } markers.

Documenting the symbols of your module

Finally, you naturally need to actually write the documentation of each public symbol belonging to your module. Macros must naturally be documented in the header file, but it is prefered to put the documentation in the source file, alongside with the actual implementation. It is expected that when the code changes, the chances to update the doc accordingly are higher if the documentation is near to the code.

For each symbol, you must provide a one-line description in the brief doxygen parameter. Please document any non trivial parameter (but something like "dynar: the provided dynar" is not considered as an informative documentation and can be omitted), and give any information you feel useful to the user. In particular, add links to any other location of the documentation that could provide interesting additional informations.

Adding a new page to the user guide

Note that doxygen provides two hierarchies that cannot be intermixed. Groups are used to build a reference guide while pages are used for any other kind of page in the documentation. A module cannot contain any page, while a page cannot contain any module. That's the doxygen style.

Writing a new documentation page

The first thing to do to add a new page is to actually write a file containing the information you want to add. It should be located in (project)/doc/doxygen and be named (something).doc Its content must be something like the following:

/** @page <short_name> <title>

@tableofcontents

blabla bla

@section <short_name_of_section> <title>

bliblublo

@subsection <short_name_of_subsection> <title>

Even more stuff. Because we love documentation. We all do.

*/

Don't forget the starting and ending comment signs. Doxygen only takes documentation that is in comments, even if there is nothing else in the file.

Any short names must be uniq as they are used for the ref commands to build references between parts.

Titles should be chosed wisely, as they are used (1) as section headers (2) in the table of contents (3) as text of references, unless people building a reference specify a replacement text as in:

@ref shortname "text to use instead of the title"

Registering a documentation page to doxygen

Edit (project)/doc/Doxyfile.in and add your page to the INPUT variable. Don't edit the Doxyfile directly, as it is generated automatically from the Doxyfile.in: your changes would be overwritten.

Also, edit the source file of the page that will englob the newly page (to add a new page at root level, edit index.doc that declares the root), and add something like the following.

@subpage <shortname>

This allows doxygen to understand about the page hierarchy that you want to build. It also puts the name of the subpage as a ref would do. That is why every page in our documentation seem to contain a table of contents of sub pages even if it dupplicates what's on the left. That's the doxygen style (but I can live with it).

Registering a documentation page to cmake

Ahhh, cmake and doxygen. The perfect combo to bitch about life for a whole day...

Edit (project)/buildtools/Cmake/DefinePackage.cmake, and add your newly added page to the DOC_SOURCES. And bitch about these damn tools.

Don't forget to commit your page, so that you can get some git fun to complete your day.

Adding an image to the documentation

If you need to run a command (like fig2dev) to generate your image, edit buildtools/Cmake/GenerateDoc.cmake and add your command to the simgrid_documentation target (grep for fig2dev in the file to see where exactly). Don't forget to add the source of your image to the archive somehow. You can add it to the list DOC_FIG of buildtools/Cmake/DefinePackage.cmake.

If your image is ready to use, put your png in doc/webcruft, and register it to cmake by adding it to the DOC_IMG list of file buildtools/Cmake/DefinePackage.cmake so that it lands in the archive distribution. It will also be copied automatically to the documentation.

Working on the website

Actually, the website is very different from doxygen. It uses a tool called jekyll to turn markup-formated text into nice static web pages. Jekyll is less annoying than doxygen since it's written in a scripting language: you can dynamically add (or change) parts of the tool to make it fit your needs. Get the sources, and start improving the website now (there is a README in the repo with more details).

git clone git://scm.gforge.inria.fr/simgrid/website.git

Regenerating the documentation

Once you've changed the doc, you want to run doxygen to regenerate the html output (and maybe the pdf too). Here is how to do this:

make simgrid_documentation # html documentation
make pdf # the result is in doc/latex/simgrid_documentation.pdf

Once you're satisfyied with the result, refreshing the documentation on the web pages is very easy, as shown below. A few permission errors are ok, unfortunately. We should improve things here, but I'm not sure of how. A funny thing is that this make target is also provided in the archives we distribute to the users, but I guess that it's harmless :)

make sync-gforge-doc
SimGrid-3.10/doc/html/structs__xbt__peer.js000640 007661 000620 00000000302 12242224150 021152 0ustar00gierschand000000 000000 var structs__xbt__peer = [ [ "name", "structs__xbt__peer.html#af01618f07baa131c3c0124cd5d0040dd", null ], [ "port", "structs__xbt__peer.html#a45e2bc83b39c767a0eb30f0424afcaaf", null ] ];SimGrid-3.10/doc/html/group__simix__host__management.js000640 007661 000620 00000005676 12242224150 023533 0ustar00gierschand000000 000000 var group__simix__host__management = [ [ "smx_host_t", "group__simix__host__management.html#ga5540d4f66a2cbc953bfd0d9917ec22ee", null ], [ "simcall_host_get_by_name", "group__simix__host__management.html#ga22bd604a7c15c1980e0ed09281141472", null ], [ "simcall_host_get_name", "group__simix__host__management.html#gac627f752c965060cb592ebda7ff5e8ce", null ], [ "simcall_host_get_properties", "group__simix__host__management.html#ga03e97c1154f4925d1fb378d68dd5a888", null ], [ "simcall_asr_get_properties", "group__simix__host__management.html#ga1a3288b39aba9f321caca13166518cc0", null ], [ "simcall_host_get_speed", "group__simix__host__management.html#gaa45133ec4a6376f0de1efb4e08746f2c", null ], [ "simcall_host_get_core", "group__simix__host__management.html#gada381d983887aefa0ecfa92395aead7b", null ], [ "simcall_host_get_process_list", "group__simix__host__management.html#gaefe3f6813e0791704516253577457058", null ], [ "simcall_host_get_available_speed", "group__simix__host__management.html#gaa93a5302ec2a513b76498b91428fefe2", null ], [ "simcall_host_get_state", "group__simix__host__management.html#ga2683ae7336c84958f9fba0c2a8e502fd", null ], [ "simcall_host_get_data", "group__simix__host__management.html#ga6acb64cfef3e7284442f6e20bee9317d", null ], [ "simcall_host_set_data", "group__simix__host__management.html#ga8201c0350e48d696ef915e4fe668014b", null ], [ "simcall_host_get_current_power_peak", "group__simix__host__management.html#ga51aacd521d7590712def7fcc86367491", null ], [ "simcall_host_get_power_peak_at", "group__simix__host__management.html#ga0656f3e6508c217106c8d760afdcb11d", null ], [ "simcall_host_get_nb_pstates", "group__simix__host__management.html#gaaf0a2fb59b6754184673bcc775401da1", null ], [ "simcall_host_set_power_peak_at", "group__simix__host__management.html#ga0b9cc33e2ba9c59627be871c46be9892", null ], [ "simcall_host_get_consumed_energy", "group__simix__host__management.html#ga15cc5be1060eae3638ac2c00ec5364ef", null ], [ "simcall_host_execute", "group__simix__host__management.html#ga5257c159ed0002779a0d88a1e067bd20", null ], [ "simcall_host_parallel_execute", "group__simix__host__management.html#ga57ef6dbb3d85979561de1881d3cba1bb", null ], [ "simcall_host_execution_destroy", "group__simix__host__management.html#gaf31f9cd17e99f88b734b37a91f25d476", null ], [ "simcall_host_execution_cancel", "group__simix__host__management.html#gab177e0a327bde207864adbb4abf90e57", null ], [ "simcall_host_execution_get_remains", "group__simix__host__management.html#ga23839f5acd57bb8d12620d0e1bad56c1", null ], [ "simcall_host_execution_get_state", "group__simix__host__management.html#ga66026abb4f24bd3a528a9bcc41200c4f", null ], [ "simcall_host_execution_set_priority", "group__simix__host__management.html#ga3df7d10c87185d6c03c90cfa3b62cc43", null ], [ "simcall_host_execution_wait", "group__simix__host__management.html#ga8760a71314f39b57eafca4782251369f", null ] ];SimGrid-3.10/doc/html/sync_on.png000640 007661 000620 00000001515 12242224150 017104 0ustar00gierschand000000 000000 PNG  IHDRw=IDATx_HTY8i4-g6&kQ)!0URKڅ/PE>K-+K.YdEPaAZSܝ;3wgfsWK.Da'q_k DQCg 0Y:qZ)~L0HV z-C%g68%wUϿ }? ?3 K@h aaUe s~2&&B*Alji*˨,oƣT,d[3-*> LɟfkҠw#*AEjKUy>&{8m5Ki jjD*Nigw7DmzK۾M!k?o_lX#~XӑR*EՂדE;6e"Q(=Ezæ5Kؼָ_ 1zBJ X96jL^7{J1i@%8'7M_\Q#Uy Wo x8sv|Sn q_m >b[JX,4[T{Ratjjzz'ȶiIws KC^Y%6ꈺ]vhiWvh'̂|[^YrD= SimGrid: APIs Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
APIs Reference
Here is the hierarchical view of all SimGrid modules. You can reduce the amount of detail with the 'detail level' setting, on the right.
[detail level 1234]
oMSGSimple programming environment
|oMain MSG simulation FunctionsDescribes how to setup and control your simulation
|oProcess Management FunctionsThis section describes the process structure of MSG (msg_process_t) and the functions for managing it
|oHost Management FunctionsThis section describes the host structure of MSG
|oTask Management FunctionsThis section describes the task structure of MSG (msg_task_t) and the functions for managing it. See Task Actions to see how to put the tasks in action
|oMailbox Management FunctionsThis section describes the mailbox structure of MSG (msg_mailbox_t) and the functions for managing it
|oTask ActionsThis section describes the functions that can be used by a process to execute, communicate or otherwise handle some task
|oExplicit Synchronization FunctionsThis section describes several explicit synchronization mechanisms existing in MSG: semaphores (msg_sem_t) and friends
|oVMsThis section describes the interface created to mimic IaaS clouds
|oFile Management FunctionsThis section describes the file structure of MSG (msg_file_t) and the functions for managing it. It is based on POSIX functions
|oTrace-driven simulationsThis section describes the functions allowing to build trace-driven simulations
|oLua bindingsLua bindings to MSG (MSG)
|oMSG examplesMSG examples from examples directory examples/msg
|\MSG DeprecatedThis section describes the deprecated functions. PLEASE STOP USING THEM
oXBTThe core toolbox of SimGrid, containing usefull datatypes and friends
|oGrounding features
||oMalloc and friendsMalloc and associated functions, killing the program on error (with Exception support)
||oString related functionsString manipulation functions
||oException supportA set of macros providing exception a la C++ in ANSI C (grounding feature)
||oLogging supportA generic logging facility in the spirit of log4j (grounding feature)
|||\Existing log categories(automatically extracted)
||oAssert macro famillyThose are the SimGrid version of the good ol' assert macro
||oConfiguration supportChanging the configuration of SimGrid components (grounding feature)
|||oUser interface: changing values
|||oConfiguration type declaration and memory management
|||oRegistering stuff
|||\Getting the stored values
||oMallocatorsThe mallocator system
|||oMallocator constructor and destructor
|||\Mallocator object handling
||\Unit testing supportUnit test mechanism (to test a set of functions)
|oUsual data structures
||oDynar: generic dynamic arrayDynArr are dynamically sized vector which may contain any type of variables
|||oDynar constructor and destructor
|||oDynar as a regular array
|||oDynar miscellaneous functions
|||oPerl-like use of dynars
|||oDirect manipulation to the dynars content
|||oSpeed optimized access to dynars of scalars
|||\Cursors on dynar
||oDict: generic dictionnaryThe dictionary data structure (comparable to hash tables)
|||oDict constructor and destructor
|||oDictionaries basic usage
|||oDictionaries with non-nul terminated keys
|||\Cursors on dictionaries
||oSet: generic set datatypeA data container consisting in Dict: generic dictionnary and Dynar: generic dynamic array
|||oSet and set elements, constructor/destructor
|||oSets basic usage
|||\Sets cursors
||oFifo: generic workqueueThis section describes the API to generic workqueue
|||oFifo constructor and destructor
|||oFifo perl-like functions
|||oDirect access to fifo elements
|||\Misc fifo functions
||oSwag: O(1) set datatypeO(1) set based on linked lists
|||oSwag types
|||oSWAG functions
|||\Swag cursor
||oHeap: generic heap data structureThis section describes the API to generic heap with O(log(n)) access
||\Data description
|\Misc general purposes library components
| oGeneral purpose graph libraryA graph data type with several interesting algorithms
| oParallel mapParallel map
| oPeerHelper functions to manipulate remote hosts
| oQueueSynchronized message exchanging queue
| oSock
| oSynchro stuffXBT synchronization tools
| oThread stuffThread portability layer
| oPortable context implementationContexts are a higher level system than setjump/longjmp for non-preemptible threads
| \Replay
oTRACETracing mechanism and its functions
|oTracing categoriesFunctions to declare tracing categories
|oTracing marksFunctions to declare and create tracing marks
|\Tracing user variablesFunctions to declare and define user variables associated to resources
oSIMIXPOSIX-like interface for building simulation
|oSIMIX datatypes management details
|oProcess Management Functions
|oHost Management Functions
|oRDV Management Functions
|oCommunication Management Functions
|oSynchronisation Management Functions
|\File Management Functions
oSMPIProgramming environment for the simulation of MPI applications
oSimDagProgramming environment for DAG applications
|oSD Data TypesThis section describes the different datatypes provided by SD
|oWorkstationsFunctions for managing the workstations
|oLinksFunctions for managing the network links
|oTasksFunctions for managing the tasks
|oTasks dependenciesFunctions for managing the task dependencies
|\SimulationFunctions for creating the environment and launching the simulation
oSURFInternal kernel of all the simulators used in SimGrid, and associated models
|oSimulationFunctions for creating the environment and launching the simulation
|oSURF actionsThis section describes the different datatypes and operations related to the actions in SURF
|oSURF resourcesThis section describes the different datatypes and operations related to the resources in SURF
|\Create a new APIHow to build a new API on top of SURF
oFull IndexThe alphabetical list of all functions, macros and types defined by SimGrid
\Msg_storage_management
SimGrid-3.10/doc/html/ftv2mo.png000640 007661 000620 00000000623 12242224150 016650 0ustar00gierschand000000 000000 PNG  IHDR}\ZIDATx1K@iBҡ(h"EI'oک 8R- BTP]zB3 _㒻}]V}dIiJb+|K…,[P\ʘMƢ#F`JݤkA?Y4ck6"Z)0SHM@㋺Wmo4HJ+Qobt *~8_+3Y- PwA+^}+xhϕMAE]TD~EÞߴ^R)`A9pq-۾ۍ3tƛTH) ICxd#1 m@V?Zgo_3-\IENDB`SimGrid-3.10/doc/html/group__XBT__thread.html000640 007661 000620 00000025641 12242224150 021320 0ustar00gierschand000000 000000 SimGrid: Thread stuff
SimGrid  3.10
Versatile Simulation of Distributed Systems

Thread portability layer. More...

Typedefs

typedef struct xbt_os_thread_ * xbt_os_thread_t
 Thread data type (opaque structure)
typedef struct xbt_os_mutex_ * xbt_os_mutex_t
 Thread mutex data type (opaque structure)
typedef struct xbt_os_rmutex_ * xbt_os_rmutex_t
 Thread reentrant mutex data type (opaque structure)
typedef struct xbt_os_cond_ * xbt_os_cond_t
 Thread condition data type (opaque structure)
typedef struct xbt_os_sem_ * xbt_os_sem_t
 Semaphore data type (opaque structure)

Functions

int xbt_os_thread_atfork (void(*prepare)(void), void(*parent)(void), void(*child)(void))
int xbt_os_get_numcores (void)
 Returns the amount of cores on the current host.

Detailed Description

Thread portability layer.

This section describes the thread portability layer. It defines types and functions very close to the pthread API, but it's portable to windows too.

Function Documentation

int xbt_os_thread_atfork ( void(*)(void)  prepare,
void(*)(void)  parent,
void(*)(void)  child 
)

Calls pthread_atfork() if present, and raise an exception otherwise.

The only known user of this wrapper is mmalloc_preinit(), but it is absolutely mandatory there: when used with tesh, mmalloc must be mutex protected and resistant to forks. This functionality is the only way to get it working (by ensuring that the mutex is consistently released on forks)

SimGrid-3.10/doc/html/group__simix__rdv__management.js000640 007661 000620 00000001134 12242224150 023332 0ustar00gierschand000000 000000 var group__simix__rdv__management = [ [ "simcall_rdv_create", "group__simix__rdv__management.html#ga76202b8bd49aa89a5427267cb4528636", null ], [ "simcall_rdv_destroy", "group__simix__rdv__management.html#ga9e244ad91daf47c0e9b45b004dd6e3d6", null ], [ "simcall_rdv_get_by_name", "group__simix__rdv__management.html#ga417b16e55a7b5fad902bde9b9f263ead", null ], [ "simcall_rdv_comm_count_by_host", "group__simix__rdv__management.html#ga3be3b0b7647b63da38063e9df674f29e", null ], [ "simcall_rdv_get_head", "group__simix__rdv__management.html#ga79a92d3223cd9d41ba694044d3f308ac", null ] ];SimGrid-3.10/doc/html/group__XBT__mallocator__objects.js000640 007661 000620 00000000615 12242224150 023520 0ustar00gierschand000000 000000 var group__XBT__mallocator__objects = [ [ "xbt_mallocator_get", "group__XBT__mallocator__objects.html#ga3e52409c5b24294ef98367b56cad4c7b", null ], [ "xbt_mallocator_release", "group__XBT__mallocator__objects.html#gaf33e29b8ca5ab081c3ab323cf42fd244", null ], [ "xbt_mallocator_initialization_is_done", "group__XBT__mallocator__objects.html#ga98bad11b395593e2681d1bc8daebfc5f", null ] ];SimGrid-3.10/doc/html/group__SIMIX__API.html000640 007661 000620 00000027707 12242224150 020723 0ustar00gierschand000000 000000 SimGrid: SIMIX
SimGrid  3.10
Versatile Simulation of Distributed Systems
SIMIX

POSIX-like interface for building simulation. More...

Modules

 SIMIX datatypes management details
 Process Management Functions
 Host Management Functions
 RDV Management Functions
 Communication Management Functions
 Synchronisation Management Functions
 File Management Functions

Functions

void SIMIX_global_init (int *argc, char **argv)
 Initialize SIMIX internal data.
static void SIMIX_clean (void)
 Clean the SIMIX simulation.
double SIMIX_get_clock (void)
 A clock (in second).
void SIMIX_run (void)
 Run the main simulation loop.

Detailed Description

POSIX-like interface for building simulation.

This is a developer-level interface that should be useful only if you plan to design a new interface for SimGrid.

Coming soon

Function Documentation

void SIMIX_global_init ( int *  argc,
char **  argv 
)

Initialize SIMIX internal data.

Parameters
argcArgc
argvArgv
static void SIMIX_clean ( void  )
static

Clean the SIMIX simulation.

This functions remove the memory used by SIMIX

double SIMIX_get_clock ( void  )

A clock (in second).

Returns
Return the clock.
SimGrid-3.10/doc/html/group__XBT__set__basic.html000640 007661 000620 00000060540 12242224150 022141 0ustar00gierschand000000 000000 SimGrid: Sets basic usage
SimGrid  3.10
Versatile Simulation of Distributed Systems

Functions

void xbt_set_add (xbt_set_t set, xbt_set_elm_t elm, void_f_pvoid_t free_func)
 Add an element to a set.
void xbt_set_remove (xbt_set_t set, xbt_set_elm_t elm)
 Remove an element from a set.
void xbt_set_remove_by_name (xbt_set_t set, const char *key)
 Remove an element from a set providing its name.
xbt_set_elm_t xbt_set_get_by_name_or_null (xbt_set_t set, const char *key)
 Retrieve data by providing its name.
void xbt_set_remove_by_name_ext (xbt_set_t set, const char *key, int key_len)
 Remove an element from a set providing its name and the length of the name.
void xbt_set_remove_by_id (xbt_set_t set, int id)
 Remove an element from a set providing its id.
xbt_set_elm_t xbt_set_get_by_name (xbt_set_t set, const char *key)
 Retrieve data by providing its name.
xbt_set_elm_t xbt_set_get_by_name_ext (xbt_set_t set, const char *key, int key_len)
 Retrieve data by providing its name and the length of the name.
xbt_set_elm_t xbt_set_get_by_id (xbt_set_t set, int id)
 Retrieve data by providing its ID.
unsigned long xbt_set_length (const xbt_set_t set)
 Returns the number of elements in the set.

Detailed Description

Function Documentation

void xbt_set_add ( xbt_set_t  set,
xbt_set_elm_t  elm,
void_f_pvoid_t  free_func 
)

Add an element to a set.

Parameters
setset to populate
elmelement to add.
free_funchow to free the data

elm->name must be set; if elm->name_len <= 0, it is recomputed. If >0, it's used as is; elm->ID is attributed automatically.

void xbt_set_remove ( xbt_set_t  set,
xbt_set_elm_t  elm 
)

Remove an element from a set.

Parameters
seta set
elmelement to remove
void xbt_set_remove_by_name ( xbt_set_t  set,
const char *  key 
)

Remove an element from a set providing its name.

Parameters
seta set
keyname of the element to remove
xbt_set_elm_t xbt_set_get_by_name_or_null ( xbt_set_t  set,
const char *  name 
)

Retrieve data by providing its name.

Parameters
set
nameName of the searched cell
Returns
the data you're looking for, returns NULL if not found
void xbt_set_remove_by_name_ext ( xbt_set_t  set,
const char *  key,
int  key_len 
)

Remove an element from a set providing its name and the length of the name.

Parameters
seta set
keyname of the element to remove
key_lenlength of name
void xbt_set_remove_by_id ( xbt_set_t  set,
int  id 
)

Remove an element from a set providing its id.

Parameters
seta set
idid of the element to remove
xbt_set_elm_t xbt_set_get_by_name ( xbt_set_t  set,
const char *  name 
)

Retrieve data by providing its name.

Parameters
set
nameName of the searched cell
Returns
the data you're looking for
xbt_set_elm_t xbt_set_get_by_name_ext ( xbt_set_t  set,
const char *  name,
int  name_len 
)

Retrieve data by providing its name and the length of the name.

Parameters
set
nameName of the searched cell
name_lenlength of the name, when strlen cannot be trusted
Returns
the data you're looking for

This is useful when strlen cannot be trusted because you don't use a char* as name, you weirdo.

xbt_set_elm_t xbt_set_get_by_id ( xbt_set_t  set,
int  id 
)

Retrieve data by providing its ID.

Parameters
set
idwhat you're looking for
Returns
the data you're looking for
Warning
, if the ID does not exists, you're getting into trouble
unsigned long xbt_set_length ( const xbt_set_t  set)

Returns the number of elements in the set.

Parameters
seta set
Returns
the number of elements in the set
SimGrid-3.10/doc/html/group__TRACE__mark.js000640 007661 000620 00000001022 12242224150 020637 0ustar00gierschand000000 000000 var group__TRACE__mark = [ [ "TRACE_declare_mark", "group__TRACE__mark.html#gacd215a0072a5d4ec7c5b11610b7bef20", null ], [ "TRACE_declare_mark_value_with_color", "group__TRACE__mark.html#gae5b5c2eab1fdca9122a8902f1f106649", null ], [ "TRACE_declare_mark_value", "group__TRACE__mark.html#ga01bdd85d46330578010dd77cf0e9df88", null ], [ "TRACE_mark", "group__TRACE__mark.html#gac8f263e9033090c2e73c7a2e2a98088a", null ], [ "TRACE_get_marks", "group__TRACE__mark.html#ga6012125dd57ddf958895a8007280bbf5", null ] ];SimGrid-3.10/doc/html/structs__smx__rvpoint.html000640 007661 000620 00000013666 12242224150 022303 0ustar00gierschand000000 000000 SimGrid: s_smx_rvpoint Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_smx_rvpoint Struct Reference

Rendez-vous point datatype. More...

#include <smx_network_private.h>

Detailed Description

Rendez-vous point datatype.


The documentation for this struct was generated from the following file:
  • src/simix/smx_network_private.h
SimGrid-3.10/doc/html/group__XBT__swag__type.js000640 007661 000620 00000000345 12242224150 021654 0ustar00gierschand000000 000000 var group__XBT__swag__type = [ [ "s_xbt_swag_hookup_t", "group__XBT__swag__type.html#ga1cb9298c552ff2834e5dad4848311692", null ], [ "xbt_swag_t", "group__XBT__swag__type.html#gae08645c9a236bae019fb12ab374dc17f", null ] ];SimGrid-3.10/doc/html/group__XBT__queue.js000640 007661 000620 00000002223 12242224150 020634 0ustar00gierschand000000 000000 var group__XBT__queue = [ [ "xbt_queue_t", "group__XBT__queue.html#gae44d114ab24c5175b9500f0a80058f4f", null ], [ "xbt_queue_new", "group__XBT__queue.html#ga04f81fdbf3a660617deb9f6f48234161", null ], [ "xbt_queue_free", "group__XBT__queue.html#gae4509298241a6179e0b61667faebe613", null ], [ "xbt_queue_length", "group__XBT__queue.html#ga49cfb91b2f730487bd31f2f9ffb974fa", null ], [ "xbt_queue_push", "group__XBT__queue.html#ga687d865601b586f65162cde66b944163", null ], [ "xbt_queue_pop", "group__XBT__queue.html#ga368e7ef82906e1c5baefa8083879c215", null ], [ "xbt_queue_unshift", "group__XBT__queue.html#gaba17464ddde9dec336376a2e4e9f3a4e", null ], [ "xbt_queue_shift", "group__XBT__queue.html#ga60a1272bb4a1463b8254cf857b8d7441", null ], [ "xbt_queue_push_timed", "group__XBT__queue.html#gab68bab7ad2af3afc35130971d668c2b3", null ], [ "xbt_queue_unshift_timed", "group__XBT__queue.html#ga9a868b5c72f70f207999b8a0beefed84", null ], [ "xbt_queue_shift_timed", "group__XBT__queue.html#ga48988a7bf6134fc397147b16408c0778", null ], [ "xbt_queue_pop_timed", "group__XBT__queue.html#ga99d1d70f1a59f3f45bcd4e5d35b77f51", null ] ];SimGrid-3.10/doc/html/poster_thumbnail.png000664 007661 000620 00000006261 12242224150 021024 0ustar00gierschand000000 000000 PNG  IHDRKj{;. pHYsYYtEXtSoftwareESP Ghostscript 815.02v 8IDATx\[lnDBaJ} j@Jb$ ] %J#U[J% 6EήypDDANRvDՌM*dDM e hק3g.;3vpħs濜3esԈ ,9Vџ8pG:|67W_hiiaC?1_MBMdI>聶3ٖ{;`Ns9?y 1"_$MFb¼&m5/"X\J(#s _-bk)38T؏Ҥ㳭#V҆Znxud&ܹi(uT1\uk=Jņν}x(q8ny,S BGT,6@ܭCp0St~+ivy>SBt8\m1E? ed*AmddGG [QՀp!JsQp5ӰD72fWڳ ݜ-zp PɆ-VTvlPrBS rC?gQuб-Y-D uK!mА<BEAR^-J\R8+e<˽pĈ~oPdg-QK<--7g3W--r@E/21Ĥ]J۴k3b] \ |tj`0vD"cAaS"L/0Ss=:ŒU|^z @g^#zϑ\jQaj3Ĵ*N)D Xy e ;=|V ?Y?WLz|}yj+K"0flfɥ!rK25TD :Zh1I2҉!2pp!c30 fBC2\wq,4m[hF|x$I2kFMMp)5gthYṭm!|p>BBU pX-28!-- S` ɂ!sl@, ' LާB d%H =HA**RܠP=y<h!IyI, kYdq%* 30ՔD&DO9+qp Y,5Y68S>T5ه0ː8hY'Kwfk&I 2Mi(f.zDp]!s+y^vʼUGT!I%$LmxbL3ș-sd=[?BDl.f;sS;62pj|&K7 hvs=籑S|iVa:;/N\E4 ­k=>>=6:釤1#F?^Jd6mz~ Nnũs΀SWW쥎{n=z,3W $[ΟS ϼ0bO=}9wC~1xj\ bҭpbb"@ËjKOE6_l ׏oA{'h, r 5 5E'za$f4t])Ud;ʢJ0,yg6Ile}@4/_KR`Q|. 4W(b1͛P*QM& *ŋsI^ذ͓[Il>*ЩM`}0kO.9vz 7G8R$bDU6#qzCp( v 1 Jԑ >=Xv}SnM*yi.W\nrҲ|i(Rb(^񉕣B J$Cױm`5TH1)@d[Si9 W'+]~̥={IQ83UM/բj\H`7bOAl0 dq#`l"ML`Y 1Эng1\M&^юx1xh>SsOnZL]p~_½k/_0sz4 LTࠢV ^*C#nb@,zX#FOY|hG\Ƚڌ'۸a@g,^v)b$@ U1RdL.;RV֗uL%y\iH:=/'W,^-^M?lgPCh zF=$r֡Rذ*/ݥiC ٬}dFk^s.[o1f#~VUrZs w;Z*Kzi4t'VʙF! o`zx"9iF1f#%bJC>,8o5+D"X2ix@PݻwxXZc'ˣS @0 zQ aC'xa=NKl77'uƆxG/78{f#s d@0Yirt"Dy`dD?8kB@RAMl[ǝ`<+^Oo*]7VpK}I> V̛(bi\:9:܎T9-=ܿ7DGnK٬ëcG =[ OezTzXWG^C?S/=n^SYi)߹?(c`dD^فN ּ絟u83C{i$ռWs s?)淜Q=L fa 9cl ]WN=wtl'y駷nݺC- {`t_c XrO޵lϾ}n= fpX73 6y`jjms:x:B덍aw]A$IENDB`SimGrid-3.10/doc/html/getting_started.html000640 007661 000620 00000013327 12242224150 021007 0ustar00gierschand000000 000000 SimGrid: SimGrid in 30mn
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid in 30mn

This page does not exist yet. In the meanwhile, please refer to the tutorials on the project web page, looking for the SimGrid User 101 tutorial.

SimGrid-3.10/doc/html/group__XBT__mallocator__cons.js000640 007661 000620 00000000551 12242224150 023030 0ustar00gierschand000000 000000 var group__XBT__mallocator__cons = [ [ "xbt_mallocator_t", "group__XBT__mallocator__cons.html#gab949b93743d06b31bbdf3828d34a72ac", null ], [ "xbt_mallocator_new", "group__XBT__mallocator__cons.html#ga31b8b348c6b44d730c915c5442a64637", null ], [ "xbt_mallocator_free", "group__XBT__mallocator__cons.html#gaa884a3ef269f0709b9b2e025708f2e95", null ] ];SimGrid-3.10/doc/html/group__SURF__simulation.html000640 007661 000620 00000035115 12242224150 022354 0ustar00gierschand000000 000000 SimGrid: Simulation
SimGrid  3.10
Versatile Simulation of Distributed Systems
Simulation

Functions for creating the environment and launching the simulation. More...

Functions

 XBT_PUBLIC_DATA (xbt_dynar_t) model_list
 List of initialized models.
void surf_init (int *argc, char **argv)
 Initialize SURF.
void surf_presolve (void)
 Finish simulation initialization.
double surf_solve (double max_date)
 Performs a part of the simulation.
double surf_get_clock (void)
 Return the current time.
void surf_exit (void)
 Exit SURF.

Variables

xbt_dict_t watched_hosts_lib
 List of hosts for which one want to be notified if they ever restart.

Detailed Description

Functions for creating the environment and launching the simulation.

This section describes the functions for initialising SURF, performing the simulation and exiting SURF.

Function Documentation

XBT_PUBLIC_DATA ( xbt_dynar_t  )

List of initialized models.

List of hosts that have juste restarted and whose autorestart process should be restarted.

void surf_init ( int *  argc,
char **  argv 
)

Initialize SURF.

Parameters
argcargument number
argvarguments

This function has to be called to initialize the common structures. Then you will have to create the environment by calling e.g. surf_workstation_model_init_CM02()

See Also
surf_workstation_model_init_CM02(), surf_workstation_model_init_compound(), surf_exit()
void surf_presolve ( void  )

Finish simulation initialization.

This function must be called before the first call to surf_solve()

double surf_solve ( double  max_date)

Performs a part of the simulation.

Parameters
max_dateMaximum date to update the simulation to, or -1
Returns
the elapsed time, or -1.0 if no event could be executed

This function execute all possible events, update the action states and returns the time elapsed. When you call execute or communicate on a model, the corresponding actions are not executed immediately but only when you call surf_solve. Note that the returned elapsed time can be zero.

double surf_get_clock ( void  )

Return the current time.

Return the current time in millisecond.

void surf_exit ( void  )

Exit SURF.

Clean everything.

See Also
surf_init()
SimGrid-3.10/doc/html/dir_96d409525d77f9a64d47cab50cea52e6.html000640 007661 000620 00000023753 12242224150 023056 0ustar00gierschand000000 000000 SimGrid: src/simix/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
simix Directory Reference

Files

file  smx_context.c
file  smx_context_base.c
file  smx_context_raw.c
file  smx_context_sysv.c
file  smx_context_thread.c
file  smx_deployment.c
file  smx_environment.c
file  smx_global.c
file  smx_host.c
file  smx_host_private.h
file  smx_io.c
file  smx_io_private.h
file  smx_network.c
file  smx_network_private.h
file  smx_new_api.c
file  smx_new_api_private.h
file  smx_private.h
file  smx_process.c
file  smx_process_private.h
file  smx_smurf.c
file  smx_smurf_private.h
file  smx_synchro.c
file  smx_synchro_private.h
file  smx_user.c
SimGrid-3.10/doc/html/structs__xbt__parmap.html000640 007661 000620 00000036174 12242224150 022047 0ustar00gierschand000000 000000 SimGrid: s_xbt_parmap Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_xbt_parmap Struct Reference

Parallel map structure. More...

Data Fields

e_xbt_parmap_flag_t status
unsigned work
unsigned thread_counter
unsigned int num_workers
xbt_os_thread_tworkers
void_f_pvoid_t fun
xbt_dynar_t data
unsigned int index
e_xbt_parmap_mode_t mode
void(* master_wait_f )(xbt_parmap_t)
void(* worker_signal_f )(xbt_parmap_t)
void(* master_signal_f )(xbt_parmap_t)
void(* worker_wait_f )(xbt_parmap_t, unsigned)

Detailed Description

Parallel map structure.

Field Documentation

e_xbt_parmap_flag_t s_xbt_parmap::status

is the parmap active or being destroyed?

unsigned s_xbt_parmap::work

index of the current round

unsigned s_xbt_parmap::thread_counter

number of workers that have done the work

unsigned int s_xbt_parmap::num_workers

total number of worker threads including the controller

xbt_os_thread_t* s_xbt_parmap::workers

worker thread handlers

void_f_pvoid_t s_xbt_parmap::fun

function to run in parallel on each element of data

xbt_dynar_t s_xbt_parmap::data

parameters to pass to fun in parallel

unsigned int s_xbt_parmap::index

index of the next element of data to pick

e_xbt_parmap_mode_t s_xbt_parmap::mode

synchronization mode

void(* s_xbt_parmap::master_wait_f)(xbt_parmap_t)

wait for the workers to have done the work

void(* s_xbt_parmap::worker_signal_f)(xbt_parmap_t)

signal the master that a worker has done the work

void(* s_xbt_parmap::master_signal_f)(xbt_parmap_t)

wakes the workers threads to process tasks

void(* s_xbt_parmap::worker_wait_f)(xbt_parmap_t, unsigned)

waits for more work


The documentation for this struct was generated from the following file:
  • src/xbt/parmap.c
SimGrid-3.10/doc/html/group__SURF__actions.html000640 007661 000620 00000034376 12242224150 021640 0ustar00gierschand000000 000000 SimGrid: SURF actions
SimGrid  3.10
Versatile Simulation of Distributed Systems

This section describes the different datatypes and operations related to the actions in SURF. More...

Data Structures

struct  surf_action
 Action structure. More...
struct  surf_action_state
 Action state sets. More...

Typedefs

typedef struct surf_actionsurf_action_t
 Action datatype.
typedef struct surf_action s_surf_action_t
 Action structure.
typedef struct surf_action_state s_surf_action_state_t
 Action state sets.

Enumerations

enum  e_surf_action_state_t {
  SURF_ACTION_READY = 0, SURF_ACTION_RUNNING, SURF_ACTION_FAILED, SURF_ACTION_DONE,
  SURF_ACTION_TO_FREE, SURF_ACTION_NOT_IN_THE_SYSTEM
}
 Action states. More...

Detailed Description

This section describes the different datatypes and operations related to the actions in SURF.

Typedef Documentation

typedef struct surf_action* surf_action_t

Action datatype.

An action is some working amount on a model. It is represented as a cost, a priority, a duration and a state.

typedef struct surf_action s_surf_action_t

Action structure.

Never create s_surf_action_t by yourself ! The actions are created on the fly when you call execute or communicate on a model.

See Also
e_surf_action_state_t

Action state sets.

This structure contains some sets of actions. It provides a fast access to the actions in each state.

See Also
surf_action_t, e_surf_action_state_t

Enumeration Type Documentation

Action states.

Action states.

See Also
surf_action_t, surf_action_state_t
Enumerator:
SURF_ACTION_READY 

Ready

SURF_ACTION_RUNNING 

Running

SURF_ACTION_FAILED 

Task Failure

SURF_ACTION_DONE 

Completed

SURF_ACTION_TO_FREE 

Action to free in next cleanup

SURF_ACTION_NOT_IN_THE_SYSTEM 

Not in the system anymore. Why did you ask ?

SimGrid-3.10/doc/html/structsurf__network__model__extension__public.html000640 007661 000620 00000014150 12242224150 027216 0ustar00gierschand000000 000000 SimGrid: surf_network_model_extension_public Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_network_model_extension_public Struct Reference

Network model extension public. More...

#include <surf.h>

Detailed Description

Network model extension public.

Public functions specific to the network model


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/navtreeindex0.js000640 007661 000620 00000041050 12242224150 020036 0ustar00gierschand000000 000000 var NAVTREEINDEX0 = { "FAQ.html":[6], "FAQ.html#faq_C":[6,0,2], "FAQ.html#faq_MIA":[6,1,0], "FAQ.html#faq_MIA_MSG":[6,1,1], "FAQ.html#faq_MIA_SimDag":[6,1,2], "FAQ.html#faq_MIA_asynchronous":[6,1,1,2], "FAQ.html#faq_MIA_batch_scheduler":[6,1,3,1], "FAQ.html#faq_MIA_checkpointing":[6,1,3,2], "FAQ.html#faq_MIA_communication_time":[6,1,1,5], "FAQ.html#faq_MIA_examples":[6,1,1,0], "FAQ.html#faq_MIA_generic":[6,1,3], "FAQ.html#faq_MIA_host_load":[6,1,1,4], "FAQ.html#faq_MIA_taskdup":[6,1,1,1], "FAQ.html#faq_MIA_thread_synchronization":[6,1,1,3], "FAQ.html#faq_SG_DAG":[6,1,2,1], "FAQ.html#faq_SG_comm":[6,1,2,0], "FAQ.html#faq_bugrepport":[6,2,7], "FAQ.html#faq_deadlock":[6,2,5], "FAQ.html#faq_flexml_limit":[6,2,3,0], "FAQ.html#faq_howto":[6,1], "FAQ.html#faq_interfaces":[6,0,0], "FAQ.html#faq_more_processes":[6,1,3,0], "FAQ.html#faq_platform":[6,1,4], "FAQ.html#faq_platform_alnem":[6,1,4,1], "FAQ.html#faq_platform_example":[6,1,4,0], "FAQ.html#faq_platform_random":[6,1,4,3], "FAQ.html#faq_platform_synthetic":[6,1,4,2], "FAQ.html#faq_simgrid":[6,0], "FAQ.html#faq_surf_network_latency":[6,2,6], "FAQ.html#faq_trouble_backtraces":[6,2,4,2], "FAQ.html#faq_trouble_changelog":[6,2,0], "FAQ.html#faq_trouble_compil":[6,2,2], "FAQ.html#faq_trouble_distcheck":[6,2,1,1], "FAQ.html#faq_trouble_err_logcat":[6,2,2,0], "FAQ.html#faq_trouble_errors":[6,2,3], "FAQ.html#faq_trouble_errors_big_fat_warning":[6,2,3,1], "FAQ.html#faq_trouble_lib_compil":[6,2,1], "FAQ.html#faq_trouble_lib_config":[6,2,1,0], "FAQ.html#faq_trouble_lib_msg_deprecated":[6,2,2,2], "FAQ.html#faq_trouble_pthreadstatic":[6,2,2,1], "FAQ.html#faq_trouble_valgrind":[6,2,4], "FAQ.html#faq_trouble_vg_libc":[6,2,4,1], "FAQ.html#faq_trouble_vg_longjmp":[6,2,4,0], "FAQ.html#faq_troubleshooting":[6,2], "FAQ.html#faq_visualization":[6,0,1], "advanced.html":[5], "annotated.html":[7], "bindings.html":[5,0], "bindings.html#MSG_Java":[5,0,1], "bindings.html#MSG_Ruby":[5,0,0], "bindings.html#MSG_ex_master_slave_lua":[5,0,2,4], "bindings.html#MSG_ex_master_slave_lua_bypass":[5,0,2,5], "bindings.html#MSG_ext_ms_bp_core_lua":[5,0,2,5,2], "bindings.html#MSG_ext_ms_bp_master_lua":[5,0,2,5,0], "bindings.html#MSG_ext_ms_bp_slave_lua":[5,0,2,5,1], "bindings.html#MSG_ext_ms_core_lua":[5,0,2,4,2], "bindings.html#MSG_ext_ms_master_lua":[5,0,2,4,0], "bindings.html#MSG_ext_ms_slave_lua":[5,0,2,4,1], "bindings.html#SimGrid-java":[5,0,1,1], "bindings.html#bindings_binding_Java_jMSG_who":[5,0,1,0], "bindings.html#bindings_binding_java_coroutines":[5,0,1,2,1], "bindings.html#bindings_binding_java_install":[5,0,1,2], "bindings.html#bindings_binding_java_use":[5,0,1,2,0], "bindings.html#bindings_binding_lua":[5,0,2], "bindings.html#bindings_binding_lua_about":[5,0,2,0], "bindings.html#bindings_binding_lua_example_bypass":[5,0,2,3], "bindings.html#bindings_binding_lua_example_data":[5,0,2,2], "bindings.html#bindings_binding_lua_example_master_slave":[5,0,2,1], "bindings.html#bindings_binding_lua_simgrid":[5,0,2,0,1], "bindings.html#bindings_binding_lua_why":[5,0,2,0,0], "bindings.html#bindings_java_coro_install":[5,0,1,2,2], "bindings.html#bindings_java_coro_use":[5,0,1,2,3], "contributing.html":[5,3], "contributing.html#contributing_bugs":[5,3,1], "contributing.html#contributing_contrib":[5,3,2], "contributing.html#contributing_spread":[5,3,0], "deployment.html":[4,7], "deployment.html#dep_ex":[4,7,1], "deployment.html#dep_over":[4,7,0], "deployment.html#process_tag":[4,7,2], "functions.html":[8,0], "functions_vars.html":[8,1], "getting_started.html":[1], "group__API__index.html":[9,7], "group__MSG__API.html":[9,0], "group__MSG__LUA.html":[9,0,10], "group__MSG__examples.html":[9,0,11], "group__SD__API.html":[9,5], "group__SD__datatypes__management.html":[9,5,0], "group__SD__datatypes__management.html#ga0b4ef9c55c15ac2612409087d89d8415":[9,5,0,1], "group__SD__datatypes__management.html#ga242a90ba979257e3245553f149b74880":[9,5,0,6], "group__SD__datatypes__management.html#ga488f5d5cd3010184019e42e4cc130793":[9,5,0,3], "group__SD__datatypes__management.html#ga49c04f3f117a8a1f8f1d0bedadefcfa5":[9,5,0,5], "group__SD__datatypes__management.html#ga4c8d9b64c01d21a1ae8e51632b0dc595":[9,5,0,0], "group__SD__datatypes__management.html#ga6eb21649841a9b045552f3aa810e05f5":[9,5,0,4], "group__SD__datatypes__management.html#gabe39904e3bf5f57456382cfcd3814352":[9,5,0,2], "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a3fb8ac37142196af9ac8e97e27f2c59c":[9,5,0,6,2], "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a60c8326cd59d07e45a3910594478dba9":[9,5,0,6,3], "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a6c7da099fce2770ab770c40a0d32e93d":[9,5,0,6,4], "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a8c1896c3c033bea7ecf469a75f83d5f4":[9,5,0,6,0], "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a9add1089dc99e90c905ec491db980d76":[9,5,0,6,1], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a2c3f70794cc8b27495bd2c7b6b6872af":[9,5,0,5,1], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a4deae4c6080598bd869d22fa4d35328d":[9,5,0,5,3], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a626549e8ac33c3142d9b3ab66abcc374":[9,5,0,5,2], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a79dc5ff4b6f36bfae26b9666feb4ba78":[9,5,0,5,5], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ac055f0cd1ac85271cc31d0340acc8c4c":[9,5,0,5,4], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5adda3fbec6b0da252275f20c79044201c":[9,5,0,5,7], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ae654935882dec5b2345a3128aed69632":[9,5,0,5,6], "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5aec1d4dfae04f63ec58dd8ab7941a8801":[9,5,0,5,0], "group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a6615a65c696b373eef6500a7b8f43c4e":[9,5,0,4,0], "group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a722f0fd2ff6e52a77206f879e50714df":[9,5,0,4,1], "group__SD__link__management.html":[9,5,2], "group__SD__link__management.html#ga180c8056827783104c4cecce3acc9b23":[9,5,2,3], "group__SD__link__management.html#ga4bdb09a991d2366f38c303ed2e48c885":[9,5,2,5], "group__SD__link__management.html#ga4f56602832da18405e8d0e2653f0744c":[9,5,2,2], "group__SD__link__management.html#ga61b0106214ae990e8f4c9aaecfbc0779":[9,5,2,6], "group__SD__link__management.html#ga8f5ff7ea86c621aa77f44e913222613d":[9,5,2,1], "group__SD__link__management.html#gaab6c4e1b06d62ed57157b508561b28c8":[9,5,2,7], "group__SD__link__management.html#gace788d7f0b4b57c5af0b8a5025929780":[9,5,2,4], "group__SD__link__management.html#gae6a4a20a3269c3595a195d24f220fb40":[9,5,2,0], "group__SD__simulation.html":[9,5,5], "group__SD__simulation.html#ga1882fd299f53829a131dd01c83ed5471":[9,5,5,7], "group__SD__simulation.html#ga32a2bbed292f8d4ebeafc0b6debd0af3":[9,5,5,1], "group__SD__simulation.html#ga35de259bc832b4926a310d0359a36dd6":[9,5,5,8], "group__SD__simulation.html#ga5a1f4e7f674374210de13181acbd98d3":[9,5,5,4], "group__SD__simulation.html#ga8c9fdcd05effacd9b20c0ea75c5c5f7e":[9,5,5,2], "group__SD__simulation.html#gaa4c19ede9d99b8925e62f30c52f1e65f":[9,5,5,0], "group__SD__simulation.html#gac961eff01737333623e3b5343e78a269":[9,5,5,3], "group__SD__simulation.html#gad1a92b51e423aad6d47be2b82c6536ba":[9,5,5,6], "group__SD__simulation.html#gafc34707cae382f245f7a33d1eb202392":[9,5,5,5], "group__SD__task__dependency__management.html":[9,5,4], "group__SD__task__dependency__management.html#ga3a22709b38b7a4eb86317e334a8110e0":[9,5,4,1], "group__SD__task__dependency__management.html#ga5e94f0a64b796de2fb3e7164bd4c7173":[9,5,4,2], "group__SD__task__dependency__management.html#gaa1bdcdfefbf9b19e03cf90376d6fbbb0":[9,5,4,3], "group__SD__task__dependency__management.html#gad492251b41fcd05684d88359c26656e1":[9,5,4,4], "group__SD__task__dependency__management.html#gaeaa883b0561beefb647c5c4280299138":[9,5,4,0], "group__SD__task__management.html":[9,5,3], "group__SD__task__management.html#ga0cffb2af680086f53fb1599db6ae3c42":[9,5,3,23], "group__SD__task__management.html#ga1cc17b4c7857521fc4b679bff63446b6":[9,5,3,17], "group__SD__task__management.html#ga2b320214a7e5a1c74cf50b236453b288":[9,5,3,4], "group__SD__task__management.html#ga30a5dbfc2983c1700375075f16c22364":[9,5,3,15], "group__SD__task__management.html#ga35bc9c3b6f25462bacb8f467605f87bb":[9,5,3,32], "group__SD__task__management.html#ga39c7eb7e2db73d0c022c78bf0d4a64a2":[9,5,3,27], "group__SD__task__management.html#ga3f6480d75795a3309c0c026e540d86e0":[9,5,3,26], "group__SD__task__management.html#ga4092ccda7d10951ffaf47b65a2da4ae3":[9,5,3,21], "group__SD__task__management.html#ga430717fbd36bb2d92b85e4c47a96ffa0":[9,5,3,0], "group__SD__task__management.html#ga43e829e6e9e93b39b765ce6e592229a4":[9,5,3,12], "group__SD__task__management.html#ga4ac4414bf72fd959333848d88562502f":[9,5,3,1], "group__SD__task__management.html#ga4f8d27d92e9fc813c44b5a64adb24410":[9,5,3,13], "group__SD__task__management.html#ga5690de45db3666e42b97c171f952df15":[9,5,3,28], "group__SD__task__management.html#ga5763ec9afe02f381bd1ae9b0be8cb64a":[9,5,3,7], "group__SD__task__management.html#ga5cc2370b3d1c43b298a0d5512d8d9312":[9,5,3,9], "group__SD__task__management.html#ga5f1619e6ed05db349d89ea12944f64ba":[9,5,3,16], "group__SD__task__management.html#ga6ab4cb771f03089d33aca732f7f097b8":[9,5,3,30], "group__SD__task__management.html#ga6c7f9b54e7f061555f07c6ade5fc1e9f":[9,5,3,14], "group__SD__task__management.html#ga766539121eadc77886003186e1b45e83":[9,5,3,2], "group__SD__task__management.html#ga773124574884bcff102efa3adc9b6120":[9,5,3,22], "group__SD__task__management.html#ga7853f1943b540ff9d3d7078ed46206cb":[9,5,3,8], "group__SD__task__management.html#ga8e6a82c3100081945a6afc650975dee3":[9,5,3,19], "group__SD__task__management.html#ga8f5b24ab48696ea78998b42ace35900a":[9,5,3,3], "group__SD__task__management.html#ga9ea8bd4d42155b26f17a875ce24a9ca0":[9,5,3,24], "group__SD__task__management.html#ga9ed01cda917f36b4da719f0594fbe9ee":[9,5,3,18], "group__SD__task__management.html#gaaa2a2ba19ce7315069ec4642b6aa16a2":[9,5,3,29], "group__SD__task__management.html#gab0ec206f43cda6a8cbdb4aaa8d1a9d02":[9,5,3,31], "group__SD__task__management.html#gab29f36e954266588b46c3f2e76e4afe3":[9,5,3,25], "group__SD__task__management.html#gabcb438f55dd8fb525a6753576c8c4069":[9,5,3,20], "group__SD__task__management.html#gaea6138e1ab09935b8a575e1ccbea045c":[9,5,3,6], "group__SD__task__management.html#gaebb308fda516592dcee717e657f39966":[9,5,3,11], "group__SD__task__management.html#gaf1f33ccbe8a0568836387a46d444473d":[9,5,3,5], "group__SD__task__management.html#gaff407e0ad880fe3e34e0905bbbc1568a":[9,5,3,10], "group__SD__workstation__management.html":[9,5,1], "group__SD__workstation__management.html#ga0983ee235addaee99467ef4c4f97966b":[9,5,1,18], "group__SD__workstation__management.html#ga0e4d5fa0f15423b8c1e55abfecd25164":[9,5,1,19], "group__SD__workstation__management.html#ga1c912ef7ecda05d307afefad0fc759b6":[9,5,1,0], "group__SD__workstation__management.html#ga224866561ec8000a495faea7c5e25b48":[9,5,1,16], "group__SD__workstation__management.html#ga229affb29b5472c8f62f054b0def9547":[9,5,1,5], "group__SD__workstation__management.html#ga24a4f207e56f070fa83c56d8bb0c35c1":[9,5,1,6], "group__SD__workstation__management.html#ga2849ed01ae4dc580923fbd6782d9ccf4":[9,5,1,1], "group__SD__workstation__management.html#ga324f3ae1cea2ae9e52bfb70448361f26":[9,5,1,11], "group__SD__workstation__management.html#ga5bb5798685fdcd82966f1238c620e2a0":[9,5,1,20], "group__SD__workstation__management.html#ga63c39639777faf77a8e6c0bd41694fa1":[9,5,1,3], "group__SD__workstation__management.html#ga68c974556d55dc2ae760fde9408a32e6":[9,5,1,13], "group__SD__workstation__management.html#ga6977e577293bd72f9e191dd2613b650f":[9,5,1,7], "group__SD__workstation__management.html#ga71b72259a6d31b4445700eb1d21a087a":[9,5,1,8], "group__SD__workstation__management.html#ga9caaba45417c65427ee74da841dd14e2":[9,5,1,15], "group__SD__workstation__management.html#gaa9522a1e095218a426cf6c70315fdc9d":[9,5,1,9], "group__SD__workstation__management.html#gac00d8cc9c460d532aedfb9ba8fc49c66":[9,5,1,14], "group__SD__workstation__management.html#gacdc811bb1046b88da230d51c68533ba2":[9,5,1,2], "group__SD__workstation__management.html#gad28c1465fa8cc17f0d73668ed8dbca4a":[9,5,1,10], "group__SD__workstation__management.html#gad52c195122d5cd98331a3838c52d4d81":[9,5,1,17], "group__SD__workstation__management.html#gadfd3673bc4bc5011babfd0247d45ef28":[9,5,1,12], "group__SD__workstation__management.html#gaed29af2c807f986fccf6d3ad4bf15156":[9,5,1,4], "group__SIMIX__API.html":[9,3], "group__SIMIX__API.html#ga61a5c57ccf08e71bac21571b94ec1a38":[9,3,7], "group__SIMIX__API.html#ga8298a6bf3cdb667f2aca7b1cfd9b2eb8":[9,3,9], "group__SIMIX__API.html#gaebdd718ef8f26134756d5fa6de1ff854":[9,3,10], "group__SIMIX__API.html#gaf764507fe3726a890a8657d5db2eaffc":[9,3,8], "group__SMPI__API.html":[9,4], "group__SURF__API.html":[9,6], "group__SURF__actions.html":[9,6,1], "group__SURF__actions.html#ga260ee2edb62de03ee69190f03a9b7eba":[9,6,1,2], "group__SURF__actions.html#gab9ef4042b1b038be1b792366de0121b2":[9,6,1,5], "group__SURF__actions.html#gae49733011b74942c0a896745bc825e92":[9,6,1,3], "group__SURF__actions.html#gafbcc9ab9767482d92f8709d78858d2ae":[9,6,1,4], "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a101d6224ad7c2a615c452c8c36d8a7e7":[9,6,1,5,1], "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a20a007bd143ea5c870c26a389ffe95e9":[9,6,1,5,5], "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2a6caf5e4bd35cab4890c662fdaf8d3812":[9,6,1,5,0], "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2aa66f387221d049fbce374c4dc27629c8":[9,6,1,5,4], "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2abf420e6385e8eeda58721c3e28bd919e":[9,6,1,5,2], "group__SURF__actions.html#ggab9ef4042b1b038be1b792366de0121b2acef3187aad961798010f295bbbd932bf":[9,6,1,5,3], "group__SURF__build__api.html":[9,6,3], "group__SURF__build__api.html#gaa55c4d6b7466ca2b40deef1f47a24063":[9,6,3,1], "group__SURF__build__api.html#gac90f96dce1a69464b09a9b79b1405da5":[9,6,3,0], "group__SURF__resources.html":[9,6,2], "group__SURF__simulation.html":[9,6,0], "group__SURF__simulation.html#ga1179497a5f822209f22b5735e0fb1104":[9,6,0,5], "group__SURF__simulation.html#ga2d30fc73053554f841bb3499590536f6":[9,6,0,6], "group__SURF__simulation.html#ga35bd1d3b1139b2f6990002f4aaeac759":[9,6,0,0], "group__SURF__simulation.html#ga403868865b66138187c3db30521e1bbe":[9,6,0,1], "group__SURF__simulation.html#ga9b7e7ceba73ff5ce637ecb58f1e2edc9":[9,6,0,2], "group__SURF__simulation.html#gaa723e3f55eb26355d00de5bf07c6d373":[9,6,0,3], "group__SURF__simulation.html#gafa85b9ba47f47d599353b872d2cb93d3":[9,6,0,4], "group__TRACE__API.html":[9,2], "group__TRACE__API.html#ga61801e88fcc9c8963c3ec77d78522f74":[9,2,6], "group__TRACE__API.html#ga636015c91ac56d3942f83321708d9105":[9,2,7], "group__TRACE__API.html#ga77e1127c6602edd4f233ca62d6de36e0":[9,2,3], "group__TRACE__API.html#ga845e0cfbd8042ac70adf394df024e350":[9,2,4], "group__TRACE__API.html#gaf5542d615046120aa8a3526268b9fa7f":[9,2,5], "group__TRACE__category.html":[9,2,0], "group__TRACE__category.html#ga2c341df9553b432c507d4ab2a87e8685":[9,2,0,0], "group__TRACE__category.html#ga5abe9661fe1a1382c9be63984fea6931":[9,2,0,1], "group__TRACE__category.html#ga87115c4173e0a6451fd7161fa4545572":[9,2,0,2], "group__TRACE__mark.html":[9,2,1], "group__TRACE__mark.html#ga01bdd85d46330578010dd77cf0e9df88":[9,2,1,2], "group__TRACE__mark.html#ga6012125dd57ddf958895a8007280bbf5":[9,2,1,4], "group__TRACE__mark.html#gac8f263e9033090c2e73c7a2e2a98088a":[9,2,1,3], "group__TRACE__mark.html#gacd215a0072a5d4ec7c5b11610b7bef20":[9,2,1,0], "group__TRACE__mark.html#gae5b5c2eab1fdca9122a8902f1f106649":[9,2,1,1], "group__TRACE__user__variables.html":[9,2,2], "group__TRACE__user__variables.html#ga009ecbc92025f7f2106386e5c8822e0b":[9,2,2,22], "group__TRACE__user__variables.html#ga0b79340b330704fc7f30596988ce937c":[9,2,2,18], "group__TRACE__user__variables.html#ga0fec5f8d16e8d8ba4c82b2dba1ba6234":[9,2,2,30], "group__TRACE__user__variables.html#ga111dc1b94c7f69e999f98163922332a6":[9,2,2,37], "group__TRACE__user__variables.html#ga139bde27fec64c468d16b5231fc41118":[9,2,2,24], "group__TRACE__user__variables.html#ga1672865b1bc48cff5bdb759edf0a7c90":[9,2,2,9], "group__TRACE__user__variables.html#ga1abd4aeafd36e40fd2aa8f15566df013":[9,2,2,29], "group__TRACE__user__variables.html#ga1c3d1a22e56a7a9a2fa6e5e6feb7978e":[9,2,2,19], "group__TRACE__user__variables.html#ga20ce487069e27bb3d2eca34295a3c20c":[9,2,2,4], "group__TRACE__user__variables.html#ga21d00d19c12055de18047e7973508e91":[9,2,2,8], "group__TRACE__user__variables.html#ga287fcd04c563ff2f795460850e4fc5d6":[9,2,2,13] }; SimGrid-3.10/doc/html/navtreeindex3.js000640 007661 000620 00000045114 12242224150 020046 0ustar00gierschand000000 000000 var NAVTREEINDEX3 = { "group__m__process__management.html#ga2c75b91ef5b61cad66a7fa3a72d122d0":[9,0,1,8], "group__m__process__management.html#ga2eea811c91c7e85a21160b53d65ec79c":[9,0,1,17], "group__m__process__management.html#ga42cde2901797dfce3db7d13e0bcc02d5":[9,0,1,23], "group__m__process__management.html#ga49407197cb1ba4a2b1943285786eacec":[9,0,1,0], "group__m__process__management.html#ga4fd646e5d31bdecfc5e93405a2c32d56":[9,0,1,22], "group__m__process__management.html#ga640b4cc9200796bc211e6d8b794ba922":[9,0,1,3], "group__m__process__management.html#ga6651c72dff79c7f1aa6eff05db5b3063":[9,0,1,5], "group__m__process__management.html#ga7894a7c080a4821b49b17d0b6abd46ae":[9,0,1,15], "group__m__process__management.html#ga7b74e6c2c40a8365b4bed0e37c798ea5":[9,0,1,9], "group__m__process__management.html#ga842d26b5c9352aea228378d8ef12209b":[9,0,1,10], "group__m__process__management.html#ga943d27b38754b2af9f78e80cc29db306":[9,0,1,1], "group__m__process__management.html#ga9f25a30269f39c7683d18f9d4e1fd331":[9,0,1,21], "group__m__process__management.html#ga9f28a934b5e2e220093131c7c93d63c4":[9,0,1,13], "group__m__process__management.html#gaa8489360976ff79e94e3db2254e5b7db":[9,0,1,24], "group__m__process__management.html#gab7ed321f5bf4776d42e1d91158d67b8d":[9,0,1,4], "group__m__process__management.html#gac00bbc4ebc824d14a3f6719de8190618":[9,0,1,20], "group__m__process__management.html#gad1ad359bc57b8a7008435ee29e1da681":[9,0,1,7], "group__m__process__management.html#gad7570aff7510cbed3fc1dc3b97d0231b":[9,0,1,16], "group__m__process__management.html#gaf22fa3dcf713f37e292397eea9744e7a":[9,0,1,14], "group__m__process__management.html#gaf76911391b5116a7d1775e74185e64d5":[9,0,1,19], "group__m__task__management.html":[9,0,3], "group__m__task__management.html#ga13f8ac858abd957f5cb2e9a54ad98d76":[9,0,3,0], "group__m__task__management.html#ga1f3d2d85e2a7415e26fa12f05b71fc34":[9,0,3,18], "group__m__task__management.html#ga22cf2562fbb9cad8c5860914c0d8d6dc":[9,0,3,20], "group__m__task__management.html#ga2adce7c9dbe8ecab1d6db1fdc420ea80":[9,0,3,11], "group__m__task__management.html#ga3ab366f5db21f52c90a265fe83c5c2dd":[9,0,3,2], "group__m__task__management.html#ga3c900ab457b5822c205979097765bc04":[9,0,3,16], "group__m__task__management.html#ga4ed297ea1a968b31be47d45f5f908580":[9,0,3,5], "group__m__task__management.html#ga54412e440ff859933bbbcb0204aa5a75":[9,0,3,4], "group__m__task__management.html#ga5a2984b6a34bb725b52ee31cdece56a2":[9,0,3,7], "group__m__task__management.html#ga5d7514ea11b8a51bad0cbc7ad0636856":[9,0,3,19], "group__m__task__management.html#ga90a38af4ae02895a5e656c6d2555a63b":[9,0,3,9], "group__m__task__management.html#gaa7cd89c7f542d19fd817a614d1c1cc95":[9,0,3,1], "group__m__task__management.html#gaa97b99e0176424e3f0afdf239e2f3f32":[9,0,3,12], "group__m__task__management.html#gaafe2ccabd38b13d1734323f86e40706a":[9,0,3,3], "group__m__task__management.html#gab0ef7c694fcc69282cf4da632ae64d5b":[9,0,3,6], "group__m__task__management.html#gab4fd7f315f6f7d9297eaad64e67fbf90":[9,0,3,8], "group__m__task__management.html#gab54a9cc669db50dc7229389ac3dc7f1f":[9,0,3,15], "group__m__task__management.html#gabb8f9c3289b341b68af5c789ea659c1e":[9,0,3,10], "group__m__task__management.html#gada131788294fe436d9cc1044319b111f":[9,0,3,17], "group__m__task__management.html#gae6c900f519f6280a9e7a615a2e47cb96":[9,0,3,14], "group__m__task__management.html#gaf6369e840095c428218e494bf8b6dee6":[9,0,3,13], "group__msg__VMs.html":[9,0,7], "group__msg__VMs.html#ga0b701b7e5a4b0459f1b9326e188e19b0":[9,0,7,6], "group__msg__VMs.html#ga1a40d2652506f4576408e35346cd3cff":[9,0,7,9], "group__msg__VMs.html#ga21d8a296f64c7190dcbcfd0c249b4275":[9,0,7,4], "group__msg__VMs.html#ga32243e8be24c253c0367c81d0289e057":[9,0,7,7], "group__msg__VMs.html#ga407fdb335bb6adbe52eab4055ee4676b":[9,0,7,0], "group__msg__VMs.html#ga6ba8320c7a90ed67d3c8e2079460b8a9":[9,0,7,3], "group__msg__VMs.html#ga6e665c9d3b9c0a6b3e9a97a419a7861f":[9,0,7,10], "group__msg__VMs.html#ga9815e54a5e6cdf849d4847803d377e19":[9,0,7,8], "group__msg__VMs.html#ga9d66095e9599545ab4cdd787a38f6b8e":[9,0,7,1], "group__msg__VMs.html#gac7919295b7c197a43717e367f9c115c5":[9,0,7,2], "group__msg__VMs.html#gae493c978235ba8efeee6d8b5a5286e5b":[9,0,7,11], "group__msg__VMs.html#gaf65aa7a4497fceaa50414caff2772a05":[9,0,7,5], "group__msg__deprecated__functions.html":[9,0,12], "group__msg__deprecated__functions.html#ga1ae6d2a80ca4f35d7a19215f409ce00f":[9,0,12,8], "group__msg__deprecated__functions.html#ga3e310a2bf7efc32d3aac8dad2eacd71d":[9,0,12,1], "group__msg__deprecated__functions.html#ga48bf7268e2f079ba1ad51a00209028cd":[9,0,12,9], "group__msg__deprecated__functions.html#ga4abdb2c7da1b9d89187ce51211db3f25":[9,0,12,0], "group__msg__deprecated__functions.html#ga6e5db824a4317c3a1279eeaa79b6511d":[9,0,12,2], "group__msg__deprecated__functions.html#ga99bfe9edc985c6d2cce3947f81780660":[9,0,12,4], "group__msg__deprecated__functions.html#gaa44c47c7ed2f78243eca7379437e1cc0":[9,0,12,6], "group__msg__deprecated__functions.html#gac979ed68d1b602dd04169cbed23828a9":[9,0,12,3], "group__msg__deprecated__functions.html#gad09e64171486db6b0004653125313971":[9,0,12,7], "group__msg__deprecated__functions.html#gae72af17e16cda4efcfad301a4170accd":[9,0,12,5], "group__msg__file__management.html":[9,0,8], "group__msg__file__management.html#ga026a21b86128403f92c3f4730c68d153":[9,0,8,3], "group__msg__file__management.html#ga3b1606c3e01721f3eab49f236741f208":[9,0,8,5], "group__msg__file__management.html#ga3c6c221ab91ae0213ad967204c882882":[9,0,8,4], "group__msg__file__management.html#ga460af619ebd92cebe5d5b812f91eb73c":[9,0,8,2], "group__msg__file__management.html#ga8087da2271bceabefcc6d6636decb750":[9,0,8,7], "group__msg__file__management.html#ga87e0d76d9428e822d9a67e676c8a2775":[9,0,8,0], "group__msg__file__management.html#ga886ea23939db224929e122d363ed91cb":[9,0,8,8], "group__msg__file__management.html#ga902c9e5bdda07488bdbb310303c40551":[9,0,8,1], "group__msg__file__management.html#gabb010052e11b12c6b6d8169cdff66c82":[9,0,8,9], "group__msg__file__management.html#gad55ef25a4f6e484f4874d9cdc306c869":[9,0,8,10], "group__msg__file__management.html#gae05ac2e6382893dc94ed610408b19c95":[9,0,8,6], "group__msg__mailbox__management.html":[9,0,4], "group__msg__mailbox__management.html#ga073a924d91ab515e507e01399dbdd0dc":[9,0,4,2], "group__msg__mailbox__management.html#ga0ccdeb3f9337c9fa505ed39c74bd27a1":[9,0,4,1], "group__msg__mailbox__management.html#ga6f960676ac24fb9c64da2bfcc6f24da8":[9,0,4,0], "group__msg__simulation.html":[9,0,0], "group__msg__simulation.html#ga012d470de7974da7262d0020e00117e9":[9,0,0,2], "group__msg__simulation.html#ga0dbc6fabf0391c4f193b33befeb8a22e":[9,0,0,7], "group__msg__simulation.html#ga0dedd7962cd7d916406ef45c471f6134":[9,0,0,10], "group__msg__simulation.html#ga21e94a4e7b26dea140b0c71a2a4f4352":[9,0,0,3], "group__msg__simulation.html#ga35037b57281f860b92ed7704d37de78f":[9,0,0,9], "group__msg__simulation.html#ga61b2e271c59ff50d38de7a0f9858b4b1":[9,0,0,5], "group__msg__simulation.html#ga638072e92edcf9c5aed498daefed010c":[9,0,0,8], "group__msg__simulation.html#ga698d00aec4b3d7f8cf90c4d1a4595c9c":[9,0,0,4], "group__msg__simulation.html#gab394a1043a25ec62f498c097d805f0a1":[9,0,0,0], "group__msg__simulation.html#gacfeb7fa281abd0ff74b0591937cbb574":[9,0,0,11], "group__msg__simulation.html#gae08e089d52a2928680e0957e7152d79d":[9,0,0,6], "group__msg__simulation.html#gaf79b56c0bd3b78b539b0cb4c12e56425":[9,0,0,1], "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a115b6882d73de65d775aa8c7f1abaf70":[9,0,0,1,4], "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a2f90300a07b9b18285e1897b1fabfd06":[9,0,0,1,1], "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a373b92dc6a498dea6ab408fb1670386f":[9,0,0,1,2], "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a69965b44e0393c3ba81482bb975c55e5":[9,0,0,1,3], "group__msg__simulation.html#ggaf79b56c0bd3b78b539b0cb4c12e56425a7db209a18c6374183567534787dccc1b":[9,0,0,1,0], "group__msg__storage__management.html":[9,8], "group__msg__storage__management.html#ga13125793869304d581f31a0beb3e143d":[9,8,0], "group__msg__storage__management.html#ga28017dad8a2c6f1fe10b52b208d4a36e":[9,8,4], "group__msg__storage__management.html#ga3d0280ddcf0026cee8837d30eebb6c90":[9,8,7], "group__msg__storage__management.html#ga4e3dbb8ae3bda7ba80df6c32c4816926":[9,8,1], "group__msg__storage__management.html#ga546b28d8dcd4f9b9f9206fa49c97fb23":[9,8,6], "group__msg__storage__management.html#ga6355cbf57e26d99c0ba021b8ba97514f":[9,8,8], "group__msg__storage__management.html#gab104363d9be84030d4e301e169e8cd6b":[9,8,5], "group__msg__storage__management.html#gab542d642be87d52dd647b77ea3f44b74":[9,8,9], "group__msg__storage__management.html#gab65b4a69185c6e80ed1da21012c7f100":[9,8,2], "group__msg__storage__management.html#gae0d57e843712319835f31fcf8c23894b":[9,8,3], "group__msg__synchro.html":[9,0,6], "group__msg__synchro.html#ga46b0858501af3424a570f8d786320520":[9,0,6,5], "group__msg__synchro.html#ga47ed8c02cacfe486d3fa7d29beb56af1":[9,0,6,4], "group__msg__synchro.html#ga6baf039cbe49f8d83b8d5423f463f4bc":[9,0,6,2], "group__msg__synchro.html#gaa540fb0fe72d3bf3b4183ba3c6e07faa":[9,0,6,1], "group__msg__synchro.html#gad080078a175bc7f88618970b07dd445b":[9,0,6,3], "group__msg__synchro.html#gadb025f3f21a31a3140675cea7a4ef957":[9,0,6,0], "group__msg__task__usage.html":[9,0,5], "group__msg__task__usage.html#ga01ce9097c976b96664e6785f6ab5d4b6":[9,0,5,23], "group__msg__task__usage.html#ga19687ebde0e9a07cb99fc73e7dfa7a03":[9,0,5,8], "group__msg__task__usage.html#ga1e2f86298cf00ea3ced4d263d31e2890":[9,0,5,10], "group__msg__task__usage.html#ga26ca8f6eb20767098104786a15f19fb8":[9,0,5,32], "group__msg__task__usage.html#ga297e41ae363db652f2075d7e9d164bb5":[9,0,5,31], "group__msg__task__usage.html#ga2ae956f1e7a1014652d85b5f8db42aa3":[9,0,5,22], "group__msg__task__usage.html#ga33c924177135850888f25378b8e0b3cf":[9,0,5,27], "group__msg__task__usage.html#ga361a85b101d3de18e8b7ed0a101d2af3":[9,0,5,16], "group__msg__task__usage.html#ga4a29ded2ab96b5632e2f70dfd684783d":[9,0,5,9], "group__msg__task__usage.html#ga4d8a840bc4a7f1b28ba351069de9b9c3":[9,0,5,35], "group__msg__task__usage.html#ga62772e7b378bc485c114231af4b8f596":[9,0,5,24], "group__msg__task__usage.html#ga67d9306a7940e2b32a57d4c4d2ce8523":[9,0,5,30], "group__msg__task__usage.html#ga6a872b2d96bdd22d28b851f1072792f5":[9,0,5,25], "group__msg__task__usage.html#ga6ebbb75fe9ff779eac6ca57c5ad5bfe3":[9,0,5,2], "group__msg__task__usage.html#ga710ee9d4ea587ab6ae66014913ac91e1":[9,0,5,6], "group__msg__task__usage.html#ga7646951835a1ac861b6a35b41741a268":[9,0,5,33], "group__msg__task__usage.html#ga77f5e9bbbdb4a478cd3479d86678b7ab":[9,0,5,28], "group__msg__task__usage.html#ga7e292abd2fac532430ecb51a170a004a":[9,0,5,15], "group__msg__task__usage.html#ga97bd13baa799b73b12599b3d6f7b849f":[9,0,5,3], "group__msg__task__usage.html#gaa1b107438e7a295058e098a8c2c1bc4a":[9,0,5,21], "group__msg__task__usage.html#gaa280111a523d70bb36061e6e52ca1b42":[9,0,5,12], "group__msg__task__usage.html#gaa5c978ad309b34cc72accd934531f4ac":[9,0,5,11], "group__msg__task__usage.html#gab7c18061b167e38f28886512ea73be6b":[9,0,5,4], "group__msg__task__usage.html#gabab3742eeb92d3e9a03aa7068f7d5d7f":[9,0,5,14], "group__msg__task__usage.html#gabc1b32d1baa16ae2dea503be7b74893f":[9,0,5,18], "group__msg__task__usage.html#gacd787fdda2fd925a1e4e0114cb4eb82e":[9,0,5,20], "group__msg__task__usage.html#gad147ccce869d2be6888e123063430dd8":[9,0,5,7], "group__msg__task__usage.html#gadb4623d587d75ad3b078928f0f1b27a5":[9,0,5,17], "group__msg__task__usage.html#gae1fb84e33c47ad59862188845ececdf5":[9,0,5,29], "group__msg__task__usage.html#gae2f7e0cd1e5707f78b4694abeef695d3":[9,0,5,0], "group__msg__task__usage.html#gae41e58a499fddc40b4b0de9a59894b29":[9,0,5,5], "group__msg__task__usage.html#gaf4fbe7c481859674d29475a0085d7333":[9,0,5,26], "group__msg__task__usage.html#gafb8d945da3bf7c7e54d8db238d5f5508":[9,0,5,13], "group__msg__task__usage.html#gafd22dad001b95804f5e93aa146c84fd3":[9,0,5,19], "group__msg__task__usage.html#gafe19e97b54682048a5b2f1c79add21cf":[9,0,5,1], "group__msg__task__usage.html#gaff6a660d1f3a37ff7ee3daee0e3ae3b7":[9,0,5,34], "group__msg__trace__driven.html":[9,0,9], "group__msg__trace__driven.html#gaff3ae0c6d1fc712f2162cc199086731f":[9,0,9,0], "group__simix__comm__management.html":[9,3,4], "group__simix__file__management.html":[9,3,6], "group__simix__file__management.html#ga1d4bafa33327c5ce72d7db4a3f1b78d0":[9,3,6,0], "group__simix__file__management.html#ga6a768555110db361a4e78fe04719c408":[9,3,6,1], "group__simix__host__management.html":[9,3,2], "group__simix__host__management.html#ga03e97c1154f4925d1fb378d68dd5a888":[9,3,2,3], "group__simix__host__management.html#ga0656f3e6508c217106c8d760afdcb11d":[9,3,2,13], "group__simix__host__management.html#ga0b9cc33e2ba9c59627be871c46be9892":[9,3,2,15], "group__simix__host__management.html#ga15cc5be1060eae3638ac2c00ec5364ef":[9,3,2,16], "group__simix__host__management.html#ga1a3288b39aba9f321caca13166518cc0":[9,3,2,4], "group__simix__host__management.html#ga22bd604a7c15c1980e0ed09281141472":[9,3,2,1], "group__simix__host__management.html#ga23839f5acd57bb8d12620d0e1bad56c1":[9,3,2,21], "group__simix__host__management.html#ga2683ae7336c84958f9fba0c2a8e502fd":[9,3,2,9], "group__simix__host__management.html#ga3df7d10c87185d6c03c90cfa3b62cc43":[9,3,2,23], "group__simix__host__management.html#ga51aacd521d7590712def7fcc86367491":[9,3,2,12], "group__simix__host__management.html#ga5257c159ed0002779a0d88a1e067bd20":[9,3,2,17], "group__simix__host__management.html#ga5540d4f66a2cbc953bfd0d9917ec22ee":[9,3,2,0], "group__simix__host__management.html#ga57ef6dbb3d85979561de1881d3cba1bb":[9,3,2,18], "group__simix__host__management.html#ga66026abb4f24bd3a528a9bcc41200c4f":[9,3,2,22], "group__simix__host__management.html#ga6acb64cfef3e7284442f6e20bee9317d":[9,3,2,10], "group__simix__host__management.html#ga8201c0350e48d696ef915e4fe668014b":[9,3,2,11], "group__simix__host__management.html#ga8760a71314f39b57eafca4782251369f":[9,3,2,24], "group__simix__host__management.html#gaa45133ec4a6376f0de1efb4e08746f2c":[9,3,2,5], "group__simix__host__management.html#gaa93a5302ec2a513b76498b91428fefe2":[9,3,2,8], "group__simix__host__management.html#gaaf0a2fb59b6754184673bcc775401da1":[9,3,2,14], "group__simix__host__management.html#gab177e0a327bde207864adbb4abf90e57":[9,3,2,20], "group__simix__host__management.html#gac627f752c965060cb592ebda7ff5e8ce":[9,3,2,2], "group__simix__host__management.html#gada381d983887aefa0ecfa92395aead7b":[9,3,2,6], "group__simix__host__management.html#gaefe3f6813e0791704516253577457058":[9,3,2,7], "group__simix__host__management.html#gaf31f9cd17e99f88b734b37a91f25d476":[9,3,2,19], "group__simix__process__management.html":[9,3,1], "group__simix__process__management.html#ga18c58debc643922bf68b5d8de563e4c5":[9,3,1,12], "group__simix__process__management.html#ga2a8d8ea34037935fcba5456884a0e886":[9,3,1,3], "group__simix__process__management.html#ga2e9bb138e7ba7f7e588cb662be3b1757":[9,3,1,7], "group__simix__process__management.html#ga2fd1c21b67cdf31506f5cd2a94d91313":[9,3,1,2], "group__simix__process__management.html#ga3e5f4a672ee15995a110ef2bff287b00":[9,3,1,18], "group__simix__process__management.html#ga3ef2cbb5679f4f103f1d56b0e4e74f6b":[9,3,1,11], "group__simix__process__management.html#ga433713db62cee73ad3006d2d3eabc702":[9,3,1,19], "group__simix__process__management.html#ga5ba7792648b97d73a68a0472f756bf17":[9,3,1,16], "group__simix__process__management.html#ga7e5cce2d1b8238c587b9e3be60c26b26":[9,3,1,21], "group__simix__process__management.html#ga84d861a0d2125159a5f55a767f710ad6":[9,3,1,10], "group__simix__process__management.html#ga86836c7ddd8864c4662a384014959a76":[9,3,1,15], "group__simix__process__management.html#ga9496f5abef32b4e9d1ef03298d7446e6":[9,3,1,0], "group__simix__process__management.html#ga9fdb4fa34e26498e410db9794f0fe1a7":[9,3,1,6], "group__simix__process__management.html#gab10c8ebfd02973f5556bada2bb0a2915":[9,3,1,5], "group__simix__process__management.html#gab71a0ff395a1ba9075f4ca76da63b5c3":[9,3,1,9], "group__simix__process__management.html#gabbc2bb1e3346602a7e7ce8af2f9963b0":[9,3,1,4], "group__simix__process__management.html#gac55e617472e645926ca1cdcea8533508":[9,3,1,13], "group__simix__process__management.html#gad0cdca75425dbbb863121e44b1462612":[9,3,1,17], "group__simix__process__management.html#gada27408ad1425a1a1f94e8d9dbab31ee":[9,3,1,14], "group__simix__process__management.html#gae7ec2e782070e190356478e8c88a0cc5":[9,3,1,8], "group__simix__process__management.html#gaf19a836d7ea387f1526fc48231726dc9":[9,3,1,1], "group__simix__process__management.html#gaf4fd76982573c1f58d3eed172ba2d64c":[9,3,1,20], "group__simix__rdv__management.html":[9,3,3], "group__simix__rdv__management.html#ga3be3b0b7647b63da38063e9df674f29e":[9,3,3,3], "group__simix__rdv__management.html#ga417b16e55a7b5fad902bde9b9f263ead":[9,3,3,2], "group__simix__rdv__management.html#ga76202b8bd49aa89a5427267cb4528636":[9,3,3,0], "group__simix__rdv__management.html#ga79a92d3223cd9d41ba694044d3f308ac":[9,3,3,4], "group__simix__rdv__management.html#ga9e244ad91daf47c0e9b45b004dd6e3d6":[9,3,3,1], "group__simix__synchro__management.html":[9,3,5], "help.html":[4,10], "index.html":[], "index.html":[0], "inside_autotests.html":[5,2,5], "inside_autotests.html#inside_autotests_dev_guide_cdash":[5,2,5,2], "inside_autotests.html#inside_autotests_dev_guide_g5k_campaign":[5,2,5,3,0], "inside_autotests.html#inside_autotests_dev_guide_g5k_log":[5,2,5,3,1], "inside_autotests.html#inside_autotests_dev_guide_pipol_frontend":[5,2,5,0,1], "inside_autotests.html#inside_autotests_dev_guide_pipol_general":[5,2,5,0,0], "inside_autotests.html#inside_autotests_dev_guide_pipol_home":[5,2,5,0,2], "inside_autotests.html#inside_autotests_dev_guide_pipol_nightly":[5,2,5,1], "inside_autotests.html#inside_autotests_perf":[5,2,5,3], "inside_autotests.html#xps_dev_guide_pipol":[5,2,5,0], "inside_cmake.html":[5,2,3], "inside_cmake.html#cmake_dev_guide_ex":[5,2,3,2], "inside_cmake.html#inside_cmake_addsrc":[5,2,3,1], "inside_cmake.html#inside_cmake_addtest":[5,2,3,3], "inside_cmake.html#inside_cmake_addtest_integration":[5,2,3,3,1], "inside_cmake.html#inside_cmake_addtest_perf":[5,2,3,3,2], "inside_cmake.html#inside_cmake_addtest_unit":[5,2,3,3,0], "inside_cmake.html#inside_cmake_intro":[5,2,3,0], "inside_cmake.html#inside_cmake_what":[5,2,3,0,0], "inside_cmake.html#inside_cmake_why":[5,2,3,0,1], "inside_doxygen.html":[5,2,1], "inside_doxygen.html#inside_doxygen_image":[5,2,1,2], "inside_doxygen.html#inside_doxygen_module":[5,2,1,0], "inside_doxygen.html#inside_doxygen_module_create":[5,2,1,0,0], "inside_doxygen.html#inside_doxygen_module_document":[5,2,1,0,2], "inside_doxygen.html#inside_doxygen_module_populate":[5,2,1,0,1], "inside_doxygen.html#inside_doxygen_page":[5,2,1,1], "inside_doxygen.html#inside_doxygen_page_cmake":[5,2,1,1,2], "inside_doxygen.html#inside_doxygen_page_doxy":[5,2,1,1,1], "inside_doxygen.html#inside_doxygen_page_write":[5,2,1,1,0] }; SimGrid-3.10/doc/html/group__SMPI__API.html000640 007661 000620 00000100215 12242224150 020564 0ustar00gierschand000000 000000 SimGrid: SMPI
SimGrid  3.10
Versatile Simulation of Distributed Systems
SMPI

Programming environment for the simulation of MPI applications. More...

Programming environment for the simulation of MPI applications.

This programming environment enables the study of MPI application by emulating them on top of the SimGrid simulator. This is particularly interesting to study existing MPI applications within the comfort of the simulator. The motivation for this work is detailed in the reference article (available at http://hal.inria.fr/inria-00527150).

Our goal is to enable the study of unmodified MPI applications, although we are not quite there yet (see What can run within SMPI?). In addition, you can modify your code to speed up your studies or otherwise increase their scalability (see Adapting your MPI code to the use of SMPI).

Who should use SMPI (and who shouldn't)

SMPI is now considered as stable and you can use it in production. You may probably want to read the scientific publications that detail the models used and their limits, but this should not be absolutely necessary. If you already fluently write and use MPI applications, SMPI should sound very familiar to you. Use smpicc instead of mpicc, and smpirun instead of mpirun (see below for more details).

Of course, if you don't know what MPI is, the documentation of SMPI will seem a bit terse to you. You should pick up a good MPI tutorial on the Internet (or a course in your favorite university) and come back to SMPI once you know a bit more about MPI. Alternatively, you may want to turn to the other SimGrid interfaces such as the MSG environment, or the SimDag one.

What can run within SMPI?

You can run unmodified MPI applications (both C and Fortran) within SMPI, provided that (1) you only use MPI calls that we implemented in MPI and (2) you don't use any globals in your application.

MPI coverage of SMPI

Our coverage of the interface is very decent, but still incomplete; Given the size of the MPI standard, it may well be that we never implement absolutely all existing primitives. One sided communications and I/O primitives are not targeted for now. Our current state is still very decent: we pass most of the MPICH coverage tests.

The full list of not yet implemented functions is documented in the file include/smpi/smpi.h of the archive, between two lines containing the FIXME marker. If you really need a missing feature, please get in touch with us: we can guide you though the SimGrid code to help you implementing it, and we'd glad to integrate it in the main project afterward if you contribute them back.

Issues with the globals

Concerning the globals, the problem comes from the fact that usually, MPI processes run as real UNIX processes while they are all folded into threads of a unique system process in SMPI. Global variables are usually private to each MPI process while they become shared between the processes in SMPI. This point is rather problematic, and currently forces to modify your application to privatize the global variables.

We tried several techniques to work this around. We used to have a script that privatized automatically the globals through static analysis of the source code, but it was not robust enough to be used in production. This issue, as well as several potential solutions, is discussed in this article: "Automatic Handling of Global Variables for Multi-threaded MPI Programs", available at http://charm.cs.illinois.edu/newPapers/11-23/paper.pdf (note that this article does not deal with SMPI but with a concurrent solution called AMPI that suffers of the same issue).

Currently, we have no solution to offer you, because all proposed solutions will modify the performance of your application (in the computational sections). Sacrificing realism for usability is not very satisfying, so we did not implement them yet. You will thus have to modify your application if it uses global variables. We are working on another solution, leveraging distributed simulation to keep each MPI process within a separate system process, but this is far from being ready at the moment.

Compiling your code

This is very simply done with the smpicc script. If you already compiled any MPI code before, you already know how to use it. If not, you should try to get your MPI code running on top of MPI before giving SMPI a spin. Actually, that's very simple even if it's the first time you use MPI code: just use smpicc as a compiler (in replacement of gcc or your usual compiler), and you're set.

Executing your code on top of the simulator

This is done though the smpirun script as follows. my_hostfile.txt is a classical MPI hostfile (that is, this file lists the machines on which the processes must be dispatched, one per line) my_platform.xml is a classical SimGrid platform file. Of course, the hosts of the hostfile must exist in the provided platform. ./program is the MPI program that you want to simulate (must be compiled by smpicc) while -arg is a command-line parameter passed to this program.

smpirun -hostfile my_hostfile.txt -platform my_platform.xml ./program -arg

smpirun accepts other parameters, such as -np if you don't want to use all the hosts defined in the hostfile, -map to display on which host each rank gets mapped of -trace to activate the tracing during the simulation. You can get the full list by running

smpirun -help

Adapting your MPI code to the use of SMPI

As detailed in the reference article (available at http://hal.inria.fr/inria-00527150), you may want to adapt your code to improve the simulation performance. But these tricks may seriously hinder the result quality (or even prevent the app to run) if used wrongly. We assume that if you want to simulate an HPC application, you know what you are doing. Don't prove us wrong!

Reducing your memory footprint

If you get short on memory (the whole app is executed on a single node when simulated), you should have a look at the SMPI_SHARED_MALLOC and SMPI_SHARED_FREE macros. It allows to share memory areas between processes: The purpose of these macro is that the same line malloc on each process will point to the exact same memory area. So if you have a malloc of 2M and you have 16 processes, this macro will change your memory consumption from 2M*16 to 2M only. Only one block for all processes.

If your program is ok with a block containing garbage value because all processes write and read to the same place without any kind of coordination, then this macro can dramatically shrink your memory consumption. For example, that will be very beneficial to a matrix multiplication code, as all blocks will be stored on the same area. Of course, the resulting computations will useless, but you can still study the application behavior this way.

Naturally, this won't work if your code is data-dependent. For example, a Jacobi iterative computation depends on the result computed by the code to detect convergence conditions, so turning them into garbage by sharing the same memory area between processes does not seem very wise. You cannot use the SMPI_SHARED_MALLOC macro in this case, sorry.

This feature is demoed by the example file examples/smpi/NAS/DT-folding/dt.c

Toward faster simulations

If your application is too slow, try using SMPI_SAMPLE_LOCAL, SMPI_SAMPLE_GLOBAL and friends to indicate which computation loops can be sampled. Some of the loop iterations will be executed to measure their duration, and this duration will be used for the subsequent iterations. These samples are done per processor with SMPI_SAMPLE_LOCAL, and shared between all processors with SMPI_SAMPLE_GLOBAL. Of course, none of this will work if the execution time of your loop iteration are not stable.

This feature is demoed by the example file examples/smpi/NAS/EP-sampling/ep.c

Simulating collective operations

MPI collective operations can be implemented very differently from one library to another. Actually, all existing libraries implement several algorithms for each collective operation, and by default select at runtime which one should be used for the current operation, depending on the sizes sent, the number of nodes, the communicator, or the communication library being used. These decisions are based on empirical results and theoretical complexity estimation, but they can sometimes be suboptimal. Manual selection is possible in these cases, to allow the user to tune the library and use the better collective if the default one is not good enough.

SMPI tries to apply the same logic, regrouping algorithms from OpenMPI, MPICH libraries, and from StarMPI (STAR-MPI). This collection of more than a hundred algorithms allows a simple and effective comparison of their behavior and performance, making SMPI a tool of choice for the development of such algorithms.

Tracing of internal communications

For each collective, default tracing only outputs only global data. Internal communication operations are not traced to avoid outputting too much data to the trace. To debug and compare algorithm, this can be changed with the item tracing/smpi/internals , which has 0 for default value. Here are examples of two alltoall collective algorithms runs on 16 nodes, the first one with a ring algorithm, the second with a pairwise one :


Selectors

The default selection logic implemented by default in OpenMPI (version 1.7) and MPICH (version 3.0.4) has been replicated and can be used by setting the smpi/coll_selector item to either ompi or mpich. The code and details for each selector can be found in the src/smpi/colls/smpi_(openmpi/mpich)_selector.c file. As this is still in development, we do not insure that all algorithms are correctly replicated and that they will behave exactly as the real ones. If you notice a difference, please contact SimGrid developers mailing list

The default selector uses the legacy algorithms used in versions of SimGrid previous to the 3.10. they should not be used to perform performance study and may be removed in the future, a different selector being used by default.

Available algorithms

For each one of the listed algorithms, several versions are available, either coming from STAR-MPI, MPICH or OpenMPI implementations. Details can be found in the code or in STAR-MPI for STAR-MPI algorithms.

Each collective can be selected using the corresponding configuration item. For example, to use the pairwise alltoall algorithm, one should add –cfg=smpi/alltoall:pair to the line. This will override the selector (for this algorithm only) if provided, allowing better flexibility.

Warning: Some collective may require specific conditions to be executed correctly (for instance having a communicator with a power of two number of nodes only), which are currently not enforced by Simgrid. Some crashes can be expected while trying these algorithms with unusual sizes/parameters

MPI_Alltoall

Most of these are best described in STAR-MPI

  • default : naive one, by default
  • ompi : use openmpi selector for the alltoall operations
  • mpich : use mpich selector for the alltoall operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • 2dmesh : organizes the nodes as a two dimensional mesh, and perform allgather along the dimensions
  • 3dmesh : adds a third dimension to the previous algorithm
  • rdb : recursive doubling : extends the mesh to a nth dimension, each one containing two nodes
  • pair : pairwise exchange, only works for power of 2 procs, size-1 steps, each process sends and receives from the same process at each step
  • pair_light_barrier : same, with small barriers between steps to avoid contention
  • pair_mpi_barrier : same, with MPI_Barrier used
  • pair_one_barrier : only one barrier at the beginning
  • ring : size-1 steps, at each step a process send to process (n+i)size, and receives from (n-i)size
  • ring_light_barrier : same, with small barriers between some phases to avoid contention
  • ring_mpi_barrier : same, with MPI_Barrier used
  • ring_one_barrier : only one barrier at the beginning
  • basic_linear :posts all receives and all sends, starts the communications, and waits for all communication to finish

MPI_Alltoallv

  • default : naive one, by default
  • ompi : use openmpi selector for the alltoallv operations
  • mpich : use mpich selector for the alltoallv operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • bruck : same as alltoall
  • pair : same as alltoall
  • pair_light_barrier : same as alltoall
  • pair_mpi_barrier : same as alltoall
  • pair_one_barrier : same as alltoall
  • ring : same as alltoall
  • ring_light_barrier : same as alltoall
  • ring_mpi_barrier : same as alltoall
  • ring_one_barrier : same as alltoall
  • ompi_basic_linear : same as alltoall

MPI_Gather

  • default : naive one, by default
  • ompi : use openmpi selector for the gather operations
  • mpich : use mpich selector for the gather operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm which will iterate over all implemented versions and output the best
  • ompi_basic_linear : basic linear algorithm from openmpi, each process sends to the root
  • ompi_binomial : binomial tree algorithm
  • ompi_linear_sync : same as basic linear, but with a synchronization at the beginning and message cut into two segments.

MPI_Barrier

  • default : naive one, by default
  • ompi : use openmpi selector for the barrier operations
  • mpich : use mpich selector for the barrier operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • ompi_basic_linear : all processes send to root
  • ompi_two_procs : special case for two processes
  • ompi_bruck : nsteps = sqrt(size), at each step, exchange data with rank-2^k and rank+2^k
  • ompi_recursivedoubling : recursive doubling algorithm
  • ompi_tree : recursive doubling type algorithm, with tree structure
  • ompi_doublering : double ring algorithm

MPI_Scatter

  • default : naive one, by default
  • ompi : use openmpi selector for the scatter operations
  • mpich : use mpich selector for the scatter operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • ompi_basic_linear : basic linear scatter
  • ompi_binomial : binomial tree scatter

MPI_Reduce

  • default : naive one, by default
  • ompi : use openmpi selector for the reduce operations
  • mpich : use mpich selector for the reduce operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • arrival_pattern_aware : root exchanges with the first process to arrive
  • binomial : uses a binomial tree
  • flat_tree : uses a flat tree
  • NTSL : Non-topology-specific pipelined linear-bcast function 0->1, 1->2 ,2->3, ....., ->last node : in a pipeline fashion, with segments of 8192 bytes
  • scatter_gather : scatter then gather
  • ompi_chain : openmpi reduce algorithms are built on the same basis, but the topology is generated differently for each flavor chain = chain with spacing of size/2, and segment size of 64KB
  • ompi_pipeline : same with pipeline (chain with spacing of 1), segment size depends on the communicator size and the message size
  • ompi_binary : same with binary tree, segment size of 32KB
  • ompi_in_order_binary : same with binary tree, enforcing order on the operations
  • ompi_binomial : same with binomial algo (redundant with default binomial one in most cases)
  • ompi_basic_linear : basic algorithm, each process sends to root

MPI_Allreduce

  • default : naive one, by default
  • ompi : use openmpi selector for the allreduce operations
  • mpich : use mpich selector for the allreduce operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • lr : logical ring reduce-scatter then logical ring allgather
  • rab1 : variations of the Rabenseifner algorithm : reduce_scatter then allgather
  • rab2 : variations of the Rabenseifner algorithm : alltoall then allgather
  • rab_rsag : variation of the Rabenseifner algorithm : recursive doubling reduce_scatter then recursive doubling allgather
  • rdb : recursive doubling
  • smp_binomial : binomial tree with smp : 8 cores/SMP, binomial intra SMP reduce, inter reduce, inter broadcast then intra broadcast
  • smp_binomial_pipeline : same with segment size = 4096 bytes
  • smp_rdb : 8 cores/SMP, intra : binomial allreduce, inter : Recursive doubling allreduce, intra : binomial broadcast
  • smp_rsag : 8 cores/SMP, intra : binomial allreduce, inter : reduce-scatter, inter:allgather, intra : binomial broadcast
  • smp_rsag_lr : 8 cores/SMP, intra : binomial allreduce, inter : logical ring reduce-scatter, logical ring inter:allgather, intra : binomial broadcast
  • smp_rsag_rab : 8 cores/SMP, intra : binomial allreduce, inter : rab reduce-scatter, rab inter:allgather, intra : binomial broadcast
  • redbcast : reduce then broadcast, using default or tuned algorithms if specified
  • ompi_ring_segmented : ring algorithm used by OpenMPI

MPI_Reduce_scatter

  • default : naive one, by default
  • ompi : use openmpi selector for the reduce_scatter operations
  • mpich : use mpich selector for the reduce_scatter operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • ompi_basic_recursivehalving : recursive halving version from OpenMPI
  • ompi_ring : ring version from OpenMPI
  • mpich_pair : pairwise exchange version from MPICH
  • mpich_rdb : recursive doubling version from MPICH
  • mpich_noncomm : only works for power of 2 procs, recursive doubling for noncommutative ops

MPI_Allgather

  • default : naive one, by default
  • ompi : use openmpi selector for the allgather operations
  • mpich : use mpich selector for the allgather operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • 2dmesh : see alltoall
  • 3dmesh : see alltoall
  • bruck : Described by Bruck et.al. in Efficient algorithms for all-to-all communications in multiport message-passing systems
  • GB : Gather - Broadcast (uses tuned version if specified)
  • loosely_lr : Logical Ring with grouping by core (hardcoded, default processes/node: 4)
  • NTSLR : Non Topology Specific Logical Ring
  • NTSLR_NB : Non Topology Specific Logical Ring, Non Blocking operations
  • pair : see alltoall
  • rdb : see alltoall
  • rhv : only power of 2 number of processes
  • ring : see alltoall
  • SMP_NTS : gather to root of each SMP, then every root of each SMP node post INTER-SMP Sendrecv, then do INTRA-SMP Bcast for each receiving message, using logical ring algorithm (hardcoded, default processes/SMP: 8)
  • smp_simple : gather to root of each SMP, then every root of each SMP node post INTER-SMP Sendrecv, then do INTRA-SMP Bcast for each receiving message, using simple algorithm (hardcoded, default processes/SMP: 8)
  • spreading_simple : from node i, order of communications is i -> i + 1, i -> i + 2, ..., i -> (i + p -1) % P
  • ompi_neighborexchange : Neighbor Exchange algorithm for allgather. Described by Chen et.al. in Performance Evaluation of Allgather Algorithms on Terascale Linux Cluster with Fast Ethernet

MPI_Allgatherv

  • default : naive one, by default
  • ompi : use openmpi selector for the allgatherv operations
  • mpich : use mpich selector for the allgatherv operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • GB : Gatherv - Broadcast (uses tuned version if specified, but only for Bcast, gatherv is not tuned)
  • pair : see alltoall
  • ring : see alltoall
  • ompi_neighborexchange : see allgather
  • ompi_bruck : see allgather
  • mpich_rdb : recursive doubling algorithm from MPICH
  • mpich_ring : ring algorithm from MPICh - performs differently from the one from STAR-MPI

MPI_Bcast

  • default : naive one, by default
  • ompi : use openmpi selector for the bcast operations
  • mpich : use mpich selector for the bcast operations
  • automatic (experimental) : use an automatic self-benchmarking algorithm
  • arrival_pattern_aware : root exchanges with the first process to arrive
  • arrival_pattern_aware_wait : same with slight variation
  • binomial_tree : binomial tree exchange
  • flattree : flat tree exchange
  • flattree_pipeline : flat tree exchange, message split into 8192 bytes pieces
  • NTSB : Non-topology-specific pipelined binary tree with 8192 bytes pieces
  • NTSL : Non-topology-specific pipelined linear with 8192 bytes pieces
  • NTSL_Isend : Non-topology-specific pipelined linear with 8192 bytes pieces, asynchronous communications
  • scatter_LR_allgather : scatter followed by logical ring allgather
  • scatter_rdb_allgather : scatter followed by recursive doubling allgather
  • arrival_scatter : arrival pattern aware scatter-allgather
  • SMP_binary : binary tree algorithm with 8 cores/SMP
  • SMP_binomial : binomial tree algorithm with 8 cores/SMP
  • SMP_linear : linear algorithm with 8 cores/SMP
  • ompi_split_bintree : binary tree algorithm from OpenMPI, with message split in 8192 bytes pieces
  • ompi_pipeline : pipeline algorithm from OpenMPI, with message split in 128KB pieces

Automatic evaluation

(Warning : This is experimental and may be removed or crash easily)

An automatic version is available for each collective (or even as a selector). This specific version will loop over all other implemented algorithm for this particular collective, and apply them while benchmarking the time taken for each process. It will then output the quickest for each process, and the global quickest. This is still unstable, and a few algorithms which need specific number of nodes may crash.

Add an algorithm

To add a new algorithm, one should check in the src/smpi/colls folder how other algorithms are coded. Using plain MPI code inside Simgrid can't be done, so algorithms have to be changed to use smpi version of the calls instead (MPI_Send will become smpi_mpi_send). Some functions may have different signatures than their MPI counterpart, please check the other algorithms or contact us using SimGrid developers mailing list.

Example: adding a "pair" version of the Alltoall collective.

  • Implement it in a file called alltoall-pair.c in the src/smpi/colls folder. This file should include colls_private.h.
  • The name of the new algorithm function should be smpi_coll_tuned_alltoall_pair, with the same signature as MPI_Alltoall.
  • Once the adaptation to SMPI code is done, add a reference to the file ("src/smpi/colls/alltoall-pair.c") in the SMPI_SRC part of the DefinePackages.cmake file inside buildtools/cmake, to allow the file to be built and distributed.
  • To register the new version of the algorithm, simply add a line to the corresponding macro in src/smpi/colls/cools.h ( add a "COLL_APPLY(action, COLL_ALLTOALL_SIG, pair)" to the COLL_ALLTOALLS macro ). The algorithm should now be compiled and be selected when using –cfg=smpi/alltoall:pair at runtime.
  • To add a test for the algorithm inside Simgrid's test suite, juste add the new algorithm name in the ALLTOALL_COLL list found inside buildtools/cmake/AddTests.cmake . When running ctest, a test for the new algorithm should be generated and executed. If it does not pass, please check your code or contact us.
  • Feel free to push this new algorithm to the SMPI repository using Git.
SimGrid-3.10/doc/html/dir_1ab1ca1c41c4f60bd40ca6eecbcfbcce.html000640 007661 000620 00000014267 12242224150 023657 0ustar00gierschand000000 000000 SimGrid: examples/msg/chord/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
chord Directory Reference

Files

file  chord.c
file  generate.py
SimGrid-3.10/doc/html/group__XBT__set.html000640 007661 000620 00000017226 12242224150 020644 0ustar00gierschand000000 000000 SimGrid: Set: generic set datatype
SimGrid  3.10
Versatile Simulation of Distributed Systems
Set: generic set datatype

A data container consisting in Dict: generic dictionnary and Dynar: generic dynamic array. More...

Modules

 Set and set elements, constructor/destructor
 Sets basic usage
 Sets cursors

Detailed Description

A data container consisting in Dict: generic dictionnary and Dynar: generic dynamic array.

The elements stored in such a data structure can be retrieve both by
name and by ID. For this to work, the first fields of the structures
stored must begin with the following fields:
 struct {
   unsigned int ID;
   char        *name;
   unsigned int name_len;
   // my other fields, constituting the payload
 } my_element_type_t;
Since we are casting elements around, no protection is ensured by the

compiler. It is thus safer to define the headers using the macro defined to that extend:

struct {
 XBT_SET_HEADERS;

 // my other fields, constituting the payload
} my_element_type_t;
It is now possible to remove an element from such a data structure.

\xrefitem todo 1.
SimGrid-3.10/doc/html/group__SD__task__dependency__management.html000640 007661 000620 00000044542 12242224150 025555 0ustar00gierschand000000 000000 SimGrid: Tasks dependencies
SimGrid  3.10
Versatile Simulation of Distributed Systems
Tasks dependencies

Functions for managing the task dependencies. More...

Functions

void SD_task_dependency_add (const char *name, void *data, SD_task_t src, SD_task_t dst)
 Adds a dependency between two tasks.
void SD_task_dependency_remove (SD_task_t src, SD_task_t dst)
 Remove a dependency between two tasks.
const char * SD_task_dependency_get_name (SD_task_t src, SD_task_t dst)
 Returns the name given as input when dependency has been created..
void * SD_task_dependency_get_data (SD_task_t src, SD_task_t dst)
 Returns the user data associated with a dependency between two tasks.
int SD_task_dependency_exists (SD_task_t src, SD_task_t dst)
 Indicates whether there is a dependency between two tasks.

Detailed Description

Functions for managing the task dependencies.

This section describes the functions for managing the dependencies between the tasks.

See Also
Tasks

Function Documentation

void SD_task_dependency_add ( const char *  name,
void *  data,
SD_task_t  src,
SD_task_t  dst 
)

Adds a dependency between two tasks.

dst will depend on src, ie dst will not start before src is finished. Their state must be SD_NOT_SCHEDULED, SD_SCHEDULED or SD_RUNNABLE.

Parameters
namethe name of the new dependency (can be NULL)
datathe user data you want to associate with this dependency (can be NULL)
srcthe task which must be executed first
dstthe task you want to make depend on src
See Also
SD_task_dependency_remove()
void SD_task_dependency_remove ( SD_task_t  src,
SD_task_t  dst 
)

Remove a dependency between two tasks.

Parameters
srca task
dsta task depending on src
See Also
SD_task_dependency_add()
const char* SD_task_dependency_get_name ( SD_task_t  src,
SD_task_t  dst 
)

Returns the name given as input when dependency has been created..

Parameters
srca task
dsta task depending on src
void* SD_task_dependency_get_data ( SD_task_t  src,
SD_task_t  dst 
)

Returns the user data associated with a dependency between two tasks.

Parameters
srca task
dsta task depending on src
Returns
the user data associated with this dependency (can be NULL)
See Also
SD_task_dependency_add()
int SD_task_dependency_exists ( SD_task_t  src,
SD_task_t  dst 
)

Indicates whether there is a dependency between two tasks.

Parameters
srca task
dsta task depending on src

If src is NULL, checks whether dst has any pre-dependency. If dst is NULL, checks whether src has any post-dependency.

SimGrid-3.10/doc/html/ftv2splitbar.png000640 007661 000620 00000000472 12242224150 020057 0ustar00gierschand000000 000000 PNG  IHDRMIDATxݡJCa( %4 bȘͶ3v^EL ,b;{Ï/aYկq:\IIIIIIIIIIIIIIIIII-l揊_t/ϻYQVYivk_ۣI@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$C[V=[fIENDB`SimGrid-3.10/doc/html/AS_hierarchy.png000664 007661 000620 00000020560 12242224150 020004 0ustar00gierschand000000 000000 PNG  IHDR ԐB pHYs M MέNtEXtSoftwareGPL Ghostscript 8.71?h4IDATx9r$;gF3%~l1ځcrUN_$Cͳ1e tqj ~?%z!$GC Z1▌}$ z ]h}5".Zǯ$ELMoB(38N)ϼ{>_ήԸTC>L U>[\vVMF4 (6Ȍ$O iݰʉxڜhPpy*!O!M; | vrc}˝Nz5Tb _PC+^sb rѼ{GY\=5|Zo9ҟď8?n_f; HeOVYlhk8bd+/^ꪄ)dG@JL˴$R~7X[V22׽lg!G?֞id퇪dPJj!1;1k ů֠~@P=8QPbf_̃Yah$ `k=Jdg}KӨ3%ΐSm&b У(B*y"z Y!m K VHiRMzHb%Or[#ĥ"[H)C]+I'h{X)]U7[YfHt lݾ&\M@{n@u$ku!O9N?+8Hpg?sD t=MY)Wnǭ^'rd\6{Kt:FaQ؂e' z b ;BH? kԿY)ԫmH_EiI&贵;^ge ]HGzjMa/hhhp?У*V-Ve-ه&&2dϿJGGhDjib"09`@Z!Ntp 6XAd=*[v>+ 2ta\lv1BtJ %⦷=iKIpϦ У6THYglxE**-d; ^@A&M6<}9}mOON Y&o0ė>bCHA{)wÌ8+~(ġmPьHpf9@{3'lNh1zy/(Dnem  =ezk=j2PXC3:ĴFʴSHV,Qu n@ uA<\e L=-t[)BW7t6v\bz݂fXvC|ODM 4QޛJG~Sb,M'k ^m)8 d/.f1m3!dcge~jד !~ITQdLУYm1Z `0')Q a$ꆄ)!{M z4 =%_Wo4Z7KR#:O,hČLg5t?mXo_CIި 'q*-!E$79joZCtϩ 0:wz|>Gdfn8:'6w `FJ$>z =.7:NF8 d{k_#`Po:6?`CW<ǂrD x&QwDxCzҖ'L`LJӲZl}`H7UOғp5$IɫEmH"2.Ç,GA% -Iz3+=)/"ED^1EP:CRv@j0%k%NGJ\,NGP"c"aDE4;Dfb6X_DDd2ԴEġ; A`}@vY_9?2"=+SaRO6{}Z46ğ~"@#(HmY|}+o+3q}j,U $IìMXr}="y$nb9fh,fo*abJV w}Z4AN,Zvt}>K ',쟝n, :>e&i';;7" r|`IMS*p[Ek=*GaOt簉 գ`2<9 %CGj f2"Z&e 2:=jD ""9}Ѧ y~ ^ G1v=ATִHs^enH!0D*flϯ7$KGi D$Ql%H "0;GD`Q,8=2P̟=6D`UdQl%I0#CVlhyIA6AP);/u,NvC*Τ. ;H!^ԴMGf$i Z} C`+Dk _UJ$ Lč=246%MQq+Cr0QaZ50+86hU!a() zT I=>nwZm XLq!<ߟ˹dt z[R#Ib?2܏ `=K43Ph)@&}o}#Iqq\?֜  xy?xp^77>յu$YFs9X;LsCQtG2IGҐ@ qE]f'Z4nw5"R`s=`~BeO'glnScLvl(L?bk4ϯw̐:<2m4ԸQe["zp .&!I#gKx/ : ̵#1^GmB`Y &f8lo L'ڊ\O۶pUJH+ď 薚k JOsGgD9剮MǒpydfXAx}(>tb0dԸ fLz^ޏcУ/DemnvĠ[/%K6?df[f%%VTڊuy(>shhln_{V"3^]nNo徝zHR2rH>v,w#I;9{]L\X25oOS)C^[v_fvc$_)>)#zDXu/XDiA'!ZXuHRQ{&Nْ:n~#O9q4ރZ]D=-33/_N]5{x e5}>M>LR٥XI_1.{o] #2D$5oCIt;ҵ4k^:Gj{1PADfգyۿ@'[1";%-3b ʕoDz_bهz o ;[AkղB=j2 D4Cx4Sá>RGOוO +at(GtCbzݘ ݳ1qGfd8~D|ћǰθ0 $ Dz<;kB"H2g8d둮QycXԔG LjukD`F &UC/ cZ9.$: 9;DZSTd&K%VSۧ@7#C]ؤ[r$NhݙG#X>IzD`.ַ$~>xe[8g=Hd/=&}ms/~{G_`Y}6GR c= v F@+u/<@@A8kNg.5+V%Жb$}MwUc;S?$׾o_CDB>^\bv&ߒNp9qϵ'Ŗ j_hQGF?-F}cdZc72g#$m"Q$[0̪ldlk"i_3hq9L_#{vзT"}r=!RdXD )K|/=R$mk"#IJX]NڭQ`a $idJt94|ڄ^bȑwC3 ||8mm-}vF=%}0$8RkږBhX#Hk*CN:4>!G?454O=R &Tjzhv5($I&1'ApGkwXQ@| gM 4Nj,Ƌp3'"[{6t)IXLAPΆ2`S| c-a\!YCZrN\XF@("*B&~'2/O>H(I\zC:(1z֕Kv%)QmקeA$=QxɟYf )l%XU13_:KAt$ &x'C+}HQP&ױ5*;G7k~m[Jzb:iҜ!/F5NN8Y7(f  .Cʑ,ڮ+6W+.4@{7n)8LЭbil0WV^z#ʺxPl(A!ֺ4\ VlzVCƒ @9untHz|[ fRlb;ѱUi%X!(FIǏߋ?їdUy0*i2[I\KQccb4k_Q_3~4N4OOvǹ_v)yt.`\)dbv#RMÑbxH`*[zK:e4ԾHOc(٤LzQ,7v̹sK%Z/ "ő(zBy⫆t`ȗeC[1> 6 NJFH{+G:~SNb(@1V3ފEbu~g@-h{lƾٺ+13NNA\{c/?$21!,bfl%"WJYQ`l:yV #[wzbR6s!+fa6&~`X<[T3>϶)02FH?0;ā&e=ڑM Iic<-@ \vN16N@ M%YK\ľ'r *3iDeUӇ}H(ѻ:DDe5 @ #G)@RIMw->QI#*>#G)_ێĒ~O@Tf҈ʪ/kZzh[ v3^ujN@Tf҈ʪm#W'f/7Zv"2FTVxGή9H\q,/0uVvnB,7BIW=z k]Y'rb ~U-8%X.t/]LkN]}r{NLYyy_WbWKϭNf{J8П>DeUZb>;k gvv){)js%I$.>ĉ#t $?r.i޵ }pEu2>ۙ5ʭO>>*4c tR_Á݋`j.y+4Κ圅]w_CgУ`%@}#HbH Y W ^΍5EpـMgM㗼ie|8uOfU>$~> i6p Icn6)JH?w\6(L*?F-I0|m *+{uudIENDB`PNG  IHDR ԐB pHYs M MέNtEXtSoftwareGPL Ghostscript 8.71?h4IDATx1 0^3Ǐ ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*# ?*.3=f' IENDB`SimGrid-3.10/doc/html/group__m__process__management.html000640 007661 000620 00000152433 12242224150 023661 0ustar00gierschand000000 000000 SimGrid: Process Management Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Process Management Functions

This section describes the process structure of MSG (msg_process_t) and the functions for managing it. More...

Typedefs

typedef struct s_smx_processmsg_process_t
 Process datatype.A process may be defined as a code, with some private data, executing in a location.

Functions

msg_process_t MSG_process_create (const char *name, xbt_main_func_t code, void *data, msg_host_t host)
 Creates and runs a new msg_process_t.
msg_process_t MSG_process_create_with_arguments (const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv)
 Creates and runs a new msg_process_t.
msg_process_t MSG_process_create_with_environment (const char *name, xbt_main_func_t code, void *data, msg_host_t host, int argc, char **argv, xbt_dict_t properties)
 Creates and runs a new msg_process_t.
void MSG_process_kill (msg_process_t process)
msg_error_t MSG_process_migrate (msg_process_t process, msg_host_t host)
 Migrates a process to another location.
void * MSG_process_get_data (msg_process_t process)
 Returns the user data of a process.
msg_error_t MSG_process_set_data (msg_process_t process, void *data)
 Sets the user data of a process.
void MSG_process_set_data_cleanup (void_f_pvoid_t data_cleanup)
 Sets a cleanup function to be called to free the userdata of a process when a process is destroyed.
msg_host_t MSG_process_get_host (msg_process_t process)
 Return the location on which a process is running.
msg_process_t MSG_process_from_PID (int PID)
 Return a msg_process_t given its PID.
msg_error_t MSG_process_set_kill_time (msg_process_t process, double kill_time)
 Set the kill time of a process.
int MSG_process_get_PID (msg_process_t process)
 Returns the process ID of process.
int MSG_process_get_PPID (msg_process_t process)
 Returns the process ID of the parent of process.
const char * MSG_process_get_name (msg_process_t process)
 Return the name of a process.
const char * MSG_process_get_property_value (msg_process_t process, const char *name)
 Returns the value of a given process property.
xbt_dict_t MSG_process_get_properties (msg_process_t process)
 Return the list of properties.
int MSG_process_self_PID (void)
 Return the PID of the current process.
int MSG_process_self_PPID (void)
 Return the PPID of the current process.
msg_process_t MSG_process_self (void)
 Return the current process.
msg_error_t MSG_process_suspend (msg_process_t process)
 Suspend the process.
msg_error_t MSG_process_resume (msg_process_t process)
 Resume a suspended process.
int MSG_process_is_suspended (msg_process_t process)
 Returns true if the process is suspended .
void MSG_process_on_exit (int_f_pvoid_t fun, void *data)
 Add a function to the list of "on_exit" functions for the current process. The on_exit functions are the functions executed when your process is killed. You should use them to free the data used by your process.
void MSG_process_auto_restart_set (msg_process_t process, int auto_restart)
 Sets the "auto-restart" flag of the process. If the flag is set to 1, the process will be automatically restarted when its host comes back up.

Detailed Description

This section describes the process structure of MSG (msg_process_t) and the functions for managing it.

We need to simulate many independent scheduling decisions, so the concept of process is at the heart of the simulator. A process may be defined as a code, with some private data, executing in a location.

See Also
msg_process_t

Typedef Documentation

typedef struct s_smx_process* msg_process_t

Process datatype.A process may be defined as a code, with some private data, executing in a location.

You should not access directly to the fields of the pointed structure, but always use the provided API to interact with processes.

Function Documentation

msg_process_t MSG_process_create ( const char *  name,
xbt_main_func_t  code,
void *  data,
msg_host_t  host 
)

Creates and runs a new msg_process_t.

Does exactly the same as MSG_process_create_with_arguments but without providing standard arguments (argc, argv, start_time, kill_time).

See Also
MSG_process_create_with_arguments
msg_process_t MSG_process_create_with_arguments ( const char *  name,
xbt_main_func_t  code,
void *  data,
msg_host_t  host,
int  argc,
char **  argv 
)

Creates and runs a new msg_process_t.

A constructor for msg_process_t taking four arguments and returning the corresponding object. The structure (and the corresponding thread) is created, and put in the list of ready process.

Parameters
namea name for the object. It is for user-level information and can be NULL.
codeis a function describing the behavior of the process. It should then only use functions described in Process Management Functions (to create a new msg_process_t for example), in Host Management Functions (only the read-only functions i.e. whose name contains the word get), in Task Management Functions (to create or destroy some msg_task_t for example) and in Task Actions (to handle file transfers and task processing).
dataa pointer to any data one may want to attach to the new object. It is for user-level information and can be NULL. It can be retrieved with the function MSG_process_get_data.
hostthe location where the new process is executed.
argcfirst argument passed to code
argvsecond argument passed to code
See Also
msg_process_t
Returns
The new corresponding object.
msg_process_t MSG_process_create_with_environment ( const char *  name,
xbt_main_func_t  code,
void *  data,
msg_host_t  host,
int  argc,
char **  argv,
xbt_dict_t  properties 
)

Creates and runs a new msg_process_t.

A constructor for msg_process_t taking four arguments and returning the corresponding object. The structure (and the corresponding thread) is created, and put in the list of ready process.

Parameters
namea name for the object. It is for user-level information and can be NULL.
codeis a function describing the behavior of the process. It should then only use functions described in Process Management Functions (to create a new msg_process_t for example), in Host Management Functions (only the read-only functions i.e. whose name contains the word get), in Task Management Functions (to create or destroy some msg_task_t for example) and in Task Actions (to handle file transfers and task processing).
dataa pointer to any data one may want to attach to the new object. It is for user-level information and can be NULL. It can be retrieved with the function MSG_process_get_data.
hostthe location where the new process is executed.
argcfirst argument passed to code
argvsecond argument passed to code. WARNING, these strings are freed by the SimGrid kernel when the process exits, so they cannot be static nor shared between several processes.
propertieslist a properties defined for this process
See Also
msg_process_t
Returns
The new corresponding object.
void MSG_process_kill ( msg_process_t  process)
Parameters
processpoor victim

This function simply kills a process... scary isn't it ? :)

msg_error_t MSG_process_migrate ( msg_process_t  process,
msg_host_t  host 
)

Migrates a process to another location.

This function checks whether process and host are valid pointers and change the value of the msg_host_t on which process is running.

void* MSG_process_get_data ( msg_process_t  process)

Returns the user data of a process.

This function checks whether process is a valid pointer or not and returns the user data associated to this process.

msg_error_t MSG_process_set_data ( msg_process_t  process,
void *  data 
)

Sets the user data of a process.

This function checks whether process is a valid pointer or not and sets the user data associated to this process.

void MSG_process_set_data_cleanup ( void_f_pvoid_t  data_cleanup)

Sets a cleanup function to be called to free the userdata of a process when a process is destroyed.

Parameters
data_cleanupa cleanup function for the userdata of a process, or NULL to call no function
msg_host_t MSG_process_get_host ( msg_process_t  process)

Return the location on which a process is running.

Parameters
processa process (NULL means the current one)
Returns
the msg_host_t corresponding to the location on which process is running.
msg_process_t MSG_process_from_PID ( int  PID)

Return a msg_process_t given its PID.

This function search in the list of all the created msg_process_t for a msg_process_t whose PID is equal to PID. If no host is found, NULL is returned. Note that the PID are uniq in the whole simulation, not only on a given host.

msg_error_t MSG_process_set_kill_time ( msg_process_t  process,
double  kill_time 
)

Set the kill time of a process.

Parameters
processa process
kill_timethe time when the process is killed.
int MSG_process_get_PID ( msg_process_t  process)

Returns the process ID of process.

This function checks whether process is a valid pointer or not and return its PID (or 0 in case of problem).

int MSG_process_get_PPID ( msg_process_t  process)

Returns the process ID of the parent of process.

This function checks whether process is a valid pointer or not and return its PID. Returns -1 if the process has not been created by any other process.

const char* MSG_process_get_name ( msg_process_t  process)

Return the name of a process.

This function checks whether process is a valid pointer or not and return its name.

const char* MSG_process_get_property_value ( msg_process_t  process,
const char *  name 
)

Returns the value of a given process property.

Parameters
processa process
namea property name
Returns
value of a property (or NULL if the property is not set)
xbt_dict_t MSG_process_get_properties ( msg_process_t  process)

Return the list of properties.

This function returns all the parameters associated with a process

int MSG_process_self_PID ( void  )

Return the PID of the current process.

This function returns the PID of the currently running msg_process_t.

int MSG_process_self_PPID ( void  )

Return the PPID of the current process.

This function returns the PID of the parent of the currently running msg_process_t.

msg_process_t MSG_process_self ( void  )

Return the current process.

This function returns the currently running msg_process_t.

msg_error_t MSG_process_suspend ( msg_process_t  process)

Suspend the process.

This function suspends the process by suspending the task on which it was waiting for the completion.

msg_error_t MSG_process_resume ( msg_process_t  process)

Resume a suspended process.

This function resumes a suspended process by resuming the task on which it was waiting for the completion.

int MSG_process_is_suspended ( msg_process_t  process)

Returns true if the process is suspended .

This checks whether a process is suspended or not by inspecting the task on which it was waiting for the completion.

SimGrid-3.10/doc/html/win_install_06.png000664 007661 000620 00000037236 12242224150 020303 0ustar00gierschand000000 000000 PNG  IHDR]zsRGBbKGD pHYs  tIME ,V IDATx{$ea}\}n`` sD_1q5YY&7ٍ'$&1f%Y/E@p 0szTUN߻y>zN=2Z̛ c$Lã둄LHYWJ&d YJYOrɑ8 :lhf@4Dcx?iIR:+ L;pHY ;d%%&vNzn](w粇t%Z6hdlIBJJcVҨ$(o"XS=áq }\<,|LCҏ<&:"-\[쐫Z6B!~8B0Xd Bz|g=d%/Yyk /I=#yKV/%e֬[ PRIJfHɡU'k5b@Y$#JXeE%e#@4}K[߃)n2G]Id$וIZW$!WJf(8%n]t$ʓQi)D#dHckdgW/srʸt9W*E}Vee UP\=s@f@T,B랕'+JzT.ҒlA nܬX6xO #-d#ҮI(sYdJ3*$S TOϓ$kAE`Pr޷%+V5un'vtBBo^25׬wu櫖s ⨶?:뿑Rfs}%2fNvd MALϬXÿZ^>|ZdYc[:Pg>csх;ok$kuw/D7lJ5wTJgY+ד\ʘpW?<)dZ64_D:걗$yz͸7xr$ϓ`%|e!WyR+Z' c~d9)Zq/þܿ|Fk[=/I0ۢl_Z|nA'cLHgL YϗRƵr])J i𜫃jտ~t$\/ccC֕ܬBd]gf=3V iO GjX7Oߤ{ix2#k a0\+ 4[Os庮2&IS/JȐBR֑Yl#^iXDД ~ZוTܕ:xDP2gVrk$kxR1J:VC i(!=xLA7ukutӚF1JHJb\+kX_gY+cIjI~ЗaO#82֓Gv ay ?3yFrG$uWCz8wAvY2m~PR2lp ա9)[: -JLzR:ke_q$(8J?/XV}]WAd=E*nd#83 y.HsA Ec CWix_)osrC3sM~}/]?[HFR/B9QCe؏tV:0kpy 1/d٠1FCdNwѴ[*0Om^8r΢i2y3VlF33$=}:>R˖G_RI=L rwV;ӟ>b?ґS{ ޱţugNJjdɟfIֽŎ3iʄFB=n,/uv&3<{LeOE]ֳ~ӻgud6#Y+L حJsEӁCbלOu2;JOsbOEP4o']8=>?vh1ғfdU֫,oZ_Kv|kK%Zx"DGO>$-d//kuwlg+eU37&{<,/;I5%$kup1G߻)FL|l02WcuǣiܩIs^Wܳwl ɯǾ2$5Z69G|hd5~U}y|MnSm]$Vdn|xzJs^[v~rjo/qa{˱yu%kL6#/g>5ʺF)1j?x{K4'#9yk ΥͱOY<73?_)(U_rGҨdn2?J&!ɷJ$dV>(_IvA)1? n$%{i-]z:qzaȼkon;?+Ia}ރ_Ї.uHS71Ga%ꋻ}_ǭttZW#~Zt'zB_-y%Z6ڣ7^E+Q./ٯσ:{h=ܲKRm}A&𵣋5h2Y0tƿa_Ȅפ%l&$ϑ\(krǑk}煍&7_8֭5y#8r8H ;h~f`QIrb7LPC&HZQY>ˆ44s֯}$|\+_"sdz}n^Q+7k=qgn~ևKn>oo-Cǝ^\-U^oFe_+K49pp;wywA66td {']mȵu9/xH?遧]_$S"`8hIϏ2VMRPxYrj.Y߰?ݡso1O^z={gK?;υ,9y|du7Gsӎ$e^zJ:̚]^ ԫ,dGu7 ;<3Aw?Wg{/ 9cȆv7 }2]GrQ>bm|\29k߸ܹWyCFҨ4ܵm$yC-=YZ1`Siyyo(ɄL֕c4Frt5w/3ߓT[Uzod'o^}$ٽn}ϯ26'zWn]2hdh +G5Mza!+elD,B&w1䒊 ƃ;ݹQ&4}n0G^8''<ruwGSBdC-jVYgvr=Oa/(JbF*.yq&Ve|P{#U"QR'4Z{}2Gv(=%OoWNgn?zFz?UCSIcK4[~M/m2zY-|%"V+} T]WϿ,{ƪn @r5C:y2$e<9/k [oc r7sֱ%6 1AS\ N/w|ʜ9K3k^_o=rrIGb+_:ABSyin?7q^I#|U[27k!cguɥ7|L?~Vt w G< nOu_$}}dBo=G>OYWݐyJ4=~N9W,$]m_.쐆^{ev?%{ʹr_Z!n%DPi_cm~o[\ү$D wؽJ֕~V9IF m]yf(yxqA=φ<d= ~OgI˷:p ĞkJJI~ʟ5 :'NC]X>u%`8M2?O.]}ެ~Q}FJ?|6-tk"]Vi9qeI\O{:q!9w]J(XcY#ܨtI(?+kYi6->V,YЬ՚Q"&?箩7N~4=7~4@ؗ?Uw*߳NY-Z*-ORY)Tbd'iX fVtKKG(Aexzϧ4Z >OS_׍ +^n^wVKn>l!O5{V9{łZ8%4am߹fCҏK-3/@p{ґlR5IXU^f26OvJ]MQT s ƑO;eU|ں={}Vkɗy9frrJҋ{ᄌ1xC?S0jM$%7?ڲ#>YF8! tdSn6_,ܒ{^T\(ߊCp"WGu2+ޔi(zaL"Z @pdpJrvGC՝i'qώcgp 3ϱxEOZr1%rG(<";B@rg;ɝgI$wI@r $w;<HlFZ|jcS+M 8}mKErG$J8*5{vo46R1GP[I,;߾:F%zOs7"ʾ$w;ɽ-f2l2B^v+-%qٮnv*R);==]JHX~{Կ r'QrO4ɽO^OމKMǐ;ɝަX'S|/'VΣv;GL{%c@cȝ?Z_\K~soG|o57zX?ʽm@<7,qVhwkr/ލٞ-w-vvso7oRG/wGE2q!೔J455m۶5IYkJX~v_kd=J?+p[~mQ-ߢo3_6hukM3 b˱:goBN.ڡezzZӁ󢟜l<۶mD[huj,n}'2l/E kwJ3ۥK4CɧRH)~֭);65ݩS&&&u֦W8?;b{Ar={Vqs_Ӛj4&CŃq'YZ?+cɽ:Rzͦx;@ lOsZK?OzշUOr{+&LՒw_099P'UҼr/;VHkɽ47!WK?V;~rg:[Y~kI_}&kKg5]i}P/1{6}^*ZaG]:]Ϋڍm;roj{WܕfriT@P9sk]s^FϹ[k{\s/eTK57ZT~1zϹ's_Kra%"3M2-൦u>LBcrv2QƷ]NLLhjj/R{r`>H/Y|۶mʍ0*rm~[n-:|߀_7s^q@Ƚi6ϻ+Ɨ_xp:ZطE4rq&&&4==-c*X'''*~'V_S/=_ZFܧswd(Dp[VE*TJy|%UDsΉ~V:r߯6]8ms,\a3xx׶&]&|sz]~X۶m |J]sfHGt0_,0%^WJ-z _W{o۶d&''59)'+d P^}H“A|ǽ7l|$@$>{nt6Kjύ1ya/n֋0Ar/W&@r\sIDATq.V\x*]^IavMyk썦{$M ˽p¤7/n֑n֭%ꋗ3==QSs̢ rh#{\^nL0/KY=_!PJz~9ńᅽK/ ;ߵuTrGݗ{^ʩTNŃ6WbrrÄ^x}}r{#wA$)W-aoO婔=Mj ^G!/*޻-mRzJDxP%^bNLL/q8Q3UákO$_x.y\ah ?+C{kQͧ3I:ѫ$]iHxY۶mrC懨>Tʯ`lݺ5ǫjq*Uu]ܞ^O!z{7Lͥ#U{Ur.]e ǝ@ro[rI咸4ʿV/Lꭤt;ɽ=#i$^ج>žbb: [)s$w{ד{|ɽR=!)?MywvI$&xɽ^w|8"Ą}{Ǔ{w<ɝ@rػ6I@ro/AL$w{ Nh_eϰlحS?́>qܾ͖)u~׫͔{P*ȽgG^)@'H"(?CsUcLs|ָ6Z^;[ֲ-TJCjvz`~kSk];74Sf%;rG=Mu5}^o]nSzaTZN-JVϼ*mT϶ZWu7VzN̷}crI iԝ[]V;\SoEmTO9۽/m~ߨۿ7r*T FdˉL}25m{e:ESroe>N$zQāW _"7HW<RXrouQ'y!MMnɯѦrߩ4z"4F֯r6n.zTo\mfif]ZݞΣ}#͔;!}NTWkrWZ'*|V6 R9mjWou/z:ֻ ZYNkߤOm <'}"VHEѵ0ro(r% [iw`rG-`'o^Sx w5VڽTLzyVO/s'r%.}x.[e*+:~>'D// 6CT-VQkɧR^e5*ͧZw=72j$uTZiV~zhtN7RkW]#xh(zzFznE]k]KnQmJw:Vn4;ssF]Mu)9PA -_}33.rBr?Vي ez\umݠ$wDTw*q1TrGCZKMmQ\u7[Zm[6{/TߛiǍFܥĚnigfYoso7TTvl(nvY7թgovP9A}/w|yCDqZӕί|zszV\Hyk-2V[~iٛsa{:պK7i@ n[@-DMЯ-!qE#wU{ OGrowk;ǐ%xsYrG$y@rG ^{_B<rG"xz@$y<rG;r##zI`I$yз#x;r ;r'#x< wUK@ȝ$O@rG]DS=rG$y<rG:&wk r6 c x<rG$yܑ #$ܑ;I w>ȂG!I<rG;tUr@ȝ$ ܍b*xq<4ܑ;tNr@}< w3r<+rG!wDПrl ֝ԭw=hYM:~r~ ܡ3oϳ'u՟Tr)u[/:MyG?)ϳ7?+C{k\~$om½'w_SozY8'D">xDhʘH gNi.iv[cú꺛+q8Tn}?/ 'C·w=%';Gާ>5uqtEt;Z{ \!ܡ?~];?wj.s{-K8 97o9S޵t].G~3z=fr^{y<1羠ܜ2&qdіuϣ3 R/~O9 w}!-g/α˵z=:tp~&c{N[KEۭ@1{$_v&}grOe}95\Wl"H~cMrLy@: ިo?Mю|T7b ;X_.>{cyJqNa Hk@zFǯY?|n]saS|(/|]+kTW(˽_izoTN#g=GQAA$]r钤Y]Ior5?6]+sӕʲ{>V߯UZÌn~®rlPMQ ^0B:fsםfsS w@ w#w@#w~[; w w#wo rܑ; w wm; w@;rܑ; wܑ;-r{|F+{gA{r{mɵ[Нh@=6q4rG}+(KbF` #wVH"w>r߽|xnkytF[emgoks$;+r<R^)}{?{n ׅWJar#rGj}xXz~xUornkGSɭK{Z+AT>)_6Q3߯[jۍo]Xڳ_lq^}Z;N5+thU;s/p\r/|M_y=+}Z]zCV*keb7= :&;=;{A-(qYz58}9m9k?x=/6W| Q5~ae4bne{~E8ݏ벋6E*kmGGQvgἻYn &r^_|F}?*{cC)L쫟huykαÀ{~WG]o>?|墑Z &k}V:fdJ ot>vV; J0 zu^r钤Y]*i˙rָ}|F_q}u#W+=גO#kMSmy̻Z^36z:5RFSF ֣o|!- cKy3Dɽ ׻ Ƚ%5ܪؑ; 6gޮv'ܑ;rW%=Z{;N 6ȑ;r@#wuew"z#ٮɽBI/{eܑ;rܑ;t@qrGȽǒzŞ:*n!bGޭ BG ЛNtM̥A#w]m>vSJrg;@>BJk%Ӑ;y@УD=;D!wrܑ;@lB;rw:D;4-^LqrG]{$8 #wȽWUEݲz!w%wK*JL>{Yx rqb$ 0r4[NV<;@OS?Nr7 "w.%^{ nGbs+rcx w>{=F%8W<;@ʽޭG9- w)AQ1r=Qͬ[+Owɤ".g'E9;ʽ:-UN0@rG읯t@;@ʽwػ)N3nbG1{Ğj,}˩.IQLb9;ɽ-_i]XjoSbPNu@GgKq/_\botRUIH[ ɽbW~|mgl z!KqH% HL;zEjXy@1{?2Jwʽ)/nAHݫh@Lz?I eJŶ-wB$b*nԣLQ ~P7z-L]JIl (lDl*9r@˖*zȑE/|ҕkmjA}Zʯ5}/T"&AW:HKڝJj׶- E _~|k}'RgzJEsŶJ Nr'ztN5z^}e <*n Y+se;%"5_)ճN>J'kRk@~:r 5{];&wݷ꩔\  >n'RNarzfU_/\;Q?YOnjdOrScrK׉vxrʕ;B[BO ߸@խ*HWl=Cz/qm[ƑR29DrX8.bv’@s/ͦab˓vie֓]]`c@u; w@; w@c;e/ѡ=e[ SimGrid: Registering stuff
SimGrid  3.10
Versatile Simulation of Distributed Systems
Registering stuff

Functions

void xbt_cfg_register (xbt_cfg_t *cfg, const char *name, const char *description, e_xbt_cfgelm_type_t type, int min, int max, xbt_cfg_cb_t cb_set, xbt_cfg_cb_t cb_rm)
 Register an element within a config set.
void xbt_cfg_unregister (xbt_cfg_t cfg, const char *name)
 Unregister an element from a config set.
void xbt_cfg_register_str (xbt_cfg_t *cfg, const char *entry)
 Parse a string and register the stuff described.
void xbt_cfg_help (xbt_cfg_t cfg)
 Displays the declared options and their description.
void xbt_cfg_check (xbt_cfg_t cfg)
 Check that each variable have the right amount of values.
e_xbt_cfgelm_type_t xbt_cfg_get_type (xbt_cfg_t cfg, const char *name)
 Get the type of this variable in that configuration set.

Detailed Description

This how to add new variables to an existing configuration set. Use it to make your code configurable.

Function Documentation

void xbt_cfg_register ( xbt_cfg_t cfg,
const char *  name,
const char *  desc,
e_xbt_cfgelm_type_t  type,
int  min,
int  max,
xbt_cfg_cb_t  cb_set,
xbt_cfg_cb_t  cb_rm 
)

Register an element within a config set.

Parameters
cfgthe config set
namethe name of the config element
desca description for this item (used by xbt_cfg_help())
typethe type of the config element
minthe minimum number of values for this config element
maxthe maximum number of values for this config element
cb_setcallback function called when a value is set
cb_rmcallback function called when a value is removed
void xbt_cfg_unregister ( xbt_cfg_t  cfg,
const char *  name 
)

Unregister an element from a config set.

Parameters
cfgthe config set
namethe name of the elem to be freed

Note that it removes both the description and the actual content. Throws not_found when no such element exists.

void xbt_cfg_register_str ( xbt_cfg_t cfg,
const char *  entry 
)

Parse a string and register the stuff described.

Parameters
cfgthe config set
entrya string describing the element to register

The string may consist in several variable descriptions separated by a space. Each of them must use the following syntax: <name>:<min nb>_to_<max nb>_<type> with type being one of 'string','int', 'peer' or 'double'.

FIXME: this does not allow to set the description

e_xbt_cfgelm_type_t xbt_cfg_get_type ( xbt_cfg_t  cfg,
const char *  name 
)

Get the type of this variable in that configuration set.

Parameters
cfgthe config set
namethe name of the element
Returns
the type of the given element
SimGrid-3.10/doc/html/modules.js000640 007661 000620 00000001117 12242224150 016732 0ustar00gierschand000000 000000 var modules = [ [ "MSG", "group__MSG__API.html", "group__MSG__API" ], [ "XBT", "group__XBT__API.html", "group__XBT__API" ], [ "TRACE", "group__TRACE__API.html", "group__TRACE__API" ], [ "SIMIX", "group__SIMIX__API.html", "group__SIMIX__API" ], [ "SMPI", "group__SMPI__API.html", null ], [ "SimDag", "group__SD__API.html", "group__SD__API" ], [ "SURF", "group__SURF__API.html", "group__SURF__API" ], [ "Full Index", "group__API__index.html", null ], [ "Msg_storage_management", "group__msg__storage__management.html", "group__msg__storage__management" ] ];SimGrid-3.10/doc/html/group__SD__link__management.html000640 007661 000620 00000045521 12242224150 023211 0ustar00gierschand000000 000000 SimGrid: Links
SimGrid  3.10
Versatile Simulation of Distributed Systems

Functions for managing the network links. More...

Functions

const SD_link_tSD_link_get_list (void)
 Returns the link list.
int SD_link_get_number (void)
 Returns the number of links.
void * SD_link_get_data (SD_link_t link)
 Returns the user data of a link.
void SD_link_set_data (SD_link_t link, void *data)
 Sets the user data of a link.
const char * SD_link_get_name (SD_link_t link)
 Returns the name of a link.
double SD_link_get_current_bandwidth (SD_link_t link)
 Returns the current bandwidth of a link.
double SD_link_get_current_latency (SD_link_t link)
 Returns the current latency of a link.
e_SD_link_sharing_policy_t SD_link_get_sharing_policy (SD_link_t link)
 Returns the sharing policy of this workstation.

Detailed Description

Functions for managing the network links.

This section describes the functions for managing the network links.

A link is a network node represented as a name, a current bandwidth and a current latency. The links are created when you call the function SD_create_environment.

See Also
SD_link_t

Function Documentation

const SD_link_t* SD_link_get_list ( void  )

Returns the link list.

Use SD_link_get_number() to know the array size.

Returns
an array of SD_link_t containing all links
See Also
SD_link_get_number()
int SD_link_get_number ( void  )

Returns the number of links.

Returns
the number of existing links
See Also
SD_link_get_list()
void* SD_link_get_data ( SD_link_t  link)

Returns the user data of a link.

Parameters
linka link
Returns
the user data associated with this link (can be NULL)
See Also
SD_link_set_data()
void SD_link_set_data ( SD_link_t  link,
void *  data 
)

Sets the user data of a link.

The new data can be NULL. The old data should have been freed first if it was not NULL.

Parameters
linka link
datathe new data you want to associate with this link
See Also
SD_link_get_data()
const char* SD_link_get_name ( SD_link_t  link)

Returns the name of a link.

Parameters
linka link
Returns
the name of this link (cannot be NULL)
double SD_link_get_current_bandwidth ( SD_link_t  link)

Returns the current bandwidth of a link.

Parameters
linka link
Returns
the current bandwidth of this link, in bytes per second
double SD_link_get_current_latency ( SD_link_t  link)

Returns the current latency of a link.

Parameters
linka link
Returns
the current latency of this link, in seconds
e_SD_link_sharing_policy_t SD_link_get_sharing_policy ( SD_link_t  link)

Returns the sharing policy of this workstation.

Parameters
linka link
Returns
the sharing policyfor the flows going through this link: SD_LINK_SHARED or SD_LINK_FATPIPE
SimGrid-3.10/doc/html/group__msg__trace__driven.html000640 007661 000620 00000020455 12242224150 023004 0ustar00gierschand000000 000000 SimGrid: Trace-driven simulations
SimGrid  3.10
Versatile Simulation of Distributed Systems
Trace-driven simulations

This section describes the functions allowing to build trace-driven simulations. More...

Functions

msg_error_t MSG_action_trace_run (char *path)
 A trace loader.

Detailed Description

This section describes the functions allowing to build trace-driven simulations.

This is very handy when you want to test an algorithm or protocol that does nothing unless it receives some events from outside. For example, a P2P protocol reacts to requests from the user, but does nothing if there is no such event.

In such situations, SimGrid allows to write your protocol in your C file, and the events to react to in a separate text file. Declare a function handling each of the events that you want to accept in your trace files, register them using xbt_replay_action_register in your main, and then use MSG_action_trace_run to launch the simulation. You can either have one trace file containing all your events, or a file per simulated process.

Check the examples in examples/msg/actions/actions.c for details.

Function Documentation

msg_error_t MSG_action_trace_run ( char *  path)

A trace loader.

If path!=NULL, load a trace file containing actions, and execute them. Else, assume that each process gets the path in its deployment file

SimGrid-3.10/doc/html/dir_50d6b765e5eb056488db308cec4b8548.html000640 007661 000620 00000014003 12242224150 022763 0ustar00gierschand000000 000000 SimGrid: examples/msg/ns3/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__SD__simulation.js000640 007661 000620 00000001566 12242224150 021556 0ustar00gierschand000000 000000 var group__SD__simulation = [ [ "SD_init", "group__SD__simulation.html#gaa4c19ede9d99b8925e62f30c52f1e65f", null ], [ "SD_config", "group__SD__simulation.html#ga32a2bbed292f8d4ebeafc0b6debd0af3", null ], [ "SD_application_reinit", "group__SD__simulation.html#ga8c9fdcd05effacd9b20c0ea75c5c5f7e", null ], [ "SD_create_environment", "group__SD__simulation.html#gac961eff01737333623e3b5343e78a269", null ], [ "SD_simulate", "group__SD__simulation.html#ga5a1f4e7f674374210de13181acbd98d3", null ], [ "SD_get_clock", "group__SD__simulation.html#gafc34707cae382f245f7a33d1eb202392", null ], [ "SD_exit", "group__SD__simulation.html#gad1a92b51e423aad6d47be2b82c6536ba", null ], [ "SD_daxload", "group__SD__simulation.html#ga1882fd299f53829a131dd01c83ed5471", null ], [ "SD_dotload", "group__SD__simulation.html#ga35de259bc832b4926a310d0359a36dd6", null ] ];SimGrid-3.10/doc/html/simgrid_logo_2011.png000664 007661 000620 00000017121 12242224150 020563 0ustar00gierschand000000 000000 PNG  IHDRMy tEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp y;@_IDATxKRų:jw =&`&="{x\+@LXAWVPS rf*SNY l9ܛA@@A&A AhBA& Є 4!M @ Є 4QA&A AT>n ?|7:pQo_c4jæ;4 311?2`PBLh?K@e)(͚Io1Y4W;5I5BeMe8ȵCTRkxϾ7y=طaiA-rz2o:ChN QLA[ ͧ  ,3 hݬ Ʀm54#G( mk.!jhAFUn4API9A N3A(i~h-m 4!HMT>J!B6:1Vۗ?#WwE[Gcz34#v*2UUo(Kz^^xE2*|湁+dc5vn#*$w4ʞ+4Hsvڐ?@} 8"g] G ̡p/;l 0eL(:bEw%)t ʖ)-|Q{ZD}/HOMN;Vwpm\ī,_?B5}H`HSUuҡXoTeu (9GvV[l_*gʽv]n~ QH& jK~Mmn4=z0yR]&`0?|=_u+o6 n7ݿ$ǟ ?ݨ 9b`rtN <?uY(CvKdg2*4MY/;du6,?V}/|4 N h0GU j>Cn|`Q,0͸PݴR&)ʽN3XU}sl4iϙh83ې}H9ǡ0xTTAq/r*w9: (DVuu3>mMf"TD^Df>8iGwǎUUIKE}STKI=ns1Dy: ,Ugm,ˌ۳ĘRuj^\(7z w攝q&, 9ĿVSh(L޴N]ȅ]=Mn\or^! ?C袾}p=fpўe! ׊ 89̸!}@sUjZұ7r.eSMh.| N Ћd:B/Wc6|BZS10g :>MFtp# nupLP3HBmĶ[T8z~Ta~cWz:p5_/Z{UwM(XgȮS|6I>H r}zmFlX#KXum;:O༶umwUcenfg=~[E+ZnY[ۼ}2-" hq6̐zA n{F]8U@HǕ~ <Dg)`0e}ʟl8/&"Ao@$C[oP0Ukg̦7;4 iȻG$c7=iPo*w=3.ƱKT(pւEe*6p Bt! hS&wٰOwU6ӌ&;;7q4 dĘ#Gs3 tJ_"hIbwsuF#`=FWWϲ{4-=efo9 47[ۛ oe5"\O3.`t,Ypju$ܮ!s1g\8e/1ۘ 8͎S:y30ϳPm̼rkq7:m mijDЬ <sYq{3J{-Nǎ.o:69t":&{$;ĵ0HN8J@=G0ۤ{-5w|IeTfǨ1z7 9'SLhưrct5ީ_ͥ@O],Nteڸ8Mߓ_.Ja680bƞT_x^K} I<~sԛW)+ hΛp7XEIQ:zݞ,*_KY.PMpf2=֭B3}LqG;Z}iNcIşvЙʅu tFϨH3I7>l]ޕ~ZWqzޠdk6u{m2pekfqhydsw[G.VY\U@~>1PJ6$2K$ l˱t~MqȩetV9kA A^/i_ζ5Ovrrclˌ/Tr;˵ 3wRѻ}|=]G*;iۜO3*2n3 ry4=ܪ0]}U4W)A)wľ5:=ŞW.FS%=ԣ,*k|,4u4 h zwA Jef L:sٱ|jexNGP rpt$ 鬠Z}7bWz@sUoCpubcyIܮ]zh0Gb56>KN+CVNu'M7\D$L#r64/ag.npWQI7]g'σk!P>Lz\wwИMw@0<iL6}"Wib YcmC=^N\ݨy*nDn7|y0hu9޿L/~I!ԑwNJ,0g -f57&o h9ݣ1;o RDb(}O7ɭX^s}>kh#v\;Kt,L)NjLHo(e]v 7*Fn}S:[eλZ@ 5czǝ6軮]꣢ץ W692uic&f\6 д$SU]П5769g (#.Js7m:A.CpͫɎfc&birɁ% q#(0xp[u;;<äa.ݎ媆 }ODDFw@a$n9瘿'Q&ڌ0IG6'ѻ)G}\A[-o?5Ou0!E\B,mphS Є ی\#,, AkyQ< APW_.C!H9BNa Mhuw'<Mhk+zmƊ0U6+4V&hE)f$4ӊ&WmBfK4wkc}Y.j^3BCf{`p)(vL1i`qsy㟁o5ǨZl4{]c7hCؾX^Y|Ɔ^l'8goaxnw܂wCjxǘcS<|cq @L"l?;(/SЄ Xw*h)}vv ݕ(<9ͭt[CkAG dy3X׹\HZR%<2(OvZC#83qaLƑ~ V'?)Ap O E9HI !:d.3btM;0{F5]8l[}f֙S"s=Qo Õ#*ȑ>(p}5O +q>#gw Ȑ{cF(k:psprZ"G01s @s۠)ó.{@enr)@D7IQ`8fo|yF(y'h Ϳ} @s[.2pSh?B6!62ph%Qū0#4ͭj~Ga)A4`fĂrE(g Ea| Ĺ+ %rwihǮLg4?ev(^~y3 4{ E"awFھ0G!}tv {.=eZhs^40 d\x+><"!4:8=WEv+]Ý|L4+ Ysݶt2xd7PiM@r,6.A"wXءbjh4PYe~o@j3uW۸4M$Tᕀ%)hbk@M=v2O5 l:$8n:4]`w9tPl!<4[ ^i6$!@ R ;CA&A AhBA AhBA&A AhBA&A AT_E_3IENDB`SimGrid-3.10/doc/html/index.html000640 007661 000620 00000016671 12242224150 016734 0ustar00gierschand000000 000000 SimGrid: SimGrid Documentation
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/dir_0263ee954995510870faa4b1fe8ff434.html000640 007661 000620 00000014150 12242224150 022704 0ustar00gierschand000000 000000 SimGrid: include/simdag/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
simdag Directory Reference

Files

file  datatypes.h
file  simdag.h
SimGrid-3.10/doc/html/deployment.html000640 007661 000620 00000017552 12242224150 020004 0ustar00gierschand000000 000000 SimGrid: Deployment Description
SimGrid  3.10
Versatile Simulation of Distributed Systems
Deployment Description

Overview

When using SimGrid, you basically need your user code, a platform description, and something allowing to map your (simulated) process on your (simulated) platform. This is what deployment file is all about. Note that you can bypass the file stuff and code it directly in your user code, if you want to.

An example

So deployment file just consists of saying which process runs where and which arguments it should take as input, the easier way to understand how to write it is just to take a look at the examples. Here is an example of it:

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
  <!-- The master process (with some arguments) -->
  <process host="Tremblay" function="master">
     <argument value="20"/>       <!-- Number of tasks -->
     <argument value="50000000"/>  <!-- Computation size of tasks -->
     <argument value="1000000"/>   <!-- Communication size of tasks -->
     <argument value="Jupiter"/>  <!-- First slave -->
     <argument value="Fafard"/>   <!-- Second slave -->
     <argument value="Ginette"/>  <!-- Third slave -->
     <argument value="Bourassa"/> <!-- Last slave -->
     <argument value="Tremblay"/> <!-- Me! I can work too! -->
  </process>
  <!-- The slave processes (with no argument) -->
  <process host="Tremblay" function="slave"/>
  <process host="Jupiter" function="slave"/>
  <process host="Fafard" function="slave"/>
  <process host="Ginette" function="slave"/>
  <process host="Bourassa" function="slave"/>
</platform>

Process

There are optional attributes to the process tag, here is a list of all attributes of process:

  • host (mandatory): the host on which the function will be executed.
  • process (mandatory): the process function that will be executed on that host. You can deploy as many process as you want on the same host.
  • start_time: the (simulated) time when the function will start. Default is zero.
  • kill_time: the (simulated) time when the function will stop. Default is when it's actually finishing.
SimGrid-3.10/doc/html/nav_h.png000640 007661 000620 00000000142 12242224150 016522 0ustar00gierschand000000 000000 PNG  IHDR ,@)IDATxA @BQۛТ) ) aܿoRlIENDB`SimGrid-3.10/doc/html/ftv2plastnode.png000640 007661 000620 00000000345 12242224150 020227 0ustar00gierschand000000 000000 PNG  IHDRɪ|IDATx=QFDk:FPK؃=V@ճ 8SHx0bnrr{򽿾$ TP XOd6"SOB(Q)+YĈ ҪR>Vtsm9(k-@ȧ-$ b [he Kp-l|CApRG'rͭaIENDB`SimGrid-3.10/doc/html/group__XBT__syscall.html000640 007661 000620 00000026163 12242224150 021523 0ustar00gierschand000000 000000 SimGrid: Malloc and friends
SimGrid  3.10
Versatile Simulation of Distributed Systems
Malloc and friends

Malloc and associated functions, killing the program on error (with Exception support) More...

Macros

#define xbt_new(type, count)
 like calloc, but xbt_die() on error and don't memset to 0
#define xbt_new0(type, count)
 like calloc, but xbt_die() on error

Functions

static __attribute__ ((always_inline)) char *xbt_strdup(const char *s)
 Like strdup, but xbt_die() on error.
void xbt_backtrace_display_current (void)
 show the backtrace of the current point (lovely while debuging)
void xbt_free_ref (void *d)
 should be given a pointer to pointer, and frees the second one

Detailed Description

Malloc and associated functions, killing the program on error (with Exception support)

Function Documentation

static __attribute__ ( (always_inline)  ) const
inlinestatic

Like strdup, but xbt_die() on error.

like realloc, but xbt_die() on error

like malloc, but xbt_die() on error and memset data to 0

Like malloc, but xbt_die() on error.

void xbt_backtrace_display_current ( void  )

show the backtrace of the current point (lovely while debuging)

Shows a backtrace of the current location.

SimGrid-3.10/doc/html/dir_ad09d2a19e56c3cc891f2b280ae6f2be.html000640 007661 000620 00000014014 12242224150 023243 0ustar00gierschand000000 000000 SimGrid: examples/msg/pmm/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/structs__smx__host__priv.html000640 007661 000620 00000015100 12242224150 022737 0ustar00gierschand000000 000000 SimGrid: s_smx_host_priv Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_smx_host_priv Struct Reference

Host datatype. More...

#include <smx_host_private.h>

Data Fields

void * data
 user data

Detailed Description

Host datatype.


The documentation for this struct was generated from the following file:
  • src/simix/smx_host_private.h
SimGrid-3.10/doc/html/group__TRACE__API.js000640 007661 000620 00000001423 12242224150 020323 0ustar00gierschand000000 000000 var group__TRACE__API = [ [ "Tracing categories", "group__TRACE__category.html", "group__TRACE__category" ], [ "Tracing marks", "group__TRACE__mark.html", "group__TRACE__mark" ], [ "Tracing user variables", "group__TRACE__user__variables.html", "group__TRACE__user__variables" ], [ "TRACE_platform_graph_export_graphviz", "group__TRACE__API.html#ga77e1127c6602edd4f233ca62d6de36e0", null ], [ "TRACE_get_node_types", "group__TRACE__API.html#ga845e0cfbd8042ac70adf394df024e350", null ], [ "TRACE_get_edge_types", "group__TRACE__API.html#gaf5542d615046120aa8a3526268b9fa7f", null ], [ "TRACE_pause", "group__TRACE__API.html#ga61801e88fcc9c8963c3ec77d78522f74", null ], [ "TRACE_resume", "group__TRACE__API.html#ga636015c91ac56d3942f83321708d9105", null ] ];SimGrid-3.10/doc/html/simgrid_logo_2011.gif000664 007661 000620 00000010105 12242224150 020537 0ustar00gierschand000000 000000 GIF89aM09\Ef Qp0^z@j~Pw `0p@ P0`ۏ@pPܟ`p֯!Created with GIMP! ?,MpH,Ȥrl:ШtJZجvzxL.zn|N~Z%%+%  ǔ(  "ֆ((}r% ŪM%LI ~z G1"t;0E~P C%&ǛY2tkIJW^*aA#/qJ}2ۄj+& 8:2!S.,BU) N'DU6| jxvD+13lB`Y@ <DD0:DPbY$RPC@(w9)`uں7( /p6X1Kf~|:R_t^TfT]/&(!6XtD8O` N$BE| l%؄$4.tB)QW//u I`a!VAaw(C+TpvNQ "„C$0MSB!8JD! [~0D*sƈp;4 xxhu WDS2qPAymtW}u֧lGmzFVɑ\$vH5F #%| aT@i DuOؕ1SYİ53 [%,$hL,n`m0\TLX0 4 ; "3Z |7GŽ:dPW$:@LyB ՔM_|[9>AS@_Ypz)*jSW~ ПtbzNvyXē:;9*;X CeMy]DIuY!_(5 ,U$ !D kU_hSg )X@ʭ?5EQ% BC^'®h}PiQإ**Ս PDe8L*S5W"v gSxW&[5Z&4N .`̬-@PPvDUҔԪaфjISy%S$|=mf'bJ@w_LNUcg'_D` h9$ }2@3*=Ujî PX}toV^# VP7@FFSqݰ+wϾSZT En7YMrU\Ѝ/f&ۂt ws,^QV=\cf_^ވ]Ƶk b\񒯀Q islVyo>,o)*WyiwY2^0%၁(wQv5Žcy$h$64" aGpu&fLڨ7f߹SQ."K!!XDBq)h62 Xdb8ie,B|kvy QDDP#WD8WU  p ?'!kءZd$ڃBRHcl%xd j~:9e^B&iI!kl'k1S[^2^sr^3J5 &d=꧳ O\z m"'ބ@ɳ^wPPG6~:PA ġ`u>Zwtbk NPШ"<'ZXoH;'drbX+ۛY :,yRMvªYE;!b_w3`!sh- lţ}By אw~?pkЇsZpH9% t}KnEgeu/6v[#XIv2!. gzTE6U=&-%8Nvfs퇀WpH tiMAPqa%T}RUC}ƒmU!f4C^M@T3(nn{RHC@8 ؃hWsJc3R$kC]&p78ziNGW'H"(}G0i2 $ Dxu4nHclXOR.8(~ED0Cנ3RSMM8IPC xp)QiP7}Ct{K`o؋808qLo$2% ('s_(|'&[$&@15 ׋@jTpUĘ( Ɗ|KiRS5X uaySS*Ww.06OPPEjA ew2nHz=#P1KFcdB!@IBB!pW$WijYMB%1\.#gi)Fl*P#\tyQP:xٗD`ᗂy0Gy:O9!)S9} P#pLԙ)<,b=84").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")), f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c) {if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); /*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */ (function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery); /* * jQuery UI Resizable 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizables * * Depends: * jquery.ui.core.js * jquery.ui.mouse.js * jquery.ui.widget.js */ (function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e
');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),ea.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p &&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery); /* * jQuery hashchange event - v1.3 - 7/21/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ (function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('
src Directory Reference

Directories

directory  include
directory  instr
directory  msg
directory  simdag
directory  simix
directory  surf
directory  xbt
SimGrid-3.10/doc/html/ftv2blank.png000640 007661 000620 00000000126 12242224150 017322 0ustar00gierschand000000 000000 PNG  IHDRɪ|IDATxݱðScOx@ y}IENDB`SimGrid-3.10/doc/html/group__XBT__dynar.html000640 007661 000620 00000043327 12242224150 021167 0ustar00gierschand000000 000000 SimGrid: Dynar: generic dynamic array
SimGrid  3.10
Versatile Simulation of Distributed Systems
Dynar: generic dynamic array

DynArr are dynamically sized vector which may contain any type of variables. More...

Modules

 Dynar constructor and destructor
 Dynar as a regular array
 Dynar miscellaneous functions
 Perl-like use of dynars
 Direct manipulation to the dynars content
 Speed optimized access to dynars of scalars
 Cursors on dynar

Detailed Description

DynArr are dynamically sized vector which may contain any type of variables.

These are the SimGrid version of the dynamically size arrays, which all C programmer recode one day or another.

For performance concerns, the content of DynArr must be homogeneous (in contrary to dictionnaries – see the Dict: generic dictionnary section). You thus have to provide the function which will be used to free the content at structure creation (of type void_f_ppvoid_t or void_f_pvoid_t).

Example with scalar

int i, cpt;
unsigned int cursor;
int *iptr;
/* 1. Populate the dynar */
d = xbt_dynar_new(sizeof(int), NULL);
for (cpt = 0; cpt < NB_ELEM; cpt++) {
xbt_dynar_push_as(d, int, cpt); /* This is faster (and possible only with scalars) */
/* xbt_dynar_push(d,&cpt); This would also work */
xbt_test_log("Push %d, length=%lu", cpt, xbt_dynar_length(d));
}
/* 2. Traverse manually the dynar */
for (cursor = 0; cursor < NB_ELEM; cursor++) {
iptr = xbt_dynar_get_ptr(d, cursor);
xbt_test_assert(cursor == *iptr,
"The retrieved value is not the same than the injected one (%u!=%d)",
cursor, cpt);
}
/* 3. Traverse the dynar using the neat macro to that extend */
xbt_dynar_foreach(d, cursor, cpt) {
xbt_test_assert(cursor == cpt,
"The retrieved value is not the same than the injected one (%u!=%d)",
cursor, cpt);
}
/* end_of_traversal */
/* 4. Shift all the values */
for (cpt = 0; cpt < NB_ELEM; cpt++) {
xbt_test_assert(i == cpt,
"The retrieved value is not the same than the injected one (%d!=%d)",
i, cpt);
xbt_test_log("Pop %d, length=%lu", cpt, xbt_dynar_length(d));
}
/* 5. Free the resources */
xbt_dynar_free(&d); /* This code is used both as example and as regression test, so we try to */

Example with pointed data

int cpt;
unsigned int iter;
char buf[1024];
char *s1, *s2;
d = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
/* 1. Populate the dynar */
for (cpt = 0; cpt < NB_ELEM; cpt++) {
sprintf(buf, "%d", cpt);
s1 = strdup(buf);
xbt_dynar_push(d, &s1);
}
/* 2. Traverse the dynar with the macro */
xbt_dynar_foreach(d, iter, s1) {
sprintf(buf, "%u", NB_ELEM - iter - 1);
xbt_test_assert(!strcmp(buf, s1),
"The retrieved value is not the same than the injected one (%s!=%s)",
buf, s1);
}
/* 3. Traverse the dynar with the macro */
for (cpt = 0; cpt < NB_ELEM; cpt++) {
sprintf(buf, "%d", cpt);
xbt_dynar_pop(d, &s2);
xbt_test_assert(!strcmp(buf, s2),
"The retrieved value is not the same than the injected one (%s!=%s)",
buf, s2);
free(s2);
}
/* 4. Free the resources */
xbt_dynar_free(&d); /* This code is used both as example and as regression test, so we try to */
xbt_dynar_free(&d); /* end_of_doxygen */
}

Note that if you use dynars to store pointed data, the xbt_dynar_search(), xbt_dynar_search_or_negative() and xbt_dynar_member() won't be for you. Instead of comparing your pointed elements, they compare the pointer to them. See the documentation of xbt_dynar_search() for more info.

SimGrid-3.10/doc/html/group__XBT__error.html000640 007661 000620 00000021774 12242224150 021205 0ustar00gierschand000000 000000 SimGrid: Assert macro familly
SimGrid  3.10
Versatile Simulation of Distributed Systems
Assert macro familly

Those are the SimGrid version of the good ol' assert macro. More...

Macros

#define xbt_assert(...)
 The condition which failed will be displayed.
#define xbt_abort()   abort()
 Kill the program in silence.
#define xbt_die(...)
 Kill the program with an error message.

Detailed Description

Those are the SimGrid version of the good ol' assert macro.

You can pass them a format message and arguments, just as if it where a printf. It is converted to a XBT_CRITICAL logging request. Be careful: the boolean expression that you want to test should not have side effects, because assertions are disabled at compile time if NDEBUG is set.

Macro Definition Documentation

#define xbt_die (   ...)
Value:
do { \
XBT_LOG_EXTERNAL_CATEGORY(xbt); \
XBT_CCRITICAL(xbt, __VA_ARGS__); \
xbt_abort(); \
} while (0)

Kill the program with an error message.

Parameters
...a format string and its arguments

Things are so messed up that the only thing to do now, is to stop the program.

The message is handled by a CRITICAL logging request, and may consist of a format string with arguments.

SimGrid-3.10/doc/html/structsurf__workstation__model__extension__public.js000640 007661 000620 00000007345 12242224150 027571 0ustar00gierschand000000 000000 var structsurf__workstation__model__extension__public = [ [ "execute", "structsurf__workstation__model__extension__public.html#ad44708cb6550651107c38f4cccf0262f", null ], [ "sleep", "structsurf__workstation__model__extension__public.html#a21f808bbbafa9bf838c71b5e54501465", null ], [ "get_state", "structsurf__workstation__model__extension__public.html#a13bf38fd96228f099d5edbe6f55dafff", null ], [ "get_core", "structsurf__workstation__model__extension__public.html#acc013aa36dd95194f3d49ef5ea97e684", null ], [ "get_speed", "structsurf__workstation__model__extension__public.html#a4360bd7e469801b2adc37c56edccfeca", null ], [ "get_available_speed", "structsurf__workstation__model__extension__public.html#ae6ed8c858e3d713fc7f1ba8f04bd1008", null ], [ "get_current_power_peak", "structsurf__workstation__model__extension__public.html#a1d53057051b5a38f76ada79e77f0a7a8", null ], [ "get_power_peak_at", "structsurf__workstation__model__extension__public.html#aad3d20d4803ed5677f542b6f44162924", null ], [ "get_nb_pstates", "structsurf__workstation__model__extension__public.html#abfe09c2f5cb3774077c701c9c6cb62e6", null ], [ "set_power_peak_at", "structsurf__workstation__model__extension__public.html#ae83fe4298008ce08652906ccf51ad66e", null ], [ "get_consumed_energy", "structsurf__workstation__model__extension__public.html#aab3ed59f084f1e1b1f50585df5fe7b6d", null ], [ "communicate", "structsurf__workstation__model__extension__public.html#aedbabf023af55bb46d1e4492fcc7ae76", null ], [ "get_route", "structsurf__workstation__model__extension__public.html#a84cdf3b9de17ceef028da789296fd1ae", null ], [ "execute_parallel_task", "structsurf__workstation__model__extension__public.html#a629896cdfcba04b9ab82e5896d8b1fd1", null ], [ "get_link_bandwidth", "structsurf__workstation__model__extension__public.html#a564334f9eb1e783fa1f561bdf3a5aae0", null ], [ "get_link_latency", "structsurf__workstation__model__extension__public.html#a660cd47d3c8ef9bdd3dcb1bfd81f8e57", null ], [ "open", "structsurf__workstation__model__extension__public.html#a312f9396dedf79f7b302b30e495cc3ea", null ], [ "close", "structsurf__workstation__model__extension__public.html#a31d18284360c7d2c8cbe166ea11482c9", null ], [ "read", "structsurf__workstation__model__extension__public.html#acc8de81168be6e2fb61d6d808da40ab6", null ], [ "write", "structsurf__workstation__model__extension__public.html#a9168385fe6385599bf57cd3cfd2a57c2", null ], [ "stat", "structsurf__workstation__model__extension__public.html#a2a5078c4fb3e07f25f44b2e7c09f0fe5", null ], [ "unlink", "structsurf__workstation__model__extension__public.html#a90246cc197b56b34eac1d9f27ed1b3b6", null ], [ "ls", "structsurf__workstation__model__extension__public.html#a05b075710abf615a2e8042a26c9c9efa", null ], [ "get_size", "structsurf__workstation__model__extension__public.html#aafea04bd8821bb8d70b411c506287609", null ], [ "get_info", "structsurf__workstation__model__extension__public.html#a702b54c36d761fe3b96cf5d405a128ad", null ], [ "link_shared", "structsurf__workstation__model__extension__public.html#a5941aa4dc3036999b15440856231bfec", null ], [ "get_properties", "structsurf__workstation__model__extension__public.html#a726ac406652d1bae492281fa707d17ed", null ], [ "add_traces", "structsurf__workstation__model__extension__public.html#ab42c4d864c6a32e4c73c5bc71b6e8b04", null ], [ "get_free_size", "structsurf__workstation__model__extension__public.html#ad58819c1f9aa1e143e20d2b5a6d550c9", null ], [ "get_used_size", "structsurf__workstation__model__extension__public.html#aef1f2e4b24fc51e57560870f9fd83b90", null ], [ "get_storage_list", "structsurf__workstation__model__extension__public.html#abaf4c0ebadf674786b3f697763abecf4", null ] ];SimGrid-3.10/doc/html/group__XBT__misc.html000640 007661 000620 00000021462 12242224150 021001 0ustar00gierschand000000 000000 SimGrid: Misc general purposes library components
SimGrid  3.10
Versatile Simulation of Distributed Systems
Misc general purposes library components

Modules

 General purpose graph library
 A graph data type with several interesting algorithms.
 Parallel map
 Parallel map.
 Peer
 Helper functions to manipulate remote hosts.
 Queue
 Synchronized message exchanging queue.
 Sock
 Synchro stuff
 XBT synchronization tools.
 Thread stuff
 Thread portability layer.
 Portable context implementation
 Contexts are a higher level system than setjump/longjmp for non-preemptible threads.
 Replay

Detailed Description

Here are several general purposes library components designed specially for you, you lucky one.

SimGrid-3.10/doc/html/dir_5b50adeb297f828a350356408820bb9d.html000640 007661 000620 00000016671 12242224150 022702 0ustar00gierschand000000 000000 SimGrid: src/simdag/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
simdag Directory Reference

Files

file  dax_dtd.c
file  dax_dtd.h
file  instr_sd_task.c
file  private.h
file  sd_daxloader.c
file  sd_dotloader.c
file  sd_global.c
file  sd_task.c
file  sd_workstation.c
SimGrid-3.10/doc/html/group__SD__datatypes__management.js000640 007661 000620 00000005707 12242224150 023724 0ustar00gierschand000000 000000 var group__SD__datatypes__management = [ [ "SD_workstation_t", "group__SD__datatypes__management.html#ga4c8d9b64c01d21a1ae8e51632b0dc595", null ], [ "SD_link_t", "group__SD__datatypes__management.html#ga0b4ef9c55c15ac2612409087d89d8415", null ], [ "SD_task_t", "group__SD__datatypes__management.html#gabe39904e3bf5f57456382cfcd3814352", null ], [ "SD_storage_t", "group__SD__datatypes__management.html#ga488f5d5cd3010184019e42e4cc130793", null ], [ "e_SD_workstation_access_mode_t", "group__SD__datatypes__management.html#ga6eb21649841a9b045552f3aa810e05f5", [ [ "SD_WORKSTATION_SHARED_ACCESS", "group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a6615a65c696b373eef6500a7b8f43c4e", null ], [ "SD_WORKSTATION_SEQUENTIAL_ACCESS", "group__SD__datatypes__management.html#gga6eb21649841a9b045552f3aa810e05f5a722f0fd2ff6e52a77206f879e50714df", null ] ] ], [ "e_SD_task_state_t", "group__SD__datatypes__management.html#ga49c04f3f117a8a1f8f1d0bedadefcfa5", [ [ "SD_NOT_SCHEDULED", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5aec1d4dfae04f63ec58dd8ab7941a8801", null ], [ "SD_SCHEDULABLE", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a2c3f70794cc8b27495bd2c7b6b6872af", null ], [ "SD_SCHEDULED", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a626549e8ac33c3142d9b3ab66abcc374", null ], [ "SD_RUNNABLE", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a4deae4c6080598bd869d22fa4d35328d", null ], [ "SD_IN_FIFO", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ac055f0cd1ac85271cc31d0340acc8c4c", null ], [ "SD_RUNNING", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5a79dc5ff4b6f36bfae26b9666feb4ba78", null ], [ "SD_DONE", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5ae654935882dec5b2345a3128aed69632", null ], [ "SD_FAILED", "group__SD__datatypes__management.html#gga49c04f3f117a8a1f8f1d0bedadefcfa5adda3fbec6b0da252275f20c79044201c", null ] ] ], [ "e_SD_task_kind_t", "group__SD__datatypes__management.html#ga242a90ba979257e3245553f149b74880", [ [ "SD_TASK_NOT_TYPED", "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a8c1896c3c033bea7ecf469a75f83d5f4", null ], [ "SD_TASK_COMM_E2E", "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a9add1089dc99e90c905ec491db980d76", null ], [ "SD_TASK_COMP_SEQ", "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a3fb8ac37142196af9ac8e97e27f2c59c", null ], [ "SD_TASK_COMP_PAR_AMDAHL", "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a60c8326cd59d07e45a3910594478dba9", null ], [ "SD_TASK_COMM_PAR_MXN_1D_BLOCK", "group__SD__datatypes__management.html#gga242a90ba979257e3245553f149b74880a6c7da099fce2770ab770c40a0d32e93d", null ] ] ] ];SimGrid-3.10/doc/html/structsurf__action.js000640 007661 000620 00000002326 12242224150 021205 0ustar00gierschand000000 000000 var structsurf__action = [ [ "state_hookup", "structsurf__action.html#ae625aa666adf7ad0079f96b1c6aa32f9", null ], [ "state_set", "structsurf__action.html#a37297c84bb3ccf1ef03d4e511e053cfa", null ], [ "cost", "structsurf__action.html#a240981003cb7b2ef07b822b07a3e9973", null ], [ "priority", "structsurf__action.html#ad856ef7cb77971a29ce0691b52bfd89e", null ], [ "max_duration", "structsurf__action.html#ab18a20606e4b5393b305f7b0e5ca8fbf", null ], [ "remains", "structsurf__action.html#a524498b274bd63b350e368a57105f47f", null ], [ "start", "structsurf__action.html#ab81d9f768089a74b58910ad81f50d5f7", null ], [ "finish", "structsurf__action.html#a4999b0d857d5e2e56431de7308909fbb", null ], [ "data", "structsurf__action.html#a0f6bd3843542d60168febd743a659c6b", null ], [ "refcount", "structsurf__action.html#ad0f4512c2052ff1b6d60675d075ba61c", null ], [ "model_type", "structsurf__action.html#ac4a7ad89969d52b85af19d654028371b", null ], [ "category", "structsurf__action.html#ad4acecd52a2d4699e5f2145225fc890d", null ], [ "file", "structsurf__action.html#aa9ca06fd7e5854befa6036abda2365b4", null ], [ "ls_dict", "structsurf__action.html#a70718c000fde32ab38b44bda300d2d09", null ] ];SimGrid-3.10/doc/html/group__XBT__dynar.js000640 007661 000620 00000001342 12242224150 020626 0ustar00gierschand000000 000000 var group__XBT__dynar = [ [ "Dynar constructor and destructor", "group__XBT__dynar__cons.html", "group__XBT__dynar__cons" ], [ "Dynar as a regular array", "group__XBT__dynar__array.html", "group__XBT__dynar__array" ], [ "Dynar miscellaneous functions", "group__XBT__dynar__misc.html", "group__XBT__dynar__misc" ], [ "Perl-like use of dynars", "group__XBT__dynar__perl.html", "group__XBT__dynar__perl" ], [ "Direct manipulation to the dynars content", "group__XBT__dynar__ctn.html", "group__XBT__dynar__ctn" ], [ "Speed optimized access to dynars of scalars", "group__XBT__dynar__speed.html", "group__XBT__dynar__speed" ], [ "Cursors on dynar", "group__XBT__dynar__cursor.html", "group__XBT__dynar__cursor" ] ];SimGrid-3.10/doc/html/structsurf__storage__model__extension__public.html000640 007661 000620 00000014151 12242224150 027172 0ustar00gierschand000000 000000 SimGrid: surf_storage_model_extension_public Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
surf_storage_model_extension_public Struct Reference

Storage model extension public. More...

#include <surf.h>

Detailed Description

Storage model extension public.

Public functions specific to the Storage model.


The documentation for this struct was generated from the following file:
  • src/include/surf/surf.h
SimGrid-3.10/doc/html/group__XBT__dict__cons.js000640 007661 000620 00000001014 12242224150 021611 0ustar00gierschand000000 000000 var group__XBT__dict__cons = [ [ "xbt_dict_t", "group__XBT__dict__cons.html#gac60ea15fce6ea593be308de876712f04", null ], [ "xbt_dict_new", "group__XBT__dict__cons.html#ga3f03623cb96849ab40db9b9af25ac38c", null ], [ "xbt_dict_new_homogeneous", "group__XBT__dict__cons.html#ga99fe5eb49d3fa9f1f31fb6d519fb7197", null ], [ "xbt_dict_free", "group__XBT__dict__cons.html#ga35d2edf4086c13f0c096621aaf421c7d", null ], [ "xbt_dict_size", "group__XBT__dict__cons.html#ga79130ac36df5cbdc334a3424a92eff5d", null ] ];SimGrid-3.10/doc/html/group__XBT__peer.html000640 007661 000620 00000025443 12242224150 021004 0ustar00gierschand000000 000000 SimGrid: Peer
SimGrid  3.10
Versatile Simulation of Distributed Systems

Helper functions to manipulate remote hosts. More...

Data Structures

struct  s_xbt_peer
 Structure describing a remote host (as name:port) More...

Typedefs

typedef struct s_xbt_peerxbt_peer_t
 Object describing a remote host (as name:port)
typedef struct s_xbt_peer s_xbt_peer_t
 Structure describing a remote host (as name:port)

Functions

xbt_peer_t xbt_peer_new (const char *name, int port)
 constructor
xbt_peer_t xbt_peer_from_string (const char *peerport)
 constructor. Argument should be of form '(peername):(port)'.
xbt_peer_t xbt_peer_copy (xbt_peer_t h)
 copy constructor
void xbt_peer_free (xbt_peer_t peer)
 destructor
void xbt_peer_free_voidp (void *d)
 Freeing function for dynars of xbt_peer_t.

Detailed Description

Helper functions to manipulate remote hosts.

This module simply introduces some rather trivial functions to manipulate remote host denomination (in the form hostname:port)

SimGrid-3.10/doc/html/group__XBT__ex.html000640 007661 000620 00000106341 12242224150 020462 0ustar00gierschand000000 000000 SimGrid: Exception support
SimGrid  3.10
Versatile Simulation of Distributed Systems

A set of macros providing exception a la C++ in ANSI C (grounding feature) More...

Data Structures

struct  xbt_ex_t
 Structure describing an exception. More...

Macros

#define TRY
 Introduce a block where exception may be dealed with.
#define TRY_CLEANUP
 optional(!) block for cleanup
#define CATCH(e)
 the block for catching (ie, deal with) an exception
#define CATCH_ANONYMOUS
 like CATCH(e) but without argument
#define THROW_PREPARE(_throw_ctx, c, v, m)
 Helper macro for THROW and THROWF.
#define THROW(c, v)
 Builds and throws an exception.
#define THROWF(c, v,...)
 Builds and throws an exception with a printf-like formatted message.
#define RETHROW
 re-throwing of an already caught exception (ie, pass it to the upper catch block)
#define RETHROWF(...)
 like THROWF, but adding some details to the message of an existing exception

Enumerations

enum  xbt_errcat_t {
  unknown_error = 0, arg_error, bound_error, mismatch_error,
  not_found_error, system_error, network_error, timeout_error,
  cancel_error, thread_error, host_error, tracing_error,
  io_error
}
 different kind of errors More...

Functions

const char * xbt_ex_catname (xbt_errcat_t cat)
 returns a short name for the given exception category
void xbt_ex_free (xbt_ex_t e)
 Exception destructor.
void xbt_backtrace_display_current (void)
 Shows a backtrace of the current location.
int xbt_backtrace_no_malloc (void **bt, int size)
 reimplementation of glibc backtrace based directly on gcc library, without implicit malloc
void xbt_backtrace_current (xbt_ex_t *e)
 Captures a backtrace for further use.
void xbt_backtrace_display (xbt_ex_t *e)
 Display a previously captured backtrace.
int xbt_libunwind_backtrace (void *bt[XBT_BACKTRACE_SIZE], int size)
 Get current backtrace with libunwind.

Detailed Description

A set of macros providing exception a la C++ in ANSI C (grounding feature)

This module is a small ISO-C++ style exception handling library for use in the ISO-C language. It allows you to use the paradigm of throwing and catching exceptions in order to reduce the amount of error handling code without hindering program robustness.

This is achieved by directly transferring exceptional return codes (and the program control flow) from the location where the exception is raised (throw point) to the location where it is handled (catch point) – usually from a deeply nested sub-routine to a parent routine. All intermediate routines no longer have to make sure that the exceptional return codes from sub-routines are correctly passed back to the parent.

These features are brought to you by a modified version of the libex library, one of the numerous masterpiece of Ralf S. Engelschall.

DESCRIPTION

In SimGrid, an exception is a triple <msg , category , value> where msg is a human-readable text describing the exceptional condition, code an integer describing what went wrong and value providing a sort of sub-category. (this is different in the original libex).

BASIC USAGE

TRY TRIED_BLOCK [TRY_CLEANUP CLEANUP_BLOCK] CATCH (variable) CATCH_BLOCK

This is the primary syntactical construct provided. It is modeled after the ISO-C++ try-catch clause and should sound familiar to most of you.

Any exception thrown directly from the TRIED_BLOCK block or from called subroutines is caught. Cleanups which must be done after this block (whenever an exception arose or not) should be placed into the optionnal CLEANUP_BLOCK. The code dealing with the exceptions when they arise should be placed into the (mandatory) CATCH_BLOCK.

In absence of exception, the control flow goes into the blocks TRIED_BLOCK and CLEANUP_BLOCK (if present); The CATCH_BLOCK block is then ignored.

When an exception is thrown, the control flow goes through the following blocks: TRIED_BLOCK (up to the statement throwing the exception), CLEANUP_BLOCK (if any) and CATCH_BLOCK. The exception is stored in a variable for inspection inside the CATCH_BLOCK. This variable must be declared in the outter scope, but its value is only valid within the CATCH_BLOCK block.

Some notes:

  • TRY, CLEANUP and CATCH cannot be used separately, they work only in combination and form a language clause as a whole.
  • In contrast to the syntax of other languages (such as C++ or Jave) there is only one CATCH block and not multiple ones (all exceptions are of the same xbt_ex_t C type).
  • the variable of CATCH can naturally be reused in subsequent CATCH clauses.
  • it is possible to nest TRY clauses.

The TRY block is a regular ISO-C language statement block, but

it is not allowed to jump into it via "goto" or longjmp(3) or out of it via "break", "return", "goto" or longjmp(3).

This is because there is some hidden setup and cleanup that needs to be done regardless of whether an exception is caught. Bypassing these steps will break the exception handling facility. The symptom are likely to be a segfault at the next exception raising point, ie far away from the point where you did the mistake. If you suspect that kind of error in your code, have a look at the little script tools/xbt_exception_checker in the CVS. It extracts all the TRY blocks from a set of C files you give it and display them (and only them) on the standard output. You can then grep for the forbidden keywords on that output.

The CLEANUP and CATCH blocks are regular ISO-C language statement blocks without any restrictions. You are even allowed to throw (and, in the CATCH block, to re-throw) exceptions.

There is one subtle detail you should remember about TRY blocks: Variables used in the CLEANUP or CATCH clauses must be declared with the storage class "volatile", otherwise they might contain outdated information if an exception is thrown.

This is because you usually do not know which commands in the TRY were already successful before the exception was thrown (logically speaking) and because the underlying ISO-C setjmp(3) facility applies those restrictions (technically speaking). As a matter of fact, value changes between the TRY and the THROW may be discarded if you forget the "volatile" keyword.

PROGRAMMING PITFALLS

Exception handling is a very elegant and efficient way of dealing with exceptional situation. Nevertheless it requires additional discipline in programming and there are a few pitfalls one must be aware of. Look the following code which shows some pitfalls and contains many errors (assuming a mallocex() function which throws an exception if malloc(3) fails):

/* BAD_EXAMPLE */
TRY {
char *cp1, *cp2, *cp3;
cp1 = mallocex(SMALLAMOUNT);
globalcontext->first = cp1;
cp2 = mallocex(TOOBIG);
cp3 = mallocex(SMALLAMOUNT);
strcpy(cp1, "foo");
strcpy(cp2, "bar");
}
free(cp3);
free(cp2);
free(cp1);
}
printf("cp3=%s", cp3);
}
/* end_of_bad_example */

This example raises a few issues:

  1. variable scope
    Variables which are used in the CLEANUP or CATCH clauses must be declared before the TRY clause, otherwise they only exist inside the TRY block. In the example above, cp1, cp2 and cp3 only exist in the TRY block and are invisible from the CLEANUP and CATCH blocks.
  2. variable initialization
    Variables which are used in the CLEANUP or CATCH clauses must be initialized before the point of the first possible THROW is reached. In the example above, CLEANUP would have trouble using cp3 if mallocex() throws a exception when allocating a TOOBIG buffer.
  3. volatile variable
    Variables which are used in the CLEANUP or CATCH clauses MUST BE DECLARED AS "volatile", otherwise they might contain outdated information when an exception is thrown.
  4. clean before catch
    The CLEANUP clause is not only place before the CATCH clause in the source code, it also occures before in the control flow. So, resources being cleaned up cannot be used in the CATCH block. In the example, c3 gets freed before the printf placed in CATCH.
  5. variable uninitialization
    If resources are passed out of the scope of the TRY/CLEANUP/CATCH construct, they naturally shouldn't get cleaned up. The example above does free(3) cp1 in CLEANUP although its value was affected to globalcontext->first, invalidating this pointer.

The following is fixed version of the code (annotated with the pitfall items for reference):

/* GOOD_EXAMPLE */
{ /*01 */
char *volatile /*03 */ cp1 = NULL /*02 */ ;
char *volatile /*03 */ cp2 = NULL /*02 */ ;
char *volatile /*03 */ cp3 = NULL /*02 */ ;
TRY {
cp1 = mallocex(SMALLAMOUNT);
global_context->first = cp1;
cp1 = NULL /*05 give away */ ;
cp2 = mallocex(TOOBIG);
cp3 = mallocex(SMALLAMOUNT);
strcpy(cp1, "foo");
strcpy(cp2, "bar");
}
TRY_CLEANUP { /*04 */
printf("cp3=%s", cp3 == NULL /*02 */ ? "" : cp3);
free(cp3);
free(cp2);
/*05 cp1 was given away */
}
/*05 global context untouched */
}
}
/* end_of_good_example */

Macro Definition Documentation

#define CATCH_ANONYMOUS

like CATCH(e) but without argument

Useful if you only want to rethrow the exception caught, and do not want to bother with an unused variable.

#define THROW_PREPARE (   _throw_ctx,
  c,
  v,
 
)

Helper macro for THROW and THROWF.

Parameters
_throw_ctx,:the throwing context in which we should construct the exception
c,:category code (integer)
v,:value (integer)
m,:message text

If called from within a TRY/CATCH construct, this exception is copied into the CATCH relevant variable program control flow is derouted to the CATCH (after the optional sg_cleanup).

If no TRY/CATCH construct embeds this call, the program calls abort(3).

The THROW can be performed everywhere, including inside TRY, CLEANUP and CATCH blocks.

Enumeration Type Documentation

different kind of errors

Enumerator:
unknown_error 

unknown error

arg_error 

Invalid argument

bound_error 

Out of bounds argument

mismatch_error 

The provided ID does not match

not_found_error 

The searched element was not found

system_error 

a syscall did fail

network_error 

error while sending/receiving data

timeout_error 

not quick enough, dude

cancel_error 

an action was canceled

thread_error 

error while [un]locking

host_error 

host failed

tracing_error 

error during the simulation tracing

io_error 

disk or file error

Function Documentation

int xbt_backtrace_no_malloc ( void **  array,
int  size 
)

reimplementation of glibc backtrace based directly on gcc library, without implicit malloc

See http://webloria.loria.fr/~quinson/blog/2012/0208/system_programming_fun_in_SimGrid/ for the motivation behind this function

SimGrid-3.10/doc/html/group__XBT__dynar__cursor.html000640 007661 000620 00000024506 12242224150 022721 0ustar00gierschand000000 000000 SimGrid: Cursors on dynar
SimGrid  3.10
Versatile Simulation of Distributed Systems

Macros

#define xbt_dynar_foreach(_dynar, _cursor, _data)
 Iterates over the whole dynar.

Functions

void xbt_dynar_cursor_rm (xbt_dynar_t dynar, unsigned int *const cursor)
 Removes and free the entry pointed by the cursor.

Detailed Description

Cursors are used to iterate over the structure. Never add elements to the DynArr during the traversal. To remove elements, use the xbt_dynar_cursor_rm() function.

Do not call these function directly, but only within the xbt_dynar_foreach macro.

Macro Definition Documentation

#define xbt_dynar_foreach (   _dynar,
  _cursor,
  _data 
)

Iterates over the whole dynar.

@param _dynar what to iterate over
@param _cursor an integer used as cursor
@param _data

Here is an example of usage:

unsigned int cpt;
string *str;
xbt_dynar_foreach (dyn,cpt,str) {
printf("Seen %s\n",str);
}

Note that underneath, that's a simple for loop with no real black magic involved. It's perfectly safe to interrupt a foreach with a break or a return statement.

Function Documentation

void xbt_dynar_cursor_rm ( xbt_dynar_t  dynar,
unsigned int *const  cursor 
)

Removes and free the entry pointed by the cursor.

This function can be used while traversing without problem.

SimGrid-3.10/doc/html/use.html000640 007661 000620 00000333320 12242224150 016412 0ustar00gierschand000000 000000 SimGrid: Using SimGrid
SimGrid  3.10
Versatile Simulation of Distributed Systems
Using SimGrid

This page is under work – sorry for the inconvinience (FIXME).

SimGrid comes with many examples provided in the examples/ directory. Those examples are described in section MSG examples . Those examples are commented and should be easy to understand. for a first step into SimGrid we also provide some more detailed examples in the sections below.

You should also check our online tutorial section that contains a generic tutorial about using SimGrid.

Using MSG

You should also check our online tutorial section that contains a dedicated tutorial.

Here are some examples on how to use MSG, the most used API.

tr MSG comes with an extensive set of examples. It is sometimes difficult to find the one you need. This list aims at helping you finding the example from which you can learn what you want to.

Basic examples and features

Asynchronous communications

Simulation of asynchronous communications between a sender and a receiver using a realistic platform and an external description of the deployment.


Code of the application

Preliminary declarations

#include <stdio.h>
#include "msg/msg.h" /* Yeah! If you want to use msg, you need to include msg/msg.h */
#include "xbt/sysdep.h" /* calloc, printf */
/* Create a log channel to have nice outputs. */
#include "xbt/log.h"
#include "xbt/asserts.h"
"Messages specific for this msg example");
int sender(int argc, char *argv[]);
int receiver(int argc, char *argv[]);
msg_error_t test_all(const char *platform_file,
const char *application_file);

Sender function

The sender send to a receiver an asynchronous message with the function "MSG_task_isend()". Cause this function is non-blocking we have to make "MSG_comm_test()" to know if the communication is finished for finally destroy it with function "MSG_comm_destroy()". It also available to "make MSG_comm_wait()" which make both of them.

C style arguments (argc/argv) are interpreted as:

  • the number of tasks to distribute
  • the computation size of each task
  • the size of the files associated to each task
  • a list of host that will accept those tasks.
  • the time to sleep at the beginning of the function
  • This time defined the process sleep time if time = 0 use of MSG_comm_wait() if time > 0 use of MSG_comm_test()

int sender(int argc, char *argv[])
{
long number_of_tasks = atol(argv[1]);
double task_comp_size = atof(argv[2]);
double task_comm_size = atof(argv[3]);
long receivers_count = atol(argv[4]);
double sleep_start_time = atof(argv[5]);
double sleep_test_time = atof(argv[6]);
XBT_INFO("sleep_start_time : %f , sleep_test_time : %f", sleep_start_time,
sleep_test_time);
msg_comm_t comm = NULL;
int i;
msg_task_t task = NULL;
MSG_process_sleep(sleep_start_time);
for (i = 0; i < number_of_tasks; i++) {
char mailbox[256];
char sprintf_buffer[256];
sprintf(mailbox, "receiver-%ld", i % receivers_count);
sprintf(sprintf_buffer, "Task_%d", i);
task =
MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size,
NULL);
comm = MSG_task_isend(task, mailbox);
XBT_INFO("Send to receiver-%ld Task_%d", i % receivers_count, i);
if (sleep_test_time == 0) {
MSG_comm_wait(comm, -1);
} else {
while (MSG_comm_test(comm) == 0) {
MSG_process_sleep(sleep_test_time);
};
}
}
for (i = 0; i < receivers_count; i++) {
char mailbox[80];
sprintf(mailbox, "receiver-%ld", i % receivers_count);
task = MSG_task_create("finalize", 0, 0, 0);
comm = MSG_task_isend(task, mailbox);
XBT_INFO("Send to receiver-%ld finalize", i % receivers_count);
if (sleep_test_time == 0) {
MSG_comm_wait(comm, -1);
} else {
while (MSG_comm_test(comm) == 0) {
MSG_process_sleep(sleep_test_time);
};
}
}
XBT_INFO("Goodbye now!");
return 0;
} /* end_of_sender */

Receiver function

This function executes tasks when it receives them. As the receiving is asynchronous we have to test the communication to know if it is completed or not with "MSG_comm_test()" or wait for the completion "MSG_comm_wait()".

C style arguments (argc/argv) are interpreted as:

  • the id to use for received the communication.
  • the time to sleep at the beginning of the function
  • This time defined the process sleep time if time = 0 use of MSG_comm_wait() if time > 0 use of MSG_comm_test()

int receiver(int argc, char *argv[])
{
msg_task_t task = NULL;
_XBT_GNUC_UNUSED msg_error_t res;
int id = -1;
char mailbox[80];
msg_comm_t res_irecv;
double sleep_start_time = atof(argv[2]);
double sleep_test_time = atof(argv[3]);
XBT_INFO("sleep_start_time : %f , sleep_test_time : %f", sleep_start_time,
sleep_test_time);
_XBT_GNUC_UNUSED int read;
read = sscanf(argv[1], "%d", &id);
xbt_assert(read,
"Invalid argument %s\n", argv[1]);
MSG_process_sleep(sleep_start_time);
sprintf(mailbox, "receiver-%d", id);
while (1) {
res_irecv = MSG_task_irecv(&(task), mailbox);
XBT_INFO("Wait to receive a task");
if (sleep_test_time == 0) {
res = MSG_comm_wait(res_irecv, -1);
xbt_assert(res == MSG_OK, "MSG_task_get failed");
} else {
while (MSG_comm_test(res_irecv) == 0) {
MSG_process_sleep(sleep_test_time);
};
}
MSG_comm_destroy(res_irecv);
XBT_INFO("Received \"%s\"", MSG_task_get_name(task));
if (!strcmp(MSG_task_get_name(task), "finalize")) {
break;
}
XBT_INFO("Processing \"%s\"", MSG_task_get_name(task));
XBT_INFO("\"%s\" done", MSG_task_get_name(task));
task = NULL;
}
XBT_INFO("I'm done. See you!");
return 0;
} /* end_of_receiver */

Simulation core

This function is the core of the simulation and is divided only into 3 parts thanks to MSG_create_environment() and MSG_launch_application().

  1. Simulation settings : MSG_create_environment() creates a realistic environment
  2. Application deployment : create the processes on the right locations with MSG_launch_application()
  3. The simulation is run with MSG_main()

Its arguments are:

  • platform_file: the name of a file containing an valid surfxml platform description.
  • application_file: the name of a file containing a valid surfxml application description

msg_error_t test_all(const char *platform_file,
const char *application_file)
{
/* MSG_config("workstation/model","KCCFLN05"); */
{ /* Simulation setting */
MSG_create_environment(platform_file);
}
{ /* Application deployment */
MSG_function_register("sender", sender);
MSG_function_register("receiver", receiver);
MSG_launch_application(application_file);
}
res = MSG_main();
XBT_INFO("Simulation time %g", MSG_get_clock());
return res;
} /* end_of_test_all */

Main function

This initializes MSG, runs a simulation, and free all data-structures created by MSG.

int main(int argc, char *argv[])
{
MSG_init(&argc, argv);
if (argc < 3) {
printf("Usage: %s platform_file deployment_file\n", argv[0]);
printf("example: %s msg_platform.xml msg_deployment.xml\n", argv[0]);
exit(1);
}
res = test_all(argv[1], argv[2]);
if (res == MSG_OK)
return 0;
else
return 1;
} /* end_of_main */

Waitall function for sender

The use of this function permit to send all messages and wait for the completion of all in one time.

int sender(int argc, char *argv[])
{
long number_of_tasks = atol(argv[1]);
double task_comp_size = atof(argv[2]);
double task_comm_size = atof(argv[3]);
long receivers_count = atol(argv[4]);
msg_comm_t *comm = xbt_new(msg_comm_t, number_of_tasks + receivers_count);
int i;
msg_task_t task = NULL;
for (i = 0; i < number_of_tasks; i++) {
char mailbox[256];
char sprintf_buffer[256];
sprintf(mailbox, "receiver-%ld", i % receivers_count);
sprintf(sprintf_buffer, "Task_%d", i);
task =
MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size,
NULL);
comm[i] = MSG_task_isend(task, mailbox);
XBT_INFO("Send to receiver-%ld Task_%d", i % receivers_count, i);
}
for (i = 0; i < receivers_count; i++) {
char mailbox[80];
sprintf(mailbox, "receiver-%ld", i % receivers_count);
task = MSG_task_create("finalize", 0, 0, 0);
comm[i + number_of_tasks] = MSG_task_isend(task, mailbox);
XBT_INFO("Send to receiver-%ld finalize", i % receivers_count);
}
/* Here we are waiting for the completion of all communications */
MSG_comm_waitall(comm, (number_of_tasks + receivers_count), -1);
for (i = 0; i < number_of_tasks + receivers_count; i++)
MSG_comm_destroy(comm[i]);
XBT_INFO("Goodbye now!");
xbt_free(comm);
return 0;
} /* end_of_sender */

Waitany function

The MSG_comm_waitany() function return the place of the first message send or receive from a xbt_dynar_t table.

From a sender

We can use this function to wait all sent messages.

int sender(int argc, char *argv[])
{
long number_of_tasks = atol(argv[1]);
double task_comp_size = atof(argv[2]);
double task_comm_size = atof(argv[3]);
long receivers_count = atol(argv[4]);
int diff_com = atol(argv[5]);
double coef = 0;
xbt_dynar_t d = xbt_dynar_new(sizeof(msg_comm_t), NULL);
int i;
msg_task_t task;
char mailbox[256];
char sprintf_buffer[256];
msg_comm_t comm;
for (i = 0; i < number_of_tasks; i++) {
if (diff_com == 0)
coef = 1;
else
coef = (i + 1);
sprintf(mailbox, "receiver-%ld", (i % receivers_count));
sprintf(sprintf_buffer, "Task_%d", i);
task =
MSG_task_create(sprintf_buffer, task_comp_size,
task_comm_size / coef, NULL);
comm = MSG_task_isend(task, mailbox);
XBT_INFO("Send to receiver-%ld %s comm_size %f", i % receivers_count,
sprintf_buffer, task_comm_size / coef);
}
/* Here we are waiting for the completion of all communications */
while (!xbt_dynar_is_empty(d)) {
}
/* Here we are waiting for the completion of all tasks */
sprintf(mailbox, "finalize");
msg_comm_t res_irecv;
_XBT_GNUC_UNUSED msg_error_t res_wait;
for (i = 0; i < receivers_count; i++) {
task = NULL;
res_irecv = MSG_task_irecv(&(task), mailbox);
res_wait = MSG_comm_wait(res_irecv, -1);
xbt_assert(res_wait == MSG_OK, "MSG_comm_wait failed");
MSG_comm_destroy(res_irecv);
}
XBT_INFO("Goodbye now!");
return 0;
} /* end_of_sender */

From a receiver

We can also wait for the arrival of all messages.

int receiver(int argc, char *argv[])
{
int id = -1;
int i;
char mailbox[80];
xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
int tasks = atof(argv[2]);
msg_task_t *task = xbt_new(msg_task_t, tasks);
_XBT_GNUC_UNUSED int read;
read = sscanf(argv[1], "%d", &id);
xbt_assert(read, "Invalid argument %s\n", argv[1]);
sprintf(mailbox, "receiver-%d", id);
msg_comm_t res_irecv;
for (i = 0; i < tasks; i++) {
XBT_INFO("Wait to receive task %d", i);
task[i] = NULL;
res_irecv = MSG_task_irecv(&task[i], mailbox);
xbt_dynar_push_as(comms, msg_comm_t, res_irecv);
}
/* Here we are waiting for the receiving of all communications */
msg_task_t task_com;
while (!xbt_dynar_is_empty(comms)) {
_XBT_GNUC_UNUSED msg_error_t err;
xbt_dynar_remove_at(comms, MSG_comm_waitany(comms), &res_irecv);
task_com = MSG_comm_get_task(res_irecv);
MSG_comm_destroy(res_irecv);
XBT_INFO("Processing \"%s\"", MSG_task_get_name(task_com));
MSG_task_execute(task_com);
XBT_INFO("\"%s\" done", MSG_task_get_name(task_com));
err = MSG_task_destroy(task_com);
xbt_assert(err == MSG_OK, "MSG_task_destroy failed");
}
xbt_dynar_free(&comms);
xbt_free(task);
/* Here we tell to sender that all tasks are done */
sprintf(mailbox, "finalize");
res_irecv = MSG_task_isend(MSG_task_create(NULL, 0, 0, NULL), mailbox);
MSG_comm_wait(res_irecv, -1);
MSG_comm_destroy(res_irecv);
XBT_INFO("I'm done. See you!");
return 0;
} /* end_of_receiver */

Basic Master/Slaves

Simulation of a master-slave application using a realistic platform and an external description of the deployment.

Table of contents:


Preliminary declarations

#include <stdio.h>
#include "msg/msg.h" /* Yeah! If you want to use msg, you need to include msg/msg.h */
#include "xbt/sysdep.h" /* calloc, printf */
/* Create a log channel to have nice outputs. */
#include "xbt/log.h"
#include "xbt/asserts.h"
"Messages specific for this msg example");
int master(int argc, char *argv[]);
int slave(int argc, char *argv[]);
int forwarder(int argc, char *argv[]);
msg_error_t test_all(const char *platform_file,
const char *application_file);
#define FINALIZE ((void*)221297) /* a magic number to tell people to stop working */
int master(int argc, char *argv[])
{
int slaves_count = 0;
msg_host_t *slaves = NULL;
msg_task_t *todo = NULL;
int number_of_tasks = 0;
double task_comp_size = 0;
double task_comm_size = 0;
int i;
_XBT_GNUC_UNUSED int res = sscanf(argv[1], "%d", &number_of_tasks);
xbt_assert(res,"Invalid argument %s\n", argv[1]);
res = sscanf(argv[2], "%lg", &task_comp_size);
xbt_assert(res, "Invalid argument %s\n", argv[2]);
res = sscanf(argv[3], "%lg", &task_comm_size);
xbt_assert(res, "Invalid argument %s\n", argv[3]);
{ /* Task creation */
char sprintf_buffer[64];
todo = xbt_new0(msg_task_t, number_of_tasks);
for (i = 0; i < number_of_tasks; i++) {
sprintf(sprintf_buffer, "Task_%d", i);
todo[i] =
MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size,
NULL);
}

Master code

This function has to be assigned to a msg_process_t that will behave as the master. It should not be called directly but either given as a parameter to MSG_process_create() or registered as a public function through MSG_function_register() and then automatically assigned to a process through MSG_launch_application().

C style arguments (argc/argv) are interpreted as:

  • the number of tasks to distribute
  • the computation size of each task
  • the size of the files associated to each task
  • a list of host that will accept those tasks.

Tasks are dumbly sent in a round-robin style.

}
{ /* Process organisation */
slaves_count = argc - 4;
slaves = xbt_new0(msg_host_t, slaves_count);
for (i = 4; i < argc; i++) {
slaves[i - 4] = MSG_get_host_by_name(argv[i]);
xbt_assert(slaves[i - 4] != NULL, "Unknown host %s. Stopping Now! ",
argv[i]);
}
}
XBT_INFO("Got %d slaves and %d tasks to process", slaves_count,
number_of_tasks);
for (i = 0; i < slaves_count; i++)
XBT_DEBUG("%s", MSG_host_get_name(slaves[i]));
for (i = 0; i < number_of_tasks; i++) {
XBT_INFO("Sending \"%s\" to \"%s\"",
todo[i]->name, MSG_host_get_name(slaves[i % slaves_count]));
if (MSG_host_self() == slaves[i % slaves_count]) {
XBT_INFO("Hey ! It's me ! :)");
}
MSG_task_send(todo[i], MSG_host_get_name(slaves[i % slaves_count]));
XBT_INFO("Sent");
}
("All tasks have been dispatched. Let's tell everybody the computation is over.");
for (i = 0; i < slaves_count; i++) {
msg_task_t finalize = MSG_task_create("finalize", 0, 0, FINALIZE);
MSG_task_send(finalize, MSG_host_get_name(slaves[i]));
}
XBT_INFO("Goodbye now!");
free(slaves);
free(todo);
return 0;
} /* end_of_master */

Slave code

This function has to be assigned to a msg_process_t that has to behave as a slave. Just like the master fuction (described in Master code), it should not be called directly.

This function keeps waiting for tasks and executes them as it receives them.

int slave(int argc, char *argv[])
{
msg_task_t task = NULL;
_XBT_GNUC_UNUSED int res;
while (1) {
xbt_assert(res == MSG_OK, "MSG_task_get failed");
XBT_INFO("Received \"%s\"", MSG_task_get_name(task));
if (!strcmp(MSG_task_get_name(task), "finalize")) {
break;
}
XBT_INFO("Processing \"%s\"", MSG_task_get_name(task));
XBT_INFO("\"%s\" done", MSG_task_get_name(task));
task = NULL;
}
XBT_INFO("I'm done. See you!");
return 0;
} /* end_of_slave */

Forwarder code

This function has to be assigned to a msg_process_t that has to behave as a forwarder. Just like the master function (described in Master code), it should not be called directly.

C style arguments (argc/argv) are interpreted as a list of host that will accept those tasks.

This function keeps waiting for tasks and dispathes them to its slaves.

int forwarder(int argc, char *argv[])
{
int i;
int slaves_count;
msg_host_t *slaves;
{ /* Process organisation */
slaves_count = argc - 1;
slaves = xbt_new0(msg_host_t, slaves_count);
for (i = 1; i < argc; i++) {
slaves[i - 1] = MSG_get_host_by_name(argv[i]);
if (slaves[i - 1] == NULL) {
XBT_INFO("Unknown host %s. Stopping Now! ", argv[i]);
abort();
}
}
}
i = 0;
while (1) {
msg_task_t task = NULL;
int a;
if (a == MSG_OK) {
XBT_INFO("Received \"%s\"", MSG_task_get_name(task));
if (MSG_task_get_data(task) == FINALIZE) {
("All tasks have been dispatched. Let's tell everybody the computation is over.");
for (i = 0; i < slaves_count; i++)
MSG_task_send(MSG_task_create("finalize", 0, 0, FINALIZE),
MSG_host_get_name(slaves[i]));
break;
}
XBT_INFO("Sending \"%s\" to \"%s\"",
MSG_task_get_name(task), MSG_host_get_name(slaves[i % slaves_count]));
MSG_task_send(task, MSG_host_get_name(slaves[i % slaves_count]));
i++;
} else {
XBT_INFO("Hey ?! What's up ? ");
xbt_die("Unexpected behavior");
}
}
xbt_free(slaves);
XBT_INFO("I'm done. See you!");
return 0;
} /* end_of_forwarder */

Simulation core

This function is the core of the simulation and is divided only into 3 parts thanks to MSG_create_environment() and MSG_launch_application().

  1. Simulation settings : MSG_create_environment() creates a realistic environment
  2. Application deployment : create the processes on the right locations with MSG_launch_application()
  3. The simulation is run with MSG_main()

Its arguments are:

  • platform_file: the name of a file containing an valid surfxml platform description.
  • application_file: the name of a file containing a valid surfxml application description

msg_error_t test_all(const char *platform_file,
const char *application_file)
{
/* MSG_config("workstation/model","KCCFLN05"); */
{ /* Simulation setting */
MSG_create_environment(platform_file);
}
{ /* Application deployment */
MSG_function_register("master", master);
MSG_function_register("slave", slave);
MSG_function_register("forwarder", forwarder);
MSG_launch_application(application_file);
}
res = MSG_main();
XBT_INFO("Simulation time %g", MSG_get_clock());
return res;
} /* end_of_test_all */

Main() function

This initializes MSG, runs a simulation, and free all data-structures created by MSG.

int main(int argc, char *argv[])
{
MSG_init(&argc, argv);
if (argc < 3) {
printf("Usage: %s platform_file deployment_file\n", argv[0]);
printf("example: %s msg_platform.xml msg_deployment.xml\n", argv[0]);
exit(1);
}
res = test_all(argv[1], argv[2]);
if (res == MSG_OK)
return 0;
else
return 1;
} /* end_of_main */

Helping files

Example of application file

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
<!-- The master process (with some arguments) -->
<process host="Tremblay" function="master">
<argument value="20"/> <!-- Number of tasks -->
<argument value="50000000"/> <!-- Computation size of tasks -->
<argument value="1000000"/> <!-- Communication size of tasks -->
<argument value="Jupiter"/> <!-- First slave -->
<argument value="Fafard"/> <!-- Second slave -->
<argument value="Ginette"/> <!-- Third slave -->
<argument value="Bourassa"/> <!-- Last slave -->
<argument value="Tremblay"/> <!-- Me! I can work too! -->
</process>
<!-- The slave process (with no argument) -->
<process host="Tremblay" function="slave" on_failure="RESTART"/>
<process host="Jupiter" function="slave" on_failure="RESTART"/>
<process host="Fafard" function="slave" on_failure="RESTART"/>
<process host="Ginette" function="slave" on_failure="RESTART"/>
<process host="Bourassa" function="slave" on_failure="RESTART"/>
</platform>

Example of platform file

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
<platform version="3">
<AS id="AS0" routing="Full">
<!-- ljlkj -->
<host id="Tremblay" power="98.095Mf"/>
<host id="Jupiter" power="76.296Mf"/>
<host id="Fafard" power="76.296Mf"/>
<host id="Ginette" power="48.492Mf"/>
<host id="Bourassa" power="48.492Mf"/>
<link id="6" bandwidth="41.279125MBps" latency="59.904us"/>
<link id="11" bandwidth="252.75kBps" latency="5.70455ms"/>
<link id="3" bandwidth="34.285625MBps" latency="514.433us"/>
<link id="7" bandwidth="11.618875MBps" latency="189.98us"/>
<link id="9" bandwidth="7.20975MBps" latency="1.461517ms"/>
<link id="12" bandwidth="1.792625MBps" latency="7.877863ms"/>
<link id="2" bandwidth="118.6825MBps" latency="136.931us"/>
<link id="8" bandwidth="8.158MBps" latency="270.544us"/>
<link id="1" bandwidth="34.285625MBps" latency="514.433us"/>
<link id="4" bandwidth="10.099625MBps" latency="479.78us"/>
<link id="0" bandwidth="41.279125MBps" latency="59.904us"/>
<link id="10" bandwidth="4.67975MBps" latency="848.712us"/>
<link id="5" bandwidth="27.94625MBps" latency="278.066us"/>
<link id="loopback" bandwidth="498MBps" latency="15us" sharing_policy="FATPIPE"/>
<route src="Tremblay" dst="Tremblay"><link_ctn id="loopback"/></route>
<route src="Jupiter" dst="Jupiter"><link_ctn id="loopback"/></route>
<route src="Fafard" dst="Fafard"><link_ctn id="loopback"/></route>
<route src="Ginette" dst="Ginette"><link_ctn id="loopback"/></route>
<route src="Bourassa" dst="Bourassa"><link_ctn id="loopback"/></route>
<route src="Tremblay" dst="Jupiter">
<link_ctn id="9"/>
</route>
<route src="Tremblay" dst="Fafard">
<link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="8"/>
</route>
<route src="Tremblay" dst="Ginette">
<link_ctn id="4"/><link_ctn id="3"/><link_ctn id="5"/>
</route>
<route src="Tremblay" dst="Bourassa">
<link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="6"/><link_ctn id="7"/>
</route>
<route src="Jupiter" dst="Fafard">
<link_ctn id="9"/><link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="8"/>
</route>
<route src="Jupiter" dst="Ginette">
<link_ctn id="9"/><link_ctn id="4"/><link_ctn id="3"/><link_ctn id="5"/>
</route>
<route src="Jupiter" dst="Bourassa">
<link_ctn id="9"/><link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="6"/><link_ctn id="7"/>
</route>
<route src="Fafard" dst="Ginette">
<link_ctn id="8"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="2"/><link_ctn id="5"/>
</route>
<route src="Fafard" dst="Bourassa">
<link_ctn id="8"/><link_ctn id="6"/><link_ctn id="7"/>
</route>
<route src="Ginette" dst="Bourassa">
<link_ctn id="5"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="6"/><link_ctn id="7"/>
</route>
</AS>
</platform>

Using SMPI

You should check our online tutorial section that contains a dedicated tutorial.

Using Model Checking

You should check our online tutorial section that contains a dedicated tutorial.

Using Trace

Check out the Tracing Simulations section.

You should check our online tutorial section that contains a dedicated tutorial.

Using SimDag

You should check our online tutorial section that contains a dedicated tutorial.

Using SIMIX

You should check our online tutorial section that contains a dedicated tutorial.

SimGrid-3.10/doc/html/group__XBT__replay.js000640 007661 000620 00000000532 12242224150 021005 0ustar00gierschand000000 000000 var group__XBT__replay = [ [ "xbt_replay_action_register", "group__XBT__replay.html#ga994ddcd8aa680aabc58762d8965f93ef", null ], [ "xbt_replay_action_unregister", "group__XBT__replay.html#ga83842574c19fdf7d056cdfeacd64dae7", null ], [ "xbt_replay_action_runner", "group__XBT__replay.html#ga1a034387ae8f039bca99f6fc44518da0", null ] ];SimGrid-3.10/doc/html/dir_d95ef5e0399eea6eaffecd7fd61568e7.html000640 007661 000620 00000014343 12242224150 023456 0ustar00gierschand000000 000000 SimGrid: examples/msg/parallel_task/ Directory Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
parallel_task Directory Reference

Files

file  parallel_task.c
file  test_ptask.c
SimGrid-3.10/doc/html/structs__xbt__strbuff__t.html000640 007661 000620 00000013474 12242224150 022722 0ustar00gierschand000000 000000 SimGrid: s_xbt_strbuff_t Struct Reference
SimGrid  3.10
Versatile Simulation of Distributed Systems
s_xbt_strbuff_t Struct Reference

#include <strbuff.h>

Detailed Description

Buffer code


The documentation for this struct was generated from the following file:
  • include/xbt/strbuff.h
SimGrid-3.10/doc/html/group__XBT__heap.js000640 007661 000620 00000001544 12242224150 020432 0ustar00gierschand000000 000000 var group__XBT__heap = [ [ "xbt_heap_new", "group__XBT__heap.html#gaa4b5f8cfee32bb2df3cb2b5d6649b114", null ], [ "xbt_heap_free", "group__XBT__heap.html#gace5e6cc225d3698de6af159229c94587", null ], [ "xbt_heap_size", "group__XBT__heap.html#ga21ef0cccfab2e937012f1286cc3ecb66", null ], [ "xbt_heap_push", "group__XBT__heap.html#ga5e44b85be2d2ba1d7ed9d400546f43dd", null ], [ "xbt_heap_pop", "group__XBT__heap.html#ga61f5e2665882b14b15a48bf66e9631a4", null ], [ "xbt_heap_maxkey", "group__XBT__heap.html#gaecf9ff064287ee533e166d631aced6df", null ], [ "xbt_heap_maxcontent", "group__XBT__heap.html#ga804cb0f43208ddf228b515ec14f13965", null ], [ "xbt_heap_set_update_callback", "group__XBT__heap.html#ga0617a1f1c3f63f951f17698e783bc24d", null ], [ "xbt_heap_remove", "group__XBT__heap.html#ga2035074b0de4d7a74fc5f9a22c148437", null ] ];SimGrid-3.10/doc/html/navtreeindex2.js000640 007661 000620 00000043555 12242224150 020054 0ustar00gierschand000000 000000 var NAVTREEINDEX2 = { "group__XBT__fifo__perl.html#gad7fdf56ec51e0c1ec442225b3e3ccc07":[9,1,1,3,1,4], "group__XBT__graph.html":[9,1,2,0], "group__XBT__graph.html#ga11cca6af16cef8e4ea7f5f340da517dd":[9,1,2,0,21], "group__XBT__graph.html#ga137cf4ffadf401a1080795664d99834a":[9,1,2,0,18], "group__XBT__graph.html#ga1c292fb71d5119d59496a89d90a8ba30":[9,1,2,0,15], "group__XBT__graph.html#ga2b6d7cfdc45b1df905eba88fdc1d8c18":[9,1,2,0,22], "group__XBT__graph.html#ga3c4697edd9ee89142ec85ed882aad249":[9,1,2,0,10], "group__XBT__graph.html#ga4a037e91f75ccee400b51b5564720693":[9,1,2,0,7], "group__XBT__graph.html#ga59db9ffe13c1c4e4012e61fe38525363":[9,1,2,0,20], "group__XBT__graph.html#ga68339a976c82e67edf79fa59d4619396":[9,1,2,0,8], "group__XBT__graph.html#ga6b9895d6065b7e122bc55c71e32da821":[9,1,2,0,12], "group__XBT__graph.html#ga7105c211e327da8f90b432224451cfb3":[9,1,2,0,5], "group__XBT__graph.html#ga782dba2130eee76b8bd4e6934098fd8f":[9,1,2,0,0], "group__XBT__graph.html#ga80c9aa63aac343d7b3ba246a6e4f6297":[9,1,2,0,24], "group__XBT__graph.html#ga8946bd8838820677e2e44e793be2c9e6":[9,1,2,0,17], "group__XBT__graph.html#ga95d8d120c9be3efbed1880700458d8ca":[9,1,2,0,1], "group__XBT__graph.html#ga966d2089b5392e5f556a6d149bdc112c":[9,1,2,0,11], "group__XBT__graph.html#ga9cbe4fe591cf0d6746909db9ae2cd2aa":[9,1,2,0,6], "group__XBT__graph.html#gaa100e0fe6d317aa185dffe89b3a9deae":[9,1,2,0,4], "group__XBT__graph.html#gaa5d7e658935aa26a17acaa1cdcd575a4":[9,1,2,0,23], "group__XBT__graph.html#gac305eb0dfe08abbe849f2a74dfa3a3a4":[9,1,2,0,25], "group__XBT__graph.html#gac8dd5691103f6c69b8f773a5937c2a8a":[9,1,2,0,16], "group__XBT__graph.html#gac906c4328b3d910457c960cd64d70784":[9,1,2,0,9], "group__XBT__graph.html#gacbbb619bcd7032ba6c0f8e932126d26b":[9,1,2,0,19], "group__XBT__graph.html#gad290d4c3fa3f0c82f7f6cc18a3506546":[9,1,2,0,13], "group__XBT__graph.html#gada4b1109afba1fe3a8f046a45694c707":[9,1,2,0,14], "group__XBT__graph.html#gaec90776579173b58de9b89868abbda0f":[9,1,2,0,2], "group__XBT__graph.html#gaed845d52f5432f7940e1bceb336d3c38":[9,1,2,0,3], "group__XBT__grounding.html":[9,1,0], "group__XBT__heap.html":[9,1,1,5], "group__XBT__heap.html#ga0617a1f1c3f63f951f17698e783bc24d":[9,1,1,5,7], "group__XBT__heap.html#ga2035074b0de4d7a74fc5f9a22c148437":[9,1,1,5,8], "group__XBT__heap.html#ga21ef0cccfab2e937012f1286cc3ecb66":[9,1,1,5,2], "group__XBT__heap.html#ga5e44b85be2d2ba1d7ed9d400546f43dd":[9,1,1,5,3], "group__XBT__heap.html#ga61f5e2665882b14b15a48bf66e9631a4":[9,1,1,5,4], "group__XBT__heap.html#ga804cb0f43208ddf228b515ec14f13965":[9,1,1,5,6], "group__XBT__heap.html#gaa4b5f8cfee32bb2df3cb2b5d6649b114":[9,1,1,5,0], "group__XBT__heap.html#gace5e6cc225d3698de6af159229c94587":[9,1,1,5,1], "group__XBT__heap.html#gaecf9ff064287ee533e166d631aced6df":[9,1,1,5,5], "group__XBT__log.html":[9,1,0,3], "group__XBT__log.html#ga01ff08eb23b4f14bb759c676bcf8df82":[9,1,0,3,25], "group__XBT__log.html#ga08edef341742c903623742c6e05d54ee":[9,1,0,3,10], "group__XBT__log.html#ga0cd5463eb5b259b005b5c3f87db1709a":[9,1,0,3,14], "group__XBT__log.html#ga1cd0df7ea8110bd27c2843812f4c93ee":[9,1,0,3,2], "group__XBT__log.html#ga20e7ed6a7dd096897446901c39e1194f":[9,1,0,3,22], "group__XBT__log.html#ga2289997893363b1ad5f7ff32cbfbf432":[9,1,0,3,26], "group__XBT__log.html#ga28625f3f3aa5986954a2b90f029c2e96":[9,1,0,3,8], "group__XBT__log.html#ga2c0bed18aac8cf41d8f3480513f564bc":[9,1,0,3,11], "group__XBT__log.html#ga2c14b44f6b1abbf73104d17727315e3b":[9,1,0,3,13], "group__XBT__log.html#ga46c64033e6f2d9f309f498bbb2c475f5":[9,1,0,3,20], "group__XBT__log.html#ga4b5b9ad4a5086e2e9bd2ee47b3c03c9c":[9,1,0,3,15], "group__XBT__log.html#ga5094a0e812d0012e6ee4d2257b1a13f1":[9,1,0,3,5], "group__XBT__log.html#ga57f4469c36aeb5f44b5786882b364af8":[9,1,0,3,18], "group__XBT__log.html#ga6accdad9dccecd8d220a479ea0202827":[9,1,0,3,19], "group__XBT__log.html#ga6c9d37281690342c607e30b1f0b59aed":[9,1,0,3,9], "group__XBT__log.html#ga78721bb3ac4ce5dcddb5b102d03ec9ad":[9,1,0,3,1], "group__XBT__log.html#ga7db05649e5c3c7aba06909409e470143":[9,1,0,3,7], "group__XBT__log.html#ga8a4327fc994afcfb2eaebea0c4d1b00a":[9,1,0,3,6], "group__XBT__log.html#ga9e4d4fda6d921febf75e85f9cd9d611a":[9,1,0,3,3], "group__XBT__log.html#gaa23cb30f6de5c9e0a26a6516817c7e20":[9,1,0,3,4], "group__XBT__log.html#gab9815968eb142e81c5e661ececb1f0f3":[9,1,0,3,17], "group__XBT__log.html#gac2f65621104f3bcff51738a12d5c2921":[9,1,0,3,12], "group__XBT__log.html#gadb4c7510140f9e4437be797baf5122a2":[9,1,0,3,21], "group__XBT__log.html#gaec5266e036c60029988444fcfdb91e6c":[9,1,0,3,23], "group__XBT__log.html#gaec7da836fa1482fcda89227dfb1284d9":[9,1,0,3,16], "group__XBT__log.html#gaed62d764d379720d6ce03d2a0d9c3c32":[9,1,0,3,24], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a1b9b706830e4aa1405157d20117aa5cd":[9,1,0,3,25,0], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a32afa42aab40395dbabb07cafbf84eb5":[9,1,0,3,25,5], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a875884ddb873e6613178c5b3c71b8a77":[9,1,0,3,25,7], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82a8bd5d340adeae3a8e5a3182912c230f3":[9,1,0,3,25,6], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82aac8ecdd32b640581940959e6f9ed1588":[9,1,0,3,25,1], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82ac87b95b266f551288e8d9faec534baa9":[9,1,0,3,25,4], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82af28091fa16fda657d0768baaab6f4c27":[9,1,0,3,25,3], "group__XBT__log.html#gga01ff08eb23b4f14bb759c676bcf8df82afef8e3f2e237f8de9c839a2f5c875fc7":[9,1,0,3,25,2], "group__XBT__log__cats.html":[9,1,0,3,0], "group__XBT__mallocator.html":[9,1,0,6], "group__XBT__mallocator__cons.html":[9,1,0,6,0], "group__XBT__mallocator__cons.html#ga31b8b348c6b44d730c915c5442a64637":[9,1,0,6,0,1], "group__XBT__mallocator__cons.html#gaa884a3ef269f0709b9b2e025708f2e95":[9,1,0,6,0,2], "group__XBT__mallocator__cons.html#gab949b93743d06b31bbdf3828d34a72ac":[9,1,0,6,0,0], "group__XBT__mallocator__objects.html":[9,1,0,6,1], "group__XBT__mallocator__objects.html#ga3e52409c5b24294ef98367b56cad4c7b":[9,1,0,6,1,0], "group__XBT__mallocator__objects.html#ga98bad11b395593e2681d1bc8daebfc5f":[9,1,0,6,1,2], "group__XBT__mallocator__objects.html#gaf33e29b8ca5ab081c3ab323cf42fd244":[9,1,0,6,1,1], "group__XBT__misc.html":[9,1,2], "group__XBT__parmap.html":[9,1,2,1], "group__XBT__parmap.html#ga3e1c75bd9e1a502350a2d2098dc316bb":[9,1,2,1,3], "group__XBT__parmap.html#ga7d2b99167edbcbccb7a514451042f09f":[9,1,2,1,4], "group__XBT__parmap.html#ga939a0ab549af87ff1df13642396d5087":[9,1,2,1,2], "group__XBT__parmap.html#gac667744f002bbf8d1d8dc32e36d0d308":[9,1,2,1,5], "group__XBT__parmap.html#gacbdbf85f704718b8680f13e56c618e7a":[9,1,2,1,1], "group__XBT__parmap.html#gaebe875868080812c5e303884551ced62":[9,1,2,1,0], "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aa0329f52f37cdb070e8d64330c7a1b395":[9,1,2,1,1,3], "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaa076c8a9592fd4f8656a078483688700":[9,1,2,1,1,0], "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aaec7bc115136c58098a826d86296d2f7d":[9,1,2,1,1,1], "group__XBT__parmap.html#ggacbdbf85f704718b8680f13e56c618e7aafd6884f2f0271777d1e8ea1db1b29229":[9,1,2,1,1,2], "group__XBT__peer.html":[9,1,2,2], "group__XBT__peer.html#ga0d8d75aed70cb99a925b8974ce8ce4e4":[9,1,2,2,4], "group__XBT__peer.html#ga251d6140c311d7c04e503e3d463adba4":[9,1,2,2,6], "group__XBT__peer.html#ga2d87fccb2ac0c6f71db29ed857b01eb2":[9,1,2,2,3], "group__XBT__peer.html#ga6d62b8bce4ac8f6206f66f8dd34d2532":[9,1,2,2,2], "group__XBT__peer.html#ga793bb9b0c2ee6221c8e9b7d3c886dbb9":[9,1,2,2,7], "group__XBT__peer.html#ga9bc5b54374abccaff888cd3852c85702":[9,1,2,2,5], "group__XBT__peer.html#gad2304165af1ed80fe6d82eb14343eca7":[9,1,2,2,1], "group__XBT__queue.html":[9,1,2,3], "group__XBT__queue.html#ga04f81fdbf3a660617deb9f6f48234161":[9,1,2,3,1], "group__XBT__queue.html#ga368e7ef82906e1c5baefa8083879c215":[9,1,2,3,5], "group__XBT__queue.html#ga48988a7bf6134fc397147b16408c0778":[9,1,2,3,10], "group__XBT__queue.html#ga49cfb91b2f730487bd31f2f9ffb974fa":[9,1,2,3,3], "group__XBT__queue.html#ga60a1272bb4a1463b8254cf857b8d7441":[9,1,2,3,7], "group__XBT__queue.html#ga687d865601b586f65162cde66b944163":[9,1,2,3,4], "group__XBT__queue.html#ga99d1d70f1a59f3f45bcd4e5d35b77f51":[9,1,2,3,11], "group__XBT__queue.html#ga9a868b5c72f70f207999b8a0beefed84":[9,1,2,3,9], "group__XBT__queue.html#gab68bab7ad2af3afc35130971d668c2b3":[9,1,2,3,8], "group__XBT__queue.html#gaba17464ddde9dec336376a2e4e9f3a4e":[9,1,2,3,6], "group__XBT__queue.html#gae44d114ab24c5175b9500f0a80058f4f":[9,1,2,3,0], "group__XBT__queue.html#gae4509298241a6179e0b61667faebe613":[9,1,2,3,2], "group__XBT__replay.html":[9,1,2,8], "group__XBT__replay.html#ga1a034387ae8f039bca99f6fc44518da0":[9,1,2,8,2], "group__XBT__replay.html#ga83842574c19fdf7d056cdfeacd64dae7":[9,1,2,8,1], "group__XBT__replay.html#ga994ddcd8aa680aabc58762d8965f93ef":[9,1,2,8,0], "group__XBT__set.html":[9,1,1,2], "group__XBT__set__basic.html":[9,1,1,2,1], "group__XBT__set__basic.html#ga02fb94d3aa9fcfaae688f61a0ca9cdc2":[9,1,1,2,1,3], "group__XBT__set__basic.html#ga19df8b5e26799112d5aba9f677739138":[9,1,1,2,1,8], "group__XBT__set__basic.html#ga1db2802704edc8b5d404ca204fc5b34d":[9,1,1,2,1,0], "group__XBT__set__basic.html#ga5a1935dab5ad9e2f3c9820e6db7889a7":[9,1,1,2,1,9], "group__XBT__set__basic.html#ga6a7bc28b3bedbcb05e2a60297c9df8f0":[9,1,1,2,1,7], "group__XBT__set__basic.html#ga917c20ea5adb57ca287dd1d48ca12ec7":[9,1,1,2,1,5], "group__XBT__set__basic.html#gaa5ebcac05554bc6c20129b437851b12e":[9,1,1,2,1,6], "group__XBT__set__basic.html#gabda240bc3fa5bc0ac6983b19f4caa5f8":[9,1,1,2,1,4], "group__XBT__set__basic.html#gac5ac26bcb50f5a22c1b2af1f8a1f49c4":[9,1,1,2,1,2], "group__XBT__set__basic.html#gadd31f4f1a5a5fdce54f3a8bfbc37de8a":[9,1,1,2,1,1], "group__XBT__set__cons.html":[9,1,1,2,0], "group__XBT__set__cons.html#ga268b2b486920b5f0a580b3d1bed6875a":[9,1,1,2,0,4], "group__XBT__set__cons.html#ga2cb4e125f22594bb8f7a2726464fed3d":[9,1,1,2,0,3], "group__XBT__set__cons.html#ga5a56bcacbc9efbb918abb6be2f7c8b7d":[9,1,1,2,0,1], "group__XBT__set__cons.html#gaf8bb4c0082689473e7aa16791283a38e":[9,1,1,2,0,2], "group__XBT__set__curs.html":[9,1,1,2,2], "group__XBT__set__curs.html#ga07bc36055121d6d2b49a483608033827":[9,1,1,2,2,1], "group__XBT__set__curs.html#ga0ae677ad09fbf19fc8f9343dcc647dc2":[9,1,1,2,2,2], "group__XBT__set__curs.html#ga1e42bd77295716cac5d3a38f4b7419b1":[9,1,1,2,2,3], "group__XBT__set__curs.html#ga58f50aee97a03985e1af193fbdea92ba":[9,1,1,2,2,0], "group__XBT__set__curs.html#gac4c1fa14c3207e4ad1c9973db97147d5":[9,1,1,2,2,4], "group__XBT__sock.html":[9,1,2,4], "group__XBT__str.html":[9,1,0,1], "group__XBT__str.html#ga10c19e31b7f944a5f426a7d436a44e6d":[9,1,0,1,19], "group__XBT__str.html#ga1271575a77363ce72fbdf65298a49622":[9,1,0,1,12], "group__XBT__str.html#ga17585fd9f6432df9f84db21059486900":[9,1,0,1,13], "group__XBT__str.html#ga2454f448cda4a1ba94409196a2f31d78":[9,1,0,1,10], "group__XBT__str.html#ga2aaaa9b7cdc3e30d0a2b85c7561ad0e6":[9,1,0,1,14], "group__XBT__str.html#ga2faec67938497d455b6ab3ccb69d7fb3":[9,1,0,1,2], "group__XBT__str.html#ga3d0726833fdc157351600358cc67097c":[9,1,0,1,18], "group__XBT__str.html#ga42a82b549ada759cfc7ec4e0999dde1e":[9,1,0,1,15], "group__XBT__str.html#ga5259c70a74df4d63f39e68cc5fe8f1b3":[9,1,0,1,7], "group__XBT__str.html#ga5b8c3f04c5bd47a54c6700c634c48d40":[9,1,0,1,16], "group__XBT__str.html#ga6f0a0c16ffed231430899dabdb426ac6":[9,1,0,1,3], "group__XBT__str.html#ga7b484f038534879efb07619091341977":[9,1,0,1,20], "group__XBT__str.html#ga7e85b04b6111d11c26329b4b6d2bfb89":[9,1,0,1,4], "group__XBT__str.html#ga84523a36aef41594015c8c2a22256385":[9,1,0,1,11], "group__XBT__str.html#ga873b085fd80ad9b0cee0f841f48eb1d1":[9,1,0,1,0], "group__XBT__str.html#ga91672ded3b13340f1dfa6fb5ce64fb42":[9,1,0,1,8], "group__XBT__str.html#ga9d7c43274b5a6339adfc724e2efd0ead":[9,1,0,1,5], "group__XBT__str.html#gaa6839f81f1789acf3865eeade8c23c77":[9,1,0,1,9], "group__XBT__str.html#gadfd8938aaade2e991b8b51bed5aea886":[9,1,0,1,17], "group__XBT__str.html#gaeb745f202229799d900aa3a20953186f":[9,1,0,1,6], "group__XBT__str.html#gaf354d1d051622132c673dde7cfd63b79":[9,1,0,1,1], "group__XBT__swag.html":[9,1,1,4], "group__XBT__swag__curs.html":[9,1,1,4,2], "group__XBT__swag__curs.html#ga1cd81b745c6799a768b8f08c5d4c7974":[9,1,1,4,2,1], "group__XBT__swag__curs.html#gad0579732a4cf176b7812381b85c1df42":[9,1,1,4,2,0], "group__XBT__swag__func.html":[9,1,1,4,1], "group__XBT__swag__func.html#ga008f75ad3c220b326121e44a6cadb6d3":[9,1,1,4,1,9], "group__XBT__swag__func.html#ga08da2ee0936e19da57695b5d99007c64":[9,1,1,4,1,5], "group__XBT__swag__func.html#ga11b0c605fb84243e1c399831c9efbf6c":[9,1,1,4,1,3], "group__XBT__swag__func.html#ga178b8841e1a3e2561f5b73fbfdecdfa1":[9,1,1,4,1,0], "group__XBT__swag__func.html#ga19c8dc8c1637bb0fce94c4bc38b7d088":[9,1,1,4,1,6], "group__XBT__swag__func.html#ga1bb1fb6d0e53c58a6d5c9ceac94339b6":[9,1,1,4,1,1], "group__XBT__swag__func.html#ga936859aae1ee95f8cfb9f32047dc482d":[9,1,1,4,1,4], "group__XBT__swag__func.html#ga96193348bca3b2b0840cbc122d8516f7":[9,1,1,4,1,2], "group__XBT__swag__func.html#gabce3d24a60fbd2e2cbd31df6612418a3":[9,1,1,4,1,8], "group__XBT__swag__func.html#gae5919f7e25c402ac3079d792e033a1fb":[9,1,1,4,1,7], "group__XBT__swag__func.html#gaef55e706dcbabb605cf71e522caa82e6":[9,1,1,4,1,10], "group__XBT__swag__type.html":[9,1,1,4,0], "group__XBT__swag__type.html#ga1cb9298c552ff2834e5dad4848311692":[9,1,1,4,0,0], "group__XBT__swag__type.html#gae08645c9a236bae019fb12ab374dc17f":[9,1,1,4,0,1], "group__XBT__synchro.html":[9,1,2,5], "group__XBT__synchro.html#ga083997cea536a10a81ed9cbdee741ab4":[9,1,2,5,16], "group__XBT__synchro.html#ga0d3469f3d7692423b82786ffa4e30c70":[9,1,2,5,19], "group__XBT__synchro.html#ga20471db1f98e58b75d8d58ed66e48438":[9,1,2,5,18], "group__XBT__synchro.html#ga2283204fd8b68891a404c4101542a7e3":[9,1,2,5,17], "group__XBT__synchro.html#ga2b5f21533b44d2dd61c9335d0db48e93":[9,1,2,5,11], "group__XBT__synchro.html#ga2c8ac4c62ee9788b889dd135db67871f":[9,1,2,5,9], "group__XBT__synchro.html#ga3b74bd7c7a6fbdf1ef7e4a9c9f6035c0":[9,1,2,5,5], "group__XBT__synchro.html#ga44f3eaa106769bb7bd269b95e4dc46e8":[9,1,2,5,6], "group__XBT__synchro.html#ga4633b9357c418a88723d3a11f02b9280":[9,1,2,5,7], "group__XBT__synchro.html#ga4deb9869591b5673738ae97a7d12dd10":[9,1,2,5,14], "group__XBT__synchro.html#ga6e01b815cfcb1b932c9ad5c334ee82cd":[9,1,2,5,1], "group__XBT__synchro.html#ga7faf7010fd7bc47cd1487fe7bfba2214":[9,1,2,5,3], "group__XBT__synchro.html#ga8382820073c787494cafa0634e86c96f":[9,1,2,5,20], "group__XBT__synchro.html#ga90c18013e0a7a19ee22cb668b6082b39":[9,1,2,5,13], "group__XBT__synchro.html#ga9ec2fa18ad2edb1356034fb6c488a9a3":[9,1,2,5,15], "group__XBT__synchro.html#gaa6e5de3feee929f5212a988cc67159b5":[9,1,2,5,12], "group__XBT__synchro.html#gab781e679c968c3a7ae12d32ffa3dd63e":[9,1,2,5,4], "group__XBT__synchro.html#gabe2e83a69fdb54e7513cfde241a8b6e9":[9,1,2,5,0], "group__XBT__synchro.html#gace9e6b68048d41411b38765f614c1301":[9,1,2,5,2], "group__XBT__synchro.html#gad94ddaafcea741ad2cce5b97184ccb1f":[9,1,2,5,10], "group__XBT__synchro.html#gaeaeb76bcf1386f57104957ffe50dd913":[9,1,2,5,8], "group__XBT__syscall.html":[9,1,0,0], "group__XBT__syscall.html#ga1d356d21c8a37c3e19de37d5f7896810":[9,1,0,0,0], "group__XBT__syscall.html#ga36813e215c49af92c8a62dd8286d6421":[9,1,0,0,3], "group__XBT__syscall.html#gaaea21518b543392c869f6564c36cdc2b":[9,1,0,0,1], "group__XBT__syscall.html#gab6d5dfd5b7461f3942dfdd1eda223237":[9,1,0,0,2], "group__XBT__syscall.html#gadc6cc4c3185be3635bb1ef2d9528f67a":[9,1,0,0,4], "group__XBT__thread.html":[9,1,2,6], "group__XBT__thread.html#ga2c6224cb25614dc8b972aca6288ebe60":[9,1,2,6,3], "group__XBT__thread.html#ga51b6d74f9dcfa8d7563ddf6386f9bd89":[9,1,2,6,1], "group__XBT__thread.html#ga737321f05368f70c51d5d4c939b3aa11":[9,1,2,6,6], "group__XBT__thread.html#ga7994e3241b60f854c77043c49a83873c":[9,1,2,6,0], "group__XBT__thread.html#gaac45eea7caeae848b86cf78d989d9aee":[9,1,2,6,2], "group__XBT__thread.html#gab48cac979eebc8c1e26ca7adc7cec0ac":[9,1,2,6,4], "group__XBT__thread.html#gad4f77b979102bcbb4dc49538481146ac":[9,1,2,6,5], "group__m__datatypes__management__details.html":[9,3,0], "group__m__host__management.html":[9,0,2], "group__m__host__management.html#ga074e447602d8c0eab3f442c78a1dfe5f":[9,0,2,2], "group__m__host__management.html#ga0b6fdd80f2f66ac2fec711c712981ec5":[9,0,2,15], "group__m__host__management.html#ga0cc2134715cceaeea82df1c1305fbecf":[9,0,2,0], "group__m__host__management.html#ga1b84e13e966d6ec0a2c013144d33f194":[9,0,2,13], "group__m__host__management.html#ga266e69ef1f9145caea0d507b84dd8044":[9,0,2,10], "group__m__host__management.html#ga2befbe7955de345ce7e02556f21bb7b4":[9,0,2,17], "group__m__host__management.html#ga6e910e3a884ebbe0b8ccae3277619374":[9,0,2,8], "group__m__host__management.html#ga8398f7a284fd227c078e0d019819436b":[9,0,2,19], "group__m__host__management.html#ga8552d95b844f896978eca735cbd73e9f":[9,0,2,4], "group__m__host__management.html#ga906e9852651be55265a7c8489470e1e9":[9,0,2,18], "group__m__host__management.html#ga921573751f861dc32ded07521b63eae0":[9,0,2,16], "group__m__host__management.html#ga94b03ec6fe7c2bbf3c6c7bef2f89ee0b":[9,0,2,7], "group__m__host__management.html#gaa886b8367e635efe11211b2aca5a1d43":[9,0,2,6], "group__m__host__management.html#gaadeccc6816ff0e7809fb090207fa2504":[9,0,2,14], "group__m__host__management.html#gaafceb2773bb9e39878592ff9a9a81a01":[9,0,2,5], "group__m__host__management.html#gab0df78011e11a95b3318120aa950a32f":[9,0,2,9], "group__m__host__management.html#gab52e164f5e7710facf114234152cfe85":[9,0,2,1], "group__m__host__management.html#gac5d6359399bb8c8daba83cf62f47785f":[9,0,2,12], "group__m__host__management.html#gad4daf43406f4dce8caae5310cdf40bde":[9,0,2,3], "group__m__host__management.html#gadcefcdecf27f1dfb19a5c2ac5a775402":[9,0,2,11], "group__m__process__management.html":[9,0,1], "group__m__process__management.html#ga090d763945c2286f7227f1fe069efb79":[9,0,1,11], "group__m__process__management.html#ga0b6f46d91ad8f9e6862e26d8a89d2047":[9,0,1,18], "group__m__process__management.html#ga1540ef18107c4d2387a937017dcf97c5":[9,0,1,2], "group__m__process__management.html#ga180e1dbb474bda1958a409825e2928cb":[9,0,1,12], "group__m__process__management.html#ga2a510fa3957f963a04eaf6b483bfc6a9":[9,0,1,6] }; SimGrid-3.10/doc/html/inside_release.html000640 007661 000620 00000022313 12242224150 020566 0ustar00gierschand000000 000000 SimGrid: SimGrid Developer Guide - Releasing
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid Developer Guide - Releasing

Releasing the main library

Before releasing

Please apply the following checklist before releasing.

  • Sources
    • The version number is correctly marked in CMakeList.txt, in macros SIMGRID_VERSION_MAJOR and friends. Please also update the comments right before these macros so that we keep a track of the version numbers that were used.
    • The "make distcheck" target works (testing that every files needed to build and install are included in the archive)
  • Tests
    • All tests pass on a reasonable amount of platforms (typically, everything on cdash)
    • You also tested to build and install the content of the source archive on a reasonable amount of platforms (typically, 2 or 3).
  • ChangeLog file
    • Every changes are documented
    • The release date is indicated below the changes
    • The release is marked as stable above the changes
    • The release dub name matches the one given in NEWS file
  • NEWS
    • The most notable changes of the version are documented
    • The release date is indicated right below the version name
    • The release dub name matches the one given in ChangeLog file

Building the source archive

First, clean up your git repository. Some files are included through globbing, you must ensure that your tree contains no cruft. You can either checkout a new tree or remove anything from your current tree:

$ cd simgrid
$ git reset --hard master # warning, it will kill your uncommited changes
$ git clean -dfx          # warning, it will kill your uncommited changes

You can then build the archive. This gives you your archive in the build dir, named 'SimGrid-${inside_release_version}.tar.gz'.

$ mkdir build
$ cd build
$ cmake ..
$ make dist

Binary distribution under Win32

You have to install nsis tool first. Download it here.

Then be sure having wget.exe in your path to get the online documentation. You can download it here.

You can finally make the win installer.

$ cd simgrid
$ mkdir build
$ cd build
$ cmake ..
$ make nsis

Check list after releasing

  • Tag the git repository (don't forget to push the tags to the main repo)
  • Push the archive files on gforge
  • Rebuild and resynchronize the website so that the file gets visible from our download page (see Working on the website).
  • Update the link ff-scm-v4-prod:/home/groups/simgrid/htdocs/simgrid/latest
  • Announce the release
    • Mail the simgrid-user mailing list
      • the NEWS chunk in the mail;
      • the ChangeLog chunk as attachment
    • Also mail some other lists (G5K users), with only the NEWS chunk and the link to the download section

Releasing the bindings

Please apply the above checklists before and after releasing the bindings.

Then, clean your git repository and build the archive. It will give you an archive file in the build dir: 'SimGrid-Ruby-${inside_release_version}.tar.gz'.

$ cd simgrid-ruby
$ git reset --hard master
$ git clean -dfx
$ mkdir build
$ cd build
$ cmake ..
$ make dist
SimGrid-3.10/doc/html/group__XBT__dynar__speed.html000640 007661 000620 00000023164 12242224150 022503 0ustar00gierschand000000 000000 SimGrid: Speed optimized access to dynars of scalars
SimGrid  3.10
Versatile Simulation of Distributed Systems
Speed optimized access to dynars of scalars

Macros

#define xbt_dynar_get_as(dynar, idx, type)
 Quick retrieval of scalar content.
#define xbt_dynar_set_as(dynar, idx, type, val)
 Quick setting of scalar content.
#define xbt_dynar_getlast_as(dynar, type)
 Quick retrieval of scalar content.
#define xbt_dynar_getfirst_as(dynar, type)
 Quick retrieval of scalar content.
#define xbt_dynar_insert_at_as(dynar, idx, type, value)
 Quick insertion of scalar content.
#define xbt_dynar_push_as(dynar, type, value)
 Quick insertion of scalar content.
#define xbt_dynar_pop_as(dynar, type)
 Quick removal of scalar content.

Detailed Description

While the other functions use a memcpy to retrieve the content into the user provided area, those ones use a regular affectation. It only works for scalar values, but should be a little faster.

SimGrid-3.10/doc/html/group__XBT__cfg__register.js000640 007661 000620 00000001214 12242224150 022311 0ustar00gierschand000000 000000 var group__XBT__cfg__register = [ [ "xbt_cfg_register", "group__XBT__cfg__register.html#gad60c5763f9eba3371840f7eb5eaccf6d", null ], [ "xbt_cfg_unregister", "group__XBT__cfg__register.html#gaec318f1ce663340e84726e5eb88ae81b", null ], [ "xbt_cfg_register_str", "group__XBT__cfg__register.html#ga0dd096bfc41dc388b5d82a670dfe23f7", null ], [ "xbt_cfg_help", "group__XBT__cfg__register.html#ga20967f829423faa8b91e35978ef46252", null ], [ "xbt_cfg_check", "group__XBT__cfg__register.html#ga6c53f538a2901ceca585e075e43e3c3e", null ], [ "xbt_cfg_get_type", "group__XBT__cfg__register.html#ga754d4928f875979d3fe3dadbb5c3d32e", null ] ];SimGrid-3.10/doc/html/group__XBT__set.js000640 007661 000620 00000000454 12242224150 020307 0ustar00gierschand000000 000000 var group__XBT__set = [ [ "Set and set elements, constructor/destructor", "group__XBT__set__cons.html", "group__XBT__set__cons" ], [ "Sets basic usage", "group__XBT__set__basic.html", "group__XBT__set__basic" ], [ "Sets cursors", "group__XBT__set__curs.html", "group__XBT__set__curs" ] ];SimGrid-3.10/doc/html/structsurf__cpu__model__extension__public.js000640 007661 000620 00000002627 12242224150 025772 0ustar00gierschand000000 000000 var structsurf__cpu__model__extension__public = [ [ "execute", "structsurf__cpu__model__extension__public.html#a5816b47e1f6e0e5f93c1c4b62d79a6b5", null ], [ "sleep", "structsurf__cpu__model__extension__public.html#a962dfab591421956597dcba1dd658f2e", null ], [ "get_state", "structsurf__cpu__model__extension__public.html#a021b77671388c599ad2766a90c81e76b", null ], [ "get_core", "structsurf__cpu__model__extension__public.html#a1268396ff96a74088a72d907a98d9cdb", null ], [ "get_speed", "structsurf__cpu__model__extension__public.html#a139044f6689c63e6939eda189bbfb2e7", null ], [ "get_available_speed", "structsurf__cpu__model__extension__public.html#a1b22aefda22ef2008d3e766b62d572ba", null ], [ "get_current_power_peak", "structsurf__cpu__model__extension__public.html#a3883e31823744ed91d5d8b8c21e74cc0", null ], [ "get_power_peak_at", "structsurf__cpu__model__extension__public.html#a64282d4497eb33d17ab05decedd2d4f7", null ], [ "get_nb_pstates", "structsurf__cpu__model__extension__public.html#a1c11e37584a93400ebb83bf9b96a5e03", null ], [ "set_power_peak_at", "structsurf__cpu__model__extension__public.html#aed1cc6b4f2b91715d103ee5b9f233159", null ], [ "get_consumed_energy", "structsurf__cpu__model__extension__public.html#a5e57cc323b1c567fc962402d62dc1fd4", null ], [ "add_traces", "structsurf__cpu__model__extension__public.html#a82f84497e5f6ecdd9a0975aed17951a7", null ] ];SimGrid-3.10/doc/html/pages.html000640 007661 000620 00000013020 12242224150 016705 0ustar00gierschand000000 000000 SimGrid: Table Of Content
SimGrid  3.10
Versatile Simulation of Distributed Systems
SimGrid-3.10/doc/html/group__msg__synchro.html000640 007661 000620 00000026074 12242224150 021670 0ustar00gierschand000000 000000 SimGrid: Explicit Synchronization Functions
SimGrid  3.10
Versatile Simulation of Distributed Systems
Explicit Synchronization Functions

This section describes several explicit synchronization mechanisms existing in MSG: semaphores (msg_sem_t) and friends. More...

Typedefs

typedef struct s_smx_sem * msg_sem_t
 Opaque type representing a semaphore.

Functions

msg_sem_t MSG_sem_init (int initial_value)
 creates a semaphore object of the given initial capacity
void MSG_sem_acquire (msg_sem_t sem)
 locks on a semaphore object
msg_error_t MSG_sem_acquire_timeout (msg_sem_t sem, double timeout)
 locks on a semaphore object up until the provided timeout expires
void MSG_sem_release (msg_sem_t sem)
 releases the semaphore object
int MSG_sem_would_block (msg_sem_t sem)
 returns a boolean indicating it this semaphore would block at this very specific time

Detailed Description

This section describes several explicit synchronization mechanisms existing in MSG: semaphores (msg_sem_t) and friends.

In some situations, these things are very helpful to synchronize processes without message exchanges.

Function Documentation

int MSG_sem_would_block ( msg_sem_t  sem)

returns a boolean indicating it this semaphore would block at this very specific time

Note that the returned value may be wrong right after the function call, when you try to use it... But that's a classical semaphore issue, and SimGrid's semaphore are not different to usual ones here.

SimGrid-3.10/doc/HelloWorld/002750 007661 000620 00000000000 12242224152 016036 5ustar00gierschand000000 000000 SimGrid-3.10/doc/HelloWorld/CMakeLists.txt000664 007661 000620 00000002675 12242224152 020615 0ustar00gierschand000000 000000 ### This is a template for building targets with simgrid cmake_minimum_required(VERSION 2.8) ### Need to set rc ccompiler before enable language if(WIN32) SET(CMAKE_RC_COMPILER "windres") set(LIBRARIES_DEP simgrid ws2_32 pthread) else() set(LIBRARIES_DEP simgrid pthread) endif() project(MY_SIMGRID_PROJECT C) set(CMAKE_C_FLAGS "" CACHE TYPE INTERNAL FORCE) set(CMAKE_EXE_LINKER_FLAGS "" CACHE TYPE INTERNAL FORCE) ############################### # Test the build dependencies # ############################### message(STATUS "Looking for lib Simgrid") if("$ENV{SIMGRID_ROOT}" STREQUAL "") message(STATUS "Looking for lib Simgrid - Not found") message(FATAL_ERROR "Simgrid not found, reinstall it or set SIMGRID_ROOT") else() link_directories($ENV{SIMGRID_ROOT}/lib) include_directories($ENV{SIMGRID_ROOT}/include) include_directories($ENV{SIMGRID_ROOT}/src) include_directories($ENV{SIMGRID_ROOT}/src/include) message(STATUS "Looking for lib Simgrid - found") endif() ################ # FIND TARGETS # ################ file(GLOB SOURCE_FILE RELATIVE ${CMAKE_HOME_DIRECTORY}/ "*.c" ) string(REPLACE ".c" "" TARGET_NAME ${SOURCE_FILE}) foreach(target "${TARGET_NAME}") add_executable(${target} "${target}.c") message(STATUS "source_file: ${target}.c") message(STATUS "target name: ${target}.exe") # Any targets need to be linked with libraries target_link_libraries(${target} ${LIBRARIES_DEP}) endforeach(target ${SOURCE_FILE}) SimGrid-3.10/doc/HelloWorld/HelloWorld.c000664 007661 000620 00000000320 12242224152 020255 0ustar00gierschand000000 000000 #include #include "xbt/log.h" XBT_LOG_NEW_DEFAULT_CATEGORY(HelloWorld, "Messages specific for this Hello World example"); void main() { XBT_INFO("Hello World !!!"); } SimGrid-3.10/doc/HelloWorld/README000664 007661 000620 00000002061 12242224152 016722 0ustar00gierschand000000 000000 This is a very simple example to explain how to compile with simgrid. 1) How to compile an example: (HelloWorld) - Run windows shell "cmd". - Open HelloWorld Directory ('cd' command line). - Create a build directory and change directory. (optional) - Type 'cmake -G"MinGW Makefiles" ' - Run mingw32-make - You should obtain a runnable example ("HelloWorld.exe"). 2) Content of this directory - HelloWorld.c The example source file. - CMakeLists.txt It allows to configure the project. - README This explaination. 3) How to add and compile a new example - Put your source file into the helloWord directory. - Edit CMakeLists.txt : * In the Targets section add those two lines: add_executable(TARGET_NAME SOURCES) target_link_libraries(TARGET_NAME simgrid) * It creates a target called 'TARGET_NAME.exe' with the sources 'SOURCES'. - To initialize your project, you'll need to run 'cmake -G"Unix Makefiles" .' - To build you project, run "cmake ." - Run "gmake" - You should obtain "TARGET_NAME.exe".SimGrid-3.10/doc/triva-graph_configuration.png000664 007661 000620 00000164571 12242224152 021667 0ustar00gierschand000000 000000 PNG  IHDRbabKGD IDATxw`TUoL$TAZ(ADT>, *bt]AiRTP i %PBg{!C D~es}3ss$IX`/'Oe˖fdd$:7|sRPPP+HLL _L,^~˗/c413`,XPUJe[>S2V@FFFF%$$7i;&&s&mYHIIgeذaݻ۷ЬY3V[PԽ}k5YΝ;(?:8˷lR'X,Z!?S rDLFFF.`ԩG׮]t0gΜru׬YCVtvru|M]9r$CVo἞Q DVt։歷"77A 6l& ^Oxx8qqq.z;w#FJϏA_}[Uܪ[n{z<==:t('NpSqzի;vtکwislӦ ׯ'22!C8;N:WDD#FPǟ.]2eoETuVg^D%fLG}D-Xz5&My=͛73f}Q.\HFF .9t={M6,\Μ9CBBNrr2L0DRRsaĈڵ 3fp8Xt)T_%G%<<:tROdϞ=tÇVYd m6VkWG;O?ĠA8p 7n3fΑ#Ghܸqi޼y 0M6LEDDi&{1ƎˢE^#''fh>CZjEII w4Q]Uپgddddd~W>c N<,2eHGu۩S'Gu ڷo/,;|Hv͞=[rsssݻt}IEEE5رc ;^}Uӳ\KRqqLESN҈#$IB Q]*:}ҥ"l6gYJJI&9˪;N >|إ^fͤ{:,,LڵKSNI O]ʂt(:rssHVD]φxyX,$''3nܸ[{F^Xr%۷o?_J"##8s 6+Wxrmnݚ".\ȁs)z͊+رc7nW_W^ŋۗE}vmĉ)..&22Bk`֬Y$&&2l06oڵk߿?ZiӦUK0c SO=Ν;Y~=FWѣb̙fN:Ř1c\x#1QWv3!;b2222  ĪUXx1FFM׮]C޽&MD~;wK~_|A- LJ=ʆNTTӧOK. 4vqo߾<39r={Y 47gС:t~Uuuݾ׏~~a&M{n+jrJG~xW9s&͚5Y},Ye˖ȑ#yꩧh߾}eVD]τ UgBvv65bkud~cdGLFFFFF(((`ƌ.^;Crr2'N^zuojRFFFFFPT>}e˖'XBv䈘 X,f3ο翋)((J΂Ҩfb0s1{l8wɤp._Ljjj{"Մ(6#&##ٳ۷xHHH 99{4 & OOO<==1L.z=@ @ApssCѠhҥ5? #&##!// ϱ3Lmۖf͚ѨQ#hРAAAWܫȎ͛/Zkw]t!44PڴiCFP[Wd}?$999|'|'s0`C w*7dܹ΅111߿_~\ݩSlٲ[-g'22N_ת8jdMeddP0}t4i`РA_ ֬YSO=r|}} qaܹu S222-[ƴiHMMEŴih֬Y]ETTT]!##S1̘1c7n 2Ǐx?v!A`׮]β?AxלegΜA6mNM[oEnn.  4('+!!^z `Μ9/!!QFZϏǓY^VZhӦ ׯ'22!Cۺu+ݻwGСC9qD[o͚5N!!!>ܹs1///T*~~~ 4|6n܈ :t}tzԩG׮]tl^ոUlْ0l6 |I,s!Ŝ>}Zj޼H^^^_]*C2Lo,1bnݺ9-Z$T*)//O$I={&I$eeeI?!%%%IIII˗N2ErwwBBB H[l$@ZfMm޼Yzץ^ڵkW_I!!!Rxx-K Hƍo.[N ;mݺUR*Ґ!C-[H|ԦMd2I.\qM6I HcƌbccիWKVD֭x@ڰa/H7n^x)33SRÆ gy3gH H}͵ZԹsgi޽RVVpBW5nյ*i4$ItUO6l-GDvdddZ/y{{KԱcGҥKuR0l0)""BRKz饗$J%K$IcƌtFGL$W_<==+lʔ) m۶ͥ}{1 㫬&uեԩS .Q.]f9RRR$^/M4¤K(:>,U:b }֙={t%IHFQ*((pѣ.wUTfK B駟zH 222զ݇<5)##sWfر ֵZB>}ػw/%%%9r̴ijK޽o[;}q)kӦM{݈je֬YmшNcǎ:u9x #Fp)oѢ"8ѣQ);jTL? z<-Zx ,X@BBM <3X,/_ϒ%K;v,nnn.uM&.eM6ڭݣy衇2d[n/2dNdGLFF#55ȑ#Yvm/?2{bgbcci׮~~~уX?Nzzz9G&8&Pzn{y׿m۶qabbbR2rssEB2ٌ(Kvvv/W/ ʾl޼^z1k,BCC wq:d~~~5ŋn:2228qbZm2BqKC.ƍbЮ];{e^dGLFFj#B>}XjKD@۶m!&&էOgF!<ZEEvddd*̙ݻiҤ VBԵJ DDDO?>|` Vr6EՊht)_n-tԉ 6>}Ǐ;_t:Xv-YۉQ2۶msʱcǪ2Zjży.Ջ֭[3m4vQa4T4n5$I3g`XrsZV̘1}SOsN֯_ϨQCu3k,6l7ofڵV˴ij\_b̸q**/ҷo_-Zٶm'NH&MbΝxyy裏VQѸg۶m,[ ///ΝKHH?8ŷLRNjddddOiӦյ*9'NTbcc]o^5iۥ(^z RPPڔ)S$??r2o^YW\ "t:h4Jv%W_}u~ZJ%F#jJZf.;֥ޖ-[nݺI:N "?~\{խ_;6kLZpԷo*WMf'%Z-t:SNn&RtttmU敍[u~!IHD`0H'N2w/Y222w111ۗƍNkdjl5jٳ^6K.駟ɓlٲՑʀ2{lfΜ);aP 1c}LJ/;ƓO>Y'OܹsL>CNL#Gddd#Gо}{ZlɱcP*umPRRѣٿ?YYYxzz9sZ"22;wҵkWVXQQR22ws/NN_j*7Ɣm䈘LRXXP?R2222c̘1ha?n$&&s螃OШQ#Z-FΝ;3sL222~#Mfԩ-#gaƍ2|p P,XݻsqYlsӓ1c!C5u,X@.]8|0'N/?&,,?#GܻX/uj޽L<#G;Jg!>>VvoX,nWյ߃={0yd~aVXbzzl!#Gm۶m)###s/xwj|<~رtԩ\F|]6?ӥKz=SLx dBN\\ڵ+:̙[oEnn. B+]}]t:]60LKqs?5jj?~|߼y3<:F1 uLHHW^rbw{ULL ={tZ[fiժ];z(tЁKΧ~Jdd${q:eO2>-Zzj&MD=z43fptR,Ie60LwDBCC0a&$̙È#صk999|W|7?A\6>,,,gW_eݺu_rWFJي49&##sˣiӦްbaѢEWC=D@@[nunاOx7Y~ `ĉ|YѣG퍧' &MTg^^+((py UiӦ 8:<<ӦMh۶j?]v@iy7yQN=># @ٱc22Tv P焌̽ov`{պfZGqQ[Z.d2NXM6%%%/((/--~e֬YmшNsFN:RW:-dggs1g{۴iS)**_`0СCVGFFFNPFjaQUrrrl{rå\BnF.^Rn0i˗/gѢEs=_ٳ֭2=[vB {yy糕qs$JZo22w +v]V: ###gGէOlBvv-T*zQS<==Q*DGG3a„;j@޽ٶmfٙ'P(ѣ@\U,_S2ydgYBBBuf3%%%.Q+WzΞFz{ ŴiӰX,DEEUaСCq%DQt^ͭѨ.:bcc e˖jV?(..oEDQjb4]+nZ oooڴisz8~8[cMddddUn}KBAdd$}ÇI&]ŋWX͍W_}&ڵkǁ9s&ΩΝ;׸Ç&00JO<]'NE7I&Uk{/(BCCh4vZ4獸rJ^|E=J7o22VΟ?}WǚuԩSYlW^kUdd~wDQDp8())#222,2222fOvdddidGLFFw,Mdddd{y1o޼U(!?++W(8jJ{慎ݥ[9~Hk#sS~}IK7cW0x;ed9GQBB6.Y¿~=Wo+#Stgi(N-Z{;d󩇧 +ڌK/ke==Ff[7~& #[ҬW$ Qr:xڪ) u=cdedZ4ᰓmZ#ePRXĚLylV[R*Ѫd( Tj57Zľ,u83ֺt5o_C[̨BsYW37]RxeCl~LUEӬ 'F// :TJH"rˣ\~#^ 5'^ÊLnNVS(8ʥ ( 4>#G=7sVD}+:x`ǚzm>ڇgהs!"ǏC-[&nbq:KTTQQQQ"JdV$IE VVofaٰmlvTJŝ&V R8+ˏ , +-t:=cǎ%11dbÆ t\|9׿g„ o__~!##ooo {g|ՆAAA$''W:5Y[vU*6hhبydgse/]Dasj,!pv*3?&c*ÍpfE}D⇯:7H P+gq7blz2 oĮ5ja,<4L5|\i؋~C7J%*%#[f۝Mm"]:?oUX/#x*EO&4 aI%5߇֝Fi]G˗3xr]=hu$#'v-\ΎSYn~ OGK՜v=PZ6ŠP};68N_UҰHt@F&}/ȍ{] '69jZW2ҁTTQҏYq<70;='ݮ'}m #8o?&enۥ˸b$=X`G"3|0m uz,m[ILy_Hg{ -4rB>.$c jwNUeo5ٰ9s]̔asH<8!_^i[kɗnՕQPb~e:۷ȲEkBqO;et[ʰخ1֨bbbٳ'޷O?1h ƍ),,dƌs7nk62e }-Z`L4͛3zh͛ǀxٴiC"wӦM]#XK`t:%%:MB}8%6nޕI9铧hъ\K ѼukJJ6z>>C#iByҭ4hv>j0åbiVTHjf hWVV\HjVW3]>3g֊@!gNp,"'ǓњvgԎE$ t *'F;U2VQ 9DB;p`T&p i\\_kSu L/_"DIbWK{4RA%Chڴi*O>￟;.];g]_gDmĉ|YѣG I&וɩ5k]t/tiӆ-[VoqѢE;˚6mi߾=mڴ!!!m퍧' EʨM)3ߢ2Jlv7j^N' Z$M(pWyJS~Ġ/ͧqa\ (utNrnÜvNp> lD O$~x `c5jO|P?gPy]o K]1G!+aɜpr.* |=?f:5*2qk?E{Ъ$*Jv<^D;J<i򹼻A&?ΰA$˵qwOs[~ƾȴay঵^z>K_rHKCӠŠ݁Bhs[}Z0"AhuHѵ?a7t"S>ŝ,̈́طC,T$CO>lٲ*L& rӫcv;MfffJ0_&˙:u*'Ov%$$Pԕ*C2T r _j$V)kuۀ ʗ) T*}H\pYkSIc>3GN`qsӣr9# qtCg 21bNVg|R vtzVZdQ Nlޙ IfA\[;}T U*]WԜFң0Ѣ+d\@r0JJeiOJtv$Q1#tQá̱y( >6GL?ɡ})_I"|giiX+M7$S?$r\]߸UM-*iȲ6iD ޚmࣄ uAR\RBA_Mu_0!Z%@N%j4H86;W=|MK5EJsSA'ow Eh&U/t!G>B@tPS-p.XQhаQfcL^ڍ'YDE,[UG@n䑱O1nH|8Eί*PM6orW+:vHXXk׮eƌ(󧦦}vƏ(ԩ6lӧ9~K{PP6mBErrssIHH־d(bZ1]P[\]V[m=t:]ح*nV)͡ /4Chժj}D uPZU*THƅ$=sgNs$ьBGK#iw#<ՎB&_^ApBhD.(^sZW-"5>^h%$3#QaZOzr2WTp\kM%©j `* ^n@Qt#g_ _#z÷$IW@=w-5~s_ROS v EYٲ$9i8vx'q-2\zB'^_$%4h0Vb9'Zҳeo2=995:"es qgNs_hWMYh깗1)L'B xs::~MB8u$FjۃG_A8bb岅|/T]8WfQ˗~ys˵/\HU2/-۸]4hYve[D t¾SV}> )?p0,7oeȞ[n|Lc4i҄kײxru[nMQQ .SNhr]eԕ*CP*H%% J`ۑVRQ;ǘ"aM#!~U\%;E)?H\ɳS))H+&Qr,lc5DL>U(8s kUt @aDNkI g.fP"^w]>*Zl7W|[#{K^R@Vr"GIޣۍ4J\A2n꣔wkPTt{~bJ@7:7Vql;߮)6tTn#)&;%2 !K V(sN~ں ~ʷy\՛eIh-?Ӈ9~W!a#|"2ȏJ3.8KW0=GCkR\l/]Qwjֹ!dw\hֵ+SI\-P٣>sc :/-k1ڻKXFrFr8u g<#a7={ lj;:IќJу)?VWO^eDL`dޛ|YqmgR(BO}_LE;!\ ׃#߮^_=vcqO|t3[ɸ-edj /@Ν?>'33OOOXnv?̙3yQՋ%2U <+W믳j*5kƬY۾}{,Y̙3;w.L>FS_|QQQhgڵtDEE1}t $996nQ U$tj-VՎ((j ZUnw;F֑ͬܵYE%:Dž]hfRPcpw/@vh(đ>gŁNZV0?-c|QPQ+$;%6Vϵۏ B`ӑX^d!RDV+&yj>ܾ(o!e"\8}bц ^QSĕ__`/8~ΕP,3A>&tZ JӁXBBAƘbb |2m t:y?af>#Ӯ@sMye+Va y?b6'R/q>݂ ]8y!JDZҜ,Q*XF~mV5=+8e1WJ(u:nb,eRB J()*tZ: {ֲ`U0Vم۪FDfJ0Q IDAT~>V[=)k{]Щ<:\UWAJԶ1ɯe5mڷ_34SM_ǜ֙eTLp)EQqEEd_. wAʮ<Yp}?$= j5G~G 2\v!]zK_~^pt8¿_}N7Ys<+f:يU3E%l4RWob'grۣ\75VAَ'G*il`775TŊ *gնh,+f } *M@"RQ+dH̦vb{5{=?m+ez5rd?Ɣ8eLW/DȅR&MmV;jϩkHK 2 9z>=o[˙0b0\lR$R_ߴLȻ"Bj,h=qX(O͆/?d#juQ"b4[R T k4=/*V9HIHqqe-KTZI!bjos:]e\<}&BVm hL|=nsX,J/s}syͷЖ5o0uTx">,\2n&A*W梸bFr )%TQд8mLv)Iu) mm'k:ڋU@qG[(h^"k~)Q唪8;;3gL&C +t%c Db' ݯlãhvJy2 <.&sgR2;aTʥ( H[Vuy9{/[[uM$4dj| ;LTR_GHosh"&^rΟ?_Myy9nnn///G׫]|45\i=Z Rή?*wiZ8;;`2QX#ЖAGUzhqwqBW[ס|:lΒVStH_"A&QipרpV*P˺h^J!aסoh'9;Co0P]UJј,h++K{; 7)7[(o;mc4j?>&/>*=[OJzve2:lJP(UxtjV(R⤐"şw:駯}(jxjosFDLze: UUVvظd2!JWz̿w*pCwoY7'2sihgP@/w$iM ZZ&yM7]yoos^B-F_߀e.7?pkZ4G7|wyBcZ1v?%%%>|\F!!!S__ߡN>ucǎAzDՕy',,za BayoD^GR~z-pvvnƔH8}4TvKĢnT*%**;/Iu%bSN?駟ˋ3f8:,AV+ s12d'O&55ѣGL& Bѡi$ wy'k֬[>x`ʮ4o..A0G!67e"xbYr%w֭cَKnx&6l֭[5k:QQQ:u JEXXJuu>@\\ׯhoG1cƴ{[ Bg عi1+VP(_¼yXlK.utXpC+((7))) 8BGdd$\pAT*;5quue„ ݻ׶,&&< o"Mw7C1D²epss7^ 99?WnaVqvvvtB08;;JCCSN%$$ݖnl{ų}~=Mu9G&:Fb…|7:tO>;ѡpED"p=p}Qnj3Xp! rtxbfNJ```#??Ǐw˱lF"+YYYb0D.J^^ClR)##;vt\p!:nFۻ7zW+ֲ~z {BuӍ#֖PG};WfРAw]Tdo߾L2O?rG%BR  XS)SɓӧOr4M?qqq 26&?rA~'$00?CmnD ۍ-^ yf3.9:N{GfϞ=.ܺZJkR]]MqO4[VYYIZZNbdZٻw/ٴin}~ĸBܲX>c~G石uVn݊{/cԩ07￟  6o͛Q 2>A_, /_Fa4帹T*nfjjjBako<í^py:2(lgUTTPRRbfC.jjz?;2LRUUhDRK%7 jkkuhZޛޟ^?Vկ~a][-5孷^cǎ|__ɓ;m[ng\δi׿6c<0!\]\3 &0bĈNpTUUqiΝ;Gmm-7'OsvfBN:Evv65558;;Fv ERy)..nШ^pY* HmmmJNNf۶mNNN3bBBB-v3d6)**ԩS\pZ-Æ #""ww+$''~̙Cdds7?f3}9vf„ =p3Ur9ww|lذݻwO||<...DEE1fƎ˘1cvhqqqm&bW%))$7n&L`ƝI~~>fߟbRSS9< |T\\\ӧOzUWWs) ՕN8ٳg7n\,;{,W8t˖ҥKWL`/tHŢEXh/_f޽$$$ٳgٻwι 208p $,,Gڻ 2"!!<<<5j'N$""}._`@Tb2eСihATbXprr^BFC~~>&'`؎ueT*RvJ]]444hD ؝aDr %a?~ۇH$hZF͑#G" :t:* U/]t رc`b`0騯osSUBV  4 j^^ ZݭVĉxxxUQZ,Vuuuk0t: ^^^ ]R;a4Iڳ8p5W?C@0M%h )'''459ヿ H:ٙYf1k,MvQRRR8t)))\xIӛ???ᄒD}dVR… yǛmHAA ((wwwl$WV;$''sQ)++LFAAR(//Gے=MT*?~pݩsriN<^חIzҲfk/^ +++4hP$;JZ4Fqq1555s9prr"44Ç#\˗/۝_.3l0jjjHKKĠAÃd9Bxx8ń0vX8{,'<}CUmQT XXX'B5rqqaL<ٶgϒIff&dddIaa!NZĉQ($''sP*3`JKKmM"b=}4um FAQQŶB"$l6fveEj5۶mG4AT(f,K}TUUQ[[^*++),,R"77\tcbb3f 111=C_X.9kfjPi z=:V]pqvvU]ϸak6ڠrbcc4i.]⧟~رcRëcBTV Nt:`ܸq7v؁NϏTeeeXVBBBLEE5ߏ[Mbb";v@os夫OruuaI4&:Rwww*++9v]/8Tڬ-bOjTWWSWWg+ZSUUEaa!#ŮǴ FVUPPKlATopZͰaèĉm ܐM`` nnnddd H۷5#Xp!3gd֭RZڼ43 cǎֹj}$++,֮] 4~>q1m4Lbn "!ztz4gLFLL qqqDDDtSx"w}7Z???<<<:Tj"HZ<%%%dff2b[ϥKl՞RYiJB"PWW\.`0t()=qcǏu9cG$aV̥Ko߾z&OqqqTVV:t2k???JKKbСr[C"c4[iXl9qJΦ*'NPPPGzK!U233QTIKK#44K50.sO|q ťetlFyqFRѯ_?ǔ)SYV9|0)))>|cǎqq?'|b̿7o!!!1";qL4QQVVѣGӧ555NM|5.]Dzz:VVK}}=yyyTUUڎO>q1"??//kVhj}szLBcLVVV'a?Պ` 33Rɀ%&Ç; 00K.q)f3NNNQ__ψ#l d+//ٳk0`XꝕEZZ#GD"!,,"<AAAm |}}X,IFF[W׷/cG>FH@. SXn]f޽ݚE"Jhh(/1N>Mrr2?III{8*D"vظq#3gdÆ 6Zh%%%؆,G\Zkj;z8[Zf̞=ZmYtC&wy'ӧOgݺu$%%1j(|M^|V57۵jznnGwuueĈw}^bKJ7zW^c7H${W_?W^!!!u@ m*(( --MU#﷦<݇ztsysvvfŊ̛7|$F͖-[vtx7 mjm]#ɺ[roy[%V1qDRSSmX\\۶mkq&sD"&okZ-9:ڿ Ӡ~=#ٻQz>>>ڵ~5k0k,mF\\CD"& ϩ lgd2V^+| ??#ÇwthHAa\߶.d^7TG}DUUk׮e$'')宑HAay{S ,k׮utXHĄ6ztAJOV/ɉkux={uD"&)?? 5X70`˖-c͚5*M$bBƍǣ>0A:Huu5Ǐwt87'x'xBLuDEAᦕ+;$H®HAADTM VSSCii)΢͘  tQ"&tXJJ +Wȑ#EAn ":,==T̙3 MaժU6Vggg ƍZtwy^HR~G$00R73gdӦMtvuMϯ999H$>Gi":jb20LHԂ ]?f۶m^NǼy1cγuV|||0am٪U0agΜaҥ|׼}.;j)nV\頨h#&tHӷ2\<2 ]-66^ |<_%ٲe s Yd gfݺuv9y$FK}=wexqsssPtGmRQQbo߾EᖰxbMg}F]]mɓ'{qwwG0qD񪫫IJJmٟgT*}Y_#""0a777y饗'>>QFVׯ˗/muV$ GmviӦfMx jkkݚѣGH$vU~!^{Ͷ,##DҥCDL萴43fCAes= [''N0at:_}۷o'((iӦ\)>>Rɴil4iƲk.f͚[n/$'''rEm+++yWꫯt{۷/~~$&&SOwcb ***Z;vF4[&˙4iRD"&t\tѡ 2/2|w}L:u;汶lwމZOM͛>}:g&!!z}m9r$j_W<3;Fd2O<k׮ƶg}+/[j bR{M*2i$X,ݻŋbs9))(\]];t:B$bBV9v옣CAeX,q7o]R"H{RCC;wlz# )))̝;׮ 300XkJo[6}t***8}45kb/Y`;00ŋj*[ܷ8<`t:^~eT* 3)))StuHĄdfzCAe@ee%F>Zm?VH]]w}mZ .NblojAWWf =<<lq۪'7mDii]dKq䷿-?OuM2z8@RR#GϏn$Μ9CII qqqݮN]H$7bCX m۶VB*"Xt)=Xe&O8h;RfJJJ0 v%Pv.^X:ħ~1bDq_LJ˗3oⱷlBTTAAA-3f ˗/g唕FLL 6m⮻Oݹs'osAP0yd[&...]'Nòex޼y< tx9~xx;\Y/Pk,Xn`K/_STGygUt܎"JĄRAAz۪@ zZMeees]}~BMM TUUaZjft:EEEzT*~~~xyyEۦH$T*jT.o{ ZtYx׹{qQj"nH7n$33[&sZdggȑ#ټyss]y~BAA %%Lf3 ** &0`ٽ{7Vرc>}:yyy ??ߖK\\}U\Y !pzطoƍ㣏>rt8#1ᖣ`0tNcΝ;w9sT*%==[RPP#<ÇIKKcɒ%M||<dvm\.Z$%%qYڥ#6 e˖lٲvz HĄ.UPP@ee%TTTD@@TWWSXXH]]j???x2UUUquuMya6Uj|}}D&]S0dȐ>>}Rxbbbl###QTܹd*++E`4 !6665Fk$ AAAq9jVA1DLR7n$!!3fB`ٌ3={DEEZ3}tJ%|TWWBvv6~~~o>8@II nnnDGG3uft:ŋەMm=''ZXɉ3gǹso:t(nL>>>X,Ӊf޽5. \D"&t9RwEXjwF*ʂ lݺD|||8z(?0111;w{~G&N?/^h4Oڝ.j`WTTTDii)nnneSXXh]WWG}}=Jٱ fdl۶ZƏό3 k9;;c0l1̜9ޭAz9 ]O>!qrrs$ VLf7FbŊfΝҥKmꨫTpܹvqA|hM[>}쎭H$׏2 >( .$==kײc,Y=444تdۛCA9DLrRh4H$444hlt:\|jq xb<==Ȯ4Ʉ o< +Zz4MNNNghZ$ P[[Kll,wɓB@@:sFT*mR\шbAR ߡCX|9溺 V˘1cxǙ3gNO?OyyyhZt:aaa̘1UVuyWbb"W^[;{6F"1G :4hyyy3~xc 6 bС@XX\xf=;Z"HUUJ¸p{~!H(,,ĉ3rH yyy| dddKTTT˔J%FbԨQWPyd275wuuUS pJ>k֤ ""[oEjj*JI&ە5M1a~pq<<3vUׯ7… ?ojo HOOȑ#vNJݝ-[ŷf~qI{1VZũSx7INNOOOf͚|7K.+m>}bdWݳ"֣ HVUUU˗/hMqѬ$MObb"&Mؖ]v1k,غu+_~%999L8/mxYbwcƍ@㠫k׮`ǎ\ps@;v`3~m^{5Үu:K.w%;;_||"""ٳg_8|0/l<쳸bNNN{]DpKjjq#L'P(:t(...e]Y(j[넇yf[رc ߷&zlذsmkHm^]2o3vXV^m[6|fsCvF}}=| 'N[>sLfΜi{=qD"##>|8NbĈxzzT*%]yϺ(nI2 V{CL'䄻{ ΝkYHll,{ݽYtRΫ9r]AQ&Lh~#FjQնsug%1AAp777Z-.\hw[Nb׷:___***억]*b2:cUU>J--(WWk$y-[??@jj*@cbg%  mV2Ƃ Fն͕2a4l6RlmAő@EEEݑJ4[WRRҡ6fע ٺr&rl$Pk֬ᥗ^ԩSYg1a6nhғV+OǕ6nc=ƞ={캓_M& 6nH^^))):u+An=/2<- SUUDb`E`ӦMͶUT{Y"n9zL ۞|Dž LL&lٲR… :t(rgQA>ǏgŊ?!22> 6_ѣGۆyIOO{%>>72}tT*/rop!~a͛C*o1w\y뭷t;w|_R)ӦM?'##ڵkOm;l0IIIɓ-Q3D"&tLEEiii=z3gPZZlbPYYi[wyۼNGzz:ǎ#33 <ͥNח;w⿚b!77-[`ZY`fPPJ贠kAz{0d/_ί~+~RUUŦM뮻;عs'̙3G}O?5r+u]]Cqwꫯ[oj7\dd$_~%_5̞=~/`РADDDͿx'x;v,fjxg!:[ߐǯ_D4'##}v-..f߾}8p܈fԩOuu5!!!dgg{Ǯ]"44lyW[=浾8w6~7rʕ+`Μ9|wL4ӧGmo>bbbf„ ;v]曙 l)**omnI3wĪreCQ>׏? W.?ĉŋF ѣGyᇉܹs{ʂ "##w}c>v/(( ;;Y\v 񋊊(--mqH$ ))A5&--`<<<8s Fggg a̙6} BW7`ԩx{{sE}YpD"&tB9rՊL&cĈaZFT2h FI~~>999B ,,<::w]]uuu(kN(//'!!Y{{9233ٽ{7bd2r9 jMwwkArΟ?_Myy9nnn///GDL2,\ŋIee%EEEo>$ :___._Luu5س{x{{SWWgKT:&L`)Jv]]]jףhZ @tt4=Ν&xzzŮ] _~FT*mIшbnAÕI ]O$bB:t(%%%$$$FFF/^$..C6l%%%СC)((`Ν 22Ο?ǼcGKҖr6mN;"Jm֯_b{5V˔)Sشi }Ann.QQQm&pW.oi?md2ӦMcڴiL&faaa@c5iS5 pprͥF=VՄp%[pe4 )"""ׯ__ADLpP&Nٹs'Z4jOQ( :nn,Az 'ˉ"**)ɚgݜd߂ 1ő  DLAAD"&  "AAp  8HAAD$b  "1AA  DLAAD"&  "AAp  8HAAD$b  "1AA;:RPP^'44ejj LlFQTT^GR燗:\z=VDJO>x IDATw:JKKqvvϯkn  C$bBڸq#\e8@JJ f @TT&L`{n8@yy9Zc2}t?A~~-! חs=t:[뮮% * =JӱsNΝ;ǜ9s@*֭[)((Gäd&>>2|n6V\,HRfΜ) "1G>}Rxbbbl###QTܹd*++E`4 !66.jb20LH٤ sD"&t~Gl9992tf'''Μ9C\\ΝoaСWL.oAg}H$׏2 >( .$==kײc,YX8+ZqҥQUUԩSrAᚉDLQ~OVE"P[[KJJ Ʋ{nN<ɋ/!!!<*~samw@AHbpiCHX[OMml5O>cjirMibͦb*4FLUA6tfXg~c*Aq΁;}^:~߫VpMEGG_v; ZmgggΜ9sB!$b ɓ۷VB~ѣG3~xj$((s͊?|w<#7dB!DoH"&n(Fdbـ1c~~~m6 !!!H ͛7}vj5s%66.LrrUc@h4qB!DH"&n%=?-0`&L`„ WlΎI&S ²md-,B2G͍NSV^+<;v)9s̝;o{bܖɕ1oo/BS~-K./r˯k;F[[M鼴… gffޔz҂uh"-Zt"{t:Fe{!Nӟ=~e %<<Ν;WWW̙ǻ\|r|}}9p'OZի-u~_q}B[6m"88ƍ֭[>}:g϶ԙ?>0uT͛ww=܃#=yyy$%%hLJ R[[kvٲe466ZvB!M{ãʻv"!!Aʆ (//'&&.uxXv-:UV /g 8ykذa]JKKG%22L^y["sXlW{ӧOٻw/o&Ƚ,YJe_-ELL C!l1bD*\ѣGuV=C@@onKK Ghh(o͛INNFa'+s s-eƍ#((O4Kو#ĉ7nyyyၫ+JKWr#Nc49{,uuu 8ZJ B@mm!Dkk+ 4*F#x{{၍Mbt;wz=x{{T*ijj>>>xxx؈^ӓ*++g`0P+ƪ騯[[[lmm嶬B%zkss3G$JSo߾.,D#F\y~F?v)5ju?DtttV֬Y͛ى' >5o6nȩS%))XRRR())aݺu;vM6a6S2eѣ].лRllld2˕] JeYuOqF^}UPTCss5ay]ʕ+j nu'333g`ccCvv6111RQQAvv6mmm'RgսzƬ/:o^|suy0ܭ޵$P}˗/gҥk߬5oطol6peE)>>NNN ٌeW,{sw'???z盽L8;;;qwwDgȐ!5 :Rdر# V! +VEu۾l_ΤIHII_|'''bbb8<{!22t:]Xﵵa2{+!mTTk׮eҥL8 0|pbͤ;w.O?4_~{{<ˋ/Ȝ9s/ɓO>ɹsXr%>>>]hNNNfռK<쳜={K^v[Q*L>דIII>Vwر {="""lW'k ''\bccd2us1233GTr14hP\\LEEqqqD:]ˊةSطof@xx8>>>t:2335jZP(1HHHСC? f/`ժU|+v. 'NdÆ KYV\yM&?c-ZDhh( &&Lҥ^bb"-bʕաh8}e۴ּBBB())a\|3);}4Ǐ\^&O֭[IKKcȐ!̞=%''S;FEE3g$&&Ʋm6222h4$$$X%???ƍ`@@bb"ǏGT2j(cؽ{7 !]@aCU:ʫ3I#%%~5.!7$bB!Vb;R䄷7'N㡇v0vodeeqa>kf.\p2q{3={:Zٙ*++iiiZ---P[[KGG* ZJAcc#UUUFrԵ0L455QUU`ٌRrhxgJ a9BSTT^lmm{5.xh4v;\!{iiiԩSl߾~3gzgee;9f̘1}V> ظq#Nח$"++ϣh={6e ioo͍9sXNeC]]]`ڴi}:ɠk. 77.׳w^C]]...DEE1sL˹|GC=ȑ#{5.}jNaIĦNJPPgy{Ϩ,ZE>ŭOss3+WDb0(((`ljJqww?$++Krח ikk㩧ҿN[\jڲtQ= իWw&77K"RSSՕ `ooϦMbȑ@|||Bq{3b/f| Kcǘ;w.nnn8::Á,/[_F  yyy$%%hLJ R[[kk1p_ZZʼypww85O<<<طo666;Vh$((ggg/~ !!!L2j>ɓ'%&o /SPPp<ݾonS^^NKK 'NΎjioo ݝ"K???2d...j\nnnxyyuB3=n:gkrrr{!,,O>2}t^'88Ŵi !//.=2ݝ xb<<<񝢣Vy+ܖollpdBaimmR^ f XoֆdgZ!Dc"LMee%+V@VsN8&Mk֭[RûO||瘘&Nȸq#$$ |$&&ZΝ㵢!77X0LSUUŮ])'$$֯_Ohh( 2@jj*鄇9>ѣGL}}='N@`25jlݺ4 ٳrr2W100Fصkaaa 6̲رcikkc۶mdddhHHH$MѣGGyy9<%I͸vMii$bBq1;upVM}}=mmm/oVztttӧ~7ꫯJ{|zz:VW^___-[Ɗ+$!M 2cccl~vn555(J.]lٲŲƥ\dd$mjI_oǥRpww(BG=&b۷opJ%666,['|ϝ~g,_KZ򮹝aÆa6xh4s|B\Gѣ9u.\`ԩ|d;vX Rd_DNJJ |5^QQO<?LPP`4>} !.ny^!Q,ŋ{{{͛q4~x9K/IJe˨ÃH,YbȢEXr%uuuh4N> ̢E eД)Sz7ߤƍƍ1cuOB!ͦ0t"qJٴZ-L[5OX: $ !t￿j]jgve`W(Jq7B\'NsNk"B$7=ȑ#9|CB!n FTb2hkkͣ(--rdB!D$lllo߾ޚD!S믿ߟ#FX;/՜={FC||eB!";0c .\zBNNpq///+G%BOwl"c˾}XvùkTVVb02dmmmX9*!c1}yݡBBB,?=zQ !yZ[[IJJ~vHwV,޽/Q !G8&2LfRT˾Bqw|"P(μy󨫫cƌdffZ;;NoooKYhh(VJ!D `l޼DBBMya4>},,,8+F%B_wE"`kkwV^B_d̙[;;F|| ;;ɓ'SXXHRRl޼kx/^;ƍ#44?rBOݵXh[0arrrѣy7vT*y,?p=cG VP!N> GeΝL>2yٳٰaGsaذa>'k9l޲&+D(BN1c3fĉ||'<̘1ǣP(rJyo_s7囃ߢT* !::I&|B!n"vGf͚5:u;v_Ŋ+8q">>>̚5_~ jkk6ӦMU=?{ǢEӟ7|#t !ΎYf1k,8p_}v~ ==tK}"##;v,/77[sXX5_FNN999Ntt4*&D(BDg)#Gpa>̑#G(--[///PՖ;NJ%&O׷pA<-&MB0mڴB!.D:xyy@BB#GOII嫶7J IDATZ۫ikkJb8::Zi䄽=@z=75Dkk+ܐ6Bq$b7?kkk)..t:555PYYizŔ)S ((B!1$E<==$**9<.\h4ZokkR`0Xwss999P(퉊bڴi=knG!#X?ckk;}n#779ӧSB!ĵDt ̔)1|B!DvrB#?'8SO B!daΜ9Cfff2ooo.\SG>0ǭB!:wuގ lٲӧOf4M_]v~vO\V[[Z>y8{lB!n$I lݺ_~2HJJ\K?KII'd޽]i)..?&%%9ru֑ӧBInMA\\\(,,D=ӧO~ &픕m6  S= !7[JFc28u۶ml63||}}ԟljBܹ䯑aÆ1i$*++Φ[*RRR())aԩ? \ܫM!/BADDٳQFusq ;L0ggnt:eeejȩ:L&C B!@1aU$..sΑɅ |~;JJJؽ{7vYvmYlp1klldڴi7o@B!5DLX݈#`Ν8qaÆY>fxxxPZZʮ]gС]cj򽏏Μ9sH!%I WYY-?jFqJI&QRR¦M$b\\\ٲe <]nQfE;yBqCH"&n(FCMM V͛7~Fd.&ZӦMCZi"##ϧKrLrrUcxC*B\/I u _bOBl[a2d !V']͍N>> 4FW0T&B\$bsYv9w...s=̜9{]I֭jٵjhhͲB;ܚwÇsq.]Ί+| a!dELXhٳ1p@j5* NG}}=(J\\\WWWj5NNN}곾 .H[[#Gdԩs.oT&&*++1 888デJc7LRZZJbb"&Inu !L1aUlܸSNKRRAtt4vvv9,Ο?FaiS֠ N8ƍ3f j3h ^ lKeeeٻw/{졮9s&jcWT㏔s! Z+V\L !$VOss3+WDb0,) ~qY;/^L@@?~( `$Bju<<<8p۷o… DEEUUU+++5k=zNQQdee_v챱w}hy^L!ĝI1aUo> |6bO0aooORRpO` /HKKcҥwrrr׭[GII Zv&NSTT;ujB$Vܹs"##B,Y\<[{{{ z[[[N>^'88K2o>juwͱcxbȑj,uzwOQ(466^GG`6iood2aoom+ rss ԭNpp0UUUڵ7m+bcƌA Ν;G[[&Msߗ3ft:5 VKKK`̙3455ɓ{O!G1aU!!!~zBCCIHH@Xqa0HMM%==p%''ܫ>ټy3۷oGV3w\z.-;v,mmml۶ 4 Jc7ndggSSSCii$bBqRfFʦj,8eڪ)..ח'xD(~jÆ TTTj*k"m)==*bccZWÙiU,{v-RdEL~,44CZ; !7$bBcaaaA!M$G !BX$bB!V"&Enي:'OP(z+BqDL+)))t٭:s=z4fWWWBBB1cW<Ҿ/koO!CnM?q]m̛7]vsN}4 L&B;$bjbΝ4551rH7r)|}}IJJBR?R^^ΡCz ^  ζSVVe|{eϞ=BTT3gDVVeŊ7dB!IĄ撛/K&Mĉ'Xf|Yr%Z@ll,w~~~ݒ0N%V{\Q׭[ ̚52G2|)**"55,^B;$bjZ-f Q?~3VlBz=cǎu߽_cc#zZ[[qttuL)%1cƠjٱccǎǏ3x`rrr%66///L& Μ9c ׶"VYY1͜?#GDDDDt:5 VKKK QQQ&&O|+6 cʖ-[ؽ{7&L ""'''BBB())aq((( ;;G}^rr2=haժUf Č3HHHӳ}k4Kti۝ecǎm۶F!!!TJKK%B;ܛ{,⎐i#Z~ ),8Nk'ڰaZڡq[JOOXU{ypfGZf{˞]~w3Y eСC!M"XXXCBqGB!V"B!H"&%Ng9nNZZ+}fB7~i׮]|gϔ~~ҶSB!GRLL &LvVyؿ?Hdd$YYYܹ&K;>>>|2g_J`` >,sYaժUWlɓ㏔s!***زe (J͛GBBCղbŊ+Bq$VOss3+WDb0Չ茶LΜ9 KEEٴu=(++֮Z2ʂ gӦMdee1rHjjjPT,_www>C5k `ƌ,\wyݻwT*嗿%&MĉYCR\\LII cccCII b+77mM0???Yn̞=7;ٳikk_BF1aUo> Vl6sW||<$== fBBB]- s!'OZΥ:[[[thZf3 0QF1~xN>3dFBT2vX˭Ym]Ng<6668::[!$bª;w.UUUdddPXXȒ%K1j{3f ,XŋA}}=UUUv#::__nj[Yss3zf3* eee1m4BBBˣΣZJ%];9::P(hhh^OSSθqaٳn+uWkRsg0LwL!ĭ'rss ԭαcRɱcpsscРAdff@qq11x._ˊVL&F#Ň<<ѣGL}}='N륱;Vlݻ0a899o7F! DƏRƍGAAW`ݔJ"&y/CR6mV˯c!)VxMqq1< Bqmذ VZeP%ө"66u^=ّ^Ųgߢ(LVĄ2tPk!'w0k r֤B!H"&Ba%;N5.!7$b⎑ook|BO1!B+&UFΞ=K]]DVLCCZɉjjjJZEAcc#UUUFd2DUUf3JQD*++1 888デeV^OQQzooo|||ոmJ$!'IĄUqFN:/IIIEVVϟG0{lbcc)++c˖-ގsa֬Y6kkkٿpWWW"""6mÆ ٿ?vpsscݺuzݻ={PWW QQQ̜9reii)}儇C1r^ `߾}hZVXBџH"&*??fV\V`0wQPPŋ  55Ǐ[RT,_www>C$,G!;;|}} ;;6z.t:ʺťV-NGѣ̟?pYzukrss+**"55,q\]]Y`lڴ,F٫qv.DLXU@@eee۷@h4=IIIcccCHHTWWS\\ɓ'fee%P(0͖k7ĉ# PZmkZ-zSTTdG@@...j\nnn6B!5IĄU3w\Ƞ777 z[[[N>^'88Ŵi !//.=2ݝ xb<<< WWnGGGۭV"p'wBaimmR^ f XoֆdgZ!D$rss Dpp0UUUڵ7HPPzp&zKcƌL(..8ܥެ3NGFFRTT-묗ɨQjej9p& Hxx8@aojjb}r!$bªBBB())a!C0 Nxx8[裏=z4s 4 &QF֭[IKKcȐ!̞=n'''|ill$--]vưaðߧ߱cƶm@ѐ`I4 G&//rxK֛q޽RIĄ!!C[yll,OnXX ;຦RҥK񡶶-[X¸4$22\-T*}BH1!zѣGgќ:u .0u[Khh(C !9$İi&2226lIIIL8rVB [[[- !75)Ba%RWWGIIImB3Iu9q.;wv(B!mG1q]FÇBqۑDL\RdrNʑ !$b`ccc}߾}lٲQ !l_!/՜={FC||Ś5kk 8zS+%%)SRcС̝;OG9Y>}:gϖDL\xx &MdP_2lڴ GGG>sΕoooƌsa^s㣏>ɉ/lڴg}V233oh_f%b֤Bqm۶&~m.]W_}ٳoX-bѢE7[᭷",,L |ٲeZ1[OVm/W3/oWjS'Ē%Kh4|'w1|A _BB`@r7oFPpرn'$$0~xyyy$%%hLJ R[[ks~;c;w.nnn8::Ázj4M$ӀK_u}kc1cHII|&-o_5v>j =4ƆjjjnZ_r鸄t:kyJ%?پ};]N#++^x^|E,YJɓ;v0x`ONnP) IDATnUeҤI|W]Nwz}]ϼtyƏW_}/qq@nM;XLL &LvWui鱗zQXw긄O?}Q}Q֮]ƍo~cw^|ၫ+JÇ_?~a>s֬YcZ/ԍ'>>sLL 'Ndܸqr~WXZfΝ888ǤIxغu|wINNggϏ)SpB~]wz潷}L0/²ĉIu2L455QUU`Ųe{ GGGlmm񡦦Z:::PTjT*:s^oooFFrqpp@`28<8;;s8p NNN9sskk+wOKK͘GASS'|||@Tvͥ+sjkkqttF#ϟsqq3>JE]]NN_{u?~53\fe@E "di^,k߯w-m底kj暙exM! Cr`>u6 2 x@>>gdx96(JlllZ\.d2Y 1c666mZnl0x`BCCeD'NꫯxO3<Ѿc&OR4޽{1aX-% =zիWDŒ3یo߾$$$ѣGIHH &&ݻwfz;.:VILLdFax TYYɉ'8|0 0lؼy3QQQ0vXJ%۷K.jqrrbƌ׏;vIzz:Kە˖-cݼ曄aooOEEյYFEE7kllѤXCBB OݫT*y}]-[T*2L#njthJE"&tHrr2<3;ctD"& Yz5l۶8Ccgg󱶶&**G`lmm>}:ٲe G8<FߟSNb4i'NX ')) ZRd_{uNJJ2ڗw}G\\Ƕmۀ&L7fb-wڴixyyh"vIRR6lݝ-[pfXAA^zʊz e9VԩSINNNBK/n^ޜ8qն:u* =iPooloz-SʕH$<3lڴ?;v`ggٳ۹s'Wfm/^4 GGGd2+V_씸x8{,/_fwTuM-feee}MwoD"&toF}}=M5KPP1[[[իTҭO6d( qssёLөgذa&TWWztNJYY~!׮]cܹXګsnn.Zְo8;;b{6qrrw( <==0ӧOiӦfۛRMN (,,$&&"Hd2í Sڭqrrj=~] mq?ر7|kkkƏW_}_lllZV}Yz-vɜ9s4DgRr=;]|^TНayiwSP(5~+WHĄi7^YYܸqLfOziggg{9.] nFAammj~MYYK,]cǎ1qD6nȸq0a+WDTr.\͛6l|nj5 kkkZ,ߟP^}U󍞖瑑|'̚5~֭[]r{=|A&NҥKFRNkvwV&MbL6 ___9t۷og֬Y0e[ӧ?^x{HĄ:t(0dJKKl{MM pIJEuu5:(k8~8zZۍo߾$&&rOwcRRReHRRRRpsskvl{W}K}}=aaaC.S[[kx3NXKJqq1ENN&Mwm[Spuummb̘1[yA0۷cooO<~+W}v&NHPP?3k׮eҥЯ_?y9fbɒ%딗E^^^1<쳼x{{3qfd"<<ܰЭZ+wȑ;w7x+VP^^ G_n}}]PXXh~zV^m8N0eL6kꫯҧO:DL萁RYYItt4&((CJӓM())?gРA 2 222E)))0e[έ?;99CHH^[#--r.'Nd޼yFi+UaÆhؿ?111xyy1m4CrV=Nzz:NjMΝܹs}=[?uuu|DGGӧOOΨQmzUTT0a„Vȑ#\rE$bB6;::R[[k#غuk^^{^{˖-cٲe^OT7~kOv[ <2Z3|4bJ-iNO>$O>Ѷf%߷mEM^n.-RzٹPӓ ~#77ӫW/JKKٷo2hSl޼㽬3,_|ANN֭3w(B7rA7nϟoX J[~Aomϊ<^::d~W ĵkרnqLD{\]] eYg?۷AR":dgbbbaΜ9oGddѓάAAAAˉDL MTߞ^zuBDw_gYAĢ߂  f"1$\|hAA:F$bI222裏8t萹CAnC$bIBCC߿? ErY͛VVV1uL[nTjXBϯV-..ezfu"L"Jth4f -۲e cǎ_eŊ|嗼;8::2o<~ᇻRn~~>ӟ9s&gΜرcͧ[[^Z"СC%L&ɐdt6@A̙3,_ٳg_xbRRRL^v]rNǂ +嵧.Y%KtRD#&_nPAy߰f۶mFIXip:رcQ(8::2c ҌYz5|8~-L>gyư٭"""xǚxBCCQ(Z/2gW^,XRù+Vߦo޽oMvVH 2 =/..fڴiw_oNNNѱ*UVi& Xn_;v ::W|||SO=ѣekۥRXb٬Z<O8v FIڵky嗱7%f.֤`BjkkӧCAUVVRUUIǿ 4o{6l࣏>2[__ϧ~J@@ps>{2w\ ׯ̭_P >Qo'mL:sxx8 >/2b\\\pttD*ݚl7s=bɲPT1ܡ tuuu;ws%J^^^DDDpq㝜 D___o\ZMbbQ0vXm _#F\.7ܚȸ2nM$bh4-uA^* NG}mkiлT*EVt:ܚkiG"m[lYh?7evl/`N^G* )&MDll,msrrB*R\\l_qqIcD-[7)++k60¢LMvիY|aŋo30Wu6WU0IAA-~A{Wgɒ%-\.'$$( 9vw%>BQؿL~f{{{s5t:a[eeIɔN-MjkmmmҴj&1$/^DViPA aaalڴo@6n޽{Ox 9hҥK̜9Ŕ)SW^k1]gs [̙C^;w.eeeT*2227oIUR)|'deehصk[nmvaè?ܹsz]s[g`SaBBB }8}4C g۷G}z***xYp!n6DgzGٵkgϞ塇b͚5 0GGGc//`<Tֿ/ ͍;v8uĬYXd :L6k:D/֫1&/7ŋp)=ܢvӓ vA 1n8Ο?Jw.ڞ+WwQr˛oɟgs CUWWvZ&O999lذ[[[{9s#DLAz( 233/)++ё+\]]^ 1]; A&m\.~0w=HĄ69;;SPPW_}ePAȘ1c J$bBFO}CVD"&tKyyy$''; Ah3CmݛSSScȺZ͑#GHNNfԩS֭3wHݎHĄnY| )jѣGڇyyy(.++h}'::zjΝD"1wXݎHĄnm̘1brធem7njh4,--;.>Ny7t |d2s-DLKUUeeew̯%;;EqQ,,,ʕ+EO]$1A{'*//Gٻhyשwرs+AA$&&;n|>BCCxz=QQQ :UVVYt)HºA1N~#VRRBTTwɓt:FwZ]{qF~|A6n(Ib"U^^Nuu5( ollDRQTTZښ^zL&Z̀nrur9Yʹ%332}ѻ^^ qvv5~#Rؿ?_5GA_f}5;vuV^ @pp0=D"&+>>'OhxӉ<ׯ_ȑ#>}2 eʔ)parrrXvj\|ÇDII LXXSNpra54hHM;c=Ə?H}}} 03ft4Իo>bccjH$yVZEddCD"&tP*4 |r9synPUU_W(--e㏸2bsg1JE]]NNN֢RpuuM#h8ygN|Cqhhh? ={6R7Zsy:ġC8q℡'ˋg}ŋ^{H.\smMn͛7 $ TTTP(0騬Z=7nPzz=hZQT #2}Mj5uuu( r9jZ r˔FRSSIHHʘ4iRG%%%;w8w̜9~ ^"^ $ 8s%sY Vpp0AAAǓĠA(--0K*.]"##Jlll0`Ç͍4ʘ5kV1x`222ؽ{7CETһwo[o FEEqùvXXXL&cΜ9L>|۷/p36P("&&cǢT*ˬ[8:DUU';;w']#j)--Cr9rss6l2x4hׯ_&Ťӯ_? Dvv6һwVzz=>}3gtOpppGü-*˗/RSSIHH0j"H dʔ)L2Nj&^$SXXHjj*JhUUr3f`kkO?Djj*AAAͥ&Oɓ'g4$ 4'''JJJtZHillp=F 'O￧0yŢEعs'IIIlذwwwlǙ>}:ZFC/ӧٴip3)>}:~~~H$~aضmIII$%%BFFn)Gݴ8oOrñ$>>hj`eeE^^j}Jb9r_(TIDATFCII %%%R\\l ׭\rwwgфѣqss؄O$br9Æ ƍ\pͬo߾rmb mmmquu '''ݑH$XYYj_~ʕ+sRֶSPZZ% .ҥKڵh/_x'''zB___-B(**Rܹs;w.jM6%((inn.zQFaee?#G$//S+ܿGLЗBcc#nnnF']\\n^~p١P(((( ??VK>}k1^Zڵk]zѣGcmmm0Nnuj4jRVprr5|pBBB KI$bmի … >fff!77!H e„ L2;;;jjj0$`MkYZZv(#GªUpww(JT*U4{kܷիWIHH 22BA}}=iiidf J555]2p1V۷/˖-ښjN:ENNÆ zR):kkk57W<==… XYY>`MI$J% , ''Çߡ5VKRRRԻR^z/=DL-???8s!G":zIFIaa!%%% >\PC%770x`h45HOO7LؔPR\\lV2큛Hee%GETMMM FZM?{yyhHHH 99WWW WQVVDlĈhZRd̙79& gBԩSqttǴi1b555h6l ۷#G0jԨfoB=buuu888P5 hll4jKRrrr())! AҾ[mmmDP%ԤT*%88`***8v''2=ztg,Pn-jnrsYh-2wHwMVVL: ;A0ʢ;;;Ο?oϰ=>>k[}Mz=:D 蔙~ٳ//v'ts˗vn䥗^̰H ܃&[־&M n̝̬/H:je;gqaޔ $&&;  og_ZMzz::#Gv٪m?/_NJJ OfѢE)QA]GLԣӴپ766gϢj裏_ SDLԟށ瑩5i ;;;/^ŋx"~)9/bL!tOb~맧i΂p;A0Cn˘1c3f +AAD$b  f"1AA3  DLALD"t  DGqssB*ZN6xAn5RHexy{;{Iݯ?xAh8{.ܞ'=mpBLøQ S^Z TT Ѓt46jQրD! =X:yI'IDATx}$U}.`wg]UXZEB'5כ[+Dg{#\oTLz#C7Yu/tCj~1F;F"Wa4 DUP]e]~SU3۟~vNz=߇WcE iZuP,[a @iвʞX˹ #/(:hRJ{ؽ A Ns°s1rC7+61A1E@eܻ*mT ԭܣim:-{fUtt*:&Pm՝}Ju^:&cti*-t jVƟ5򡂅°!? YEŷK,bQaEXF@2 XD2 (YX`%,ha8,b^~o^fQ~d(8-, ?O^thPAXA2KYXP3`*Ed2%yf J,[XАlX,,P=}kYSǨ,\#}6|56@Eݦ)1kb(m@TL V,*DS t`RQ)*P&mJJQ,=z]% 29d/ĹU(lA910P1ŧK2b^*Ciy"ܼKrMIۿ[t<ߜ{ 9²'M(0M˩!aaُ~`PS/s#exX$DEQ?ڢ"SlG+=o{)2OEG cTW%VN?h7\j1lg tX蔼ǻZBGB`޽ >?闑Mgr %[-cQ(]:0 Y Ux6T(t6[Ebmc+<@j)H͖B"(s,Rh1NKbǒl)lF[Vt00&ƏU:NFqÏi)Χ)6Ԣ 贁ͮݨcRHj!jΙD-t'ܐJAQ-mY5>- JSFi R )"0єb@@"mMq”b$slq+ЕH{wW`mZ2S RS2uiIÍT +.i?EbT =;*kK$ePk֎JY97ҾE,YYzZ%`^| $aDaj4ESt=c'lyI.:sY)Zќ刑Lf]Wa~Fn3߹ ,] ^tVA^`KwF߄3,Ө8d%E]\DI0Z,Plw~)z\C^#$:E)"0ZxI$D#S x]oaGĻYf(t,BXWg8 pe9'.9+h|/hΗ=^4 !] $)'Qt3(J!]yJ5'*NJk 0dϜ!> Z9 *w9^|=X%J:V"sKb]e, ,@Eʦ%J,s ^.,AqB9"F XY+mcIG:oH4hPt)=ߡsαY~J+uogY恫cgŀt;Wiϖotg\qba~jH5 e\sW[^϶}zX>,ۋ14 srb2s~96wIx9;yV'K܎\3y.xڱ ˲nu2-Ni_Ӟ*U|9ӯ"}!8.\q}*,E :'$"{'FؐX&/ˡk,:,7NcU2ڎ=̡9*QI+bs6P'pk1 :PibQdv.ҪqUV]IXГN.ՇfЉ}mдf2U_bΩlV9AۉNTZ2䩄ihc]~=OPXWTI Pa7 VCft8 e"M@)I13A)*a)`gڷ@)({N9@h[)RJI/ZkRSeo2\o >-b'bN oI&IF3+՗BU#,ED.N9 WŲ֐V]gbvZ۔4\g:w" ;Kr#!u+vnh:XhN޷HpL1,:U ˛om K,\3;|pBzZ3PtOy𖝨͟@P{y#$zvx` JX6%˂۱.Y"^Ws9jt $y ۴A@φq؈<2_~FIʞ 5)M1(zY׀'!W]UhӋrE?ϠadMCcic(*u /VW 'w:XhPvrZV2- Ƞ%IY˴LFE;Q`z2 i9NLnW 1cS49,k6~=ǒGhu"ܥYs (6?bw'=UeR/ ,c9æI\)f]q5*l{3퉶' kfnϢY!*sTl.!,pPDjl!imfl rCRPdY8D2UD$*Dnm9lԭmJWJMHM_tNk]S U/:ftդM"5cdWe[թY-j.5*=@dWV*PT(g]9"f9ODWs޾Xa5 eQYOV:$-4sru4eӾUɢP,I/54aբʜ4PW1\}ZW-~ZwFAF Uh!3z Z!_JiGѭ8&4-SiRtXME53TQdVia߫YT iK+S&Lf!UݪRQɁnb#5|Ey0jC{3=N_%\O)uTB:%bE9u\AZRj B@(mJTTle0hRRh[a݋tg% PDSlj շ\t`O80r.%w9IB q7Yڸ۠>o$ LoE 4D|%NC߯QGŎP( )Xhe]r=+,[Ep6TQx0ٞOx/k& qCVwͪ);)2J5Aae'[XrUlZNxCZTEh'(*:GUU^agfe1XEeZmTh u,+K*be|1]{,* V󊥈 ݨҖVtڸ-uA:,EYomsӃN&qPJv*JcTEiFM4 `mԙSF3nPtiVvՂU#h#N@)H j6Lʱ"W ) 4eTYkMQV݉$e#OŽ7ð{2?rxtp߽[}՝v{:7?OqILsg8'͵%IGCz7/˽EW(G9{#~0STޔ0aǓٓݙ?ɹ+g0 O.I}? m*>{x쓓re@"V.a>_Iْ񞾋cyxM+qHHGXX V\:Ϗ\ep;K-X ]h-#7 xbR|JcC[. 0t6r77iEd6kcokg4~o l^>F,yWȖz⊈AJuqτ{:2:Zn߇<c,. rKே\of=;ߒ!FZ |ןEMҦ yĬyInphXX/nBpAߢ'FRE/SH10:[zhSawb!˟=1^-jƢl_\=u4*0{=VxGj澝c`~ Lb'T%J'͊{#x.;K_Ѥ0PկxƧ?2AwwlvRIEc2Δ\'vlwp.a_᛹_[v IoZ;)_sǁ }lu3o0SʐEvv|Sx{1GdWE!]9znZkssqhs$}eڗLj粉v9 BM|('n!;w3zm<${Q`RX ޙ_aHVv/1{g90g2૒ZҐ~L9asyff۠'.R9L)ps#<֟1Lhx*vrT bWn3 nJT䪢'%ML1/3* 8cs}Lp#Y2d#.}:B#Vi@h[[7GOsKr|n{:/>H%XpO|'w=- Q 9p" 8_C&^xLsmLrGYR>u*lg>shƃ>[>fS FؙY%L;"{}7PE=שa3[rC^}n^KQ p<Cmgs 8L9egz mqCrϿeX T+SuBћz_. 3U=wc:bq/2)2 Y>A⪥@\@J"&5Z N[QߛhǷp+*@y3{7zi~ox8ԩsb,ؐ/*9"QL"?!֣e~vAEIf7g̰XK{c5el5sƟ8יܟPӽvGrV2\v&1 xo"!U$SFtwBQHk4^E#GXϻV6^ssm;g؋ -L2Yb_X]17 'Z5dHlVIZ̠0fF7OS^mnj:ZQ3Ke P _t W^k_d>cVs #Rȷgn|odsS2ej,l&XF~4olw{ g\-b_ʻ{{آ󢳬(j߃[¢ْV4*^]ӵ G*!j2N&|g+|j| slnRށWcR>`?"Dj4JT:%jTox/:z%Hj:Ljf=oLV n3eC?o݉#doC_8T*4)gHy4$pZE/%&_ SgSαcx *2ia7 @VrX̶'WE3RoNF,ݷ{pgi i5)y\a0[̎ ]L(_}C~*z^Bߵ+Ry5/t_7:;*gKZ3$%b WDFx S> m:y\-ǥͫ3m59|GHIs?4AHOv*s wp#%yÎfsk~C/Av"&/ixыyveϵj*8g"b$|l-j{.%-X`|{\l$."v!ͤ!T)| nFx+U&/7ڽ3ܞSy4Gs$sЙ0-X0+dcK4E)jP0L]QYP?:>2x@kĺ@ s;9۳X֧F/8}7 G;:e%}j7Isݶ`lc IBQ`<qcJsɾF!s[I*;@~ //$NJ]eF?3\byZDs<7[d,9KX;:sTR]כ~D捼j5Q)O=̱w aWEl[&=AU:k_[P ꃗhSMyq)1/0ՂϥvG"ƗMc΋%s, < cf4͏c 2CpШPgJ8 P baIT諚~39|' dW9% %Y /ãʉc -FdD5)(YuYžcfmZY Sx" aL!/~&xhKmO%6s!'gq?q~x=u V n#e-%/bkT[8:854,?,I:xCM-g5 ^n|;ܟz$ )|:2{-g"86;Y/ Gz^ef ܐ`R"v'1zlv:Di%SK%?X}B1xO96X|NS0QzeMVWfאߍiz>f.qLj1Uϝӡaqlyd&dh]HO0iR,?MЄ*p_ꊬ9>{5%.r;-]γ$7;jz0 K%b jsU.ww*^Y4"a^ǧC`?.R~//({<_bRpحDƄiJ:i C6"Bql5GV>^''wa"S^mD:7I3}n7Y">5*s[r?K5@oa8䠐W!Aqle'/K9vQ'n)wf5=)e!kP8wDĺpkz:};"W*9djZEwՖc2 j0zÑm ָ}{Ќl\]7:Ӝ G*ZN᠃G"ƿ bS]ߚ>?сM\3'YR\#;ߺYx3OټGbL]6{pD:s)-⇜ "Py(3BKu&KԷOr|H(7$ڋr[ )73:+F1Bd81)ݰ9iu8_疀߂ ="*^PC9aR>x*žqˇ5YȲ1vԸ㩜cg>)%s7bOӷξX 4lF%)nQeT MjKɗ ~9IBZ2 "Fi}JES( $:nss̋9Sl,nhzhሣTfv$||`NxW|"?)/W:on8Jl:3byfbWm\dVĠ4Y้P9ި}NjS eQ@As,鋓0MF6vpQ¹Lty u$iAؓ=q$s,VRtpo] ҇[ȕf88 K 1~pgv\>goЗ0e7p.K)4&u[弟4aPl ԊM2) %G.:ʔ8s/s$^zckz'<֣p |).m 7w~'RjMh(n)k!56Cׂ6m+<"w/`7&l ḷ:3`ogA:=dt 9 |WkxYfqnR+oRDLя'_ꃗi.I"7qaJi =qoEtE"BM^>^4^۸q$mqCԼ*SO6sVR۔l㉒L6pHþeU0%gp0PJ9` t^&Йѩqeǵw.> YTj }uʔly7e'c )ST$I&ƺL.>&iRa&BxD H@ P2ivRΣ}-0+UD7~B؍ATV:n%.[9 ߊ?3&IH ){ݦ@<8qplsrGy3x/K[ǣd*eJ6u£IeԼ&UQ%9Ó&t:C9ЉR<88%,/׍4Y3LDKM̀Ԇ+QQiJ+8[a Tif  c/;6;.Q05NASmá(*Ůup4.1o[(ȸe@K 1K IpM:MWlRϹs3/{sF {BG;E5r '~'ҺD  ŸJjdt^6zEB6SWqg7m&X`+37&O Faz殃LʿJ#wU -7MEY^/q\`Ag%ٲͩ[һz΀*%9O~DZC,[Anc*j#w+.uv7rUs^3x&pRާvA$:K<\r'GA~"7 CՀ)3µ{<(,mu*7ܗJD^b{ (T9a5fb[nI4x8NW;יlE*ZiKJ!Ҋx,o y7Jz{[q1+(96?X϶8Õ@|ML)=2%y/gEqD@]2k$}үSݢ8{^64=ѵ*m7^ h"=3{7^ⰼ&8I~±92KiPpۨRa[!ҭa n&"vXu>qZ~(:o/ek;7>&`0>ܔ]$)π֍OMKPa˓4 ^)'W,K_MZXtUL44-D&4ͥ^:@T9Ė<AdbA:`:=Hka})5Mꉢ1XtK7Ӝ~`7;\T{2Q^QU `H>=4yx;j0|.QtnTю)_a )mT0dco*q:KY{?\'nI'/{&~(I^gJCmc\1 hA;S|] +|l0ƺ VBh|byEn}I=4 dWu\N%bc@ݒzAi?3\ˋyȥ pXBaAN/ Ulm%:[(l/mz:峴j*$ewݒly4 h`j,2XE/0:S #˸2>%UVТƬ+M`j+("QvT_ Hb?=:^!Ljb}9pbj1da)nF50̓6ֱOd2fqF䗵(u49@gΔ?Sd֦X^4bZr=XVT*f|swKT%`3l򞔤i* HQjis[;sj^P}6X0$וHbVr$90}ɟ+L4-qPmt 2J4)R@k'zjڵ8M)"~ 4dǧn61 h|am}-$G= I6&C 77@$y"U1z~8 a@` hD_g&ywݦK5L0!tʢOW 1(S%zxeq(n! M|NjY-aVXBCpdvn'݇%R&Unnj] wr#hvq& Hx2vZKx>e ͟08'sA&A9Pطtc\F `k;*F`q/inip5ڨَwe"5w`mxH,$Q0d W\7n)qoG=\ ReaH Og.=}nx Wp:_q51*eɷok2iE 47ԧSEbo$ukIli:'bHܽ=)CyA7Cә6˼:kMFEa@Rnw6{?YFW*&Q6 =me\Ž gqSGp9ޱzOXC<"ypl5]q]s@\Tv;؜- sd=/tiN Guka9 3M,p'ɇ(.]`Ԣ)SFDQx.~FU\H NNb|Ya%u >N+Rгb?"M샴po4[1p=>7 MozvqjfiO$o3Dv <mjjQOr+t\E `#Q۶蛀4ul!%T.啉JNU1g $aPgcPI]3|H|dU֟cPE57AC/~Clt9ackvzK8kj5SܓdH,Nb5 H !P)p'3|80(䜞O$.SH,;,Ihu7YN#? G5)A=SROd9QQqLjnJ?QkX%FlJy\$(<%)ڞw3:~/sz)ïrl2lTQ욻w3x鰻=a©bIb I*%*9Erf ptW +` &xn&0@wR\~a3ӆaa3n1-y`†g9po&JT3?\`;䂣ѴN͂An4ȭu9d*/lmڔ d=vxNoڿa)KH#AdwDV2=ynz&6zzRG3[)pN狺'rL{ zo84Xˤ^Q% iO'>h:-;Ұ"\^ܙ0^`I[1PTTk֦y0i9tAY WΚa|mN:=JyzLS4}u\v#_j: /b^t%hӒsj‰> D $nrFOYْ@A$ <Pk&]#Ň 24ˉ\[2'[>rS]n67 mӖT*&F*o}CJEbZhֵFGi: l XI- AS7}#= 89RҢE 5 m61^~+'[Šք}hSi9F1@ ^h {\-68*|0 #fQ9ʘ.ʄeQG/B.bqd U-x{b7%̌8Z}O[}l0<$]d鱷X( #;6lqDfwr?T|/}5(-G3Uinf͉iDzuɱbM[G*?R0ִPyE1< \*b78/sO}SquIE?J %>4Ė܄|1?Q pӵ1]WMYl'C$@x=E59?hӹMQQ q1Gun.jǴ3M}Z\Xɳ*RuoQ.H.3P nٖkJ9ZٰO91445c1G2% FS4 ^D-@.VA ¯RON=\+e#;i&72v8b=bcx^3w`Rn@˚{8k!'OS"oKi)C!u<[3D+{`ꖥa0K %&?b9%E7]Cå<0ҝǙ}&Z&&e{Ivp<_e/ke39HP$0(+x&:G<LFJ_͐HO2eTt޹;~Vdʣ>NC']m?K<ʉl௢oY#zE?tԮzց0{{M/d$Rrp/AÜgaPN$f&4e#nD>B2T<,&pE6v3CX*=C2Q; ,6/\ iC"|W͉6}"l:Ư}?9U$*f;21%=]7^^D߯W' ;8zǓƳm+L)MRX[1A*=6e %zx> XRLAǷGF/GfQg7#SqA1zf&Ly#_c9#\o3$Ôfcd(M-NU?Oa‰n;uͻ8kW癚 :,K2~/) ?BMW'8>ﻻY>Oo]=>RDgB񲫤p0Iն(w7F:'*;Y޲;ϺQ R{4MA^>_rMYDeMW&xpgL|kQsatI3|!P$tf# ^CK./B n^-bSN~I;5mdMDS[p gCoKsyzO2iRk~ <8|u)p)e7n9,bamSܖv/N~]XߣEon99ӛ,çAؿ4i`iqܘ<)ްh/ZJVò,͚֯YK_wbMX %ku[v[[ FϯY[%k)ƌnXŐVT>o`"U~,[E˲,kCז8+5am>mZLIO颪 c\dWp#NawqxvAff`#, 6&,+?)[p}WnκL)"po=xBG?nZRH83k}CH8cB> Ef,U9GC9ta.gΛro[.E!$g/j K/";R?Wؒ#S7D4lAcFD-pkɉJ;2̠WOU1=1(:-j,&^ƒy2 j/?9Si&$XJ yyE0s֯|!6DutTyDfBʤL39 2¶x"YN ͎Ht"uNd[10W IDێ* ѥ*15wCŏ4Y,SL0opC^:paeDr`j`4(SPYO 8m[nfP)w]AdG~pD3xUXݓp~SqlQ,6cqE@?u-e7slOyKgscR: !lL}6Βrr|2iy̻=lKVC@"?3Q-:jt]9[юFm=qn "ǂLQmִ9Ds%gCzW~A«-'R cbzH$/`>]~e8W.+{?F)19 &xOA"(l%s74n͛*%QCy"*Z Z7 -t@;30As ]K;-q_.v˿(+Ly!Gٵ."߻ΗhD%QӍx$5j]]+N:hFj=KDX!`}59 y},Gul>y 9yΞIj<@ZYU:1®dxЊcbOS[ M_ɴcq.&Y`x(ӤDe ZAřvthRM@`& t: CzsvE0wfTD!7?xrڱu)b. #Қ4JMlݴMT9)A[Gj滹A!hx{3" m>\{=`(Sv$ୀC_n<"I-Tr}hKDIAVVJ5 &q FSZWݢ%3~wTZcz@Jtlispӕj8Hztr {.u3 V#\Mjs-t_6/C[5vu 6KZ)aEIΉe6xgE|lf~;s!`{!{Y-pI(BCgI7t&-ʷI>vd%;ԋ*f xB8ȳI9Ը6ECzLM;!QlqXm۝^!=JnUT6F[1AfXy&dž@k,t \<Ӯ@z1nP9;G)rq{A^szJP 2gw7t g K'yvcя 7Bl2x {di-*fQ#ޚNvGoE0L:빻ݷfox1Avyv4Nxrw0-:6e0 GOdQƵ .tMf:YzИa Nq^lE%Cvp<̺3Z }}#7ɐ4/KltO3x5T! ^s2%}_^uyFJM\\~Q> mio1T1+&-9Oz%4{r( A1tF޲ ' ٛKQuͷx[9yVM0 *˥ۉd4(r hCJYk8^,Š3᢫b+yt^[/mI |+5y=xG93䔉=lVE̳ep# z KZӝ5vvc Sd7d( l^}QnH`jF[TDxN|6Ԫҍӱ,w耍6`v:V3. cɽeX YPŔaiwא;5ՙ۔3[ 5(}]N4Aa x[*6?H@)F0x#T'IrMռ}:eTxy2_#Y γJa <ҵ*QFb~_*ԩȐZCSDg`9̡G9jXʙ"ta&rd &:F2ej]*8L#J Y J%nDUE0뷒LW OUbc49a5͂Ol%;C$,'ny{}h@:s XǶTR1\Av#S؎<$ne*1R66?Œm]=`&Vz&k{ 74JeBPؚhĥL^QAH ErF3bgAM\Iw)TsN%*- ֤EJv }k+_-pW+RHD4r2 S *})sT`fddb9`*REo<,OsP. a~ o*5=>FOE<I!  O( 9:=p;4J`1RM'-mp l9S]y!#o_w'yxuSjRu(z`ΌhGģmkp>/eb*4zTi Wړzލ o0gȳ)s/++C[7J\eK S_Eld;=bL.:uZiڢ{IU/u!6sU<N){*Mf 5M!\VL?lEZ|6xd,oEnY:h=oHqlg5)`,%=C[4kkqX.}nD>̻8( uZ@^:G1RA'G y/y{伽 cyVtP4gh`COVG0 kCP vfX0xd"LvCwcM.qݒ^gUITZDH6:H)gzHM1s7:˺/Dn# A]E%.Q5IZaTwwYWq悽,$CJ?B3OPt/qn40uf68[ߌ.ӨV ref]y._aC~tyf8zSP {CF9xL2 )N5Ǖ) ƒ<-tCM^oqEu5jM%JvmM=עenx[l=3xnN7k= &e6:};aCg`˚%(P3Tc7Ws f@n\mUiٔ !e~wyczh"m6sqqk c[,"c Sg.Hd?Gm=%-RY*_3F46wq[\ɱNh/ѤŏVg));wEɵT)X޲Co5ÑzqU"]~vadXUuJ(+yw&bTyvp-ʔyV؟mLOofؘS*g%J5ʩi59U&4y2չ+PAN*zfND1wk\Z`@V PG3p]L 5uϵ`K\7\Lbs&0g[fzu K:qT +YKSJo +ibMXj%eZֲeYu9۬ 9\ϡE7KZJV)cykκu5 d-zkzKc+*'',uI[yɗJHX3e-[EkѲ[ =\ӲNv ChmùB^wWXrPؘ-yx'LҪw0mdEd[ =eחK֥ $sV)4sVÚ,˲;lAᏭa')=<G{ 8y )3o&s`zo+x,# ~gd~u&g&T.Bb(f,DbURTVy)-n㣱s=gOFy,L/TT?.x/:9.!\$M~3=!x_ qSȖ6zɻDF+FKMx735]:s L<, .bͧ8U?bB|h?O{ç SJ /ffҏ 񴈟rIRw?IoGydzyJ\f;] ~ ;.}< Qpf|>M1B2Ӣ@&xfbh8dXWy%b< li?z[5f8 Nɥu8e2tnbw~g ;0^ۮ>:(`p(|TPuݓf:\BAnLsc'ΐB>X}Nf% }\+/8OE!y1:vS$u65NGڇpM|>=+\,oޓC%olQYitmܚDNSc"g#]bpH5q]u" n-.:[M52uE]!~ XcWXUYѓ{)vm;fB5,_NYNZ\ƓL97Mhƒ){28[EK *p$_C 4;ǒ7<ȴg<`SLWEN}.ܥ^;6 ,zjBA.a;}q%mVT'_ ױkk)71ޞX}\Cs>٘bUGЛLҺ!\*.GK±䔒'`*mtH_k`Q]}G+K¦^tܜ,&Lfb^O1&1!qh!,mwru\ęo UUG"`_m7'ԣ T`2l [[sA( 󬉚h6 LV?t6Dߚ!liө8'_`cTx^_Xr\I!,TK>у!L _r#<'ͻRD5)%No~? lJgaf _ƨɿ0:vQ nE:uٹ_A-",b ǡp $,1|9+] {DB !ir|LN3ŋGE sc/fdj 7Uy ֜ߐCYN K{ 7`h_C^@:?E(扮lWV9>! ☎ă`gc&6_]׷8q@N==1nC4YIcF6 .aiIٖk(Yūż/4'c,. k.eИnOzl%&AO"^Pa$cn p'ͤ)qut\?ƞDoY~Ji3>Gߘ"+t`:!&<MLp3&=:%B oC!<${)l qhT ŻrQ9&-ޝaWBCZrֶm12zX3cAJ]M:~ ݶ̽acai:{SInJ"elsţ` V\Ӡ  xF'>x3zmWy,n܋yR(ruk\{WVW ea|=予Qx=3^cMs S=]"@b,)ѻj~~Pj' YX`HB2N.g7sO6͒IJ&!]>R&vtiq+laSM9^}}:c2 B52EuDVQ 5Zf 2Kxl\36 (Qqm12uc#NRF!oy {3 M(2;".VML$rf8m‘U*ߜ0ա1T\:C8IlB:+ ڦ!agK{AXc,dW**-ts4a&|pQ.RުϤӾ5K5J"C_FÓ@e㼒 g\ӹi:=CYИtUU&f*tA!i|A&u_^_՜{Dpbl ^+}""@g*F0|D) C;<zjʍG@Kln&;Bkh(":H~~ʼپTnK.߷!-؁]]!:2GP@;AKu7[GQrP0{N#л2여 ڤ2m.5Q=<ȟX{W/dKXEyi,~H!*lۋ}A8;W>U0$vqp[TKU .nrA"*p䏙n^"mQz;qC@NMpIܾgm7M0WX^T93Ag#H`f..‹ !1ErK8B鑯\@m[CӵcbNyģX(dpr9wi&x;˩IVRq 9Q$?wRh}LHpjf:CO{=W'ƚ㒣i[A*RVˉ.#<ǹ\m?f8G \K,0&Hc@*!ޝ{_pevG=6xUpSysQ.0(*千i|wOWV [\(Wpt·}(Ӭ0$o=1{%T(`A%]坳 S%MjmPY.aSD_T$xG8 Mڨ%w 8C6T)eO(̛_׍|-y$Q ]x3Mp zԤN)p" /d~N.OHkm!w=O4|*',*K =QF'3gĚfgeJa:t+R8g*2㈲lo.`x.;" !v n'jDŽ0\y +7Tg[8+eݓsْ>`!/Q "Diq3ovra?&PFJ[BY9B`s}4'W*+lޤcBOR[a7lǍ(hHMF5aN x"z֭*_}\|F&xovFAQhG1 [?$Xel]?wVIa+Ϋ ově3IxSWR>LV*%Fga>UQ}kR?F3#,R5(ydT 4쮇ye([(K ;?Wάw=K \QUJr!q!;Щ),r禈?p@z5Oq)$/OrO@+&%#\l`xAgp} p`,|CQQA"f OP z"Aegp>'>} U:` LG7w ]xŷ¤5_#bNSjNs9eÔ|}*RFsA&O9Xs\|"LmFZo㣑 Xr|јaM@xEl5k( {r%)+PFsDwL15x0:l|G؊`=|80Q(rU/nM!2yb v4:@g-elxwMU(Q(<ڲ-Lx/tU8)Fp;{;AdV7RndoRHܲ_a9϶fi1~ˣgCx.lnͭ1+4B}ª]|?g*t#'>G37 B^Ԝ*2%]хM127z/ 2jՃ])ƪ/ ^Ҧ1ΗPCIYP:s U;8S}liXʭ_螔= !AcU &ثIVqj%TʴPv%j%*Ʈ{bF~?D#²U-ௌݣF-:G(29I_\&O8 ~)$$ѣg*|<1,3OjI(NvsbVr#t K"y>U G S5ɲ+簫r] ]6~=h(CLíR3x(;H7)^Ƴ ~P˵e ' t :ٕgc|=s%R~{4EӆT1f;F>]CTw|O`<{0IrVd Tˁ7mR4yzGࠡ~=X#ަbO(zgCuǮ]mIBkHW]kU1LG5 u#S * ߌ.ڀq \'rZ_S445B ɑ/VF#*_ռ;SSySsBU%*d?H_ߓN9؇sYª% w`k0#NLU 2&-~84 ZIָ;Đ'DAU8< ϓqwcU ].kP1ӤL!ji|nJP"N?g߹D'Xpo8Rh5 wT1)ƀugxjF ܐyS ,,6qi {'7: ẋ9djȯs6<EjS)lqDTכӍ~䁑6hSaL9lr?iĔ6N50v%8d1'nzNЇ_9%.~um3_Umogc ǜǯFٟ^^dhUms|.$NyaXi\e4i1\;#]C=X<cIk+ZlK5Jac3*#1Sӓm\4`,{`JRZ71|)/=3c )w1-|9iW<4Rk J.lt_x5J}z1gU㇜O|uXcW!Z91V 2u]c`,"1U#K00ha, 2halE_i^u63+>XW%43VHΟrqpw[Xݠǵ kmv?uUՉ&1c1 e1%q jEMV0.1 jERXmyqKG#M=JQm(יȓ|V=GYܹ#ռ6r~C1o%PEy$jנʡ5‚"a|o~|}J+z?o1sǽ#V^g<>Nc,$ %ZlI J&՞[k6 6뫀0м`?éRG%cQ*ʲ+'sݍt{W,:~ޒ뎔b $22:E`!aqVc xhZePJ11!jڤDe*-*`KqbY:uO(c:36O2#+sR*R4]m{dER,`b(*s7耭4))LҤR|:¶_t&b"VSiRQ0RZ\S@g;Цv}T L2G Ѭ2GZ<:*Jwγ(XeΝo[cyfX5Bj概RIљj פ4R)f5&%h3}ҦnU11:&XMThaPZJިŤ.1QUxm:s ۞=Zڢޒ&:;[RgXcľQHhd+$e2{.vfu'Y=Yǐi]Ϲb󖜣tUӐn Edl}q+k[s#]NgkwJsn`g/urtbwu#b8v]ZΝW;̹rڨX[\vfz>%, =\픬` n8=^2K {OY]tݙվ8 $5^||m^WJH&QĬYYѭ6%EJ?[X ] u%)+M2'sjhEER2[c^&ak29uEY-EـLz5t%3[oy߷"v";{[UEgvWl޲Lkmۛ{ASֺi^ɬvBEUI򼏺LA9*rFQ`'CFlM ZPCsEV|LV1XTL#[+:GFv:IN FUYՅEh Jwf/?w"uHۏEWb;mJ2}qukM^{554@v\l1"h(<9YѶ;KhVh!3e 6hJSi<9-P49`&ELk'ZBI9/I_5Uj*{X=T JT))&Fl~]VYv.ESu|z+$һWGMs["nHʜb(jWVtRP ;Y(Hkf&hT:&E(\]))R~QT  JIѕ9]y߁\dML])t^=h*ES_ˤF8hɳ):=kF*RQtEWJBWK:2O*S(ĥ]K4+E*߉:RQt$@JI1.M)B J%t/M5 JE| &bȻ$%l[ /z`vy,"听hE,)b[ņuJ&.P);P`a<Ι2Y7d/;W5wz%9cd[nKH05:-fѐD k!.#'SNH^<⾛N7wɴ7z3Eyj^Ms!C50Gpg4l*VY=H߰N [ AzE}vSjFòTa>ӵ^F89F16ƪR'Y2}?Vs1 p#c1N6c5G"Ih>]Ug"ۺ^zsV^lrՈGtL=2';&C]),c~NOK 3MrׂDIX11Q a$@+x'=S㭝O0J-X"5?֬= NN&sf%ZT̎W'7[S1;v uS/[)b Ǹ뽋7ɯT~G0 cv2Mj\u]r]MfwrĻ̷ijjSz0젂24X_"JVv*L/᩽H-bx,ȜNZ@]l2/ݮ XbG|덮*2^VLIW~Su6O/EWfqe~{%i t4XdYeיۜNm?k8-eNn!EWu:Ey Y|%9 NzWNݎK;uuOb(U?1P,+^^rUn$꠻;բl>urn_=p.h /wiS:5 _2OKO*:S{65utT׺vx`PeNh$Q>+ɞM'[*nUVeγ?K\Tnz̀:S߼7^P @'&3E>->[\h =W}gmYxҝio&Q18Vl Wi,o"bwsSV"˪aW(twxBө́IP |sBp;PguMdvҭ=327!kn5-Tt.jcm-+܌wLsw~ I\m|sx™3\ݰLmS8gp MnҤSA4&/8<';Rds*5PJ7% u_ZBS ES ;Ea9m Tto E |;e&n1(,BHvbҠ .B6N)SG`,YV*eJ,@F촂ŚS$XMf)!L` b;zV*զN#>L%\Fe)Ido8d10|1|10>kcc51Xc c,c11X ca|10>kcc51Xc c,c+JEMW*J+rES#k2RR+iA1\'GVf((:)f6N5EB- ;I@Td%*TU&*0hzks2U-B4hY-Y;iWPttnzdE m*mTtV[aKVlKr6# |zBbĪji>v"mT*𯕙>w0d˨4P *mt*9+Vy 408jMh)PM&RE<9rH>.3F<"ڀZutP1RDKw#$MWd_c?T8ddKY"kzN ˩0ҩds6%6ǟ']cSsFt WYfuQRW1yR,JΊ{@(_eJ-T@jcRT*JzD&PT̢fnx@K1Mʤ`n`̳*UV(Pꦍyo"sþ~Qb96v2DF,qvw1ƈ-U@uV߁S`eEU ,&=Ez(ΥFMc)7텉.+`,)P*贁6ET&&%PշW/@]TP>o-1ƠIEQAk.\rCtJZ5LUV܎Pv:8m34ObթRR,b1VC)SR,a_cсr?Gr~n^9 c1Pӭ:!nT~?bc cSN̵þ1ÇL@OqNŌ1l>|I^ d~a_c??u<þxFеx_Nk# Ҁ:>M1e${I]٘C+Oly'ڸ:}X5H4:8y0րcGmv\Q^n|p:s\}8d7X5~7Ej-\KKK0@ Ё[8Fk|[E ÅtTx"}7EpnqZZt6r>>ltl}~nngljF\16\I{c9ʙP-l}܂}\˥9,׺fk9-l|E{Hѽsy} lxmhϞAs[7s)ߕgejݼ[k=ӹщk9keq)ȗk9,727=ҝݝ5=w `ݳ}1:w_RnvB6ˈy`#x/s)w*n6_f+ލ\P_V൑ =jw9D 8/s!Pd#Pثsr 9[8[CqV.Ts4xwsK9>glVeQ i.y#lBl_F_C| MZ۽9Ϝ8$%[Ekp9 lD4?Ca ->> j7m@eDrx 0C. ܗhhHlDQ#$DHQ6<~l͛y3)ι饺aBF{H ?6|eDbRq16)l$?_g?e.#rz8s