Parallel Programming - Final version
authorSam Moore <sam@daedalus.(none)>
Wed, 3 Oct 2012 09:07:06 +0000 (17:07 +0800)
committerSam Moore <sam@daedalus.(none)>
Wed, 3 Oct 2012 09:07:06 +0000 (17:07 +0800)
Finished at 4am on Monday (naturally forgot to commit then)

70 files changed:
course/semester2/pprog/assignment1/assignment1.zip [new file with mode: 0644]
course/semester2/pprog/assignment1/get_data.py
course/semester2/pprog/assignment1/mthread/graphics.o [new file with mode: 0644]
course/semester2/pprog/assignment1/mthread/main.o [new file with mode: 0644]
course/semester2/pprog/assignment1/mthread/nbody [new file with mode: 0755]
course/semester2/pprog/assignment1/mthread/nbody.o [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/10.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/10_100.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/10_1000.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/500_100.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/Makefile [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/callgrind.out.4853 [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/cubes.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/efficiency.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/error.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/error2.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/error3.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/error_graph.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/error_zoom.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/graphics.c [new symlink]
course/semester2/pprog/assignment1/nbody-bh/graphics.h [new symlink]
course/semester2/pprog/assignment1/nbody-bh/graphics.o [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/kcachegrind.png [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/main.c [new symlink]
course/semester2/pprog/assignment1/nbody-bh/main.c~ [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/main.o [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/nbody [new file with mode: 0755]
course/semester2/pprog/assignment1/nbody-bh/nbody.c [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/nbody.c~ [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/nbody.h [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/nbody.h~ [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/nbody.o [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/tree.c [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/tree.c~ [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/tree.h [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/tree.h~ [new file with mode: 0644]
course/semester2/pprog/assignment1/nbody-bh/tree.o [new file with mode: 0644]
course/semester2/pprog/assignment1/odict.py [new file with mode: 0644]
course/semester2/pprog/assignment1/odict.pyc [new file with mode: 0644]
course/semester2/pprog/assignment1/openmp/graphics.o [new file with mode: 0644]
course/semester2/pprog/assignment1/openmp/main.o [new file with mode: 0644]
course/semester2/pprog/assignment1/openmp/nbody [new file with mode: 0755]
course/semester2/pprog/assignment1/openmp/nbody.c
course/semester2/pprog/assignment1/openmp/nbody.h
course/semester2/pprog/assignment1/openmp/nbody.o [new file with mode: 0644]
course/semester2/pprog/assignment1/performance_time_vs_steps.png [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.aux [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.dvi [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.log [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.out [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.pdf [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.ps [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.tex [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.tex~ [new file with mode: 0644]
course/semester2/pprog/assignment1/report/report.toc [new file with mode: 0644]
course/semester2/pprog/assignment1/single-thread/10.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/single-thread/10_100.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/single-thread/10_1000.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/single-thread/500_100.dat [new file with mode: 0644]
course/semester2/pprog/assignment1/single-thread/graphics.c
course/semester2/pprog/assignment1/single-thread/graphics.h
course/semester2/pprog/assignment1/single-thread/graphics.o [new file with mode: 0644]
course/semester2/pprog/assignment1/single-thread/main.c
course/semester2/pprog/assignment1/single-thread/main.o [new file with mode: 0644]
course/semester2/pprog/assignment1/single-thread/nbody [new file with mode: 0755]
course/semester2/pprog/assignment1/single-thread/nbody.c
course/semester2/pprog/assignment1/single-thread/nbody.c~
course/semester2/pprog/assignment1/single-thread/nbody.h
course/semester2/pprog/assignment1/single-thread/nbody.o [new file with mode: 0644]
course/semester2/pprog/assignment1/time_vs_n.png [new file with mode: 0644]

diff --git a/course/semester2/pprog/assignment1/assignment1.zip b/course/semester2/pprog/assignment1/assignment1.zip
new file mode 100644 (file)
index 0000000..5dbb59a
Binary files /dev/null and b/course/semester2/pprog/assignment1/assignment1.zip differ
index 359c418..b753590 100755 (executable)
@@ -1,23 +1,28 @@
 #!/usr/bin/python -u
 
 # @file get_data.py
-# @purpose Extract statistics from repeated runs of N-Body simulators
+# @purpose Extract statistics from repeated runs of N-Body simulators and graph them
 # @author Sam Moore (20503628) - 2012
+# Not documented very well, because it's not part of the task requirements
+# Mostly to get a different graph I just comment out a lot of lines and uncomment others. Well designed.
 
 import sys
 import os
 import subprocess
+import odict
 
 import Gnuplot, Gnuplot.funcutils
 plot = Gnuplot.Gnuplot(persist=0)
 
-programs = {
-       "single-thread" : "./single-thread/nbody -v 5"
-}
-for n in range(2, 20, 4):
-       programs.update({"mthread"+str(n) : "./mthread/nbody -v 5 -n "+str(n)})
-       #programs.update({"slow-mthread"+str(n) : "./mthread/nbody-slow -v 5 -n "+str(n)})
-       programs.update({"openmp"+str(n) : "./openmp/nbody -v 5 -n " +str(n)})
+programs = odict.odict([("single-thread" , "./single-thread/nbody -g")])
+
+for n in range(4, 5, 1):
+       programs.update({"mthread"+str(n) : "./mthread/nbody -g -n "+str(n)})
+       programs.update({"openmp"+str(n) : "./openmp/nbody -g -n " +str(n)})
+       for theta in [0.1, 1.0, 10.0]:
+               programs.update({"nbody-bh"+str(n)+":theta"+str(theta) : "./nbody-bh/nbody -g -n "+str(n)+" --theta " + str(theta)})
+
+
 
 
 
@@ -31,8 +36,8 @@ def RunProgram(string):
 
 def RunForSteps(program, field, steps):
        results = []
-       print(str(program) + " -s "+str(steps) + " " + str(field))
-       results = RunProgram(str(program) + " -s "+str(steps) + " " + str(field))
+       print(str(program) + " -s "+str(steps) + " -v 5 " + str(field))
+       results = RunProgram(str(program) + " -s "+str(steps) + " -v 5 " + str(field))
        return results
 
 def VaryField(program, steps, fields):
@@ -55,6 +60,9 @@ def main(argv):
        data = {}
        data.update(programs)
 
+       Plot_PerformanceN(data, 10, 1, 3000, 100)
+       
+       """
        fields = map(int, os.listdir("fields"))
        fields.sort(key = lambda e : e)
        
@@ -63,6 +71,7 @@ def main(argv):
                if n in ignore:
                        continue
                for p in data.keys():
+                       #Plot_MeanErrors(programs["single-thread"], programs[p], "fields/"+str(n), 0, 100)
                        data[p] = RunForSteps(programs[p], "fields/"+str(n), 200)
                        #print(str(data[p]))
 
@@ -76,9 +85,73 @@ def main(argv):
        
        #for p in sorted(data.items(), key = lambda e : e[1][0][len(e[1][0])-1][1]):
        #       print(str(p[0])+":"+str(n)+"\t"+str(p[1][0][len(p[1][0])-1][1]))
-               
+       """
        sys.stdin.readline()
        return 0
 
+def Plot_MeanErrors(control, program, field, sMin, sMax):
+       plot("set xlabel \"steps\"")
+       plot("set ylabel \"Error\"")
+       plot("set title \"Mean Position Error .vs. Steps\\n(Mean Error = Mean absolute error of all position components)\\nField: "+str(field)+"\"")
+       plot("set key outside right")
+       plot("set log y")
+       if (control == program):
+               return
+       d = []
+       for s in range(sMin, sMax, (sMax - sMin) / 20):
+               d.append([s, MeanError(control, program, field, s)])
+
+       plot.replot(Gnuplot.Data(d, title=str(program), with_="lp")) #linecolor "+str(fields.index(n))))
+       
+def Plot_PerformanceN(d, steps, nMin, nMax, nStep):
+
+       plot("set xlabel \"N bodies\"")
+       plot("set ylabel \"Real Time (s)\"")
+       plot("set title \"Time taken to simulate N randomly generated bodies for 1000 steps\"")
+       plot("set key outside right")
+       for p in d.items():
+               data = []
+               for n in range(nMin, nMax, nStep):
+                       print("Run for " + str(n) + " bodies; " + str(p[1]))
+                       r = RunProgram(str(p[1]) + " -r " + str(n) + " -s " + str(steps))
+                       data.append([n, r[len(r)-1][1]])
+               plot.replot(Gnuplot.Data(data, title=str(p[0]), with_="lp"))
+
+def MeanError(programA, programB, field, steps):
+       print("Calculate error for "+str(steps) + " steps: " + str(programB) + " .vs. " + str(programA))
+       RunProgram(str(programA) + " -s "+str(steps) + " " + str(field) + " " + "A.tmp")
+       RunProgram(str(programB) + " -s "+str(steps) + " " + str(field) + " " + "B.tmp")
+
+       A = open("A.tmp", "r", 0)
+       B = open("B.tmp", "r", 0)
+       
+       nA = int(A.readline().strip("\r\n\t "))
+       nB = int(B.readline().strip("\r\n\t "))
+       if (nA != nB):
+               sys.stderr.write("Body number error; A: " + str(nA) + " vs B: " + str(nB) + "\n")
+               sys.exit(1)
+
+       total_error = 0.0
+       values = 0
+       for i in range(0, nA):
+               dataA = A.readline().strip("\r\n\t ").split(" ")
+               dataB = B.readline().strip("\r\n\t ").split(" ")
+               #print("A: "+str(dataA))
+               #print("B: "+str(dataB))
+               dataA = map(float, dataA)[1:4] # Only count positions
+               dataB = map(float, dataB)[1:4]
+               #print("Length " + str(len(dataA)))
+               if (len(dataB) != len(dataA)):
+                       sys.stderr.write("Number of values in line are different\n")
+                       sys.exit(1)
+       
+               
+
+               values += len(dataA)
+               for j in range(0, len(dataA)-1):
+                       total_error += abs(dataB[j] - dataA[j])
+       os.system("rm A.tmp; rm B.tmp;")
+       return total_error / values     
+
 if __name__ == "__main__":
        sys.exit(main(sys.argv))
diff --git a/course/semester2/pprog/assignment1/mthread/graphics.o b/course/semester2/pprog/assignment1/mthread/graphics.o
new file mode 100644 (file)
index 0000000..fde8bab
Binary files /dev/null and b/course/semester2/pprog/assignment1/mthread/graphics.o differ
diff --git a/course/semester2/pprog/assignment1/mthread/main.o b/course/semester2/pprog/assignment1/mthread/main.o
new file mode 100644 (file)
index 0000000..c950775
Binary files /dev/null and b/course/semester2/pprog/assignment1/mthread/main.o differ
diff --git a/course/semester2/pprog/assignment1/mthread/nbody b/course/semester2/pprog/assignment1/mthread/nbody
new file mode 100755 (executable)
index 0000000..b5b5ec2
Binary files /dev/null and b/course/semester2/pprog/assignment1/mthread/nbody differ
diff --git a/course/semester2/pprog/assignment1/mthread/nbody.o b/course/semester2/pprog/assignment1/mthread/nbody.o
new file mode 100644 (file)
index 0000000..51c722c
Binary files /dev/null and b/course/semester2/pprog/assignment1/mthread/nbody.o differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/10.dat b/course/semester2/pprog/assignment1/nbody-bh/10.dat
new file mode 100644 (file)
index 0000000..c87554f
--- /dev/null
@@ -0,0 +1,501 @@
+500
+100000000000.000000 0.000008 -0.000006 -0.000000 0.000027 -0.000017 -0.000001 4759196.130752 -2164654.622312 -171744.516378
+10000000.000000 -6.599943 73.037942 0.001496 0.800166 0.075601 0.002988 2248.594421 -12332.525956 -220.932467
+10000000.000000 -22.799442 -40.114129 0.201517 0.401522 -0.227683 0.003057 17660.184290 24934.839538 1153.629691
+10000000.000000 -26.599463 40.269203 -0.298993 0.801440 0.537858 0.002018 15898.914569 -23885.663259 208.563922
+10000000.000000 -59.799913 99.121057 -0.599498 0.400236 0.242000 0.001006 2649.206266 -5034.116767 102.014204
+10000000.000000 -11.593026 -10.474124 -0.898973 0.818657 -0.944122 0.002416 202698.978714 181678.769901 15742.256565
+10000000.000000 67.299912 92.783735 -0.499493 0.599776 -0.432620 0.001024 -2083.850502 -3888.380772 451.876574
+10000000.000000 -93.699741 -29.199988 0.800496 0.600693 -56.399942 0.000987 7228.419740 1904.981937 -155.920254
+10000000.000000 24.399020 -29.678831 0.201987 0.797349 0.643129 0.003963 -30180.403806 34288.331527 -497.649488
+10000000.000000 -0.700001 77.003506 -0.799492 0.599993 0.006734 0.001024 -273.715422 -12040.499645 361.948921
+10000000.000000 -34.899803 65.053481 0.301998 0.200530 0.106710 0.003995 5938.819103 -10992.759987 -65.367661
+10000000.000000 15.099048 -28.946415 -0.697953 0.197449 0.108445 0.004128 -28222.606514 55434.439230 1475.196452
+10000000.000000 51.199896 -87.883888 0.500493 0.399728 0.232375 0.000973 -2781.730912 6616.802462 -543.300917
+10000000.000000 -15.899481 38.040892 -0.097712 0.201398 0.080949 0.005523 15647.932871 -36276.799436 42292.339680
+10000000.000000 37.399864 -76.807511 0.400498 0.799630 0.385175 0.000995 -4227.672573 8570.415022 -57.242744
+10000000.000000 -44.699461 35.385288 -0.198999 0.601445 0.770281 0.002002 15878.106889 -12928.621174 -9.840364
+10000000.000000 -59.699901 94.191330 0.500497 0.600267 0.382545 0.000991 3003.489130 -5020.285715 -158.599352
+10000000.000000 6.199819 -41.970197 0.200494 0.399511 0.060453 0.000984 -5591.042192 36817.374377 -180.334358
+10000000.000000 95.299868 -70.598494 0.001000 0.599641 0.803080 0.002000 -4124.392705 2981.034830 0.120908
+10000000.000000 16.199550 -39.918878 0.501484 0.398788 0.163017 0.002957 -13623.524484 33575.187921 -529.563025
+10000000.000000 -94.899831 -54.175833 0.900498 0.200458 -0.351603 0.000994 5249.172047 2774.280790 -75.555260
+10000000.000000 23.097200 12.821509 0.801895 0.192463 -0.358047 0.003711 -84378.402283 -46148.095622 -3470.581766
+10000000.000000 66.399587 24.984447 0.300497 0.798891 -2.031226 0.000990 -12267.472872 -5188.680198 -179.074508
+10000000.000000 -49.799328 -23.434471 -0.497993 0.401806 -0.868727 0.004020 20062.226277 9398.529650 231.308916
+10000000.000000 -46.599931 -96.195638 0.301499 0.800176 -0.391125 0.002999 1655.218746 6587.966788 18.259438
+10000000.000000 -34.599018 25.559200 -0.199032 0.802631 1.117806 0.001901 28801.318426 -25834.591821 -1441.008105
+10000000.000000 -43.899084 18.244070 -0.198496 0.202459 0.487879 0.003011 27272.754541 -11386.855359 123.902925
+10000000.000000 -68.799763 -53.260194 0.500498 0.400638 -0.520258 0.000993 7113.943371 5628.075470 -90.723685
+10000000.000000 -7.899921 -61.012525 0.500495 0.200213 -0.024641 0.000986 2397.320533 17799.567084 -165.298404
+10000000.000000 -66.799846 -74.180908 -0.599499 0.400417 -0.361692 0.001004 4702.054478 5438.282520 37.478981
+10000000.000000 94.299831 -54.487174 -0.697998 0.599540 1.025724 0.004005 -5304.825991 3093.278349 71.375991
+10000000.000000 -79.899802 55.145332 0.301498 0.200532 0.290585 0.002993 5896.232220 -3418.787446 -113.839785
+10000000.000000 -48.899620 44.111003 -0.797991 0.201018 0.221746 0.004026 11177.358222 -11334.508169 366.283841
+10000000.000000 -2.599788 31.036398 -0.899424 0.800555 0.071198 0.001211 5471.477809 -69519.679621 2534.835609
+10000000.000000 -28.799716 54.106878 -0.699492 0.400764 0.213388 0.001022 8532.802109 -15985.091158 267.050871
+10000000.000000 0.100001 -63.999455 0.800492 0.200004 0.001465 0.000979 70.494816 16328.857668 -256.654033
+10000000.000000 76.299789 -53.577628 -0.399498 0.599431 0.844848 0.001005 -6354.442138 4518.722904 66.245392
+10000000.000000 -77.799640 -10.733294 -0.298998 0.400966 -3.466562 0.002005 10649.470778 1152.689891 66.247126
+10000000.000000 73.099577 3.539971 0.300498 0.198859 -2.920073 0.000995 -12871.799398 -553.972565 -72.513293
+10000000.000000 0.100034 -69.999537 0.601497 0.200102 0.001249 0.002993 1415.580078 14017.359626 -84.994989
+10000000.000000 57.299854 77.780567 -0.697991 0.599603 -0.439012 0.004031 -4570.700975 -6370.279326 581.517649
+10000000.000000 -18.699231 -33.171398 0.001000 0.602063 -0.341887 0.002000 22750.794925 39596.029377 -12.037172
+10000000.000000 31.299916 -88.895263 0.700498 0.599772 0.209644 0.000993 -2586.081192 7408.642492 -88.360870
+10000000.000000 54.099313 -14.639805 0.000500 0.198149 0.720525 0.001002 -20714.415843 5814.265907 27.055491
+10000000.000000 7.256125 -1.104574 -0.494883 0.482820 -4.207939 0.012278 -1238601.747301 153018.388149 84957.158650
+10000000.000000 93.399828 53.311013 -0.699498 0.799534 -1.378042 0.001005 -5304.417076 -2921.127152 76.512559
+10000000.000000 63.199526 -16.258718 -0.897969 0.398754 1.482627 0.004101 -12611.438367 3000.001239 1799.384791
+10000000.000000 -94.699875 -73.390311 -0.797998 0.600338 -0.780548 0.004007 3802.372987 3194.962151 104.860104
+10000000.000000 6.199102 23.946455 -0.299454 0.397570 -0.109522 0.001125 -27797.411372 -105674.968568 1444.342586
+10000000.000000 -49.699859 -80.187285 0.001500 0.600383 -0.374419 0.003000 4437.512981 6544.784752 -1.870290
+10000000.000000 3.199943 49.987104 0.002000 0.399843 -0.026412 0.004001 -1868.371706 -26960.198130 23.287564
+10000000.000000 49.299671 -48.699674 0.000501 0.599117 0.600870 0.001002 -9821.423006 9488.483797 40.534780
+10000000.000000 -39.899649 -50.079572 0.901990 0.200949 -0.158847 0.003973 10711.114587 12921.182662 -340.324466
+10000000.000000 -29.899873 76.039159 0.400498 0.200343 0.078098 0.000994 3895.168077 -9516.075868 -77.290871
+10000000.000000 64.099914 -97.934551 0.000500 0.199770 0.131000 0.001000 -2529.054497 4499.142566 -3.209670
+10000000.000000 5.098268 17.966073 -0.899180 0.195321 -0.072076 0.001872 -53160.623516 -183496.833116 10090.884111
+10000000.000000 -11.599972 -88.054262 0.800490 0.800064 -0.108328 0.000966 375.177942 8487.288045 -605.690824
+10000000.000000 -56.699897 90.189831 0.000500 0.600273 0.379545 0.001000 2951.544082 -5132.890337 -1.233709
+10000000.000000 60.099375 0.999974 -0.699491 0.198316 -4.000061 0.001024 -18880.052020 -251.400896 294.459569
+10000000.000000 -98.899868 -71.139347 -0.399000 0.200364 -0.278632 0.002001 4314.550028 2720.681604 13.281315
+10000000.000000 48.099131 14.679737 -0.499489 0.197651 -0.640706 0.001032 -26686.588781 -7774.035980 429.955877
+10000000.000000 39.098568 -4.219816 -0.299488 0.196154 1.560483 0.001031 -42731.176317 4774.814559 345.909060
+10000000.000000 4.099987 97.995677 0.001000 0.199963 -0.008819 0.002000 -521.349308 -7541.530816 -4.117386
+10000000.000000 -51.899919 -98.052857 0.100498 0.200216 -0.105548 0.000994 2312.004871 7297.137509 -117.305654
+10000000.000000 -27.699779 -61.137241 0.001498 0.600603 -0.274155 0.002994 7017.989203 14263.214629 -115.459387
+10000000.000000 27.197558 -10.508108 -0.398964 0.393428 0.984442 0.002098 -73479.959328 28235.109208 1094.954243
+10000000.000000 -94.599797 42.904671 -0.599481 0.800572 1.809278 0.001055 7648.272086 -2771.230777 649.490230
+10000000.000000 -96.899772 6.233325 0.800489 0.200603 6.466644 0.000963 6313.679877 -299.852174 -692.624166
+10000000.000000 10.083977 -4.792042 0.101839 0.156887 0.421277 0.003564 -482945.949031 230659.433821 -4961.900834
+10000000.000000 -64.799641 36.360911 0.501997 0.400968 0.721683 0.003990 10842.573265 -6096.268487 -123.380434
+10000000.000000 76.399859 75.599898 0.700496 0.799616 -0.800262 0.000989 -4398.292698 -2451.518551 -170.045434
+10000000.000000 10.393189 10.628943 0.799956 0.781613 -0.747126 -0.000464 -209376.739136 -215741.116567 -16325.716384
+10000000.000000 -66.699547 19.116542 0.501996 0.601223 2.232994 0.003988 13683.646212 -3835.368426 -149.744178
+10000000.000000 -33.899472 40.084383 0.001500 0.201421 0.168342 0.003000 15826.983806 -18401.637965 6.161924
+10000000.000000 -47.799101 11.872520 0.400492 0.402416 1.744890 0.000976 26973.216226 -6707.581985 -376.250718
+10000000.000000 45.199017 14.399684 0.001991 0.397343 -1.200847 0.003970 -30125.333806 -9271.844973 -493.938703
+10000000.000000 -46.599918 -93.201978 0.900492 0.800214 -0.403843 0.000974 2140.013949 4889.217896 -420.704148
+10000000.000000 -24.899784 -58.042587 0.000998 0.200577 -0.084815 0.001992 6334.719624 15644.557432 -137.317260
+10000000.000000 46.399591 42.571707 -0.599494 0.798904 -0.856851 0.001017 -12130.100014 -11484.288027 214.876342
+10000000.000000 47.199750 -58.840365 -0.497997 0.399324 0.319490 0.004008 -7674.432029 9542.807654 105.154964
+10000000.000000 89.099770 -33.738146 -0.899496 0.199383 0.523771 0.001012 -6904.406588 2784.715813 199.363197
+10000000.000000 -60.699486 -19.963006 0.301999 0.601377 -1.925909 0.003998 15031.014971 4519.096052 11.162906
+10000000.000000 -3.599977 -79.019890 -0.099500 0.800066 -0.039527 0.000999 844.145519 11014.304708 -36.578735
+10000000.000000 21.195483 5.298725 0.300434 0.387850 -1.403376 0.000823 -135793.026865 -34593.690556 -1984.001574
+10000000.000000 -53.799332 17.635084 -0.898988 0.401797 1.270020 0.002034 19989.793965 -6476.942563 401.964200
+10000000.000000 -78.599660 17.974931 -0.198499 0.800916 3.949814 0.003004 10192.689817 -2140.921302 52.207179
+10000000.000000 -2.799970 61.009234 -0.599493 0.400081 0.018054 0.001018 894.724305 -18067.191816 221.572170
+10000000.000000 55.299905 -93.824299 0.100999 0.599746 0.351524 0.001997 -2821.463252 5291.165101 -61.598511
+10000000.000000 32.099969 90.964645 0.201490 0.199936 -0.070835 0.002971 -81.783303 -5595.055431 -396.700952
+10000000.000000 39.299931 98.881622 -0.498998 0.599817 -0.236900 0.002006 -1922.212636 -6281.507619 98.733331
+10000000.000000 -85.899806 50.171897 -0.298501 0.200525 0.343729 0.002996 5893.627319 -2833.042964 -63.777015
+10000000.000000 -10.599966 92.047569 -0.899490 0.800095 0.094958 0.001033 1164.204050 -7839.213304 595.068414
+10000000.000000 -35.899734 -57.062734 -0.798492 0.200716 -0.125172 0.003023 7968.671731 12869.393277 292.152591
+10000000.000000 -75.899905 91.083382 0.100497 0.200247 0.166661 0.000988 2403.955050 -4582.867558 -270.116307
+10000000.000000 90.099843 63.859265 -0.398999 0.199574 -0.281550 0.002002 -4928.069575 -3452.453293 22.566125
+10000000.000000 79.099723 36.786357 -0.099001 0.199247 -0.427377 0.001995 -8632.063249 -3998.579241 -89.552296
+10000000.000000 32.199706 -53.880995 -0.699493 0.399209 0.238342 0.001021 -8895.269688 14428.792776 260.518570
+10000000.000000 19.399925 -76.900927 0.600998 0.799807 0.198420 0.001996 -1913.026546 12023.490539 -15.845169
+10000000.000000 59.399899 89.737608 0.801497 0.799731 -0.524909 0.002990 -2910.932815 -5387.191951 -164.525354
+10000000.000000 -49.899920 -95.052456 -0.099496 0.200208 -0.104786 0.001014 2084.467564 5515.132081 232.569735
+10000000.000000 57.399496 -27.185467 -0.299497 0.798638 1.629237 0.001008 -15367.083300 7357.760016 89.513230
+10000000.000000 -2.799986 75.007590 0.001989 0.400038 0.014891 0.003963 413.827231 -12673.495336 -700.051995
+10000000.000000 -62.599886 89.282991 -0.497998 0.800311 0.565875 0.004006 3589.613962 -4682.516323 93.034879
+10000000.000000 63.099725 51.878659 0.600496 0.199251 -0.242802 0.000989 -8617.578233 -5131.948090 -165.328024
+10000000.000000 50.099578 -40.877706 -0.597994 0.198859 0.244826 0.004017 -12920.105285 10367.167173 216.112993
+10000000.000000 -27.599640 -48.232718 -0.298495 0.800969 -0.465016 0.003013 10758.454008 18233.492242 146.840961
+10000000.000000 -18.897971 20.092878 0.900402 0.205456 0.184298 0.000734 60705.523198 -63479.535160 -3021.195069
+10000000.000000 13.299550 37.896055 0.400485 0.598789 -0.208793 0.000959 -13631.643198 -39203.759741 -477.700951
+10000000.000000 80.299892 -95.749874 0.001497 0.599704 0.500345 0.002989 -3565.352011 4050.939053 -159.814356
+10000000.000000 -51.799378 24.433046 0.001500 0.401671 0.865891 0.002999 18554.887710 -8788.899078 -26.488327
+10000000.000000 98.399818 44.128809 0.901498 0.799504 -1.742436 0.002993 -5720.705596 -2333.812506 -89.337422
+10000000.000000 -89.899789 -43.209201 0.500498 0.200575 -0.418330 0.000993 6601.835032 3163.962823 -98.456237
+10000000.000000 51.199682 -50.799684 0.301996 0.399136 0.400859 0.003988 -9948.815887 9858.887613 -188.854313
+10000000.000000 98.199795 -36.470196 0.800497 0.399437 1.059662 0.000991 -6698.613160 2328.424810 -141.689580
+10000000.000000 -59.799637 -40.299761 0.601493 0.400980 -0.599361 0.002978 11018.467906 7047.865173 -335.418391
+10000000.000000 69.099596 22.699860 -0.299498 0.198908 -0.600379 0.001006 -12377.306691 -4213.099382 99.242104
+10000000.000000 78.099917 -93.916919 -0.599494 0.199774 0.166236 0.001017 -2578.378218 3217.626002 207.006797
+10000000.000000 -43.599854 76.231327 0.201999 0.800393 0.462480 0.003997 4361.892835 -7559.361335 -36.024628
+10000000.000000 19.399889 70.892555 -0.298498 0.799698 -0.215169 0.003005 -3486.560078 -12128.913467 56.350375
+10000000.000000 54.399863 80.733123 -0.797992 0.799626 -0.533912 0.004027 -4359.554887 -6853.429081 480.836910
+10000000.000000 79.299812 -60.611347 -0.297993 0.599486 0.777387 0.004024 -6021.760914 3479.924837 453.346782
+10000000.000000 80.199860 82.807122 -0.597981 0.399606 -0.385814 0.004066 -4962.779939 -2531.900281 1183.041325
+10000000.000000 39.099667 -50.923095 -0.597994 0.199104 0.154113 0.004015 -10036.308988 13125.754104 184.293976
+10000000.000000 -26.899953 -81.033084 0.600469 0.200112 -0.066002 0.000908 719.788870 7120.465042 -1312.455218
+10000000.000000 72.399892 97.705993 -0.699491 0.799692 -0.588108 0.001031 -3966.549623 -4111.336732 550.754942
+10000000.000000 -89.899721 -12.749961 -0.199498 0.200763 -1.499895 0.001006 9099.696681 1198.987150 119.713275
+10000000.000000 -20.598894 28.298515 0.000996 0.802972 0.595994 0.001987 32789.825684 -45216.869786 -195.125062
+10000000.000000 94.199779 -31.412426 -0.698996 0.399400 1.175200 0.002011 -6921.173335 2296.632326 201.809457
+10000000.000000 -82.699801 53.469686 0.100499 0.600543 0.939289 0.000996 6355.827594 -3599.595939 -40.424411
+10000000.000000 0.400003 19.994421 -0.899237 0.799984 -0.014994 0.001716 -1796.049990 -166857.744321 8328.502979
+10000000.000000 70.199909 98.858442 0.801490 0.399751 -0.283232 0.002964 -2897.510706 -5058.358607 -648.079914
+10000000.000000 0.099996 -39.998611 -0.497978 0.199987 0.003727 0.004061 -284.823111 41210.752307 786.668687
+10000000.000000 -77.899817 61.127705 0.800491 0.200497 0.255283 0.000970 5673.528674 -5505.033795 -504.021246
+10000000.000000 70.399752 50.450806 -0.899496 0.799331 -1.098507 0.001012 -7585.337751 -5154.353882 156.853314
+10000000.000000 -71.699632 -25.863870 0.000500 0.600991 -1.727647 0.001000 11033.432451 4069.266688 3.928028
+10000000.000000 69.399886 93.706244 0.200494 0.799680 -0.587612 0.000979 -4057.640180 -4323.188139 -397.056681
+10000000.000000 19.399866 -61.876900 0.500472 0.799657 0.246564 0.000905 -3334.155428 15876.632176 -1875.282062
+10000000.000000 22.099944 92.976096 -0.198499 0.199850 -0.047985 0.003002 -1681.447015 -7721.297411 23.186116
+10000000.000000 23.299438 -38.822130 0.300492 0.598485 0.356394 0.000977 -17092.552471 28425.477780 -282.050404
+10000000.000000 -70.899792 55.128922 0.900994 0.200550 0.257731 0.001980 5821.818051 -4961.291013 -319.175223
+10000000.000000 12.099760 46.973545 0.101498 0.199352 -0.053547 0.002995 -7350.114788 -27652.592875 -59.824098
+10000000.000000 -35.798371 -8.028248 -0.599473 0.404375 -2.056259 0.001074 48425.265147 10704.792071 826.412383
+10000000.000000 -39.899721 -57.069791 -0.498496 0.200759 -0.139315 0.003010 8717.852456 11663.163361 118.152049
+10000000.000000 94.199795 -37.505175 0.501498 0.399447 0.989714 0.002994 -6256.533951 2849.668275 -81.969357
+10000000.000000 62.399618 35.310921 0.300970 0.798967 -1.378263 0.001900 -11795.699452 -4645.910220 -1528.241218
+10000000.000000 19.098909 -27.930529 -0.198990 0.197069 0.140047 0.002027 -32652.226277 48002.032865 279.846482
+10000000.000000 72.099559 -6.200000 0.801494 0.198798 -14.399978 0.002985 -13370.420390 1456.377683 -170.036478
+10000000.000000 0.100001 -91.999729 0.301999 0.200004 0.000734 0.003997 93.059878 8321.569464 -39.736471
+10000000.000000 21.396875 -12.351938 -0.099485 0.791585 1.297397 0.001039 -94577.358387 54518.827711 429.195827
+10000000.000000 56.199741 53.792345 -0.399497 0.399307 -0.415472 0.001007 -7575.174797 -6985.402004 85.934932
+10000000.000000 -96.599845 60.646562 -0.098498 0.800421 1.293041 0.003006 4857.442363 -3579.956518 86.681539
+10000000.000000 77.399882 -83.633208 0.002000 0.799683 0.733671 0.004000 -3582.479357 3778.544909 -5.644436
+10000000.000000 9.399924 -63.943216 -0.198998 0.799796 0.113937 0.002007 -2275.051298 16071.448496 84.389897
+10000000.000000 83.099817 58.859196 -0.299500 0.199503 -0.281696 0.001000 -5712.218299 -3800.360294 -5.713083
+10000000.000000 -52.899885 -96.055050 0.101496 0.200321 -0.109992 0.002987 4028.722646 4725.697676 -265.138546
+10000000.000000 20.099936 86.976732 -0.197999 0.199826 -0.046731 0.004002 -1976.723454 -8528.289808 23.267800
+10000000.000000 51.099637 44.886341 0.400995 0.199023 -0.227546 0.001985 -10901.948831 -9934.647494 -233.174623
+10000000.000000 -25.599560 -44.235631 -0.898480 0.801186 -0.470759 0.003056 13262.484389 21926.034401 707.706833
+10000000.000000 48.399185 -15.870308 0.800482 0.797806 2.259565 0.000950 -24535.281049 7721.402474 -642.052147
+10000000.000000 68.299920 -98.793804 0.900469 0.599796 0.412489 0.000889 -1897.766154 4130.752126 -2328.053295
+10000000.000000 19.299422 36.844785 -0.798469 0.598454 -0.311233 0.003088 -17043.910225 -34910.061541 1128.062531
+10000000.000000 20.099824 -60.966714 -0.799472 0.199520 0.066897 0.001100 -5570.539888 14039.710988 2024.089468
+10000000.000000 78.299830 -62.628415 0.601993 0.599546 0.743293 0.003974 -4938.998510 5374.419219 -480.915705
+10000000.000000 -18.699917 77.073677 0.300498 0.600222 0.147113 0.000993 2403.516622 -10548.573820 -101.820006
+10000000.000000 -70.899549 5.774979 -0.199499 0.201219 3.549946 0.001003 13800.118736 -585.996106 28.001571
+10000000.000000 68.099531 9.319935 0.000499 0.198742 -1.360170 0.000997 -13931.004559 -1669.408003 -64.229078
+10000000.000000 -78.899691 -27.292485 -0.297998 0.200833 -0.584892 0.004005 9308.866340 3369.372876 62.797787
+10000000.000000 -82.599884 -84.395121 -0.598499 0.800315 -0.790159 0.003003 3584.719697 3621.082635 44.055985
+10000000.000000 -85.799723 -24.716587 0.400498 0.400748 -1.433114 0.000994 8399.036189 2597.898332 -90.306194
+10000000.000000 10.083983 4.792044 -0.199180 0.156902 -0.421270 0.001861 -482727.532851 -230489.855533 9581.864599
+10000000.000000 6.099946 59.989372 0.300491 0.199862 -0.021701 0.000970 -1302.907647 -19371.900607 -507.990186
+10000000.000000 -84.899887 84.101071 0.000500 0.200305 0.202052 0.000999 3398.342524 -3888.578652 -27.054796
+10000000.000000 99.199784 -27.292802 0.701997 0.399409 1.414433 0.003991 -7003.466703 1554.507804 -140.510863
+10000000.000000 -77.599886 89.350446 -0.499496 0.800316 0.700820 0.001013 3868.259568 -3095.502004 285.339452
+10000000.000000 21.097085 13.848051 -0.597909 0.192170 -0.305234 0.004252 -87082.825642 -57974.487780 3047.681381
+10000000.000000 1.099968 -43.996563 0.800475 0.199909 0.007679 0.000929 -1182.010864 35035.791154 -887.011760
+10000000.000000 20.198534 -23.831573 -0.799439 0.396057 0.338063 0.001164 -44098.453859 52487.080647 1862.309933
+10000000.000000 14.399965 -98.943204 0.301999 0.799903 0.113758 0.003998 -1163.920311 7201.874431 -19.449037
+10000000.000000 21.299334 35.823892 -0.199498 0.598193 -0.352971 0.001001 -20751.180706 -32763.990327 -123.381148
+10000000.000000 -87.899772 -38.231484 -0.099000 0.200617 -0.462904 0.002001 6951.380303 2790.615005 26.590272
+10000000.000000 -91.899873 75.122562 -0.299498 0.200344 0.245051 0.001005 3889.051435 -3227.968169 96.623464
+10000000.000000 -46.599423 32.587116 -0.799488 0.801554 1.173971 0.001033 17357.631761 -11327.994491 431.793922
+10000000.000000 -53.599567 -37.583500 -0.098001 0.801165 -1.166814 0.003995 12978.788170 8038.360354 -146.240762
+10000000.000000 -15.899481 38.040892 0.299810 0.201398 0.080950 -0.001332 15647.350172 -36272.692982 -42480.587848
+10000000.000000 24.199821 -62.923344 -0.199497 0.399517 0.153636 0.001010 -5494.511753 14068.339461 173.375087
+10000000.000000 36.098397 7.549649 0.101995 0.195693 -0.900935 0.003986 -47852.196200 -9995.223074 -163.478150
+10000000.000000 12.099548 -36.966162 -0.499478 0.198785 0.068642 0.001059 -13520.681627 41985.223922 711.116982
+10000000.000000 -7.599711 -39.080670 0.900466 0.800780 -0.160387 0.000908 8650.561334 41444.581362 -1075.534745
+10000000.000000 -14.898225 22.065569 0.000503 0.204767 0.129331 0.001010 52815.780904 -78597.531617 214.856022
+10000000.000000 25.099939 -93.973169 -0.199499 0.199835 0.053831 0.001002 -1842.427849 7308.698327 36.360772
+10000000.000000 -33.799884 -81.083690 -0.799494 0.400309 -0.167205 0.001018 3317.481467 7646.743738 273.442241
+10000000.000000 -50.799588 42.242536 -0.498497 0.401118 0.484854 0.003008 12836.506601 -9439.815806 55.666822
+10000000.000000 -21.899542 -41.052723 0.901952 0.201218 -0.104787 0.003852 12993.101563 28728.152026 -2341.314089
+10000000.000000 55.299802 63.741942 -0.297997 0.599473 -0.516288 0.004010 -5649.902320 -7547.503581 174.958827
+10000000.000000 -54.899869 81.067704 -0.399499 0.200351 0.135269 0.001004 3888.234106 -6041.788047 65.828748
+10000000.000000 -63.699431 -22.872551 0.302051 0.601566 -1.744941 0.004160 18248.143434 7862.815570 2455.933089
+10000000.000000 -87.599776 39.902473 0.300998 0.800602 1.804888 0.001995 6724.724974 -2559.563220 -88.394124
+10000000.000000 17.099933 -81.978946 -0.897994 0.199819 0.042338 0.004020 -2077.936661 9993.896706 311.165871
+10000000.000000 -9.896189 15.060945 -0.198923 0.210228 0.117954 0.002207 112970.181983 -171326.705818 2316.406206
+10000000.000000 -7.899982 -99.007846 0.300499 0.200050 -0.015525 0.000998 562.967722 7291.118184 -26.428914
+10000000.000000 -1.599971 -53.014295 0.600990 0.800078 -0.028038 0.001974 771.214879 24054.963069 -308.416057
+10000000.000000 -2.799731 -29.018076 0.201982 0.400718 -0.034358 0.003951 7659.854005 77991.882499 -553.943561
+10000000.000000 -25.799746 -55.093995 0.201994 0.400683 -0.187612 0.003982 7541.781392 16475.837670 -291.434179
+10000000.000000 -85.899876 79.108749 0.001500 0.200335 0.217421 0.002998 3773.200503 -3326.163921 -32.086937
+10000000.000000 -26.899944 -98.027332 -0.699498 0.200151 -0.054507 0.001006 1638.580358 6845.320095 80.964175
+10000000.000000 63.099872 82.923933 -0.199499 0.199651 -0.152248 0.001002 -4036.771656 -4951.069456 30.683973
+10000000.000000 -41.899693 53.078858 0.001000 0.200827 0.157447 0.002000 9253.934096 -11695.352385 -0.005218
+10000000.000000 -9.599889 58.068327 0.300496 0.800298 0.136214 0.000990 3298.008577 -19134.578957 -128.845013
+10000000.000000 62.099754 53.884947 0.600496 0.199340 -0.230280 0.000987 -7364.969972 -7572.438945 -194.522009
+10000000.000000 -76.799821 58.265370 0.000503 0.400477 0.530638 0.001010 5131.042016 -4414.257591 170.178671
+10000000.000000 62.199629 36.664613 -0.698468 0.399004 -0.670972 0.003106 -11019.113393 -8519.135614 1594.405173
+10000000.000000 -57.799656 -43.269500 -0.099498 0.400925 -0.538809 0.001007 10263.728132 8313.579056 101.206319
+10000000.000000 17.098510 23.926943 -0.899387 0.196005 -0.147662 0.001309 -44029.959798 -66822.832800 3402.175604
+10000000.000000 51.099323 -21.767895 -0.497991 0.198170 0.464404 0.004026 -20712.325194 8373.744838 364.297377
+10000000.000000 31.298803 22.594757 0.400483 0.596789 -0.811098 0.000953 -35613.163695 -26491.562788 -569.064374
+10000000.000000 -58.699803 -65.272090 -0.699497 0.600531 -0.544030 0.001007 5915.012835 6572.499653 85.460195
+10000000.000000 24.099880 -74.967645 0.901492 0.199671 0.064965 0.002973 -3925.716739 11041.906958 -427.443405
+10000000.000000 57.099776 60.906322 0.400495 0.199395 -0.187519 0.000983 -6865.530214 -7012.066846 -289.646744
+10000000.000000 86.199779 -42.599889 0.801997 0.399404 0.800301 0.003990 -6752.091137 3456.375338 -143.796287
+10000000.000000 -24.599818 63.158275 0.001000 0.800490 0.316235 0.002000 5466.912043 -13685.443506 -3.020504
+10000000.000000 -13.599943 -89.062634 -0.499489 0.800159 -0.125062 0.001036 2013.810861 8977.839633 574.190125
+10000000.000000 -7.899854 -49.015428 0.901482 0.200392 -0.030235 0.002949 4317.694688 26969.400310 -628.663538
+10000000.000000 85.299705 -16.583274 -0.898496 0.599203 2.833487 0.003014 -8982.884397 1382.227739 155.770430
+10000000.000000 -58.899845 74.079518 0.501990 0.200417 0.158875 0.003964 4768.077228 -7120.779625 -760.547879
+10000000.000000 15.295700 12.650142 0.200442 0.588418 -0.702227 0.000845 -130340.774266 -108328.467844 -1728.187371
+10000000.000000 47.399013 2.866544 -0.599487 0.797346 -6.266979 0.001036 -29640.930751 -2378.647747 439.633054
+10000000.000000 70.299581 15.764606 0.400991 0.598872 -2.470853 0.001973 -12639.901217 -2789.099639 -386.917259
+10000000.000000 98.099838 55.824910 -0.198000 0.199556 -0.350246 0.004000 -5200.938390 -2836.242804 -11.269471
+10000000.000000 -3.599976 73.021517 -0.898984 0.800065 0.042771 0.002051 699.764692 -11373.881165 862.174657
+10000000.000000 -30.799249 -33.187087 0.002000 0.402020 -0.373630 0.004000 22469.769055 23682.848098 -10.453018
+10000000.000000 71.199595 19.289885 -0.798991 0.398903 -1.420311 0.002026 -12440.671617 -3444.944037 384.157141
+10000000.000000 13.099842 55.976127 0.401494 0.199572 -0.048197 0.002984 -4910.813443 -19612.810975 -199.824214
+10000000.000000 49.199338 -24.607653 0.100498 0.398216 0.784941 0.000993 -19958.364102 10705.058259 -118.820593
+10000000.000000 -53.899238 6.399977 0.200496 0.202041 10.799913 0.000988 22339.356720 -2413.694155 -176.379929
+10000000.000000 -86.899859 -65.133753 -0.099479 0.200374 -0.267456 0.001072 4052.858937 2095.346364 1276.523800
+10000000.000000 -74.599897 -94.319030 0.401999 0.800282 -0.637981 0.003996 3341.431967 3395.332977 -67.593980
+10000000.000000 -22.599908 -77.119150 0.700996 0.800242 -0.238072 0.001988 2545.768822 9944.881688 -152.684306
+10000000.000000 -38.899867 -83.046735 0.000496 0.200372 -0.093284 0.000985 4570.407178 8121.695320 -253.870418
+10000000.000000 -11.799589 38.061813 0.101497 0.401097 0.122701 0.002991 11868.955457 -40229.344037 -101.717664
+10000000.000000 60.399882 -86.723974 0.100499 0.799678 0.552164 0.000998 -3712.054523 4867.660515 -44.387785
+10000000.000000 95.099764 18.499954 0.301499 0.199365 -1.000122 0.002997 -7071.657159 -1288.707116 -39.502771
+10000000.000000 93.099763 25.642240 -0.298999 0.199358 -0.715570 0.002003 -7292.392418 -2123.233115 41.251690
+10000000.000000 -60.799849 77.158250 0.200500 0.400414 0.316360 0.000999 4835.030740 -6121.631321 -10.478227
+10000000.000000 80.199788 50.686139 -0.299500 0.399427 -0.627817 0.001001 -6453.966185 -4102.257331 -0.631586
+10000000.000000 -64.899653 -39.166455 -0.699492 0.200939 -0.332760 0.001024 10684.709112 6564.726710 354.339509
+10000000.000000 -24.898877 -27.091386 -0.697968 0.203019 -0.181945 0.004086 33532.710403 35975.501387 973.188648
+10000000.000000 22.399727 -52.833327 -0.799486 0.799260 0.333787 0.001042 -8528.789749 19111.136084 553.488766
+10000000.000000 77.299619 -22.099989 0.101000 0.598988 -46.199937 0.002000 -10313.997027 2445.666776 -14.076227
+10000000.000000 49.099373 26.818166 -0.899487 0.198313 -0.363916 0.001036 -18829.554959 -10736.441754 445.314252
+10000000.000000 24.098227 -19.878541 -0.899432 0.195226 0.243915 0.001184 -53491.055041 43282.566807 2090.966217
+10000000.000000 64.399461 -16.577605 -0.298523 0.798516 2.844912 0.002923 -18000.340957 4823.926881 -1440.965194
+10000000.000000 -86.799709 14.338419 0.700997 0.400784 2.676809 0.001992 8802.102452 -1295.902282 -101.340881
+10000000.000000 62.099650 -39.844775 0.002000 0.199057 0.310605 0.003999 -10581.779742 6773.528539 -11.444403
+10000000.000000 20.097530 -16.880262 0.200472 0.193362 0.240905 0.000921 -73911.955150 61934.313605 -955.735288
+10000000.000000 -30.599718 -51.242538 0.100991 0.800759 -0.484656 0.001974 8524.960588 18203.881679 -340.080224
+10000000.000000 34.398891 22.407950 0.100497 0.797010 -1.184608 0.000994 -33687.941963 -21924.379292 -47.081254
+10000000.000000 45.099226 -22.803943 0.900979 0.197926 0.392395 0.001939 -22905.873903 12204.587386 -832.435472
+10000000.000000 92.099804 -45.799901 0.501999 0.199467 0.400269 0.003996 -6132.038837 3124.210307 -48.567285
+10000000.000000 -16.899954 95.017622 -0.399505 0.200124 0.035021 0.000981 1387.830285 -9747.728021 -423.107428
+10000000.000000 -55.799885 -97.115298 -0.899492 0.400325 -0.230475 0.001025 4137.912363 5308.933223 416.694697
+10000000.000000 -98.899776 20.494958 -0.799497 0.200609 0.989885 0.001009 6992.768148 -1393.869424 161.100783
+10000000.000000 -32.899921 -93.035255 0.801496 0.200213 -0.070346 0.002989 2387.614543 7160.145967 -153.739973
+10000000.000000 -29.699961 -86.104327 -0.899494 0.600082 -0.208399 0.001019 -7.768066 11293.942542 272.181137
+10000000.000000 -98.699772 16.121400 0.601498 0.600617 4.242780 0.002992 7011.142973 -800.233445 -151.589390
+10000000.000000 -74.799801 55.272584 -0.799491 0.400530 0.545076 0.001029 5757.201426 -4020.898211 488.946527
+10000000.000000 31.099780 -62.950376 0.901989 0.199396 0.099543 0.003966 -7151.791411 12834.080758 -515.004734
+10000000.000000 -81.899903 -96.085305 0.100500 0.200266 -0.170530 0.001000 3118.524374 3507.362147 -1.213426
+10000000.000000 20.199730 -50.920878 0.001497 0.399279 0.158714 0.002990 -7940.447868 20461.102520 -188.744247
+10000000.000000 15.099858 60.974854 0.300497 0.199613 -0.050677 0.000991 -4499.618422 -16756.675633 -124.683722
+10000000.000000 52.199876 78.868150 -0.199500 0.399678 -0.263835 0.001000 -3161.312871 -5899.922101 -15.647226
+10000000.000000 -86.699694 -11.262471 0.601492 0.600839 -6.524925 0.002970 9992.267875 508.310024 -693.648700
+10000000.000000 88.299707 6.066639 0.300499 0.599207 -5.866736 0.000997 -9029.132317 -535.289491 -44.499988
+10000000.000000 -78.899957 74.106631 -0.098052 0.200054 0.213200 0.003814 -1783.897316 -1781.387158 -4120.191367
+10000000.000000 -93.699835 56.503472 -0.597997 0.600444 1.006874 0.004010 4957.201646 -3077.524617 173.234031
+10000000.000000 57.299755 56.699749 -0.599494 0.599339 -0.600677 0.001019 -7467.633093 -7638.649826 288.660979
+10000000.000000 10.299922 65.954044 -0.798993 0.599789 -0.092260 0.002020 -2444.631067 -15185.262953 251.863007
+10000000.000000 -95.899774 24.399942 -0.798998 0.200609 0.799840 0.002007 6872.867345 -1893.327289 103.864892
+10000000.000000 71.399572 11.971352 -0.898490 0.798843 -4.057342 0.003029 -13161.231039 -1929.259805 409.473525
+10000000.000000 94.099770 -26.651792 -0.199500 0.199376 0.696455 0.001001 -7250.365627 1737.928749 62.085405
+10000000.000000 80.299650 6.333296 -0.297998 0.599052 -5.333428 0.004005 -10750.264897 -781.134810 63.334679
+10000000.000000 38.099878 80.952836 0.001501 0.199668 -0.094496 0.003002 -3800.338150 -7323.343330 40.130146
+10000000.000000 -73.899733 42.176040 0.002000 0.200716 0.351978 0.004000 7957.206044 -4448.171719 -2.174934
+10000000.000000 20.194589 1.665912 0.001001 0.385452 -2.668566 0.002002 -162060.699171 -13935.731335 26.759587
+10000000.000000 70.399707 -41.333159 -0.498998 0.799210 1.333804 0.002007 -8880.946772 5252.842393 83.817323
+10000000.000000 74.299888 89.753202 -0.598998 0.599693 -0.493688 0.002006 -3619.567689 -4008.424424 94.597973
+10000000.000000 55.199853 74.853133 0.500495 0.399610 -0.293865 0.000985 -4152.874132 -5632.181885 -276.271841
+10000000.000000 -36.799901 -83.088900 -0.598990 0.400255 -0.177617 0.002032 2523.069071 8035.281001 532.110779
+10000000.000000 -50.899151 -6.019916 0.700487 0.202281 -2.039769 0.000966 25350.994588 2840.435585 -391.243219
+10000000.000000 -95.899784 -31.309608 -0.597998 0.200587 -0.619167 0.004005 6797.679739 2301.913317 110.499958
+10000000.000000 57.299721 -52.677103 0.002000 0.599245 0.645974 0.004000 -8637.821669 7777.264613 -0.224544
+10000000.000000 -81.799840 -63.260199 -0.699491 0.400425 -0.520324 0.001033 4519.440117 3177.931847 623.407651
+10000000.000000 51.099328 21.767894 0.001999 0.198189 -0.464409 0.003997 -20299.223298 -8529.386550 -54.659356
+10000000.000000 -16.599506 -39.173237 -0.198496 0.801329 -0.345714 0.003010 14778.837882 33079.601205 5.872413
+10000000.000000 -82.799842 -65.255248 0.700990 0.400424 -0.510392 0.001966 4696.067512 4591.526849 -642.762413
+10000000.000000 79.099824 62.874462 -0.898497 0.199523 -0.251178 0.003008 -5406.790833 -4403.324694 113.260822
+10000000.000000 5.399865 43.953412 0.601983 0.799631 -0.093956 0.003953 -4401.776785 -33876.519395 -571.663081
+10000000.000000 -87.899796 52.169108 -0.798994 0.200559 0.338128 0.002020 6532.758673 -3887.561339 300.852638
+10000000.000000 -15.699671 45.105735 0.500989 0.600883 0.210825 0.001970 9734.196364 -28051.463460 -349.686731
+10000000.000000 5.399928 -53.962202 0.001500 0.799803 0.076122 0.003001 -2306.912402 22867.075387 21.600206
+10000000.000000 -38.799580 -45.172862 0.800990 0.401129 -0.345403 0.001974 12601.059609 13987.681786 -315.616677
+10000000.000000 91.099917 -97.907044 0.400497 0.199781 0.185986 0.000991 -2328.776998 3231.290318 -153.916670
+10000000.000000 33.299879 91.892122 0.001508 0.599653 -0.215963 0.003026 -4571.386799 -8917.463382 391.969870
+10000000.000000 -27.899875 -82.033829 0.000521 0.200343 -0.067423 0.001063 4124.097969 10222.825820 965.633063
+10000000.000000 84.299787 46.463712 -0.798498 0.599425 -1.072659 0.003007 -6433.890950 -3547.314844 87.371914
+10000000.000000 -73.599826 61.485079 -0.399496 0.800459 0.970036 0.001012 4828.974815 -5348.675747 192.494658
+10000000.000000 44.099629 -46.905988 -0.698493 0.199000 0.188295 0.003020 -11199.717035 11813.677884 248.870578
+10000000.000000 -35.899592 46.077740 0.701491 0.201099 0.155119 0.002974 12289.730385 -15675.097166 -312.510433
+10000000.000000 -80.799899 94.172221 -0.398499 0.400276 0.344353 0.003002 3252.501294 -3908.719485 36.123867
+10000000.000000 -16.799969 93.036330 -0.799494 0.400066 0.072520 0.001021 49.113931 -6065.172573 359.766731
+10000000.000000 80.199697 -25.384516 0.700497 0.399191 1.231036 0.000989 -8932.342939 2660.457860 -165.290234
+10000000.000000 38.399583 -44.661731 -0.499494 0.798879 0.676871 0.001015 -12514.001944 14494.106406 175.339651
+10000000.000000 -40.699860 -81.151617 0.501994 0.600390 -0.303080 0.003980 4805.241781 6703.849934 -364.897941
+10000000.000000 -62.599451 26.199890 0.000932 0.801444 50.399645 0.001836 14096.846045 -5414.210264 6.118330
+10000000.000000 -79.599752 74.432291 -0.598440 0.800722 0.864454 0.003203 10187.248816 -6511.083418 4185.968010
+10000000.000000 68.099817 65.896792 0.400998 0.199506 -0.206540 0.001995 -5625.625910 -5402.885195 -77.177601
+10000000.000000 -14.899608 -41.035478 -0.799474 0.201043 -0.070186 0.001074 11200.642843 33500.382009 984.283806
+10000000.000000 61.399834 -71.660918 -0.399499 0.799551 0.678299 0.001003 -5104.353583 5826.423864 41.579779
+10000000.000000 16.399940 82.922582 -0.298499 0.799838 -0.155051 0.003004 -1831.614334 -9328.117408 47.027212
+10000000.000000 -58.599837 72.327600 -0.198492 0.800434 0.655100 0.003031 4625.091182 -4216.499396 687.497407
+10000000.000000 43.098865 -8.521983 -0.397989 0.196948 0.956195 0.004031 -33984.145841 6933.209723 351.473386
+10000000.000000 83.399882 -84.609299 0.001500 0.799678 0.781481 0.003000 -3747.074384 3433.657851 -1.989483
+10000000.000000 33.399906 84.844455 0.500498 0.799750 -0.311263 0.000993 -2676.711147 -7576.091167 -102.504029
+10000000.000000 -62.899428 5.100026 -0.298940 0.201538 4.200045 0.002134 17065.525599 -1025.150801 77.619395
+10000000.000000 -88.899754 29.306818 0.900497 0.200665 0.613583 0.000990 7495.687245 -2347.745083 -129.991167
+10000000.000000 -10.700042 96.034119 -0.398954 0.599855 0.068048 0.002144 -2654.370597 -8313.950826 2134.598326
+10000000.000000 20.099861 -64.968749 0.200497 0.199630 0.062850 0.000992 -4013.843834 15128.708353 -109.676354
+10000000.000000 0.299986 -17.993123 -0.899155 0.599924 0.018476 0.001927 -3031.835991 205378.447903 10330.506388
+10000000.000000 58.099808 66.913210 -0.099000 0.199479 -0.173739 0.002001 -5938.271452 -6896.886730 16.044659
+10000000.000000 -28.799922 91.063497 0.000500 0.400211 0.126825 0.000999 2428.330587 -7364.565875 -11.395622
+10000000.000000 -38.699891 84.139044 0.300499 0.600292 0.277919 0.000996 3210.166014 -7390.255806 -50.367621
+10000000.000000 -19.799632 -45.088038 -0.898479 0.400988 -0.175486 0.003058 10881.419865 25701.555143 722.842481
+10000000.000000 -66.699828 -69.291131 -0.898497 0.600465 -0.582144 0.003008 5230.448393 5161.700450 107.618604
+10000000.000000 -4.899788 -37.011935 0.900459 0.200566 -0.022793 0.000889 6118.715476 46830.076216 -1281.819710
+10000000.000000 72.399800 59.519835 -0.899497 0.799459 -0.960443 0.001010 -6135.855697 -4935.086388 130.780128
+10000000.000000 -79.899795 58.137784 0.501495 0.200566 0.275460 0.002983 6725.925953 -4704.850560 -267.502354
+10000000.000000 45.199912 -94.905069 0.000501 0.399764 0.190003 0.001002 -2645.874647 6164.101595 31.292848
+10000000.000000 82.399665 -31.799986 0.500497 0.799112 -65.599922 0.000992 -8649.313260 3328.778508 -72.122510
+10000000.000000 5.400015 76.973601 -0.899490 0.800060 -0.053129 0.001033 1428.963903 -14821.082008 568.064305
+10000000.000000 -23.799819 -61.078197 -0.798988 0.400484 -0.156050 0.002034 5230.055258 14935.410798 484.277253
+10000000.000000 -12.899799 -51.024702 -0.799486 0.200540 -0.048859 0.001040 6025.300392 23731.346350 489.416784
+10000000.000000 -88.699911 99.269597 -0.399500 0.600243 0.539122 0.001001 2824.938015 -3188.726895 15.720159
+10000000.000000 -46.899905 93.050356 -0.797995 0.200258 0.100587 0.004016 2931.633875 -5421.269192 248.307629
+10000000.000000 53.099871 -86.938899 -0.899486 0.199640 0.122326 0.001048 -4443.922448 5370.279844 879.966318
+10000000.000000 31.199641 48.872905 -0.897989 0.399033 -0.254579 0.004029 -10867.036077 -16906.179668 340.291721
+10000000.000000 84.299803 -52.524405 0.801497 0.599468 0.951278 0.002993 -6053.190233 3799.311520 -105.383577
+10000000.000000 7.199915 57.975221 -0.498988 0.399767 -0.049987 0.002037 -2824.886034 -18696.695992 591.410332
+10000000.000000 29.399775 -59.806222 -0.699488 0.799392 0.387855 0.001038 -6903.217122 12974.590436 600.663458
+10000000.000000 -63.899633 -36.177583 0.100498 0.200987 -0.355041 0.000991 11024.354554 5453.698114 -162.338233
+10000000.000000 -58.899704 -49.120157 0.200499 0.200797 -0.240137 0.000996 8910.636119 7758.737974 -50.294238
+10000000.000000 42.299092 20.399552 -0.398983 0.597556 -1.201193 0.002052 -27338.153966 -12795.258575 768.653188
+10000000.000000 -0.899975 48.001110 0.201496 0.200072 0.001548 0.002988 912.067971 -29202.606819 -140.714840
+10000000.000000 2.099359 18.983385 0.701262 0.198276 -0.037420 0.002350 -19498.932842 -182131.298591 -7609.580330
+10000000.000000 8.399545 -32.901151 0.701458 0.798773 0.198984 0.002887 -13930.268074 55859.859144 -1310.773120
+10000000.000000 -9.584179 5.791887 -0.696887 0.842269 1.577788 0.006988 455587.063440 -270090.582832 33018.955661
+10000000.000000 7.195925 -13.891883 0.899976 0.389014 0.221790 -0.000409 -124303.078328 241178.916845 -15716.248207
+10000000.000000 -47.899065 -13.369056 0.001500 0.202523 -0.737999 0.003000 28479.979147 4854.514460 1.938207
+10000000.000000 56.399461 25.138212 -0.199498 0.798547 -1.723746 0.001005 -16370.249987 -7336.676380 55.374423
+10000000.000000 -95.899780 41.234089 0.501480 0.200608 0.468151 0.002938 7250.618204 -1208.888709 -785.297471
+10000000.000000 7.299980 -91.976909 -0.198498 0.599948 0.046365 0.003006 -569.244282 7978.917971 97.277899
+10000000.000000 3.298679 16.939723 0.800141 0.596409 -0.125566 0.000026 -42386.262384 -217753.294072 -11206.413940
+10000000.000000 -87.799826 -66.266532 0.800980 0.400490 -0.532948 0.001931 6157.915203 5087.869645 -1327.799869
+10000000.000000 22.399115 -30.714856 0.000501 0.797622 0.571163 0.001003 -26559.193611 37941.169429 41.099593
+10000000.000000 -4.899851 42.010661 0.800975 0.200402 0.020467 0.001931 4491.193576 -37213.481564 -803.300756
+10000000.000000 -72.899910 -97.075125 0.201500 0.200240 -0.150148 0.003001 2578.025839 4481.123763 25.104627
+10000000.000000 17.398364 22.702252 -0.597971 0.795578 -0.596895 0.004071 -50489.325345 -61088.227675 761.501419
+10000000.000000 42.399912 96.826616 -0.099000 0.799757 -0.346899 0.001998 -2927.704370 -5722.595390 -38.831099
+10000000.000000 25.199865 -71.930192 -0.699491 0.399632 0.139867 0.001029 -4303.766279 10884.665207 458.062661
+10000000.000000 -81.899823 44.186299 -0.297983 0.200468 0.372570 0.004048 5031.057168 -1156.243554 633.357102
+10000000.000000 -22.699844 -64.107338 -0.798493 0.600414 -0.214337 0.003021 4415.993833 14761.728102 260.767520
+10000000.000000 27.399218 32.671774 -0.097997 0.797893 -0.657105 0.004007 -23665.840370 -28313.425789 79.969927
+10000000.000000 -29.699873 -76.118117 0.701995 0.600341 -0.236028 0.003986 3809.374490 8956.017040 -203.276315
+10000000.000000 15.099722 -46.967206 0.501735 0.199253 0.066193 0.003047 -8303.730116 26334.358323 -18817.455614
+10000000.000000 47.399522 -37.504877 -0.198998 0.798714 0.990508 0.002004 -14398.736131 11392.465818 38.754143
+10000000.000000 -45.799548 40.229603 0.100497 0.401214 0.458930 0.000992 13419.358590 -12013.742242 -132.093554
+10000000.000000 -68.899534 8.862441 -0.299498 0.201255 1.724835 0.001007 13987.030562 -2085.641086 83.064117
+10000000.000000 2.299956 -69.990966 0.700493 0.599870 0.018390 0.000981 -1830.302956 13991.764610 -241.423177
+10000000.000000 -4.596635 -14.133333 -0.498660 0.808952 -0.260096 0.002913 94330.354288 286498.534201 10130.766326
+10000000.000000 -89.599877 82.438915 -0.299499 0.800340 0.877750 0.001003 4074.834147 -3526.900499 49.104180
+10000000.000000 4.399554 26.937762 0.400953 0.798787 -0.126528 0.001873 -14309.202724 -89154.534467 -1481.008234
+10000000.000000 48.099035 -2.799921 0.500988 0.197406 2.400212 0.001965 -28709.790307 2420.693662 -659.818589
+10000000.000000 25.099732 53.953127 -0.297997 0.199278 -0.094145 0.004009 -8106.867095 -17336.041467 96.221368
+10000000.000000 70.099550 -2.249970 0.900493 0.198798 3.500073 0.000980 -13619.203238 248.850207 -248.661611
+10000000.000000 79.399668 18.419917 0.100999 0.799104 -3.160221 0.001997 -10129.120282 -2309.684914 -38.900119
+10000000.000000 2.248775 -3.750040 0.000996 0.459056 0.568576 0.001981 -1761106.171270 2990378.617560 -733.702717
+10000000.000000 1.299997 81.995997 -0.499498 0.599992 -0.008249 0.001006 -114.297198 -10615.230863 77.439687
+10000000.000000 68.199606 -26.496140 -0.398998 0.398938 1.007829 0.002007 -11900.460229 4696.101470 84.533557
+10000000.000000 -19.896474 12.164553 0.300947 0.209470 0.327647 0.001857 105021.048061 -63635.718262 -1594.467797
+10000000.000000 -66.899886 -88.075989 0.301499 0.200309 -0.151874 0.002998 3498.637324 4505.829427 -26.988287
+10000000.000000 -31.699596 -50.191512 0.000504 0.601106 -0.382702 0.001011 12962.584769 14053.528336 148.090041
+10000000.000000 -73.899622 -18.411021 0.001000 0.201017 -0.821980 0.002000 11302.420660 2724.913236 -1.189822
+10000000.000000 -18.699913 93.061050 -0.899494 0.600270 0.121937 0.001021 4264.050358 -7023.382530 383.614075
+10000000.000000 -97.899833 57.171844 0.800994 0.200462 0.343630 0.001981 5532.630203 -2528.682656 -310.399700
+10000000.000000 -51.799891 -93.111680 -0.098498 0.400303 -0.223272 0.003005 3700.571179 3754.634757 89.331024
+10000000.000000 -62.899610 -22.286204 0.801945 0.201012 -0.572327 0.003823 10508.181874 2810.014515 -2852.212317
+10000000.000000 -62.799453 11.259926 -0.297986 0.401472 2.519810 0.004045 16277.710619 -3075.500295 88.759675
+10000000.000000 7.299970 83.974677 0.501996 0.599914 -0.050875 0.003989 -1091.525596 -9934.028608 -158.120851
+10000000.000000 26.399244 -33.693140 -0.799474 0.797956 0.614394 0.001073 -23183.064257 29209.938423 884.670861
+10000000.000000 -68.899904 96.071738 0.301499 0.200261 0.143375 0.002998 2974.674082 -4365.707005 -38.816719
+10000000.000000 0.399993 -78.999634 -0.897993 0.799978 0.000987 0.004019 -400.048837 11111.951718 271.849376
+10000000.000000 -83.599777 -44.763518 -0.698997 0.800600 -1.526951 0.002008 6717.975843 3679.295046 113.858674
+10000000.000000 95.299900 -90.686725 0.801498 0.599728 0.626611 0.002995 -3175.089640 2596.882021 -74.766046
+10000000.000000 -22.899907 80.028433 -0.297998 0.200254 0.056644 0.004005 2937.312076 -9695.720323 76.649312
+10000000.000000 -92.899825 43.216179 -0.599496 0.200450 0.432283 0.001013 3970.773848 -3205.674229 216.921889
+10000000.000000 76.199710 34.565583 -0.799495 0.399221 -0.868920 0.001014 -8655.949690 -3760.265821 205.166595
+10000000.000000 -46.899171 -14.335386 0.000500 0.202214 -0.670535 0.001000 24095.914796 10460.423619 2.062905
+10000000.000000 43.298970 14.139615 -0.199519 0.597232 -1.721034 0.000940 -30981.602126 -11179.985553 -1049.208569
+10000000.000000 -11.699949 -80.044659 0.701496 0.600138 -0.089081 0.002990 1534.150534 10290.754943 -131.827310
+10000000.000000 6.099913 75.991774 -0.798001 0.199741 -0.016647 0.003995 -3878.893684 -8047.981413 -193.257848
+10000000.000000 9.099976 -95.990375 0.600497 0.199936 0.019429 0.000992 -724.671878 7843.942645 -125.904941
+10000000.000000 -57.899337 4.933296 -0.599491 0.201783 3.866564 0.001025 19897.977848 -1371.825593 315.672062
+10000000.000000 -26.899709 -52.051340 -0.398992 0.200781 -0.102283 0.002024 8637.518257 17343.982876 354.007644
+10000000.000000 51.199884 82.876895 0.900493 0.399693 -0.246368 0.000978 -3204.259353 -6885.238778 -371.195528
+10000000.000000 36.099755 -59.939605 0.400996 0.199335 0.121062 0.001990 -7649.665455 11860.491104 -141.660125
+10000000.000000 99.099771 18.478906 0.300499 0.199374 -1.042215 0.000998 -7333.846414 -1179.407205 -29.503885
+10000000.000000 46.199188 -19.539649 -0.897977 0.397820 0.920936 0.004067 -24236.487088 10101.381231 895.595068
+10000000.000000 76.399865 77.610088 0.602000 0.799635 -0.779952 0.003999 -4163.367646 -5553.685736 -13.431778
+10000000.000000 -78.899834 66.119553 -0.598497 0.200448 0.238999 0.003009 5103.822315 -4653.502130 152.904881
+10000000.000000 46.299431 -32.581412 0.001000 0.598468 0.837453 0.001999 -17120.075596 11985.852993 -20.195759
+10000000.000000 94.299903 -96.709188 -0.499497 0.599729 0.581689 0.001011 -3303.556656 2805.382939 192.870623
+10000000.000000 64.099886 87.927115 -0.298499 0.199692 -0.145880 0.003005 -3527.958800 -4815.882462 85.869967
+10000000.000000 56.099324 -11.533201 0.200497 0.198177 0.933684 0.000990 -20487.866429 3646.895575 -125.136886
+10000000.000000 -34.698974 24.436906 -0.599439 0.602760 0.873432 0.001173 30785.125773 -16814.259040 2156.714063
+10000000.000000 -32.597980 7.399782 -0.797951 0.805407 8.799326 0.004133 58636.827552 -12404.939517 1455.592857
+10000000.000000 -80.899693 23.352086 0.201999 0.200827 0.704109 0.003997 9293.098891 -2755.946131 -35.611022
+10000000.000000 -0.900004 93.000809 0.300497 0.199982 0.001430 0.000991 -446.880055 -8238.572599 -173.760085
+10000000.000000 56.099295 5.066591 0.400494 0.198102 -1.866869 0.000982 -21224.763889 -2108.485456 -231.263702
+10000000.000000 19.399284 -33.775176 0.201991 0.798073 0.450539 0.003975 -21633.462061 38667.979952 -318.225886
+10000000.000000 -42.899266 -27.158798 -0.397993 0.201972 -0.317279 0.004019 21879.633779 13816.557493 218.399901
+10000000.000000 84.199701 20.199926 0.002000 0.399190 -1.600200 0.004000 -9259.332672 -2224.541841 -1.021039
+10000000.000000 -28.799615 47.122776 0.000500 0.401036 0.245119 0.001000 11499.475071 -18857.894341 -2.763206
+10000000.000000 40.098605 3.000015 0.100996 0.196257 7.999994 0.001988 -41243.253812 -2609.135188 -141.300797
+10000000.000000 2.296750 10.927922 -0.498201 0.591109 -0.156172 0.004147 -108040.284381 -521976.550119 23885.987885
+10000000.000000 37.399891 85.827667 0.400498 0.799699 -0.344837 0.000995 -3576.541436 -7430.569253 -68.373038
+10000000.000000 -94.699886 -81.351754 0.800499 0.600309 -0.703435 0.000996 3549.022957 3145.891277 -65.799124
+10000000.000000 -3.699509 26.042970 0.000501 0.601309 0.083761 0.001003 13936.902580 -94800.058853 49.854184
+10000000.000000 59.199912 -96.878194 -0.799497 0.399763 0.243726 0.001011 -2691.934053 4987.590060 163.175789
+10000000.000000 -20.799882 71.058761 -0.199499 0.400319 0.117251 0.001004 3592.546875 -11822.624659 56.027664
+10000000.000000 49.399068 -0.900058 -0.698985 0.797491 -9.800125 0.002043 -28089.428987 14.397026 722.733734
+10000000.000000 59.199837 75.844550 0.600493 0.399548 -0.311024 0.000977 -5527.905876 -5354.459363 -444.412886
+10000000.000000 42.198963 13.399681 -0.898946 0.397236 -1.200837 0.002159 -29887.581191 -8550.966253 2336.563464
+10000000.000000 -30.599852 -85.145660 -0.898493 0.800418 -0.291180 0.003020 5395.563754 5908.600833 299.126195
+10000000.000000 53.099603 40.870429 -0.799492 0.198929 -0.259348 0.001022 -12043.046419 -8923.849838 290.373912
+10000000.000000 28.099810 -62.955114 0.700490 0.199493 0.090083 0.000969 -5541.840489 13518.900624 -453.802853
+10000000.000000 90.299744 -21.826025 -0.897996 0.599307 2.347989 0.004022 -7896.386170 701.229026 1243.974822
+10000000.000000 -73.899745 -46.160712 -0.099500 0.200688 -0.321317 0.001001 7733.463667 4722.585043 9.767708
+10000000.000000 79.099900 83.905805 0.400979 0.199742 -0.188505 0.001930 -2545.246047 -5014.139631 -1160.418295
+10000000.000000 -44.798903 9.999948 -0.798980 0.402927 17.999793 0.002056 31005.845971 -6020.734316 696.473248
+10000000.000000 50.299888 -84.823343 0.900493 0.599704 0.353432 0.000978 -3170.191695 5140.877558 -378.721140
+10000000.000000 -95.599866 73.525933 0.500998 0.800369 1.051800 0.001994 4452.028032 -2849.585342 -114.973307
+10000000.000000 -3.899637 29.011201 0.400455 0.200979 0.020622 0.000873 11006.000005 -77410.596855 -1624.652331
+10000000.000000 69.099884 -98.930168 -0.499467 0.199668 0.139764 0.001113 -4320.737706 4438.979285 2217.927211
+10000000.000000 20.199903 -74.946317 0.801993 0.399737 0.107593 0.003979 -2985.231372 9827.146777 -343.089020
+10000000.000000 44.299905 -89.853131 0.501498 0.599746 0.293878 0.002995 -2767.687009 6114.969775 -77.067619
+10000000.000000 -11.799914 96.024746 0.300456 0.400266 0.049305 0.000857 4067.888666 -8167.341521 -2375.814735
+10000000.000000 -2.599909 -43.026700 0.001501 0.800246 -0.052566 0.003004 2722.699031 36248.519649 94.010932
+10000000.000000 -96.699762 -17.818710 -0.898997 0.600650 -3.637391 0.002011 7405.560898 1240.473196 110.741801
+10000000.000000 48.199768 59.839702 -0.199499 0.399379 -0.320801 0.001003 -6801.201138 -8942.867149 34.672803
+10000000.000000 88.099785 44.804343 -0.899497 0.199415 -0.391382 0.001008 -6797.560034 -2931.868849 103.595036
+10000000.000000 -52.899600 -40.132183 -0.699491 0.201072 -0.264139 0.001027 11759.916307 9968.614705 435.366174
+10000000.000000 -84.599701 -11.666654 -0.199494 0.800791 -11.333298 0.001022 8233.566029 830.483558 495.640868
+10000000.000000 -45.599500 -37.496895 0.200997 0.801340 -0.993512 0.001993 14809.643289 12120.587479 -88.729020
+10000000.000000 -45.799917 96.095642 0.200497 0.400220 0.191139 0.000990 2348.408875 -6271.893920 -191.174787
+10000000.000000 -98.899750 6.299992 -0.297991 0.200690 6.599978 0.004033 8283.485728 -343.168559 646.563987
+10000000.000000 -20.699734 52.120490 0.500493 0.600714 0.240522 0.000981 7882.093515 -19960.307463 -228.620772
+10000000.000000 -8.798665 -23.074848 -0.198970 0.403580 -0.147349 0.002080 39317.310052 102127.603986 886.489451
+10000000.000000 -97.699852 -62.474104 0.401999 0.600402 -0.948145 0.003998 4658.585211 2716.581800 -30.823292
+10000000.000000 83.399875 85.613831 -0.297999 0.799653 -0.772430 0.004003 -4291.934940 -3949.137686 41.431371
+10000000.000000 67.199921 97.863122 0.201500 0.399799 -0.273866 0.003001 -1877.602352 -4749.563012 27.958982
+10000000.000000 1.399965 40.988916 -0.399485 0.799903 -0.023077 0.001041 -1295.719475 -39559.938748 497.834868
+10000000.000000 37.299925 -95.884170 0.200500 0.599798 0.231807 0.000999 -2243.268599 6395.293074 -11.679779
+10000000.000000 36.098649 14.759435 -0.099497 0.196372 -0.481515 0.001009 -40311.689884 -16654.861434 100.766158
+10000000.000000 -19.898740 26.075296 -0.398969 0.203387 0.149480 0.002086 37653.464191 -48423.477175 1030.913267
+10000000.000000 -82.799741 45.368734 0.001988 0.400711 0.737343 0.003961 8308.365668 -5517.843917 -601.557673
+10000000.000000 81.299757 -40.407194 -0.099499 0.599349 1.185697 0.001003 -7229.521262 3712.370619 49.478294
+10000000.000000 -60.599581 32.762281 0.002000 0.801125 1.524410 0.004001 12455.081399 -6681.576810 13.070461
+10000000.000000 -76.699793 -55.419852 -0.599498 0.600559 -0.839602 0.001006 6287.535698 4502.853359 82.494467
+10000000.000000 39.299806 -66.825045 -0.298498 0.599473 0.350139 0.003006 -6057.880623 9997.045431 76.525296
+10000000.000000 -85.599708 -19.023468 -0.297998 0.800789 -4.046888 0.004005 8916.939454 2088.865916 79.529993
+10000000.000000 -15.593301 -7.911300 0.000499 0.817939 -1.820426 0.000997 195769.997228 97554.810320 -63.631349
+10000000.000000 -43.899780 63.069528 0.201999 0.200593 0.138839 0.003997 6669.952213 -9449.187821 -37.291474
+10000000.000000 29.399900 80.856507 0.500498 0.799733 -0.287180 0.000994 -2920.815733 -8413.417488 -82.310322
+10000000.000000 -94.799816 50.379909 -0.899497 0.400502 0.759756 0.001009 5830.565160 -2745.229923 142.241363
+10000000.000000 -81.799680 -15.171372 -0.199499 0.400857 -2.342702 0.001003 9429.665325 1926.894714 45.133781
+10000000.000000 66.099889 -89.926522 -0.897997 0.199698 0.147056 0.004008 -3528.226266 4357.831959 119.736502
+10000000.000000 36.198964 -22.686298 -0.198494 0.397213 0.627851 0.003016 -31126.435170 19416.279588 173.935383
+10000000.000000 -4.699991 92.016036 -0.899494 0.600022 0.031883 0.001019 150.569609 -8209.762964 315.512171
+10000000.000000 31.099041 -27.888426 -0.399487 0.197417 0.223737 0.001034 -28921.140251 25590.589873 388.937305
+10000000.000000 -8.899979 90.009737 0.401992 0.200054 0.019299 0.003972 480.593252 -7542.474957 -512.838901
+10000000.000000 -16.699875 65.077980 0.001500 0.600336 0.155629 0.003000 3692.930821 -14429.700553 -5.216025
+10000000.000000 33.199301 33.805163 0.000500 0.398118 -0.390169 0.000999 -21126.571511 -21543.202781 -10.020439
+10000000.000000 20.098174 -20.902854 -0.898915 0.195096 0.195596 0.002232 -54537.985687 56610.482796 2657.623568
+10000000.000000 90.299718 -25.999993 0.800496 0.599244 -53.999960 0.000979 -7707.899540 2483.349888 -1273.944779
+10000000.000000 15.099722 -46.967206 -0.099243 0.199253 0.066194 0.001931 -8302.680149 26335.680983 18552.236868
+10000000.000000 -13.597634 19.291515 0.801860 0.806330 0.580807 0.003621 68915.608908 -97047.061619 -4316.534298
+10000000.000000 -44.899849 -76.058967 -0.097999 0.200409 -0.117768 0.004002 4680.576136 7208.576198 23.245825
+10000000.000000 -45.899878 83.055200 -0.298999 0.200329 0.110245 0.002003 3692.181190 -6769.194380 47.426993
+10000000.000000 12.399956 -81.941134 0.800495 0.799884 0.117962 0.000986 -1176.688172 10048.900473 -215.798633
+10000000.000000 12.092057 -8.860726 -0.598102 0.178635 0.282600 0.004070 -238894.446833 175575.044556 11924.236230
+10000000.000000 -60.599430 -14.033223 0.600994 0.801532 -4.066367 0.001983 16975.573265 3526.406214 -200.195039
+10000000.000000 42.199144 22.634293 0.700476 0.397697 -0.731764 0.000928 -25688.639230 -15151.725721 -1015.667576
diff --git a/course/semester2/pprog/assignment1/nbody-bh/10_100.dat b/course/semester2/pprog/assignment1/nbody-bh/10_100.dat
new file mode 100644 (file)
index 0000000..23f40ef
--- /dev/null
@@ -0,0 +1,11 @@
+10
+100000000000.000000 -0.000023 -0.000026 -0.000002 -0.000008 -0.000010 -0.000001 -111859.169013 -219245.215545 -13002.323923
+10000000.000000 -2.998439 73.365878 0.014978 0.800524 0.070134 0.002991 645.707047 -12274.487360 -24.646835
+10000000.000000 -20.978102 -41.110606 0.214800 0.408022 -0.215270 0.002925 14261.046753 27910.841797 -146.010328
+10000000.000000 -22.977977 42.665262 -0.289747 0.807961 0.526952 0.002093 13508.663057 -25007.647102 170.012931
+10000000.000000 -57.996320 100.205971 -0.594963 0.401362 0.240131 0.001014 2499.565601 -4312.275960 25.609555
+10000000.000000 -7.734637 -14.522560 -0.873055 0.890056 -0.852546 0.008930 116416.585926 216690.178285 13072.515729
+10000000.000000 69.995672 90.832824 -0.494968 0.598377 -0.434439 0.001012 -3100.706879 -4023.030380 21.915182
+10000000.000000 -90.994072 -282.997457 0.804949 0.601468 -56.399125 0.000987 237.773565 731.922275 -2.103021
+10000000.000000 27.957570 -26.750966 0.219653 0.783837 0.657837 0.003869 -32183.165825 30871.041935 -253.075903
+10000000.000000 1.999877 77.022681 -0.794811 0.599908 0.001730 0.001071 -426.299576 -11341.333397 138.106719
diff --git a/course/semester2/pprog/assignment1/nbody-bh/10_1000.dat b/course/semester2/pprog/assignment1/nbody-bh/10_1000.dat
new file mode 100644 (file)
index 0000000..8886baf
--- /dev/null
@@ -0,0 +1,11 @@
+10
+100000000000.000000 -0.000232 -0.001581 -0.000078 0.000006 -0.000043 -0.000002 45462.705363 -5733.894820 143.780638
+10000000.000000 32.898063 75.388875 0.128018 0.790569 0.022646 0.001797 -4324.321017 -9003.724105 -92.637804
+10000000.000000 -1.621871 -47.846394 0.329190 0.442163 -0.083376 0.002119 1006.658448 29111.402459 -200.338527
+10000000.000000 13.983733 63.968286 -0.182790 0.821885 0.428441 0.002559 -3292.381561 -15204.987818 43.208861
+10000000.000000 -39.709970 110.563358 -0.546837 0.410707 0.220039 0.001123 1639.168013 -4553.683953 22.527457
+10000000.000000 32.661863 -41.082347 -0.027597 0.856109 -0.479191 0.020953 -15103.424366 19008.017403 13.291942
+10000000.000000 96.578083 70.914126 -0.447340 0.582591 -0.449855 0.001101 -3752.315910 -2754.419983 17.387234
+10000000.000000 -63.925513 -2820.944822 0.849360 0.601529 -56.398766 0.000987 0.190786 8.404017 -0.002533
+10000000.000000 60.006892 4.457912 0.370830 0.653987 0.704503 0.002975 -18407.220760 -1356.078685 -113.833008
+10000000.000000 28.833496 75.948109 -0.714852 0.591120 -0.048285 0.002689 -3229.058370 -9521.030933 166.615675
diff --git a/course/semester2/pprog/assignment1/nbody-bh/500_100.dat b/course/semester2/pprog/assignment1/nbody-bh/500_100.dat
new file mode 100644 (file)
index 0000000..8918d11
--- /dev/null
@@ -0,0 +1,501 @@
+500
+100000000000.000000 0.000861 -0.000136 -0.000021 0.000283 -0.000099 -0.000007 10260057.280224 -4467363.967054 -61391.158143
+10000000.000000 -2.995426 73.365755 0.014091 0.802113 0.070274 0.002395 7510.090529 -10911.803333 -5102.860288
+10000000.000000 -20.974491 -41.114113 0.218178 0.409301 -0.217145 0.004972 14604.404573 17195.716652 18214.220064
+10000000.000000 -22.977508 42.664634 -0.289703 0.808053 0.526822 0.002109 13447.993886 -24846.304387 195.554546
+10000000.000000 -57.996395 100.204598 -0.594781 0.401280 0.239506 0.001099 2097.270532 -6226.248128 273.490795
+10000000.000000 -7.709090 -14.488839 -0.870559 0.904395 -0.832376 0.010359 116996.098212 217485.472269 13248.284747
+10000000.000000 69.997005 90.833049 -0.494261 0.599018 -0.434242 0.001367 -1483.752818 -2923.879225 1147.570138
+10000000.000000 -90.993697 -282.997230 0.804837 0.601557 -56.399044 0.000960 259.491103 798.802056 -2.343580
+10000000.000000 27.954979 -26.750943 0.219287 0.783013 0.657627 0.003727 -33211.157651 29878.726976 -554.460115
+10000000.000000 1.999503 77.021331 -0.794501 0.599861 0.001292 0.001193 94.908871 -11921.895946 390.426971
+10000000.000000 -33.991428 65.522435 0.319901 0.203140 0.101779 0.003960 5671.419747 -10852.922681 -88.673671
+10000000.000000 15.958104 -28.401833 -0.677874 0.184326 0.133231 0.004789 -30269.155703 54729.444397 1468.404598
+10000000.000000 52.996577 -86.830936 0.503332 0.399029 0.235735 -0.000164 -244.522625 7660.579152 -6707.903391
+10000000.000000 -14.977568 38.367872 -0.022499 0.208188 0.064538 0.030924 14611.862353 -36592.109287 92520.633026
+10000000.000000 40.993722 -75.065468 0.404913 0.797625 0.389029 0.000965 -4588.923175 8592.806082 -84.452402
+10000000.000000 -41.977695 38.837692 -0.190396 0.607922 0.764050 0.001789 12490.716333 -14976.107695 -1011.691925
+10000000.000000 -56.995825 95.907543 0.504698 0.601473 0.380209 0.000848 2262.901576 -5442.454244 -518.576412
+10000000.000000 7.991361 -41.660638 0.204732 0.396661 0.076909 0.000901 -7237.385942 36443.191218 -190.736363
+10000000.000000 97.993838 -66.981638 0.010005 0.597662 0.804402 0.002002 -4648.844310 2975.714332 1.990358
+10000000.000000 17.979585 -39.151298 0.514249 0.392299 0.177885 0.002719 -15118.486399 32684.454332 -529.211914
+10000000.000000 -93.992174 -55.755185 0.904875 0.202957 -0.350340 0.000947 5848.536880 2822.472001 -136.753364
+10000000.000000 23.875789 11.165105 0.815027 0.153777 -0.377464 0.002140 -87393.531525 -40172.456517 -3504.842303
+10000000.000000 69.983211 15.839848 0.304193 0.793925 -2.032797 0.000610 -10888.948363 -3718.212820 -801.632038
+10000000.000000 -47.971100 -27.333560 -0.479653 0.410514 -0.864152 0.004134 18535.873191 10729.889432 273.590964
+10000000.000000 -42.997413 -97.948685 0.315049 0.800909 -0.387947 0.003028 1476.689287 7846.383435 134.185956
+10000000.000000 -30.959272 30.562238 -0.191505 0.814654 1.106171 0.001613 24651.121522 -25495.477428 -19.571751
+10000000.000000 -42.960901 20.427398 -0.185002 0.214284 0.482488 0.003031 25513.928639 -12394.990738 237.635588
+10000000.000000 -66.989778 -55.595485 0.504858 0.403718 -0.517648 0.000939 6558.738686 5969.217577 -155.177845
+10000000.000000 -6.996532 -61.105291 0.504758 0.201263 -0.016682 0.000908 2008.924195 17669.629353 -186.437638
+10000000.000000 -64.993170 -75.802696 -0.594952 0.402529 -0.359053 0.001015 4707.851524 6321.678697 16.417194
+10000000.000000 96.992070 -49.868245 -0.679870 0.596968 1.027143 0.004059 -6202.642171 3319.126965 174.719841
+10000000.000000 -78.992649 56.450029 0.314695 0.202228 0.289711 0.002811 1969.881175 1478.724213 -723.066210
+10000000.000000 -47.984661 45.096353 -0.779277 0.205140 0.215950 0.004388 5819.969719 -14926.746313 1673.782638
+10000000.000000 1.005561 31.285865 -0.891560 0.801242 0.040107 0.002244 -2239.045717 -68368.498469 2140.131347
+10000000.000000 -26.987763 55.050688 -0.694621 0.404456 0.206156 0.001143 7866.421262 -16120.678258 273.144523
+10000000.000000 1.000087 -63.976434 0.804614 0.200038 0.008674 0.000850 -74.390329 15945.561939 -303.120052
+10000000.000000 78.990759 -49.771298 -0.394848 0.596574 0.846803 0.001064 -6310.118822 4178.492653 161.093215
+10000000.000000 -75.984489 -26.331230 -0.289857 0.405619 -3.465725 0.002069 8604.155386 2397.930197 158.819813
+10000000.000000 73.980512 -9.599990 0.305098 0.192859 -2.919646 0.000999 -12442.864966 2321.847603 -316.402735
+10000000.000000 1.004326 -69.979470 0.615002 0.201752 0.007565 0.003006 8175.500655 13601.918690 412.220862
+10000000.000000 59.993330 75.798050 -0.678465 0.597491 -0.442279 0.005069 -5592.335245 -8594.946837 6375.439444
+10000000.000000 -15.967789 -34.668916 0.009983 0.611552 -0.323777 0.001993 19400.657466 40836.739736 -9.975392
+10000000.000000 33.996182 -87.944302 0.704866 0.598549 0.212993 0.000947 -2881.583171 7512.409080 -113.489535
+10000000.000000 54.969752 -11.391932 0.004956 0.188825 0.722852 0.000971 -20520.092028 4591.258494 -92.787326
+10000000.000000 8.209185 -19.432867 -0.360567 0.143273 -3.993375 0.033919 -59858.512829 140460.954368 2663.884041
+10000000.000000 96.992034 47.106996 -0.694886 0.796946 -1.379264 0.001048 -6282.420897 -2646.696167 129.215729
+10000000.000000 64.979927 -9.584199 -0.878092 0.392440 1.483744 0.004667 -15323.387774 2382.836038 609.641147
+10000000.000000 -91.994347 -76.899381 -0.779795 0.602120 -0.779018 0.004086 4096.404698 3582.302857 222.623720
+10000000.000000 7.956918 23.346108 -0.292878 0.383264 -0.156612 0.001794 -35499.994452 -103466.670848 1476.488071
+10000000.000000 -46.993565 -81.865340 0.014991 0.602414 -0.371382 0.002995 4680.810299 6950.253013 -21.169110
+10000000.000000 4.997065 49.840816 0.020018 0.398837 -0.038427 0.004004 -2604.419153 -26430.994062 -10.998618
+10000000.000000 51.985598 -45.986558 0.005075 0.594638 0.604809 0.001029 -9553.642627 9387.043854 -562.334164
+10000000.000000 -38.984285 -50.781238 0.919467 0.205768 -0.153092 0.003789 10465.415528 12602.105185 -477.759301
+10000000.000000 -28.994337 76.380877 0.404880 0.202108 0.073830 0.000950 3984.863707 -9419.773385 -128.128857
+10000000.000000 64.996346 -97.340216 0.004958 0.198685 0.133186 0.000970 -2204.431043 5212.351401 -134.076509
+10000000.000000 5.874123 17.302038 -0.872146 0.154005 -0.204349 0.009269 -64557.849050 -188519.693392 10973.097990
+10000000.000000 -7.999663 -88.532970 0.804062 0.799975 -0.104485 0.000586 -712.085818 8584.531060 -972.847986
+10000000.000000 -53.995846 91.892449 0.004984 0.601468 0.377169 0.000987 2419.984462 -5455.839878 -63.466101
+10000000.000000 60.973191 -16.999148 -0.694566 0.190433 -3.999137 0.001160 -15889.726731 4601.219012 323.584666
+10000000.000000 -97.993622 -72.390296 -0.389962 0.202468 -0.277327 0.002018 5204.929117 3105.151193 56.469648
+10000000.000000 48.960600 11.788885 -0.494307 0.185436 -0.643991 0.001265 -27067.397828 -6670.043989 607.961246
+10000000.000000 39.938521 2.806319 -0.294064 0.177316 1.561437 0.001314 -41712.443312 -2225.714812 407.818606
+10000000.000000 4.999197 97.948080 0.009988 0.199659 -0.012360 0.001993 -905.360517 -8286.859405 -29.150279
+10000000.000000 -50.996805 -98.519692 0.104743 0.201086 -0.101724 0.000858 1326.048605 10371.314988 -520.894878
+10000000.000000 -24.989305 -62.355795 0.014706 0.603901 -0.267498 0.002878 6955.618225 15004.054254 -344.704413
+10000000.000000 28.891706 -6.053431 -0.388407 0.359747 0.994368 0.002586 -75588.477006 15810.281696 1080.915944
+10000000.000000 -90.989462 51.042471 -0.594485 0.803806 1.807741 0.001135 6657.207897 -1872.232664 14.775449
+10000000.000000 -95.991870 35.332718 0.803000 0.201684 6.466530 -0.002581 -12105.115503 -17501.318334 -184426.732037
+10000000.000000 9.847164 -2.507909 0.107985 -0.223075 0.564520 -0.000466 -623556.350804 160602.722071 -6882.573108
+10000000.000000 -62.984175 39.602050 0.519788 0.405822 0.718818 0.003912 10535.641914 -6487.102262 -213.661299
+10000000.000000 79.992929 71.998304 0.704677 0.797260 -0.800588 0.000872 -5703.095352 -1277.901903 -270.048231
+10000000.000000 13.492422 6.909461 0.768267 0.614059 -0.876799 -0.011804 -257076.043858 -132803.275597 -14836.213542
+10000000.000000 -63.980353 29.160266 0.519770 0.607186 2.230798 0.003901 12856.298383 -5149.271801 -276.730733
+10000000.000000 -32.977122 40.822928 0.014996 0.208393 0.159976 0.002991 15078.267899 -18541.422154 -23.274344
+10000000.000000 -45.961477 19.716860 0.404478 0.413954 1.741273 0.000799 24417.614464 -9728.272632 -430.320427
+10000000.000000 46.954886 8.988266 0.018976 0.383566 -1.204070 0.003666 -28398.472389 -6103.849806 -119.269064
+10000000.000000 -42.996934 -95.014102 0.904424 0.801035 -0.401552 0.000757 1499.876979 4955.217582 -640.753205
+10000000.000000 -23.991074 -58.409089 0.009715 0.203284 -0.077999 0.001913 5892.762845 15466.261716 -67.974863
+10000000.000000 49.982270 38.704720 -0.594675 0.793534 -0.861587 0.001125 -11348.727128 -9193.524954 216.914539
+10000000.000000 48.988843 -57.392824 -0.479837 0.395849 0.323814 0.004064 -7773.907742 9678.570960 139.476553
+10000000.000000 89.990011 -31.378530 -0.894662 0.196328 0.524923 0.001145 -6678.273720 2536.929928 396.074560
+10000000.000000 -57.977915 -28.623378 0.321412 0.609293 -1.922444 0.005511 14569.564825 19332.108188 4730.484123
+10000000.000000 0.001327 -79.186337 -0.095116 0.800654 -0.034486 0.000888 2728.994485 11361.736643 -1085.769091
+10000000.000000 22.708582 -1.057099 0.300860 0.303307 -1.414508 -0.000361 -129017.942426 5496.185054 -1760.559167
+10000000.000000 -51.971166 23.343774 -0.888638 0.410557 1.267702 0.002985 18203.062102 1615.263022 12366.283179
+10000000.000000 -74.985790 35.746138 -0.184885 0.805125 3.948386 0.003045 8825.724938 -3497.821745 70.023994
+10000000.000000 -0.998821 61.072051 -0.594676 0.400402 0.009983 0.001124 502.280561 -17716.587625 253.391157
+10000000.000000 57.996000 -92.237065 0.109878 0.598553 0.353878 0.001935 -2496.585880 5123.757561 -236.454319
+10000000.000000 33.003719 90.645190 0.213436 0.201317 -0.071558 0.002415 1980.189362 -2447.800600 -1137.343854
+10000000.000000 41.997159 97.808751 -0.489830 0.599032 -0.240032 0.002088 -1083.002686 -8085.429033 395.574921
+10000000.000000 -84.991607 51.715836 -0.285143 0.203032 0.342503 0.002926 5214.468820 -2760.762256 -213.487452
+10000000.000000 -6.998596 92.466571 -0.893984 0.800430 0.091272 0.001447 349.314736 -8416.112313 1059.432580
+10000000.000000 -34.988371 -57.612917 -0.784560 0.204188 -0.119413 0.003172 7242.650598 12768.530390 363.864238
+10000000.000000 -74.996904 91.826407 0.099868 0.202009 0.163718 -0.003245 8664.701681 -5634.933466 -19376.488021
+10000000.000000 90.992668 62.588711 -0.389965 0.197193 -0.283145 0.002014 -5727.028566 -3674.153766 30.977847
+10000000.000000 79.987349 34.859041 -0.090147 0.195233 -0.429200 0.001927 -9348.896453 -4073.251876 -229.596565
+10000000.000000 33.986872 -52.793880 -0.694617 0.395085 0.244709 0.001148 -9393.276579 13976.243807 290.792928
+10000000.000000 22.996524 -75.994330 0.610129 0.798547 0.204728 0.002094 -3268.161608 13185.949567 51.860202
+10000000.000000 62.996186 87.369731 0.814508 0.798901 -0.527532 0.002623 755.281828 -5874.662191 -2934.702822
+10000000.000000 -48.997787 -95.517740 -0.094750 0.200466 -0.101826 0.001093 -1317.034956 7864.856286 186.890767
+10000000.000000 60.977602 -19.846657 -0.294895 0.791686 1.632289 0.001034 -15567.963376 6307.360126 -20.786663
+10000000.000000 -0.999671 75.060340 0.018396 0.400315 0.008648 0.003249 1450.194337 -13839.410307 -2253.976952
+10000000.000000 -58.994781 91.824543 -0.479759 0.801970 0.563751 0.004111 4051.996745 -4413.799754 449.224380
+10000000.000000 63.987096 50.781436 0.604727 0.195048 -0.244644 0.000875 -10106.038291 -3137.211680 -374.175499
+10000000.000000 50.981054 -39.765403 -0.579658 0.193009 0.249448 0.004129 -13160.313742 9662.468180 255.544955
+10000000.000000 -23.985274 -50.306887 -0.284769 0.805270 -0.456871 0.003080 8570.641768 18322.232080 132.089493
+10000000.000000 -17.912305 20.856407 0.900570 0.232154 0.155155 -0.000650 58462.887650 -66241.143075 -3138.119216
+10000000.000000 15.979372 36.916718 0.404282 0.592190 -0.226190 0.000717 -15426.350404 -38041.906296 -645.041641
+10000000.000000 82.994588 -93.494146 0.014788 0.597860 0.502180 0.002918 -4522.068715 3973.213802 -130.037408
+10000000.000000 -49.973363 28.320058 0.014963 0.409686 0.861636 0.002981 17176.638224 -9913.519907 -58.941884
+10000000.000000 101.991536 36.285619 0.914870 0.796785 -1.743385 0.002947 -6383.641048 -1924.721268 -114.900544
+10000000.000000 -88.990332 -45.088254 0.504848 0.203665 -0.416760 0.000931 7310.348400 3879.823049 -192.969921
+10000000.000000 52.985121 -48.985424 0.319639 0.394507 0.405344 0.003861 -9955.601649 9758.586124 -320.901304
+10000000.000000 99.990029 -31.699420 0.804769 0.396137 1.060674 0.000894 -8052.941976 2297.705509 -306.633332
+10000000.000000 -57.984183 -42.989469 0.614530 0.405759 -0.596040 0.002810 10171.476784 7765.200390 -416.502498
+10000000.000000 69.980671 19.993710 -0.294387 0.192751 -0.602482 0.001287 -12976.335806 -5657.338385 548.331231
+10000000.000000 78.996497 -93.165913 -0.593970 0.198377 0.167429 0.001761 -5281.833248 1413.435595 3451.030897
+10000000.000000 -39.993839 78.304727 0.219933 0.802194 0.459067 0.003963 3748.045656 -7557.809391 -84.470435
+10000000.000000 22.994761 69.912037 -0.284919 0.797995 -0.220516 0.003030 -4068.615355 -11596.855161 58.594493
+10000000.000000 57.993835 78.322990 -0.779269 0.797837 -0.537587 0.004353 -3037.945174 -12910.806445 1357.590497
+10000000.000000 81.991077 -57.109778 -0.279321 0.596600 0.778817 0.004290 -6692.144996 3198.634289 617.748651
+10000000.000000 81.992563 81.067971 -0.578593 0.397118 -0.387089 0.004529 -5823.405671 -2794.854900 859.716766
+10000000.000000 39.985413 -50.216232 -0.579727 0.194601 0.159973 0.004104 -9974.830141 13051.799571 198.499453
+10000000.000000 -25.999178 -81.323178 0.602979 0.200011 -0.063113 0.000120 -2160.992126 5059.107131 -2640.220753
+10000000.000000 75.994188 95.055021 -0.694372 0.797690 -0.590178 0.001241 -5009.422545 -5217.714546 427.722210
+10000000.000000 -88.987466 -19.498539 -0.194838 0.204655 -1.499489 0.001062 9231.266510 780.208122 153.604313
+10000000.000000 -16.954535 30.933102 0.009788 0.816097 0.575048 0.001935 25981.740201 -47175.726263 -29.433024
+10000000.000000 95.989757 -26.121448 -0.689596 0.395990 1.176511 0.002252 -9926.430332 4048.803484 1426.363388
+10000000.000000 -79.988532 57.692833 0.105301 0.605176 0.937591 0.001349 14250.412681 -805.757187 3825.807646
+10000000.000000 3.987717 19.756297 -0.881896 0.792339 -0.089664 0.005998 -31938.855612 -161870.486241 8414.733234
+10000000.000000 71.995530 97.578270 0.814089 0.398268 -0.285876 0.002561 -3441.805537 -6896.553779 -1573.577303
+10000000.000000 0.999120 -39.939845 -0.478832 0.199538 0.022177 0.004459 -1754.943259 41065.978828 991.892135
+10000000.000000 -76.991692 62.270155 0.804099 0.203118 0.252288 0.000553 6010.835758 -7855.535040 -1442.674856
+10000000.000000 73.988889 45.502494 -0.894772 0.795863 -1.100664 0.001091 -7767.243863 -4465.680343 204.048972
+10000000.000000 -68.984085 -33.633706 0.005006 0.605849 -1.725561 0.001003 10817.202802 4968.059107 2.847085
+10000000.000000 72.994000 91.057615 0.204439 0.797678 -0.589550 0.000753 -4340.091846 -4612.700438 -669.013977
+10000000.000000 22.993333 -60.751425 0.501955 0.797200 0.253377 -0.000172 -6129.857344 14167.749206 -1658.430763
+10000000.000000 22.997622 92.752027 -0.184964 0.199126 -0.051637 0.003014 -1612.894689 -8582.016317 31.981931
+10000000.000000 25.974478 -37.189767 0.304605 0.590379 0.368857 0.000852 -18729.774014 27094.142174 -280.920976
+10000000.000000 -69.991836 56.283731 0.909428 0.202795 0.255577 0.001723 4001.790015 -4549.135131 -853.992122
+10000000.000000 12.989114 46.704353 0.114909 0.195913 -0.065940 0.002965 -7906.705078 -27443.246031 -67.656444
+10000000.000000 -33.931063 -17.266547 -0.593812 0.424749 -2.048986 0.001432 41057.638682 20603.192023 744.224934
+10000000.000000 -38.987107 -57.684772 -0.484845 0.204853 -0.134059 0.003050 9536.429016 11735.437342 40.367525
+10000000.000000 95.990858 -33.048538 0.514861 0.396618 0.991028 0.002931 -6343.959258 3080.696946 -271.295235
+10000000.000000 65.982695 29.103589 0.308859 0.793562 -1.380529 0.001675 -11977.902979 -5046.663757 -227.702169
+10000000.000000 19.951814 -27.251072 -0.189635 0.182019 0.161546 0.002141 -34381.169221 47195.490539 285.647876
+10000000.000000 72.983097 -70.996203 0.814454 0.194673 -14.398087 0.002784 -4989.907067 4735.867081 -142.065233
+10000000.000000 1.000128 -91.987775 0.319940 0.200058 0.004569 0.003974 82.099931 8676.204676 -64.890714
+10000000.000000 24.859194 -6.467473 -0.094387 0.747444 1.315539 0.001221 -97298.702200 25699.772515 321.392274
+10000000.000000 57.989225 51.916089 -0.394851 0.396177 -0.418242 0.001070 -6235.446568 -5328.726764 242.989116
+10000000.000000 -92.992806 66.461504 -0.084945 0.802739 1.291356 0.003012 5458.768684 -3869.662817 -9.090599
+10000000.000000 80.994837 -80.327868 0.020039 0.798099 0.735298 0.004013 -3401.728493 3288.999249 3.120993
+10000000.000000 12.996389 -63.414149 -0.189868 0.798629 0.121110 0.002051 -2806.342836 15883.627037 79.195276
+10000000.000000 83.991525 57.587730 -0.295014 0.196774 -0.283371 0.000990 -6474.808262 -3671.378161 -43.058393
+10000000.000000 -51.994043 -96.545093 0.114453 0.202383 -0.107829 0.002707 5654.329202 4624.791060 -1039.025985
+10000000.000000 20.997134 86.757562 -0.179969 0.198927 -0.050684 0.004011 -2056.533229 -9091.991910 15.267733
+10000000.000000 51.984188 43.852141 0.409617 0.194209 -0.232127 0.001811 -10464.877569 -10858.151112 -690.777756
+10000000.000000 -21.981529 -46.331533 -0.883922 0.806657 -0.460732 0.003403 11212.003032 22824.584266 742.537115
+10000000.000000 51.964296 -5.696006 0.803702 0.786806 2.261909 0.000491 -24101.667210 2540.528980 -781.415708
+10000000.000000 70.995724 -96.934461 0.900912 0.598094 0.413713 -0.000679 -5018.888107 2624.862111 -2348.247291
+10000000.000000 21.975300 35.408380 -0.782737 0.591396 -0.327237 0.004652 -11752.923300 -37449.616726 17104.340274
+10000000.000000 20.993119 -60.652064 -0.790652 0.197800 0.072895 0.002846 -2231.993176 14513.170092 2712.634362
+10000000.000000 80.992622 -59.277209 0.618462 0.597078 0.746376 0.002840 -7722.325072 6791.153589 -5109.568705
+10000000.000000 -15.996621 77.724850 0.304847 0.601194 0.142345 0.000935 1956.649715 -10617.016913 -160.640516
+10000000.000000 -69.978518 21.747440 -0.195029 0.207861 3.548705 0.000995 12876.502823 -3488.243676 114.288297
+10000000.000000 68.980447 3.197402 0.005110 0.193066 -1.360872 0.001131 -10874.310388 -960.249666 1215.638766
+10000000.000000 -77.986926 -29.920822 -0.279884 0.204704 -0.583233 0.004054 8357.021571 4137.912660 145.821816
+10000000.000000 -78.994787 -87.947061 -0.584926 0.801948 -0.788485 0.003033 3746.763273 3775.856249 100.513487
+10000000.000000 -83.986752 -31.162048 0.404350 0.405139 -1.431760 0.000610 13604.360136 -316.767101 -3882.092683
+10000000.000000 9.847790 2.508086 -0.172744 -0.222852 -0.564437 0.009013 -623274.610416 -160413.470573 11005.010365
+10000000.000000 6.998057 59.871559 0.304143 0.199302 -0.030633 0.000603 -1483.677116 -19930.124345 -1013.968133
+10000000.000000 -83.995402 85.006094 0.004919 0.201548 0.200168 0.000946 1998.397012 -4094.828141 -262.010467
+10000000.000000 100.989768 -20.926535 0.719791 0.396102 1.414953 0.003912 -7756.975456 820.544696 -196.989148
+10000000.000000 -73.994913 92.503255 -0.487535 0.800565 0.699765 0.005644 -3114.728068 -8450.180600 3358.745357
+10000000.000000 21.871255 12.417028 -0.575678 0.152053 -0.330084 0.005606 -90987.772243 -52462.699945 2944.244222
+10000000.000000 1.997597 -43.925922 0.803534 0.198870 0.023610 0.000348 -4005.781857 36485.878668 -2455.650830
+10000000.000000 21.934170 -22.256846 -0.792339 0.375286 0.361200 0.001984 -48054.022949 49523.719695 1814.766986
+10000000.000000 17.998228 -98.423788 0.319966 0.799305 0.117100 0.003985 -1478.772115 7613.344239 -45.314576
+10000000.000000 23.968844 34.202756 -0.195195 0.588129 -0.367189 0.000895 -23628.498555 -30424.133997 -270.760738
+10000000.000000 -86.989819 -40.311582 -0.089946 0.203827 -0.461560 0.002035 7869.172489 3049.584773 259.644217
+10000000.000000 -90.994838 76.222072 -0.294601 0.201782 0.243756 0.001262 3063.600979 -1972.404038 1037.334414
+10000000.000000 -42.974912 37.858166 -0.794243 0.809148 1.168805 0.001364 16555.772932 -10956.453010 1507.383804
+10000000.000000 -49.982907 -42.826403 -0.081414 0.805851 -1.163045 0.003362 10442.471599 10685.996408 -199.124721
+10000000.000000 -14.977569 38.367877 0.243253 0.208188 0.064539 -0.026826 14612.091693 -36592.622297 -92742.379966
+10000000.000000 25.992017 -62.217716 -0.194604 0.397034 0.159884 0.001207 -5436.700278 13973.162184 668.038603
+10000000.000000 36.930031 3.487075 0.119752 0.174171 -0.904189 0.003899 -47279.740979 -4442.892405 -277.874542
+10000000.000000 12.979916 -36.614518 -0.493947 0.192496 0.087393 0.001402 -14664.791289 41746.607932 725.015428
+10000000.000000 -3.988408 -39.759236 0.903422 0.803896 -0.141211 0.000412 4303.200863 43940.479994 -1111.758298
+10000000.000000 -13.923670 22.566470 0.005260 0.227942 0.093521 0.001102 50520.220359 -80889.606978 238.797681
+10000000.000000 25.997257 -93.723366 -0.194948 0.198956 0.057189 0.001020 -2158.210327 7548.992674 35.301354
+10000000.000000 -31.995020 -81.828778 -0.794598 0.401936 -0.164299 0.001168 4288.170771 4211.902348 440.773914
+10000000.000000 -48.979737 44.415852 -0.485542 0.409073 0.481789 0.001987 41249.236009 -2708.015213 -19327.433811
+10000000.000000 -20.981653 -41.493248 0.914948 0.206660 -0.090815 0.001295 13214.334996 37750.220951 -19382.798483
+10000000.000000 57.991802 61.409861 -0.279216 0.596909 -0.520775 0.004710 -8873.667437 -15508.190861 5782.594424
+10000000.000000 -53.994405 81.670124 -0.394899 0.202043 0.132470 0.001043 3652.364004 -6429.723336 112.521558
+10000000.000000 -60.974644 -30.713607 0.323272 0.608617 -1.740715 0.004740 13437.716742 7199.335617 -29.199898
+10000000.000000 -83.989704 48.022045 0.309747 0.804085 1.803863 0.001824 9036.599838 -2547.931466 -1017.058336
+10000000.000000 17.996721 -81.778083 -0.879420 0.198681 0.046922 0.004299 -3086.309323 10090.657835 912.298553
+10000000.000000 -8.825708 15.393460 -0.186404 0.267322 0.025038 0.003399 105812.836584 -183383.945274 2241.687022
+10000000.000000 -6.999189 -99.070070 0.304959 0.200295 -0.012118 0.000983 471.689114 7882.880466 -42.350841
+10000000.000000 2.000809 -53.115969 0.609530 0.800218 -0.017299 0.001812 -225.255732 23813.395825 -448.507192
+10000000.000000 -0.990373 -29.092746 0.219177 0.403047 0.000802 0.003692 2687.395299 78286.543131 -592.775836
+10000000.000000 -23.989299 -55.922791 0.219481 0.403836 -0.180873 0.003790 5966.472782 13539.482956 -567.528565
+10000000.000000 -84.994419 80.083810 0.014949 0.202093 0.215975 0.002976 4039.839361 -3077.745701 -69.732687
+10000000.000000 -25.997633 -98.265431 -0.694882 0.200848 -0.051291 0.001048 1369.435557 7547.189184 116.289373
+10000000.000000 63.993992 82.233799 -0.194940 0.197707 -0.154440 0.001031 -4646.208159 -4780.297683 109.150632
+10000000.000000 -40.986717 53.775299 0.009977 0.204848 0.152126 0.001988 8708.532492 -11886.151511 -14.566514
+10000000.000000 -5.995519 58.661739 0.304806 0.801560 0.127644 0.000923 2327.471064 -18833.401635 -174.129404
+10000000.000000 62.989223 52.840319 0.604637 0.196037 -0.234271 0.000816 -7130.916672 -11722.730638 -654.863599
+10000000.000000 -74.992986 60.648599 0.005348 0.402340 0.528556 0.001182 2929.391476 -4999.171430 578.186897
+10000000.000000 63.983882 33.636960 -0.683249 0.393974 -0.674856 0.004028 -13064.505345 -10530.719927 6981.990601
+10000000.000000 -55.985277 -45.685381 -0.094841 0.405311 -0.534867 0.001074 9073.541207 9326.649742 223.081424
+10000000.000000 17.934103 23.193042 -0.889432 0.175487 -0.177131 0.002808 -47053.318877 -61480.394290 2455.252545
+10000000.000000 51.969245 -19.669824 -0.479677 0.188420 0.467884 0.004151 -22162.007067 6074.256552 1046.168524
+10000000.000000 33.947340 18.919243 0.404154 0.580594 -0.821902 0.000653 -35264.421765 -20539.837493 -897.748816
+10000000.000000 -55.991501 -67.713430 -0.694874 0.603094 -0.541030 0.001049 5489.040484 6739.957784 104.663080
+10000000.000000 24.993859 -74.663936 0.914309 0.197518 0.069987 0.002675 -4871.519995 11349.448193 -965.068956
+10000000.000000 57.989791 60.056117 0.404316 0.196160 -0.190028 0.000572 -7164.899749 -3356.094759 -2160.084763
+10000000.000000 87.990067 -38.995051 0.819757 0.396294 0.801846 0.003887 -7013.597637 3567.076984 -346.094571
+10000000.000000 -20.992236 64.567362 0.009992 0.802817 0.310125 0.001995 4984.307027 -13299.878014 -20.644708
+10000000.000000 -9.997160 -89.615938 -0.494110 0.801076 -0.120796 0.001434 2495.106133 10172.952879 1514.994582
+10000000.000000 -6.993825 -49.123833 0.914094 0.202224 -0.018074 0.002659 3689.674728 27137.925991 -654.473982
+10000000.000000 87.986670 -3.831271 -0.884622 0.595051 2.833992 0.003158 -8959.314381 1194.292911 841.635003
+10000000.000000 -57.991590 74.786973 0.518461 0.203387 0.155609 0.003297 6841.802005 -6909.290223 -1661.679752
+10000000.000000 17.712257 9.317821 0.201319 0.502064 -0.762536 -0.000224 -147140.323562 -77809.961512 -1689.595622
+10000000.000000 50.959720 -25.332225 -0.592476 0.786410 -6.264768 0.001973 -19031.366094 10125.101843 582.118588
+10000000.000000 72.981254 4.642657 0.409165 0.594925 -2.472748 -0.001163 97009.735670 167313.393377 -209910.979627
+10000000.000000 98.992318 54.245800 -0.180022 0.197057 -0.351592 0.003988 -5992.363657 -3122.104861 -40.093057
+10000000.000000 0.000241 73.203081 -0.888535 0.799983 0.038132 0.002595 -902.450826 -9444.335243 1212.885964
+10000000.000000 -28.967575 -34.843824 0.019985 0.411841 -0.362749 0.003993 21145.554690 24607.215709 -18.096099
+10000000.000000 72.981783 12.895216 -0.789436 0.393112 -1.421763 0.002314 -14599.430686 -2930.721758 1853.126415
+10000000.000000 13.992715 55.739296 0.414696 0.197250 -0.056924 0.002878 -5360.070453 -19142.470354 -267.425086
+10000000.000000 50.971382 -21.064298 0.104359 0.389424 0.789785 0.000509 -19460.349128 10140.415408 -820.239259
+10000000.000000 -52.970747 54.992518 0.204332 0.209336 10.796362 0.000770 7952.956011 -8668.941285 -71.296612
+10000000.000000 -85.993727 -66.335849 -0.093095 0.202336 -0.266969 0.001880 4294.288187 555.877778 2530.980181
+10000000.000000 -70.995899 -97.188952 0.419430 0.800517 -0.638321 0.003510 -7632.885146 429.737398 -1972.730468
+10000000.000000 -18.996361 -78.180157 0.709768 0.801263 -0.233541 0.001907 1782.435476 10065.555596 -211.199014
+10000000.000000 -37.993505 -83.457234 0.005001 0.202565 -0.088752 0.001178 6216.230066 15059.269235 2587.581074
+10000000.000000 -9.983092 38.572603 0.114846 0.406056 0.104493 0.002942 10207.788715 -40618.397874 -113.905819
+10000000.000000 63.994622 -84.234498 0.104923 0.797997 0.554198 0.000962 -3752.872467 4200.566325 -119.606464
+10000000.000000 95.989704 13.998276 0.314939 0.196201 -1.000559 0.002974 -7070.100082 -559.391223 -63.439028
+10000000.000000 93.989296 22.419994 -0.289934 0.195990 -0.716560 0.002031 -7692.827514 -2429.697399 101.764986
+10000000.000000 -58.993017 78.575404 0.204954 0.402640 0.313473 0.000974 5221.741866 -6682.112449 -109.624226
+10000000.000000 81.990489 47.856811 -0.295009 0.396453 -0.629646 0.000989 -6663.056060 -4152.512721 -73.686789
+10000000.000000 -63.984599 -40.656882 -0.694470 0.205705 -0.329560 0.001241 10692.821888 7981.308276 730.427713
+10000000.000000 -23.951321 -27.873000 -0.678582 0.217863 -0.165544 0.004524 32421.707376 36924.170197 971.513526
+10000000.000000 25.987086 -51.312114 -0.794221 0.795060 0.342123 0.001296 -9760.107057 17921.191498 511.136255
+10000000.000000 79.990990 -229.996383 0.109566 0.597786 -46.198707 0.001854 -402.650170 1192.798999 0.117780
+10000000.000000 49.972351 25.169767 -0.894357 0.189743 -0.368588 0.001247 -19208.598038 -9937.466688 507.418989
+10000000.000000 24.920972 -18.737646 -0.891961 0.170632 0.262793 0.002127 -55451.208882 41012.998362 2106.568389
+10000000.000000 67.974868 -3.774375 -0.286180 0.791102 2.845464 0.002723 -14139.100167 1323.517458 127.273463
+10000000.000000 -84.987229 26.382586 0.709828 0.404726 2.676154 0.001921 8647.463665 -1621.035001 -235.977128
+10000000.000000 62.984483 -38.440228 0.019983 0.194254 0.313592 0.003992 -10686.455168 6530.131164 -24.919711
+10000000.000000 20.890750 -15.734524 0.203565 0.159282 0.267808 0.000475 -77566.967784 58335.754165 -952.200967
+10000000.000000 -26.988357 -53.403748 0.109293 0.804738 -0.476315 0.001686 10667.958471 18395.379859 -1257.723714
+10000000.000000 37.950277 17.056781 0.104915 0.781479 -1.193127 0.000971 -34380.210833 -16041.810896 -53.324696
+10000000.000000 45.966471 -21.026006 0.908875 0.187646 0.397666 0.001572 -22683.506690 11088.585949 -849.923273
+10000000.000000 92.990877 -43.995503 0.519930 0.196551 0.401685 0.003967 -6802.070100 3256.811574 -96.481914
+10000000.000000 -15.997905 95.163325 -0.395991 0.200840 0.029155 0.000426 2291.529478 -17029.603525 -2248.484619
+10000000.000000 -53.993769 -98.146613 -0.894275 0.402550 -0.227760 0.001368 6428.181147 7219.278288 1420.099742
+10000000.000000 -97.988474 24.947643 -0.791349 0.204705 0.989196 0.003035 10816.201382 -935.078098 3631.609325
+10000000.000000 -31.996475 -93.344265 0.814742 0.201323 -0.066945 0.002878 2530.188994 8136.463250 -382.294693
+10000000.000000 -27.004609 -87.023869 -0.894553 0.597133 -0.198241 0.001215 -5770.479788 36286.179386 814.126310
+10000000.000000 -95.989772 35.211651 0.613840 0.604180 4.240210 0.004482 23473.231008 4818.153216 182233.678716
+10000000.000000 -72.991865 57.721348 -0.794092 0.402840 0.543294 0.001460 4234.000732 -4076.320930 1529.292261
+10000000.000000 31.989408 -62.489358 0.919280 0.195942 0.105266 0.003715 -7990.884584 12643.979793 -589.144779
+10000000.000000 -80.995411 -96.848976 0.104997 0.201760 -0.168853 0.000998 3615.186710 4023.933007 -6.190453
+10000000.000000 21.988037 -50.185746 0.014812 0.395524 0.167881 0.002930 -8288.617039 20051.493883 -191.750073
+10000000.000000 15.993361 60.729825 0.304798 0.197484 -0.058088 0.000913 -4962.383633 -16101.010883 -224.175019
+10000000.000000 53.995590 77.674850 -0.194988 0.398595 -0.266481 0.001010 -1395.222929 -5867.801674 50.393988
+10000000.000000 -83.984392 -40.622426 0.611404 0.605926 -6.523452 0.001254 5888.913669 4079.251435 -667.937280
+10000000.000000 90.986932 -20.333561 0.304766 0.595298 -5.866525 0.000726 -7639.156036 2428.254462 -1137.180008
+10000000.000000 -78.002197 75.065738 -0.086206 0.199498 0.213204 0.001667 -1184.169063 905.962686 -5262.909151
+10000000.000000 -90.992674 61.031007 -0.579756 0.602743 1.005317 0.004105 5300.356367 -3854.095672 252.164337
+10000000.000000 59.988926 53.988626 -0.594456 0.595879 -0.604307 0.001298 -7260.825494 -8411.693128 1376.725244
+10000000.000000 12.996253 65.523448 -0.789636 0.598548 -0.099000 0.002141 -3054.657338 -14688.255035 287.746165
+10000000.000000 -94.990628 27.996951 -0.789288 0.203137 0.798962 0.002596 3739.808398 -773.179219 3253.863061
+10000000.000000 74.980488 -6.287902 -0.883158 0.792688 -4.057609 0.003892 -14223.976938 698.853086 2116.147399
+10000000.000000 94.989784 -23.516501 -0.194991 0.196228 0.696892 0.000993 -7080.405998 373.169194 -74.179529
+10000000.000000 82.984592 -17.666952 -0.279912 0.594457 -5.333158 0.004033 -9602.442878 952.216002 411.916920
+10000000.000000 38.994334 80.520536 0.015098 0.197849 -0.097485 0.003058 -4301.358697 -5869.084366 240.126988
+10000000.000000 -72.988491 43.755437 0.019996 0.204193 0.350017 0.003998 7378.023878 -4245.222085 -6.191765
+10000000.000000 21.667063 -10.329083 0.009972 0.294832 -2.657337 0.001979 -105160.049483 49649.490121 -72.335361
+10000000.000000 73.987022 -35.325932 -0.489735 0.795196 1.336002 0.002112 -8928.121407 4605.426701 123.163440
+10000000.000000 76.994611 87.527415 -0.589828 0.597931 -0.495583 0.002087 -4106.670733 -4694.837106 316.847793
+10000000.000000 56.994130 73.525391 0.504521 0.397979 -0.296082 0.000768 -2933.537409 -4077.952379 -702.127675
+10000000.000000 -34.995809 -83.879628 -0.589365 0.401650 -0.173757 0.002240 3496.942351 9349.356727 533.364614
+10000000.000000 -49.963356 -15.194674 0.704416 0.213376 -2.037674 0.000773 23802.248153 6263.845387 -526.031244
+10000000.000000 -94.989925 -34.093394 -0.579913 0.204042 -0.617872 0.003961 17921.187283 5909.162481 -3292.422066
+10000000.000000 59.987239 -49.762352 0.020001 0.595221 0.649403 0.004000 -9160.547515 7444.655827 -5.632440
+10000000.000000 -79.993747 -65.598612 -0.693860 0.402100 -0.519022 0.001582 2537.549147 3297.620328 1955.640904
+10000000.000000 51.970197 19.669378 0.019924 0.188950 -0.468145 0.003971 -20720.893051 -7872.125076 -49.094448
+10000000.000000 -12.979576 -40.695901 -0.185694 0.806935 -0.331345 0.002479 8359.262473 32895.210428 -1546.882904
+10000000.000000 -80.993223 -67.546820 0.708954 0.402461 -0.507953 0.001513 4292.339404 6459.609368 -1314.265054
+10000000.000000 79.992056 61.739559 -0.884814 0.197028 -0.253239 0.003083 -5649.773261 -4828.971068 240.701429
+10000000.000000 8.992795 43.496189 0.619168 0.797070 -0.109016 0.003684 -6880.868151 -32982.184295 -623.551201
+10000000.000000 -86.990284 53.686312 -0.789486 0.203738 0.336069 0.002244 7570.766717 -5462.036923 749.166214
+10000000.000000 -12.986351 46.025588 0.509492 0.604862 0.198124 0.001810 7984.270278 -28261.212937 -362.896279
+10000000.000000 8.996193 -53.596410 0.015031 0.798459 0.086315 0.003012 -3723.204357 22486.784892 13.784939
+10000000.000000 -36.981716 -46.712848 0.809519 0.406653 -0.339078 0.001817 11734.350871 14164.482995 -369.103194
+10000000.000000 91.996368 -97.066606 0.404844 0.198667 0.187586 0.000930 -2404.804021 3951.056915 -227.561767
+10000000.000000 35.992364 90.910955 0.015594 0.597318 -0.219854 0.003178 -4105.900879 -8083.608531 148.848132
+10000000.000000 -26.994919 -82.327571 0.006130 0.201777 -0.063185 0.001465 3559.321714 10092.943251 1506.921855
+10000000.000000 86.991140 41.633471 -0.784902 0.596900 -1.073893 0.003027 -5413.974907 -972.128862 4.652643
+10000000.000000 -69.993002 65.844555 -0.394775 0.802481 0.967480 0.001084 4178.973806 -5909.129017 140.513369
+10000000.000000 44.983947 -46.046637 -0.684599 0.194062 0.193591 0.003156 -11052.527509 11832.920291 320.430448
+10000000.000000 -34.982293 46.759622 0.714542 0.206480 0.148001 0.002823 11740.779029 -15843.457670 -387.566003
+10000000.000000 -78.995152 95.717505 -0.384939 0.401872 0.342358 0.003028 3883.739857 -5093.854455 83.938095
+10000000.000000 -15.001925 93.357322 -0.794495 0.398322 0.070443 0.001195 -8855.368137 -2985.812829 216.050991
+10000000.000000 81.986502 -19.842070 0.704794 0.394999 1.232244 0.000910 -8997.022890 3156.018681 -495.612471
+10000000.000000 41.981558 -41.601341 -0.494737 0.793125 0.683139 0.001099 -13051.076685 13262.023713 190.940427
+10000000.000000 -37.992520 -82.509879 0.518819 0.602955 -0.301372 0.003026 5242.321157 -3550.114868 -7218.879201
+10000000.000000 -58.988102 252.993684 0.009130 0.802801 50.398091 0.001815 254.052703 -1085.050368 -0.101629
+10000000.000000 -75.988134 78.306522 -0.576549 0.803109 0.858998 0.005161 3169.340958 -5452.521013 241.909372
+10000000.000000 68.991703 64.961850 0.409883 0.196877 -0.208965 0.001949 -6088.387893 -5408.107536 -137.796649
+10000000.000000 -13.983703 -41.315548 -0.792841 0.206247 -0.054243 0.002071 13989.723937 34950.292782 2633.103073
+10000000.000000 64.992512 -68.602676 -0.394936 0.797206 0.680883 0.001026 -5216.488039 5669.393886 68.909986
+10000000.000000 19.997286 82.215505 -0.284927 0.798970 -0.159097 0.003031 -2130.511047 -8565.331878 76.028204
+10000000.000000 -54.994557 75.270938 -0.183909 0.801827 0.652884 0.003382 3174.586429 -5842.158425 279.456588
+10000000.000000 43.950679 -4.212996 -0.379465 0.181813 0.958565 0.004190 -33585.251305 3440.898308 319.042378
+10000000.000000 86.994434 -81.089254 0.015063 0.797911 0.782959 0.003027 -3983.286940 3235.935951 87.276481
+10000000.000000 36.996514 83.435830 0.504757 0.798892 -0.314830 0.000867 -835.001844 -8646.283480 -634.523098
+10000000.000000 -61.971310 23.997781 -0.289192 0.211519 4.198347 0.002215 15264.538931 -7344.758474 275.418147
+10000000.000000 -87.989123 32.065433 0.904785 0.203987 0.612463 0.000904 7034.583116 -2509.880609 -272.427515
+10000000.000000 -8.002971 96.331342 -0.387843 0.598945 0.063945 0.002666 -1506.317100 -10069.081063 517.108133
+10000000.000000 20.994173 -64.670356 0.204865 0.197903 0.069719 0.000942 -3544.048937 15537.551342 -235.692033
+10000000.000000 2.982554 -17.671791 -0.878526 0.589400 0.129157 0.007481 -33932.524284 204238.581727 10266.354269
+10000000.000000 58.991307 66.124205 -0.089971 0.196751 -0.176943 0.002014 -6205.913068 -7399.321724 45.999652
+10000000.000000 -26.996455 91.626577 0.004980 0.401339 0.123440 0.000989 2632.419391 -7727.855391 -40.430918
+10000000.000000 -35.995406 85.382011 0.304923 0.601654 0.274518 0.000966 2836.788890 -7688.769094 -93.226033
+10000000.000000 -17.984484 -45.851339 -0.883966 0.405597 -0.163872 0.003388 9539.343737 25855.292628 736.227247
+10000000.000000 -63.992517 -71.905604 -0.884824 0.602709 -0.579917 0.003078 4527.864894 4630.165861 229.383066
+10000000.000000 -3.991536 -37.067130 0.903123 0.202970 -0.002093 0.000303 4603.628436 45198.214454 -1294.269294
+10000000.000000 75.990984 55.192924 -0.894803 0.796629 -0.962578 0.001082 -6432.236410 -4589.415915 203.292516
+10000000.000000 -78.990171 59.372113 0.514539 0.203762 0.272997 0.002766 7506.137716 -6640.784924 -909.667864
+10000000.000000 46.996173 -94.043627 0.005044 0.398616 0.192877 0.001017 -2167.026297 6638.465133 29.408133
+10000000.000000 85.992753 -326.996993 0.504761 0.798295 -65.599030 0.000939 -165.779409 629.588207 -0.980742
+10000000.000000 8.997268 76.716336 -0.893843 0.798066 -0.060631 0.001436 -5348.524305 -12097.021193 464.055211
+10000000.000000 -21.993378 -61.764879 -0.789054 0.402370 -0.149378 0.002366 3580.466889 13981.889993 809.409865
+10000000.000000 -11.991425 -51.220300 -0.794292 0.203121 -0.038183 0.001267 5395.765865 23787.944999 517.897425
+10000000.000000 -85.995838 101.692185 -0.394976 0.601585 0.537536 0.001010 3178.713297 -3938.612106 23.628897
+10000000.000000 -45.995794 93.497336 -0.779658 0.201543 0.098073 0.004145 2974.853028 -5783.231045 423.396554
+10000000.000000 53.992913 -86.383166 -0.892990 0.197102 0.124613 0.002070 -5762.031703 4867.719702 2856.210484
+10000000.000000 32.983989 47.710160 -0.879506 0.394044 -0.262081 0.004185 -11199.486189 -16468.242286 355.450354
+10000000.000000 86.991070 -48.239786 0.814823 0.596677 0.952996 0.002924 -6173.684238 4012.667496 -199.248239
+10000000.000000 8.995791 57.731088 -0.489285 0.398386 -0.058414 0.002261 -3257.980971 -18627.130373 422.427920
+10000000.000000 32.989617 -58.047847 -0.694176 0.796048 0.393532 0.001322 -7813.911114 12561.839086 569.129587
+10000000.000000 -62.984237 -37.769813 0.104686 0.205707 -0.352714 0.000831 9812.047643 4683.489974 -643.932981
+10000000.000000 -57.987110 -50.192693 0.204926 0.204720 -0.236539 0.000970 8501.109326 8310.515337 -62.758924
+10000000.000000 44.959709 14.981814 -0.389109 0.585017 -1.206341 0.002320 -27712.272780 -10076.811178 580.903631
+10000000.000000 0.001246 47.978347 0.214783 0.200467 -0.011474 0.002914 765.223451 -28681.416022 -184.190622
+10000000.000000 2.968894 18.628273 0.703484 0.187716 -0.119671 -0.001384 -27797.276706 -184270.562045 -8303.264988
+10000000.000000 11.977720 -31.949327 0.713079 0.791184 0.223584 0.002279 -19719.689661 53459.214496 -1383.178747
+10000000.000000 -5.109333 12.289056 -0.610700 1.072985 1.334059 0.026498 147190.088624 -347614.589980 17501.025544
+10000000.000000 8.698090 -12.453537 0.868581 0.288425 0.391934 -0.012051 -164093.653955 235939.658143 -16595.113228
+10000000.000000 -46.953577 -16.682884 0.014974 0.216830 -0.734956 0.002998 28438.844022 6306.693692 72.739673
+10000000.000000 59.976034 17.374690 -0.194912 0.791143 -1.726480 0.001035 -16226.166954 -4785.399472 77.748327
+10000000.000000 -94.989493 43.339355 0.514150 0.204114 0.467586 0.002644 9192.404614 -999.106992 -1198.405630
+10000000.000000 9.999071 -91.760248 -0.184819 0.599623 0.049863 0.003085 -1071.979165 7544.022614 237.126181
+10000000.000000 5.885418 15.974123 0.779947 0.554772 -0.280417 -0.007974 -79211.875676 -213896.739067 -11897.595195
+10000000.000000 -85.991662 -68.658845 0.808302 0.403071 -0.530167 0.001332 5478.445130 6792.645595 -1105.848011
+10000000.000000 25.959968 -28.106886 0.005081 0.785433 0.587612 0.001222 -10311.939386 38333.042768 8177.889813
+10000000.000000 -3.993754 42.064683 0.808842 0.202227 0.003737 0.001568 3645.831239 -37128.219617 -816.399103
+10000000.000000 -71.996180 -97.744184 0.215306 0.201770 -0.146438 0.003289 7246.052099 11791.650452 1574.900730
+10000000.000000 20.923285 19.956081 -0.578606 0.770896 -0.623158 0.004658 -57636.693566 -54985.495600 1631.707290
+10000000.000000 45.995603 95.259537 -0.090045 0.798307 -0.349594 0.001983 -3391.543754 -6303.745774 -24.107720
+10000000.000000 26.993522 -71.289707 -0.694326 0.397504 0.144730 0.001282 -4668.485076 11185.924573 433.143851
+10000000.000000 -80.992511 45.862347 -0.279089 0.202491 0.372597 0.004412 2345.492684 1234.957425 1250.821896
+10000000.000000 -19.994196 -65.056135 -0.784568 0.602078 -0.207545 0.003163 3326.610676 14756.435008 325.731446
+10000000.000000 30.964595 29.686829 -0.079887 0.786680 -0.669168 0.004040 -25855.469224 -25201.850599 72.088653
+10000000.000000 -26.994585 -77.171194 0.719666 0.601932 -0.232163 0.003850 3118.034007 7720.113423 -438.456412
+10000000.000000 15.987698 -46.642494 0.495849 0.195416 0.077961 -0.005746 -8781.261825 25875.691984 -21262.875663
+10000000.000000 50.978469 -33.036283 -0.189935 0.791923 0.995390 0.002019 -15930.203757 10506.517611 86.003803
+10000000.000000 -43.980696 42.282256 0.104668 0.406948 0.453395 0.000855 11831.109033 -12509.549176 -325.150378
+10000000.000000 -67.980547 16.621511 -0.294818 0.207129 1.723720 0.001073 13105.773075 -2072.963417 145.402106
+10000000.000000 4.995716 -69.893841 0.704594 0.598568 0.024677 0.000853 -1972.643356 13728.334410 -266.693076
+10000000.000000 -0.821961 -14.763354 -0.467040 0.852859 -0.048482 0.010044 18188.387810 303997.025591 9637.714217
+10000000.000000 -85.993525 86.384765 -0.294861 0.802708 0.875756 0.001093 6539.288113 -6607.108273 464.361261
+10000000.000000 7.975392 26.277973 0.407830 0.789727 -0.166001 0.001185 -25617.044929 -85526.750678 -1560.789760
+10000000.000000 48.957980 8.000644 0.508799 0.184565 2.399691 0.001601 -28747.248151 -3106.494747 -911.363262
+10000000.000000 25.988114 53.511821 -0.279862 0.195585 -0.101882 0.004051 -8301.989624 -17025.039222 94.508435
+10000000.000000 70.981378 13.499849 0.903713 0.193461 3.499637 -0.000117 -11171.348259 -4942.131655 -3662.044414
+10000000.000000 82.984997 4.197246 0.109952 0.794367 -3.160824 0.001981 -10775.013765 -623.301407 -51.341442
+10000000.000000 2.172878 -1.774300 0.003410 1.404481 0.234294 0.004037 -6685753.564510 5681248.977651 -10279.138495
+10000000.000000 3.999829 81.947802 -0.494885 0.599946 -0.013188 0.001047 -41.732480 -11400.461514 127.277677
+10000000.000000 69.982443 -21.956151 -0.389832 0.393503 1.009835 0.002070 -12050.744649 4008.777514 130.663090
+10000000.000000 -18.847895 13.571077 0.307652 0.255734 0.297207 0.001127 100758.250921 -71659.455729 -1646.313091
+10000000.000000 -65.994942 -88.754768 0.314956 0.201869 -0.149815 0.002980 3477.363972 4659.294070 -54.498193
+10000000.000000 -28.981810 -51.898587 0.005087 0.606541 -0.376000 0.001013 11195.774055 15186.117014 -88.611301
+10000000.000000 -72.983915 -22.107080 0.009976 0.205811 -0.820788 0.001982 10263.887122 2211.129324 -61.926028
+10000000.000000 -15.989410 93.601227 -0.893234 0.606035 0.115860 0.002672 10149.837499 -33108.345466 10194.402479
+10000000.000000 -96.991762 58.715391 0.809583 0.203228 0.342370 0.001815 6977.495571 -3006.781737 -532.307373
+10000000.000000 -49.994256 -94.113699 -0.084902 0.402421 -0.222673 0.003033 6568.297829 -4902.785208 10.040725
+10000000.000000 -61.983319 -24.857470 0.816437 0.206850 -0.570813 0.002814 12788.304986 1979.398652 -3058.578695
+10000000.000000 -60.979358 22.592872 -0.278362 0.406896 2.516926 0.004460 13138.201939 -3693.909538 119.483035
+10000000.000000 9.998301 83.735424 0.519737 0.599306 -0.055459 0.003881 -1618.650591 -10456.397727 -336.271153
+10000000.000000 29.965392 -30.899328 -0.793736 0.786910 0.626980 0.001480 -25880.228319 26820.545929 974.305097
+10000000.000000 -67.995690 96.712280 0.314931 0.201595 0.141271 0.002966 3013.778508 -5072.355180 -111.767147
+10000000.000000 3.999160 -78.983695 -0.879564 0.799589 0.006039 0.004180 -1331.114265 11114.390354 392.117339
+10000000.000000 -79.990474 -51.630783 -0.689704 0.803288 -1.525105 0.002219 5933.155843 4803.246296 425.667510
+10000000.000000 97.995071 -87.864325 0.814879 0.598084 0.627766 0.002947 -3960.137781 2508.905102 -130.855291
+10000000.000000 -21.995749 80.273392 -0.279896 0.201590 0.052264 0.004041 3058.977521 -9832.186888 93.618236
+10000000.000000 -91.993654 45.160465 -0.594634 0.202280 0.431940 0.001170 3593.499063 -1384.974230 475.355820
+10000000.000000 77.987200 30.651932 -0.794701 0.395220 -0.870390 0.001122 -9241.090215 -2893.085005 260.678565
+10000000.000000 -45.965564 -17.341042 0.005023 0.212430 -0.665288 0.001017 21381.254416 12216.071852 88.915040
+10000000.000000 45.954143 6.388624 -0.196439 0.583040 -1.723343 0.000594 -30676.528439 -2157.709173 72.003223
+10000000.000000 -8.997793 -80.434952 0.714796 0.600800 -0.084437 0.002915 1306.109983 10257.342354 -212.062158
+10000000.000000 6.997642 75.913648 -0.780801 0.199533 -0.017806 0.003623 -457.102398 -3331.419550 -728.791207
+10000000.000000 9.998917 -95.894584 0.604785 0.199582 0.023203 0.000900 -835.826798 8863.226374 -298.831682
+10000000.000000 -56.972456 22.329610 -0.594580 0.209819 3.864829 0.001159 16205.356493 -6024.072100 376.895096
+10000000.000000 -25.988199 -52.493730 -0.389328 0.204188 -0.094566 0.002337 6621.292523 15184.015554 1451.148473
+10000000.000000 52.995311 81.760860 0.904414 0.398365 -0.249751 0.000715 -2494.229421 -8488.103300 -988.551294
+10000000.000000 36.988758 -59.382784 0.409788 0.195765 0.126330 0.001912 -8148.659581 11675.290656 -232.077114
+10000000.000000 99.989055 13.787922 0.304956 0.195766 -1.042601 0.000982 -8660.299752 -432.820750 -41.154456
+10000000.000000 47.964942 -15.385713 -0.878861 0.387265 0.925038 0.004432 -21899.952492 7426.480258 976.759547
+10000000.000000 79.991441 74.092221 0.620174 0.796481 -0.783339 0.004064 -8114.977840 -7146.309907 88.464814
+10000000.000000 -77.992520 67.189968 -0.584741 0.202794 0.236666 0.003122 5294.061006 -5760.082606 359.689733
+10000000.000000 48.974841 -28.801228 0.009955 0.590655 0.842479 0.001978 -17582.904377 10965.739066 -79.387248
+10000000.000000 96.995110 -94.088458 -0.494710 0.598108 0.583139 0.001133 -3942.147393 3726.398267 390.301572
+10000000.000000 64.994571 87.265639 -0.284752 0.197840 -0.148123 0.003169 -5153.235721 -5285.384539 957.958553
+10000000.000000 56.970430 -7.328436 0.204734 0.189147 0.935014 0.000885 -19737.235899 2792.161301 -250.672730
+10000000.000000 -31.958466 28.350650 -0.589796 0.615353 0.864971 0.002434 27766.017219 -22995.199093 717.990653
+10000000.000000 -28.932430 46.973889 -0.778209 0.819766 8.789150 0.004562 12247.059671 -18371.498837 690.514122
+10000000.000000 -79.986100 26.517659 0.219895 0.205140 0.702833 0.003957 9052.451472 -2741.447847 -53.299868
+10000000.000000 -0.000993 92.998604 0.304583 0.199431 -0.002441 0.000754 -2287.874086 -9113.519082 -1070.304107
+10000000.000000 56.969306 -3.335517 0.404629 0.188815 -1.867170 0.000837 -19901.629165 584.891703 -434.256539
+10000000.000000 22.967082 -31.709141 0.219548 0.787454 0.467284 0.003829 -25310.884149 35726.702270 -334.448282
+10000000.000000 -41.968254 -28.572162 -0.379683 0.211632 -0.310905 0.004118 21015.837964 14453.116218 220.601237
+10000000.000000 85.986469 12.996957 0.019999 0.394934 -1.601051 0.004000 -9722.581236 -1448.605228 0.525223
+10000000.000000 -26.983463 48.206354 0.004990 0.406011 0.236529 0.000990 10007.824617 -19665.014060 -282.178014
+10000000.000000 40.948661 38.989102 0.109640 0.183714 7.994329 0.001889 -14836.268668 -14541.069529 -90.364440
+10000000.000000 4.679902 9.255229 -0.434858 0.466091 -0.535347 0.021700 -276466.961564 -551428.823406 25970.723325
+10000000.000000 40.994410 84.267779 0.404837 0.797762 -0.348467 0.000926 -5049.631462 -8306.458392 -196.699399
+10000000.000000 -91.994725 -84.513856 0.804895 0.601983 -0.701904 0.000953 3860.000041 3725.664863 -125.042999
+10000000.000000 -0.982950 26.322397 0.005062 0.605237 0.040838 0.001022 3620.456455 -95649.961509 15.640590
+10000000.000000 60.996477 -95.776255 -0.794656 0.398754 0.246037 0.001156 -1943.697813 5243.661312 465.900784
+10000000.000000 -18.994844 71.574327 -0.194921 0.401889 0.111969 0.001031 3406.271749 -11571.317593 70.823097
+10000000.000000 52.964926 -44.994524 -0.687960 0.788764 -9.796838 0.002715 -12183.879180 7063.867528 1032.385933
+10000000.000000 60.991480 74.439929 0.604073 0.396577 -0.313091 0.000505 -7680.082696 -3766.139961 -1747.894061
+10000000.000000 43.956799 7.989942 -0.886109 0.383836 -1.203661 0.003267 -31274.048974 -5679.091782 1347.624504
+10000000.000000 -26.997714 -86.464057 -0.884728 0.798589 -0.297496 0.003046 -18755.775650 -18743.330113 -151.421624
+10000000.000000 53.982297 39.694482 -0.794555 0.193375 -0.263191 0.001186 -12877.424329 -8216.404095 453.222146
+10000000.000000 28.991939 -62.536103 0.704442 0.197008 0.096047 0.000782 -5965.295542 13240.958126 -540.088542
+10000000.000000 92.988210 -11.258623 -0.879685 0.595462 2.348530 0.004157 -9034.974677 494.772885 297.593680
+10000000.000000 -72.988835 -47.601734 -0.094989 0.204098 -0.319147 0.001003 7445.659205 4900.719537 3.367615
+10000000.000000 79.995970 83.051690 0.408438 0.198614 -0.191211 0.001250 -1865.269057 -7054.416108 -2823.094411
+10000000.000000 -42.967796 90.987794 -0.788612 0.408622 17.995210 0.002510 2035.025947 -6291.122097 197.734620
+10000000.000000 52.995284 -83.228324 0.904315 0.598245 0.355293 0.000672 -3479.823495 3630.707500 -888.471970
+10000000.000000 -91.992598 78.255590 0.509462 0.803060 1.049980 0.001650 6084.915615 -5947.671841 -1091.774752
+10000000.000000 -2.984711 29.024336 0.402894 0.205430 -0.014462 0.000244 8647.156452 -78342.936742 -1260.008493
+10000000.000000 69.994181 -98.295359 -0.490647 0.197888 0.142572 0.003027 -3711.591422 7249.354029 5088.608914
+10000000.000000 21.996218 -74.453095 0.819381 0.398871 0.111395 0.003710 -1150.684080 9685.603273 -613.019564
+10000000.000000 46.996145 -88.524369 0.514878 0.598675 0.296692 0.002946 -1602.905568 6478.643246 -152.625191
+10000000.000000 -9.993659 96.237866 0.301089 0.402975 0.045238 -0.001422 7637.772990 -11321.898948 -14400.910021
+10000000.000000 1.003266 -43.226039 0.015256 0.801019 -0.036294 0.003203 950.035007 35139.771605 1643.531230
+10000000.000000 -93.989627 -34.185801 -0.889683 0.603161 -3.637048 0.002328 -7978.250013 4844.935943 4807.334089
+10000000.000000 49.990147 58.387068 -0.194945 0.396447 -0.324745 0.001022 -6077.456446 -8591.738713 55.006364
+10000000.000000 88.989492 43.040180 -0.894823 0.195831 -0.392709 0.001082 -9174.906639 -3354.250726 240.358457
+10000000.000000 -51.981535 -41.309616 -0.693168 0.207023 -0.259462 0.001805 11847.151838 8819.401041 585.766849
+10000000.000000 -80.988502 -62.663533 -0.195064 0.804003 -11.331817 0.000831 5166.085319 489.434069 -398.962686
+10000000.000000 -41.978768 -41.954869 0.209877 0.807690 -0.987796 0.001955 13372.447682 13134.709943 -79.061423
+10000000.000000 -43.996718 96.949099 0.204726 0.401139 0.188122 0.000880 1748.987843 -7282.888520 -297.386186
+10000000.000000 -97.987715 35.998779 -0.280632 0.204918 6.599061 0.003725 10630.494170 -4468.957471 1820.975275
+10000000.000000 -17.988816 53.182312 0.504669 0.604021 0.231493 0.000875 6803.972098 -20055.868580 -245.539222
+10000000.000000 -6.945072 -23.632277 -0.188714 0.419467 -0.100679 0.002472 31335.171815 105282.027143 857.642613
+10000000.000000 -94.993116 -66.737972 0.419941 0.602617 -0.946927 0.003968 5233.999704 2649.202150 -128.558806
+10000000.000000 86.993499 82.133912 -0.279950 0.797416 -0.774178 0.004019 -5567.433859 -3802.476541 36.107805
+10000000.000000 68.997448 96.625654 0.215088 0.399252 -0.276167 0.003057 -343.488472 -5432.751490 262.791423
+10000000.000000 4.997063 40.844754 -0.394302 0.798582 -0.040739 0.001260 -4510.330976 -38816.678483 478.227633
+10000000.000000 39.996717 -94.834417 0.204981 0.598788 0.234749 0.000992 -2222.566670 6642.440530 -20.948832
+10000000.000000 36.940891 12.576589 -0.094832 0.178110 -0.488251 0.001068 -40763.231133 -12911.071758 169.891545
+10000000.000000 -18.945663 26.698097 -0.388500 0.219964 0.127360 0.002540 36631.033694 -50688.609135 856.004345
+10000000.000000 -80.989297 48.681129 0.019362 0.403636 0.734920 0.003790 4817.919673 -4517.367525 -177.445036
+10000000.000000 83.989439 -35.068037 -0.094902 0.596124 1.187206 0.001036 -6955.674958 3163.547520 47.116693
+10000000.000000 -56.982211 39.614900 0.020021 0.806451 1.521161 0.004009 11315.563151 -7577.333945 4.043798
+10000000.000000 -73.990963 -59.193307 -0.594869 0.603297 -0.837472 0.001057 5787.688785 4937.178314 155.208981
+10000000.000000 41.991076 -65.239252 -0.284892 0.596635 0.354594 0.003042 -6468.553757 9848.068055 78.892874
+10000000.000000 -81.986353 -37.231211 -0.278342 0.804766 -4.045034 0.004771 7056.203720 3808.148270 261.399742
+10000000.000000 -11.741111 -15.979508 0.004885 0.886100 -1.763207 0.000948 102166.199935 136851.605126 -117.353482
+10000000.000000 -42.990407 63.684607 0.219838 0.203511 0.134588 0.003907 6389.204561 -9343.097139 -67.311094
+10000000.000000 32.995943 79.555865 0.504856 0.798573 -0.290764 0.000936 -2175.984168 -7377.849684 -186.172961
+10000000.000000 -92.991236 53.795827 -0.894743 0.403415 0.758398 0.001129 7384.530169 -3321.887002 457.791996
+10000000.000000 -79.986288 -25.711756 -0.194904 0.405072 -2.341979 0.001038 9342.394381 895.523734 44.403565
+10000000.000000 66.994860 -89.260439 -0.879785 0.198072 0.148960 0.004095 -3678.616375 4161.780556 258.018545
+10000000.000000 37.954218 -19.841937 -0.184749 0.382986 0.636019 0.003091 -32054.029264 16851.341482 164.146263
+10000000.000000 -1.999683 92.151164 -0.894433 0.600167 0.028252 0.001315 1080.584897 -7520.994962 1693.397828
+10000000.000000 31.957422 -26.855799 -0.394427 0.184119 0.234989 0.001218 -30328.544227 24405.428418 452.275177
+10000000.000000 -7.999224 90.089551 0.418956 0.200309 0.016385 0.003473 832.096221 -5540.269831 -1623.053406
+10000000.000000 -13.994810 65.763599 0.014988 0.601849 0.149191 0.002993 3046.183980 -14093.292669 -25.407203
+10000000.000000 34.968836 32.027695 0.004984 0.388401 -0.399636 0.000993 -21886.443644 -20497.341032 -14.027744
+10000000.000000 20.919497 -19.966108 -0.886138 0.170050 0.220381 0.003430 -56764.312710 54305.823145 2650.919567
+10000000.000000 92.992982 -268.997182 0.804742 0.598255 -53.999003 0.000936 -323.406501 899.181338 -3.509434
+10000000.000000 15.984924 -46.643454 -0.068215 0.193843 0.077412 0.012146 -8578.595367 25946.471132 20960.144931
+10000000.000000 -9.905718 21.802021 0.813741 0.832642 0.534845 0.001692 47767.960876 -105533.255858 -4181.195053
+10000000.000000 -43.993212 -76.581563 -0.079974 0.202527 -0.114553 0.004008 4783.698058 6936.678250 8.534890
+10000000.000000 -44.994692 83.544318 -0.289938 0.201965 0.107159 0.002017 3489.118210 -6830.081051 48.894202
+10000000.000000 15.998465 -81.399980 0.804442 0.799596 0.122485 0.000621 303.481789 9491.930833 -2425.651186
+10000000.000000 12.439921 -7.274201 -0.557740 -0.002124 0.403216 0.012684 -276191.027552 162088.420677 12495.647249
+10000000.000000 -56.978729 -32.327254 0.608852 0.806976 -4.063692 0.001422 12235.904034 8294.336357 -314.387550
+10000000.000000 43.962087 19.326739 0.703785 0.385875 -0.737960 0.000567 -26705.718850 -12538.736952 -711.105269
diff --git a/course/semester2/pprog/assignment1/nbody-bh/Makefile b/course/semester2/pprog/assignment1/nbody-bh/Makefile
new file mode 100644 (file)
index 0000000..1bca5a9
--- /dev/null
@@ -0,0 +1,27 @@
+# Makefile for nbody program
+# Compiles on Ubuntu 12.04 and Debian 6.0.4
+# NOTE: This file is identical for both the single-threaded and multi-threaded versions of the program
+CXX = gcc
+LIBRARIES = -lm -lGL -lglut -lGLU -lpthread
+FLAGS = --std=c99 -Wall -pedantic -g
+PREPROCESSOR_FLAGS = -fopenmp
+SINGLE_THREAD_OBJ = main.o nbody.o graphics.o 
+LINK_OBJ = main.o nbody.o graphics.o tree.o
+
+BIN = nbody
+
+$(BIN) : $(LINK_OBJ) 
+       $(CXX) -o $(BIN) $(LINK_OBJ) $(PREPROCESSOR_FLAGS) $(LIBRARIES)
+
+nbody : 
+
+%.o : %.c
+       $(CXX) $(FLAGS) $(PREPROCESSOR_FLAGS) -c $<
+
+clean :
+       $(RM) $(BIN) $(OBJ) $(LINK_OBJ)
+
+clean_full: #cleans up all backup files
+       $(RM) $(BIN) $(OBJ) $(LINK_OBJ)
+       $(RM) *.*~
+       $(RM) *~
diff --git a/course/semester2/pprog/assignment1/nbody-bh/callgrind.out.4853 b/course/semester2/pprog/assignment1/nbody-bh/callgrind.out.4853
new file mode 100644 (file)
index 0000000..33f8806
--- /dev/null
@@ -0,0 +1,13986 @@
+version: 1
+creator: callgrind-3.7.0
+pid: 4853
+cmd:  ./nbody ../fields/500 -s 10 -g
+part: 1
+
+
+desc: I1 cache: 
+desc: D1 cache: 
+desc: LL cache: 
+
+desc: Timerange: Basic block 0 - 166736221
+desc: Trigger: Program termination
+
+positions: line
+events: Ir
+summary: 1305015743
+
+
+ob=(4) /lib/x86_64-linux-gnu/libm-2.15.so
+fl=(57) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/e_asin.c
+fn=(224) __asin_finite
+14 2
+cob=(3) /lib/x86_64-linux-gnu/libc-2.15.so
+cfi=(42) /build/buildd/eglibc-2.15/csu/../sysdeps/x86_64/multiarch/init-arch.c
+cfn=(204) __get_cpu_features
+calls=1 170 
+* 5
+* 5
+
+fn=(218) __acos_finite
+10 2
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
+* 5
+
+fl=(51) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/s_sin.c
+fn=(206) cos
+20 2
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
+* 7
+
+fn=(230) sin
+23 1
+-23 1
+fi=(55) ???
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+0 5
+0 7
+
+fl=(56) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/s_rintf.S
+fn=(216) rintf
+26 1
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
++1 1
++1 1
++1 1
++1 1
++2 1
+
+fl=(59) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/s_floor.S
+fn=(222) floor
+26 1
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
++1 1
++1 1
++1 1
++1 1
++2 1
+
+fl=(48) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/e_exp.c
+fn=(190) __exp_finite
+15 2
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
+cob=(1) /lib/x86_64-linux-gnu/ld-2.15.so
+cfi=(49) /build/buildd/eglibc-2.15/elf/../sysdeps/x86_64/dl-trampoline.S
+cfn=(198) _dl_runtime_resolve
+calls=1 +16 
+* 1888
+* 7
+
+fl=(60) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/e_atan2.c
+fn=(226) __atan2_finite
+15 1
+-15 1
+fi=(55)
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+0 5
+0 7
+
+fl=(54) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/e_log.c
+fn=(212) __log_finite
+15 1
+-15 1
+fi=(55)
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+0 5
+0 7
+
+fl=(53) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/e_pow.c
+fn=(210) __pow_finite
+8 2
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
+* 5
+
+fl=(55)
+fn=(2004) 0x0000000000005890
+0 10
+cob=(3)
+cfi=(196) /build/buildd/eglibc-2.15/stdlib/cxa_finalize.c
+cfn=(1736) __cxa_finalize
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(468) 0x0000000000005910
+0 6
+
+ob=(9) /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
+fl=(86) ???
+fn=(2080) 0x0000000000009370
+0 8
+
+ob=(4)
+fl=(55)
+fn=(462) 0x000000000000586c
+0 6
+
+fn=(474) 0x000000000006be10
+0 11
+
+fl=(52) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/s_rint.S
+fn=(208) rint
+26 1
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
++1 1
++1 1
++1 1
++1 1
++2 1
+
+fl=(58) /build/buildd/eglibc-2.15/math/../sysdeps/x86_64/fpu/multiarch/s_floorf.S
+fn=(220) floorf
+26 1
+cob=(3)
+cfi=(42)
+cfn=(204)
+calls=1 170 
+* 5
++1 1
++1 1
++1 1
++1 1
+
+ob=(9)
+fl=(86)
+fn=(2080)
+0 2
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(408) 0x00000000000093f0
+0 6
+
+fn=(402) 0x0000000000009350
+0 6
+
+fn=(414) 0x0000000000015690
+0 11
+
+ob=(4)
+fl=(58)
+fn=(220)
+32 1
+
+ob=(2) ???
+fl=(14) ???
+fn=(440) 0x000000000660d5f8
+0 2
+cob=(11) /lib/x86_64-linux-gnu/libgcc_s.so.1
+cfi=(88) ???
+cfn=(442) 0x0000000000002944
+calls=1 0 
+0 6
+0 1
+cob=(11)
+cfi=(88)
+cfn=(448) 0x00000000000029e0
+calls=1 0 
+0 6
+0 1
+cob=(11)
+cfi=(88)
+cfn=(454) 0x0000000000012160
+calls=1 0 
+0 11
+0 2
+
+fn=(694) 0x00000000055e1200
+0 2
+cob=(15) /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
+cfi=(93) ???
+cfn=(696) 0x0000000000004100
+calls=1 0 
+0 6
+0 1
+cob=(15)
+cfi=(93)
+cfn=(702) 0x00000000000041a0
+calls=1 0 
+0 6
+0 1
+cob=(15)
+cfi=(93)
+cfn=(708) 0x0000000000009eb0
+calls=1 0 
+0 11
+0 2
+
+fn=(896) 0x0000000004fb77b0
+0 2
+cob=(3)
+cfi=(90) /build/buildd/eglibc-2.15/stdlib/cxa_atexit.c
+cfn=(556) __cxa_atexit
+calls=1 57 
+0 65
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2047
+0 10
+cfn=(904) 0x0000000004fb7310
+calls=1 0 
+0 23
+0 8
+
+fn=(982) 0x0000000004f548e0
+0 2
+cob=(3)
+cfi=(110) /build/buildd/eglibc-2.15/malloc/malloc.c
+cfn=(986) calloc
+calls=1 3233 
+0 239
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1721
+0 9
+cob=(3)
+cfi=(110)
+cfn=(986)
+calls=8 3233 
+0 1785
+0 2
+
+fn=(1006) 0x0000000004fb6f40
+0 28
+cfn=(1020) 0x0000000004f549c0
+calls=1 0 
+0 1757
+0 5
+cfn=(966) 0x0000000004f54480
+calls=1 0 
+0 133
+0 6
+cfn=(1030) 0x0000000004f54490
+calls=1 0 
+0 3736
+0 2
+cfn=(1064) 0x0000000004fb68f0
+calls=1 0 
+0 12527
+0 15
+cfn=(1218) 0x0000000004f54500
+calls=1 0 
+0 2559
+0 2
+cfn=(1228) 0x0000000004fb6a20
+calls=1 0 
+0 110760
+0 3
+cfn=(1218)
+calls=1 0 
+0 4
+0 17
+
+fn=(1158) 0x0000000004f54740
+0 2
+cob=(3)
+cfi=(138) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/strstr.c
+cfn=(1166) __strstr_sse42
+calls=1 167 
+0 59
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1864
+0 6
+cob=(3)
+cfi=(138)
+cfn=(1166)
+calls=5 167 
+0 7321
+0 2
+
+fn=(1786) 0x0000000004fb78a8
+0 2
+cfn=(1788) 0x0000000004f54b10
+calls=1 0 
+0 13571
+0 2
+
+fn=(1864) 0x0000000004f54700
+0 2
+cob=(3)
+cfi=(96) /build/buildd/eglibc-2.15/nptl/forward.c
+cfn=(758) pthread_self
+calls=1 187 
+0 9
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2142
+0 2
+cob=(3)
+cfi=(96)
+cfn=(758)
+calls=1 187 
+0 9
+0 2
+
+fn=(1914) 0x00000000055e7ee8
+0 2
+cob=(15)
+cfi=(93)
+cfn=(1916) 0x0000000000004120
+calls=1 0 
+0 2004
+0 2
+
+fn=(1972) 0x00000000063c99d8
+0 2
+cob=(12) /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
+cfi=(89) ???
+cfn=(1974) 0x000000000005a750
+calls=1 0 
+0 3623
+0 2
+
+fn=(2102) 0x0000000006c48918
+0 2
+cob=(8) /lib/x86_64-linux-gnu/libdl-2.15.so
+cfi=(84) ???
+cfn=(2104) 0x0000000000000e10
+calls=1 0 
+0 2004
+0 2
+
+fn=(338) 0x000000000704ef90
+0 2
+cob=(6) /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
+cfi=(82) ???
+cfn=(340) 0x0000000000001090
+calls=1 0 
+0 6
+0 1
+cob=(6)
+cfi=(82)
+cfn=(346) 0x0000000000001130
+calls=1 0 
+0 6
+0 1
+cob=(6)
+cfi=(82)
+cfn=(352) 0x0000000000002a70
+calls=1 0 
+0 11
+0 2
+
+fn=(400) 0x0000000006a32050
+0 2
+cob=(9)
+cfi=(86)
+cfn=(402)
+calls=1 0 
+0 6
+0 1
+cob=(9)
+cfi=(86)
+cfn=(408)
+calls=1 0 
+0 6
+0 1
+cob=(9)
+cfi=(86)
+cfn=(414)
+calls=1 0 
+0 11
+0 2
+
+fn=(966)
+0 2
+cob=(3)
+cfi=(101) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../memset.S
+cfn=(778) __GI_memset
+calls=1 44 
+0 56
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2113
+0 3
+cob=(3)
+cfi=(101)
+cfn=(778)
+calls=2 44 
+0 264
+0 2
+
+fn=(974) 0x0000000004f54aa0
+0 2
+cob=(3)
+cfi=(96)
+cfn=(978) pthread_mutex_unlock
+calls=1 184 
+0 24
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2176
+0 2
+cob=(3)
+cfi=(96)
+cfn=(978)
+calls=1 184 
+0 24
+0 2
+
+fn=(1064)
+0 7
+cfn=(1066) 0x0000000004f54560
+calls=1 0 
+0 3589
+0 8
+cfn=(982)
+calls=1 0 
+0 229
+0 7
+cfn=(1104) 0x0000000004f547b0
+calls=1 0 
+0 2299
+0 114
+cfn=(1158)
+calls=3 0 
+0 2048
+0 8
+cfn=(1178) 0x0000000004f54610
+calls=1 0 
+0 2014
+0 2
+cfn=(1186) 0x0000000004f54920
+calls=1 0 
+0 2195
+0 7
+
+fn=(1178)
+0 2
+cob=(3)
+cfi=(110)
+cfn=(1060) free
+calls=1 2957 
+0 79
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1930
+0 13
+cob=(3)
+cfi=(110)
+cfn=(1060)
+calls=12 2957 
+0 1175
+0 2
+
+fn=(1250) 0x0000000004f54a30
+0 2
+cob=(3)
+cfi=(110)
+cfn=(1254) realloc
+calls=1 2989 
+0 167
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2064
+0 233
+cob=(3)
+cfi=(110)
+cfn=(1254)
+calls=232 2989 
+0 31320
+0 2
+
+fn=(1798) 0x0000000004fb7760
+0 2
+
+fn=(2002) 0x0000000004c92e48
+0 2
+cob=(4)
+cfi=(55)
+cfn=(2004)
+calls=1 0 
+0 2004
+0 2
+
+fn=(2060) 0x0000000005bba3b0
+0 2
+cob=(5) /lib/x86_64-linux-gnu/libpthread-2.15.so
+cfi=(69) ???
+cfn=(2062) 0x0000000000006680
+calls=1 0 
+0 2004
+0 2
+
+fn=(480) 0x00000000063627e0
+0 2
+cob=(12)
+cfi=(89)
+cfn=(482) 0x000000000005a72c
+calls=1 0 
+0 6
+0 1
+cob=(12)
+cfi=(89)
+cfn=(488) 0x000000000005a7d0
+calls=1 0 
+0 6
+0 1
+cob=(12)
+cfi=(89)
+cfn=(494) 0x00000000000be9a0
+calls=1 0 
+0 11
+0 2
+
+fn=(904)
+0 23
+
+fn=(1382) 0x0000000005374308
+0 2
+cob=(17) /usr/lib/x86_64-linux-gnu/libGLU.so.1.3.08000
+cfi=(150) ???
+cfn=(1384) 0x0000000000004800
+calls=1 0 
+0 6
+0 1
+cob=(17)
+cfi=(150)
+cfn=(1390) 0x00000000000048a0
+calls=1 0 
+0 6
+0 1
+cob=(17)
+cfi=(150)
+cfn=(1396) 0x0000000000056d10
+calls=1 0 
+0 11
+0 2
+
+fn=(1722) 0x0000000004a25718
+0 2
+cob=(19) /usr/lib/valgrind/vgpreload_core-amd64-linux.so
+cfi=(152) ???
+cfn=(1724) 0x00000000000004f0
+calls=1 0 
+0 1405
+0 2
+
+fn=(1808) 0x0000000004f84ca0
+0 7
+cfn=(926) 0x0000000004f54a20
+calls=1 0 
+0 31
+0 3592
+cfn=(974)
+calls=1 0 
+0 25
+0 5
+
+fn=(420) 0x0000000006822e10
+0 2
+cob=(10) /lib/x86_64-linux-gnu/librt-2.15.so
+cfi=(87) ???
+cfn=(422) 0x00000000000022cc
+calls=1 0 
+0 6
+0 1
+cob=(10)
+cfi=(87)
+cfn=(428) 0x0000000000002370
+calls=1 0 
+0 6
+0 1
+cob=(10)
+cfi=(87)
+cfn=(434) 0x0000000000005680
+calls=1 0 
+0 11
+0 2
+
+fn=(674) 0x0000000005dc9180
+0 2
+cob=(14) /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0
+cfi=(92) ???
+cfn=(676) 0x0000000000003490
+calls=1 0 
+0 6
+0 1
+cob=(14)
+cfi=(92)
+cfn=(682) 0x0000000000003530
+calls=1 0 
+0 6
+0 1
+cob=(14)
+cfi=(92)
+cfn=(688) 0x000000000000d3f0
+calls=1 0 
+0 11
+0 2
+
+fn=(886) 0x0000000004f54b60
+0 6
+
+fn=(1020)
+0 2
+cob=(3)
+cfi=(118) /build/buildd/eglibc-2.15/posix/../sysdeps/unix/syscall-template.S
+cfn=(1024) getppid
+calls=1 63 
+0 3
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1749
+0 3
+
+fn=(1228)
+0 35
+cfn=(1066)
+calls=1 0 
+0 490
+0 7
+cfn=(982)
+calls=1 0 
+0 135
+0 258
+cfn=(1250)
+calls=51 0 
+0 9036
+0 306
+cfn=(1104)
+calls=51 0 
+0 6031
+0 4
+cfn=(1104)
+calls=1 0 
+0 344
+0 6705
+cfn=(1158)
+calls=1 0 
+0 150
+0 7
+cfn=(1278) 0x0000000004f546f0
+calls=1 0 
+0 5082
+0 5
+cfn=(1178)
+calls=1 0 
+0 154
+0 2
+cfn=(1186)
+calls=1 0 
+0 488
+0 8
+cfn=(966)
+calls=1 0 
+0 133
+0 5
+cfn=(1030)
+calls=1 0 
+0 393
+0 3
+cfn=(1066)
+calls=1 0 
+0 524
+0 7
+cfn=(982)
+calls=1 0 
+0 229
+0 913
+cfn=(1250)
+calls=182 0 
+0 24752
+0 1092
+cfn=(1104)
+calls=182 0 
+0 21479
+0 4
+cfn=(1104)
+calls=1 0 
+0 344
+0 562
+cfn=(1158)
+calls=1 0 
+0 3528
+0 5
+cfn=(1158)
+calls=1 0 
+0 3528
+0 12
+cfn=(1178)
+calls=1 0 
+0 154
+0 2
+cfn=(1186)
+calls=1 0 
+0 488
+0 23356
+
+fn=(1746) 0x000000000514ff78
+0 2
+cob=(18) /usr/lib/x86_64-linux-gnu/libglut.so.3.9.0
+cfi=(151) ???
+cfn=(1748) 0x0000000000016420
+calls=1 0 
+0 2004
+0 2
+
+fn=(1826) 0x0000000004fb6860
+0 3
+cfn=(1828) 0x0000000004fb6850
+calls=1 0 
+0 2
+0 13
+
+fn=(1932) 0x0000000005dd3428
+0 2
+cob=(14)
+cfi=(92)
+cfn=(1934) 0x00000000000034b0
+calls=1 0 
+0 2004
+0 2
+
+fn=(2122) 0x0000000006e4cae8
+0 2
+cob=(7) /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
+cfi=(83) ???
+cfn=(2124) 0x0000000000000db0
+calls=1 0 
+0 2004
+0 2
+
+fn=(378) 0x0000000006c47cc0
+0 2
+cob=(8)
+cfi=(84)
+cfn=(380) 0x0000000000000dec
+calls=1 0 
+0 6
+0 1
+cob=(8)
+cfi=(84)
+cfn=(386) 0x0000000000000e90
+calls=1 0 
+0 6
+0 1
+cob=(8)
+cfi=(84)
+cfn=(392) 0x00000000000018e0
+calls=1 0 
+0 11
+0 2
+
+fn=(880) 0x0000000004f54af0
+0 6
+
+fn=(892) 0x0000000004fb7870
+0 10
+cfn=(896)
+calls=1 0 
+0 2155
+0 1
+cfn=(922) 0x0000000004f5bec0
+calls=1 0 
+0 203013
+0 12
+
+fn=(1218)
+0 2
+cob=(16) /usr/lib/valgrind/callgrind-amd64-linux
+cfi=(142) ???
+cfn=(1222) 0x0000000038050d53
+calls=1 0 
+0 3
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2551
+0 2
+cob=(16)
+cfi=(142)
+cfn=(1222)
+calls=1 0 
+0 3
+0 2
+
+fn=(1712) 0x0000000000405658
+0 2
+cob=(20) /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/nbody
+cfi=(153) ???
+cfn=(1714) 0x0000000000401a40
+calls=1 0 
+0 18
+0 2
+
+fn=(1824) 0x0000000004f8e230
+0 5
+cfn=(1826)
+calls=1 0 
+0 18
+0 12
+cfn=(1178)
+calls=1 0 
+0 80
+0 10
+cfn=(1178)
+calls=2 0 
+0 170
+0 8
+cfn=(1178)
+calls=1 0 
+0 85
+0 10
+cfn=(1178)
+calls=1 0 
+0 85
+0 5
+cfn=(1178)
+calls=1 0 
+0 85
+0 6
+cfn=(1178)
+calls=1 0 
+0 85
+0 10
+cfn=(1178)
+calls=1 0 
+0 85
+0 4
+cfn=(1178)
+calls=1 0 
+0 85
+0 2
+cfn=(1862) 0x0000000004f8dfb0
+calls=1 0 
+0 6460
+0 1
+cfn=(1864)
+calls=1 0 
+0 10
+0 16
+cfn=(1178)
+calls=1 0 
+0 119
+0 7
+
+fn=(1862)
+0 5
+cfn=(1864)
+calls=1 0 
+0 2156
+0 6
+cfn=(1872) 0x0000000004f549b0
+calls=1 0 
+0 1997
+0 7
+cfn=(1880) 0x0000000004f54760
+calls=1 0 
+0 2208
+0 6
+cfn=(1880)
+calls=1 0 
+0 69
+0 6
+
+fn=(2020) 0x000000000661d198
+0 2
+cob=(11)
+cfi=(88)
+cfn=(2022) 0x0000000000002960
+calls=1 0 
+0 2004
+0 2
+
+fn=(2078) 0x0000000006a3e6c8
+0 2
+cob=(9)
+cfi=(86)
+cfn=(2080)
+calls=1 0 
+0 2004
+0 2
+
+fn=(1422) 0x0000000004a25480
+0 2
+cob=(19)
+cfi=(152)
+cfn=(1424) 0x00000000000004d0
+calls=1 0 
+0 6
+0 1
+cob=(19)
+cfi=(152)
+cfn=(1430) 0x0000000000000570
+calls=1 0 
+0 6
+0 1
+cob=(19)
+cfi=(152)
+cfn=(1436) 0x00000000000006e0
+calls=1 0 
+0 11
+0 2
+
+fn=(1456) 0x0000000000401598
+0 2
+cob=(20)
+cfi=(153)
+cfn=(1458) 0x0000000000401a1c
+calls=1 0 
+0 6
+0 1
+cob=(20)
+cfi=(153)
+cfn=(1464) 0x0000000000401ab0
+calls=1 0 
+0 6
+0 1
+cob=(20)
+cfi=(153)
+cfn=(1470) 0x0000000000405620
+calls=1 0 
+0 11
+0 2
+
+fn=(460) 0x0000000004c2c3c8
+0 2
+cob=(4)
+cfi=(55)
+cfn=(462)
+calls=1 0 
+0 6
+0 1
+cob=(4)
+cfi=(55)
+cfn=(468)
+calls=1 0 
+0 6
+0 1
+cob=(4)
+cfi=(55)
+cfn=(474)
+calls=1 0 
+0 11
+0 2
+
+fn=(654) 0x0000000005fef238
+0 2
+cob=(13) /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
+cfi=(91) ???
+cfn=(656) 0x0000000000018f54
+calls=1 0 
+0 6
+0 1
+cob=(13)
+cfi=(91)
+cfn=(662) 0x0000000000018ff0
+calls=1 0 
+0 6
+0 1
+cob=(13)
+cfi=(91)
+cfn=(668) 0x00000000000a0520
+calls=1 0 
+0 11
+0 2
+
+fn=(878) 0x0000000004f543f8
+0 2
+cfn=(880)
+calls=1 0 
+0 6
+0 1
+cfn=(886)
+calls=1 0 
+0 6
+0 1
+cfn=(892)
+calls=1 0 
+0 205191
+0 2
+
+fn=(938) 0x0000000004f54550
+0 2
+cob=(3)
+cfi=(110)
+cfn=(942) malloc
+calls=1 2910 
+0 59081
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1852
+0 4
+cob=(3)
+cfi=(110)
+cfn=(942)
+calls=3 2910 
+0 585
+0 2
+
+fn=(1066)
+0 2
+cob=(3)
+cfi=(126) /build/buildd/eglibc-2.15/libio/../sysdeps/wordsize-64/../../libio/iofopen.c
+cfn=(1070) fopen@@GLIBC_2.2.5
+calls=1 107 
+0 1554
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2030
+0 3
+cob=(3)
+cfi=(126)
+cfn=(1070)
+calls=2 107 
+0 1012
+0 2
+
+fn=(1186)
+0 2
+cob=(3)
+cfi=(141) /build/buildd/eglibc-2.15/libio/iofclose.c
+cfn=(1190) fclose@@GLIBC_2.2.5
+calls=1 43 
+0 452
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1738
+0 3
+cob=(3)
+cfi=(141)
+cfn=(1190)
+calls=2 43 
+0 974
+0 2
+
+fn=(1766) 0x00000000053c6d48
+0 2
+cob=(17)
+cfi=(150)
+cfn=(1768) 0x0000000000004820
+calls=1 0 
+0 2004
+0 2
+
+fn=(1806) 0x0000000004f5dfb0
+0 9
+cfn=(1808)
+calls=1 0 
+0 3660
+0 5
+cfn=(1824)
+calls=1 0 
+0 7463
+0 12
+
+fn=(1880)
+0 2
+cob=(3)
+cfi=(162) /build/buildd/eglibc-2.15/signal/../nptl/sigaction.c
+cfn=(1510) sigaction
+calls=1 38 
+0 106
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2097
+0 2
+cob=(3)
+cfi=(162)
+cfn=(1510)
+calls=1 38 
+0 68
+0 2
+
+fn=(1952) 0x0000000006077558
+0 2
+cob=(13)
+cfi=(91)
+cfn=(1954) 0x0000000000018f70
+calls=1 0 
+0 2004
+0 2
+
+fn=(2142) 0x0000000007050aa8
+0 2
+cob=(6)
+cfi=(82)
+cfn=(2144) 0x00000000000010b0
+calls=1 0 
+0 2004
+0 2
+
+fn=(252) 0x0000000005bae2b0
+0 2
+cob=(5)
+cfi=(62) /build/buildd/eglibc-2.15/nptl/nptl-init.c
+cfn=(254) __pthread_initialize_minimal
+calls=1 292 
+0 9419
+0 1
+cob=(5)
+cfi=(69)
+cfn=(290) 0x0000000000006700
+calls=1 0 
+0 6
+0 1
+cob=(5)
+cfi=(69)
+cfn=(296) 0x0000000000011320
+calls=1 0 
+0 11
+0 2
+
+fn=(358) 0x0000000006e4bbb8
+0 2
+cob=(7)
+cfi=(83)
+cfn=(360) 0x0000000000000d90
+calls=1 0 
+0 6
+0 1
+cob=(7)
+cfi=(83)
+cfn=(366) 0x0000000000000e30
+calls=1 0 
+0 6
+0 1
+cob=(7)
+cfi=(83)
+cfn=(372) 0x0000000000001ab0
+calls=1 0 
+0 11
+0 2
+
+fn=(922)
+0 8
+cfn=(926)
+calls=1 0 
+0 2223
+0 5
+cfn=(974)
+calls=1 0 
+0 2205
+0 3
+cfn=(982)
+calls=1 0 
+0 1965
+0 17
+cfn=(982)
+calls=1 0 
+0 240
+0 8
+cfn=(982)
+calls=1 0 
+0 240
+0 8
+cfn=(938)
+calls=1 0 
+0 196
+0 7
+cfn=(982)
+calls=1 0 
+0 240
+0 14
+cfn=(982)
+calls=1 0 
+0 240
+0 13
+cfn=(938)
+calls=1 0 
+0 196
+0 6
+cfn=(982)
+calls=1 0 
+0 240
+0 23
+cfn=(938)
+calls=1 0 
+0 196
+0 12
+cfn=(1006)
+calls=1 0 
+0 131554
+0 21
+cfn=(938)
+calls=1 0 
+0 60938
+0 8
+cfn=(966)
+calls=1 0 
+0 2174
+0 13
+
+fn=(926)
+0 2
+cob=(3)
+cfi=(96)
+cfn=(930) pthread_mutex_lock
+calls=1 182 
+0 30
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2188
+0 2
+cob=(3)
+cfi=(96)
+cfn=(930)
+calls=1 182 
+0 30
+0 2
+
+fn=(1104)
+0 2
+cob=(3)
+cfi=(131) /build/buildd/eglibc-2.15/libio/iofread.c
+cfn=(1108) fread
+calls=1 37 
+0 463
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1831
+0 236
+cob=(3)
+cfi=(131)
+cfn=(1108)
+calls=235 37 
+0 27963
+0 2
+
+fn=(1278)
+0 2
+cob=(3)
+cfi=(144) /build/buildd/eglibc-2.15/stdio-common/sscanf.c
+cfn=(1282) sscanf
+calls=1 29 
+0 2973
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2104
+0 3
+
+fn=(1788)
+0 8
+cfn=(1794) 0x0000000004f54660
+calls=1 0 
+0 2399
+0 4
+cfn=(1806)
+calls=1 0 
+0 11149
+0 11
+
+fn=(1794)
+0 2
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 104
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2290
+0 3
+
+fn=(1828)
+0 2
+
+fn=(1872)
+0 2
+cob=(3)
+cfi=(198) /build/buildd/eglibc-2.15/signal/sigempty.c
+cfn=(1876) sigemptyset
+calls=1 28 
+0 38
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1954
+0 3
+
+fn=(2040) 0x0000000006826724
+0 2
+cob=(10)
+cfi=(87)
+cfn=(2042) 0x00000000000022f0
+calls=1 0 
+0 2004
+0 2
+
+fn=(1030)
+0 2
+cob=(3)
+cfi=(119) /build/buildd/eglibc-2.15/stdio-common/snprintf.c
+cfn=(1034) snprintf
+calls=1 30 
+0 1832
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1899
+0 2
+cob=(3)
+cfi=(119)
+cfn=(1034)
+calls=1 30 
+0 392
+0 2
+
+fn=(1402) 0x000000000513fae8
+0 2
+cob=(18)
+cfi=(151)
+cfn=(1404) 0x0000000000016400
+calls=1 0 
+0 6
+0 1
+cob=(18)
+cfi=(151)
+cfn=(1410) 0x00000000000164a0
+calls=1 0 
+0 6
+0 1
+cob=(18)
+cfi=(151)
+cfn=(1416) 0x0000000000025f40
+calls=1 0 
+0 11
+0 2
+
+ob=(6)
+fl=(82)
+fn=(2144)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(346)
+0 6
+
+fn=(340)
+0 6
+
+fn=(352)
+0 11
+
+ob=(14)
+fl=(92)
+fn=(682)
+0 6
+
+fn=(676)
+0 6
+
+fn=(688)
+0 11
+
+fn=(1934)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+ob=(16)
+fl=(142)
+fn=(1222)
+0 12
+
+ob=(1)
+fl=(35) /build/buildd/eglibc-2.15/string/../string/memmove.c
+fn=(130) memmove
+49 21
++6 42
+-6 21
++1 21
+-1 21
++2 21
+-2 63
++6 42
++5 60
++3 50
++1 20
++12 120
++6 40
+-37 20
++37 340
++30 147
+-25 1
++4 1
+-3 1
++3 3
++3 1
+-7 1
++1 1
++6 2
++1 2
++7 12
++6 2
+-32 10
+cfi=(36) /build/buildd/eglibc-2.15/string/wordcopy.c
+cfn=(134) _wordcopy_fwd_aligned
+calls=10 -38 
+* 288
+* 10
++26 1
+cfi=(36)
+cfn=(132) _wordcopy_bwd_aligned
+calls=1 233 
+* 21
+* 1
+
+fl=(29) /build/buildd/eglibc-2.15/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c
+fn=(104) _fxstat
+37 18
+-1 18
++1 18
++1 108
++4 18
+
+fl=(25) /build/buildd/eglibc-2.15/elf/dl-debug.c
+fn=(76) _dl_debug_initialize
+52 38
++9 1
+-1 1
++1 1
++1 2
+-1 1
++1 3
++1 2
++4 19
+-10 19
+-4 19
++4 74
+
+fn=(78) _dl_debug_state
+77 2
+
+fl=(49)
+fn=(198)
+31 77
++2 77
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
+cfi=(50) /build/buildd/eglibc-2.15/elf/../elf/dl-runtime.c
+cfn=(200) _dl_fixup
+calls=77 +32 
+* 138701
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
++1 77
++2 77
+
+fl=(22) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/memcpy.S
+fn=(66) mempcpy
+62 78
++4 78
++3 76
++1 76
++2 33
++1 33
++2 33
++1 33
++5 33
++1 33
+-1 43
++1 43
++2 41
++1 41
++2 41
++1 41
++5 41
++1 41
+-1 35
++1 35
++2 39
++1 39
++2 39
++1 39
++5 39
++1 39
+-1 37
++1 37
++2 39
++1 39
++2 39
++1 78
++5 39
++1 39
+-1 37
++1 42
++5 5
++1 5
++1 5
++1 5
++2 5
++2 5
++1 5
++2 5
++6 76
++4 76
++12 16
++2 16
++1 16
++26 16
++1 16
++3 16
++1 16
++1 16
++5 16
++2 16
++1 16
++1 16
++1 16
++2 16
++1 16
++1 16
++1 16
++2 16
++1 16
++2 16
++22 16
++2 16
++2 2
++7 2
+
+fl=(6) /build/buildd/eglibc-2.15/elf/dl-lookup.c
+fn=(168) check_match.11236
+132 25794
++1 4299
+-1 4299
++1 4299
++2 8598
++2 11955
+-2 7970
++12 11955
++3 18894
+cfi=(17) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../strcmp.S
+cfn=(52) strcmp
+calls=2731 -15 
+* 32094
+* 5462
++5 1397
+-1 1397
++1 1397
+-1 1397
++1 1397
++2 2620
++19 2620
++1 10480
++46 30093
+-18 174
++2 174
++1 261
+-1 174
++1 87
+-1 174
++9 5176
+-38 3930
+cfi=(17)
+cfn=(52)
+calls=1310 -43 
+* 113521
+* 2620
+-43 8586
++81 628
+
+fn=(10) _dl_setup_hash
+861 19
++3 57
++4 18
++4 36
++2 18
+-1 18
++3 54
++5 18
+-4 18
++1 36
++2 18
++1 18
++4 36
+-7 18
++5 18
++1 18
++1 36
++14 38
+-10 3
++2 1
++2 1
++2 1
++1 1
++1 1
+-4 1
++4 2
+
+fn=(162) _dl_lookup_symbol_x
+716 12870
+477 1430
+716 2860
+477 1430
+716 4290
+477 5720
++1 2860
+-1 1430
++1 4290
+-1 4290
++1 97052
+-1 48526
++1 145578
+-1 147008
+718 1430
++4 1430
++4 1430
+-8 1430
++1 2860
++7 4050
++5 1430
++2 2860
+-2 1430
+-1 1430
++7 7150
++8 116
+-8 257
++2 375
+cfn=(164) do_lookup_x
+calls=25 82 
+* 31962
+* 21450
+cfn=(164)
+calls=1430 82 
+* 1948282
++3 2910
+-5 1430
++33 2860
++23 4191
++1 8382
++35 5588
++14 4191
++3 5588
++5 1397
++2 12870
+-81 231
++17 33
++1 66
++54 2
+
+fn=(164)
+82 13095
++1 1455
+-6 1455
++5 4365
+-5 10185
+230 1455
++3 1455
+89 1455
+230 1455
++32 1455
+-29 1455
+98 1455
+-3 1455
++1 1455
++2 1455
++3 1455
+-3 1455
++3 1455
+-3 14941
+-3 14941
++1 14941
++2 14941
++3 14941
+-3 14941
++3 14941
++4 32824
++4 32788
++4 32788
++7 49182
++4 49182
++1 49182
+226 16394
++1 32788
++4 29904
+-2 14952
++5 59808
++4 29904
+-1 29904
++1 14952
+-1 29904
++21 13555
++24 29994
+462 85896
++1 4595
+cfi=(28) /build/buildd/eglibc-2.15/elf/dl-misc.c
+cfn=(92) _dl_name_match_p
+calls=919 305 
+* 51436
+* 5514
++3 44997
++3 58
++1 11640
+287 7614
++4 3946
++13 2696
++1 2696
++1 2696
+-2 98
++1 98
++1 147
++27 49
+-1 245
++3 98
+cfi=(2) /build/buildd/eglibc-2.15/elf/rtld.c
+cfn=(48) rtld_lock_default_lock_recursive
+calls=49 844 
+* 98
++2 49
++1 49
++1 49
+-2 49
++2 49
++2 96
++1 48
+-1 48
++1 96
+77 144
+341 48
++1 144
+77 144
+342 48
++3 144
+-3 34
++3 102
++20 309
++4 71
+-4 71
++4 108
+-24 37
++1 37
+-1 156
++1 82
+-1 164
++25 246
++3 240
++5 6
++2 4
+cfi=(28)
+cfn=(234) _dl_higher_prime_number
+calls=2 -18 
+* 144
++1 4
+-1 2
++1 2
+cfi=(15) /build/buildd/eglibc-2.15/elf/dl-minimal.c
+cfn=(34) calloc
+calls=2 111 
+* 99
++2 2
+-2 2
++2 2
++4 2
++3 2
+-3 2
++3 2
+-3 2
++3 6
++1 276
++1 70
+-75 70
++75 140
+-75 210
++1 70
+-1 70
++1 210
+77 460
+321 26
++1 26
+-3 166
++7 70
++1 70
++1 70
++1 70
++61 370
++6 2
+-16 2
++16 2
+cfi=(15)
+cfn=(236) free
+calls=2 123 
+* 12
++4 2
+-3 2
++2 2
++1 4
++36 6
+-1 4
++1 141
+-1 94
++13 49
++2 98
+cfi=(2)
+cfn=(50) rtld_lock_default_unlock_recursive
+calls=49 850 
+* 98
+* 49
++2 49
+317 98
+440 49
+317 147
++1 49
+-1 49
++1 147
+77 426
+321 130
++1 130
+-3 228
++9 49
+-2 49
++1 49
++2 49
+-1 49
+443 196
+323 86
++84 3
++9 2
++10 3
+cfi=(15)
+cfn=(34)
+calls=1 111 
+* 38
++1 1
+-1 1
++1 1
++3 1
++2 1
+-7 1
++6 1
++1 3
+241 8208
+-1 4104
++2 4104
++2 5499
++10 9213
+-7 22340
++2 2794
++1 1397
+-1 1397
++1 5588
+-1 4191
++1 5588
+cfn=(168)
+calls=1397 132 
+* 200120
++1 8382
++11 2884
++6 13133
++2 11608
+-2 2902
++2 2902
+-2 2902
++4 23216
+cfn=(168)
+calls=2902 132 
+* 123802
++1 14510
+-10 1418
+fi=(40) /build/buildd/eglibc-2.15/elf/../sysdeps/generic/dl-hash.h
+32 1418
++1 7090
++2 4254
++1 4254
++2 4254
++1 4254
++2 4254
++1 4254
++2 4218
++19 1406
+-17 4218
++17 42799
+-17 128397
++3 128397
++1 85598
++13 128397
++5 1406
+fe=(6)
+263 4254
+
+fl=(15)
+fn=(42) __libc_memalign
+53 396
++1 396
++11 99
++1 99
+-1 99
++3 99
+-3 99
++3 554
++4 40
++1 20
++6 70
+cfi=(23) /build/buildd/eglibc-2.15/misc/../sysdeps/unix/syscall-template.S
+cfn=(68) mmap
+calls=10 +3 
+* 60
++2 20
++2 30
++2 30
++3 10
++1 10
++2 50
+-3 89
++1 89
++2 445
+-31 3
++1 1
+-2 3
+
+fn=(38) malloc
+95 98
++1 196
+cfn=(42)
+calls=98 -43 
+* 2762
+
+fn=(34)
+111 41
+-3 41
++3 82
+-3 41
++3 82
++4 82
+cfn=(38)
+calls=41 -20 
+* 1380
+
+fn=(74) strsep
+320 4
++3 8
++2 4
++1 8
++4 16
++5 4
+-5 118
++5 240
++2 366
++8 61
+-15 185
++18 2
++4 8
+
+fn=(236)
+123 2
+-2 4
++2 2
++7 4
+
+fl=(28)
+fn=(92)
+305 8015
++1 3206
+cfi=(17)
+cfn=(52)
+calls=1603 135 
+* 11228
+* 1603
++1 1603
+-1 1603
++3 1603
++8 1603
+-6 3206
++4 1592
+-4 3184
++1 4959
+cfi=(17)
+cfn=(52)
+calls=1653 135 
+* 38167
+* 3306
++1 61
++5 1847
+-1 1542
++1 6168
+
+fn=(234)
+362 2
+-1 4
++7 1
+-4 2
++2 32
++1 12
+-3 7
++3 7
+-3 7
++2 42
++1 18
++1 2
+-4 4
++18 2
++1 2
+
+fn=(124) _dl_sysdep_read_whole_file
+44 2
++7 1
+-7 4
++7 1
+-7 1
++7 1
+cfi=(21) /build/buildd/eglibc-2.15/io/../sysdeps/unix/syscall-template.S
+cfn=(98) open
+calls=1 +31 
+* 5
++1 1
+-1 1
+-6 1
++7 1
++2 4
+cfi=(29)
+cfn=(104)
+calls=1 -17 
+* 10
+* 2
++2 1
++3 1
+-3 1
++3 1
++13 2
+cfi=(21)
+cfn=(112) close
+calls=1 +10 
+* 5
++3 7
+-14 7
+cfi=(23)
+cfn=(68)
+calls=1 +21 
+* 6
+* 2
+
+fl=(8) /build/buildd/eglibc-2.15/elf/../sysdeps/unix/sysv/linux/x86_64/brk.c
+fn=(14) brk
+29 1
++3 6
++8 1
+-6 2
++7 1
+
+fl=(36)
+fn=(134)
+38 60
++27 2
++3 4
++38 2
+-38 2
++39 4
++2 2
++1 2
++2 2
++1 2
++2 2
++1 2
++2 2
++1 2
++3 2
++3 4
+-16 6
++1 6
++2 6
++1 6
++2 6
++1 6
++2 6
++1 6
++3 6
++3 12
+-13 2
++1 2
++2 2
++1 2
++2 2
++1 2
++3 2
++3 4
+-7 2
++1 2
++3 2
++3 4
+-4 2
+-24 2
++1 2
++2 2
++1 2
++2 2
++1 2
++2 2
++1 4
+-10 2
++1 2
++2 2
++1 2
++2 2
++1 2
++2 2
++1 4
+-18 2
+-4 2
++4 2
+-3 4
+-45 2
++3 6
++1 2
++8 2
++3 6
++1 2
++2 2
++3 6
++1 2
++67 20
+
+fn=(132)
+233 6
++77 1
++10 1
+-9 1
++2 1
++1 1
++3 1
++3 1
++5 2
+-82 1
+-1 1
++2 1
++1 2
++1 1
+
+fl=(12) /build/buildd/eglibc-2.15/string/../string/memcmp.c
+fn=(28) bcmp
+322 60
++7 60
+-7 300
++7 60
++4 66
++2 1
++1 1
++4 2
+-3 1
++1 2
+-3 4
++1 4
++1 4
++1 4
++2 8
++2 5
+-9 15
++16 22
+-16 22
++16 44
++1 32
+136 80
+-19 16
+353 32
++4 6
++2 6
+-2 12
++1 6
++17 6
+-12 12
++12 38
+-12 76
++2 39
++1 39
++4 78
+-52 114
++47 254
++1 254
++3 254
++1 508
+-7 584
++12 38
++1 420
+-24 6
+228 6
++1 6
+352 6
+233 6
+-4 6
++6 6
+-2 6
++2 23
+-99 32
++4 16
++1 16
++3 48
++48 16
+-2 16
++1 16
++1 112
+-80 16
++1 32
++4 32
+-5 64
++1 128
++4 144
+235 10
++6 5
++3 5
+-5 5
++1 5
++4 5
+-2 5
++56 10
+-2 5
++2 10
+-1 5
++1 10
++1 10
+-31 1
+-6 1
++1 1
++1 1
++4 1
++43 36
++1 12
+-6 10
+
+fl=(2)
+fn=(24) process_envvars
+2560 1
++8 1
+-8 7
++23 1
+-23 1
++1 1
++7 1
+-7 1
++7 3
+-4 1
+-1 1
++5 2
++2 2
+cfi=(11) /build/buildd/eglibc-2.15/elf/dl-environ.c
+cfn=(26) _dl_next_ld_env_entry
+calls=1 31 
+* 56
+* 4
+cfi=(11)
+cfn=(26)
+calls=2 31 
+* 236
+* 9
++4 46
++1 19
+-1 57
++3 4
++6 12
+2736 1
+-4 1
++4 2
++33 2
++22 8
+2659 4
+cfi=(12)
+cfn=(28)
+calls=1 322 
+* 105
+* 2
+-53 4
+cfi=(12)
+cfn=(28)
+calls=1 322 
+* 22
+* 2
++7 4
+cfi=(12)
+cfn=(28)
+calls=1 322 
+* 70
+* 2
++2 2
++1 1
++45 2
++1 1
+
+fn=(48)
+844 67
++1 67
+
+fn=(2) _dl_start
+368 9
++18 4
+fi=(4) /build/buildd/eglibc-2.15/elf/../sysdeps/x86_64/dl-machine.h
+76 2
+fe=(2)
+386 1
++29 2
+-3 1
+fi=(3) /build/buildd/eglibc-2.15/elf/dynamic-link.h
+121 1
+fe=(2)
+415 1
+fi=(3)
+121 2
++7 1
++5 1
++3 1
++2 1
+-9 1
+fe=(2)
+367 2
+fi=(3)
+124 30
++15 15
+-18 45
++18 1
+-18 3
++2 40
++5 20
++1 16
++10 4
+-18 13
++25 2
++20 4
++1 4
++1 4
++1 4
++2 4
++5 4
++1 4
++1 4
++6 3
++5 2
++7 3
++1 3
++8 3
++2 3
++3 2
++1 2
+fe=(2)
+543 3
++7 1
+291 66
++12 2
+cfi=(6)
+cfn=(10)
+calls=1 861 
+* 27
++1 1
++1 1
+-1 1
++1 1
++1 1
++1 1
+-1 1
++1 1
++21 1
++10 1
+-10 3
++10 1
+-6 1
+-4 1
++10 1
+cfi=(7) /build/buildd/eglibc-2.15/elf/../elf/dl-sysdep.c
+cfn=(12) _dl_sysdep_start
+calls=1 89 
+* 2928306
+* 1
++9 4
++3 1
++4 1
+-4 1
++4 1
+575 9
+fi=(3)
+130 4
++3 4
+fe=(2)
+548 24
+fi=(5) /build/buildd/eglibc-2.15/elf/do-rel.h
+93 1
+-1 1
++3 2
++25 2
+fi=(4)
+460 1
+fi=(5)
+121 1
+fi=(4)
+460 1
+fi=(5)
+121 1
+fe=(2)
+367 2
+fi=(5)
+121 26
+fi=(4)
+460 26
++1 28
+fi=(5)
+120 28
+fi=(4)
+461 14
+fi=(5)
+120 14
++5 2
++8 1
+fi=(4)
+304 1
+fi=(5)
+133 2
++13 1
++2 1
+fi=(4)
+286 3
+fi=(5)
+146 7
++2 7
+fi=(4)
+286 21
+fi=(5)
+146 24
+fi=(4)
+295 24
++3 8
+-3 16
++3 24
++6 8
+fi=(5)
+148 8
+fi=(4)
+304 40
+fi=(3)
+136 4
++1 1
++1 3
+fi=(4)
+382 8
+fi=(5)
+133 16
+fi=(4)
+382 8
+fi=(5)
+133 9
+fe=(2)
+291 4
+
+fn=(80) do_preload
+810 1
++12 1
+-12 5
++10 1
+-4 1
++1 1
++5 4
+-10 1
++6 1
++4 1
+cfi=(26) /build/buildd/eglibc-2.15/elf/dl-error.c
+cfn=(82) _dl_catch_error
+calls=1 160 
+* 2432
++1 2
++10 3
++4 5
+
+fn=(84) _dl_initial_error_catch_tsd
+804 94
+
+fn=(138) version_check_doit
+663 2
++2 4
+cfi=(37) /build/buildd/eglibc-2.15/elf/dl-version.c
+cfn=(140) _dl_check_all_versions
+calls=1 387 
+* 46314
+* 2
++4 2
+
+fn=(22) dl_main
+896 1
++19 1
+-19 3
++27 1
+-27 2
++22 1
+-22 3
++32 1
+-32 3
++32 1
+-6 1
++9 1
+-16 1
++3 1
++5 1
+-1 1
++9 1
+cfn=(24)
+calls=1 2560 
+* 701
++7 3
+1125 7
+cfi=(13) /build/buildd/eglibc-2.15/elf/dl-object.c
+cfn=(30) _dl_new_object
+calls=1 63 
+* 242
++2 1
+-2 1
++2 1
++1 1
++1 1
++5 1
+-4 1
++4 1
+-4 1
++4 1
+cfi=(13)
+cfn=(46) _dl_add_to_namespace_list
+calls=1 34 
+* 34
++1 4
+905 1
+1164 2
+-3 1
+-5 1
++1 1
++7 1
+-5 1
++5 3
++56 2
+902 1
+1220 2
+-55 24
+-1 27
++1 47
+-1 2
+1267 3
++3 2
++2 2
++2 2
++13 3
++1 7
+cfi=(17)
+cfn=(52)
+calls=1 135 
+* 7
+* 2
++17 2
+fi=(3)
+106 1
++9 2
++6 1
+-2 1
++2 4
++7 1
++5 1
++3 1
+-7 14
++10 3
+fe=(2)
+892 6
+fi=(3)
+121 9
++8 20
++10 20
+fe=(2)
+892 40
+fi=(3)
+121 60
++18 1
+fe=(2)
+892 2
+fi=(3)
+121 3
++2 48
++5 16
++2 4
+fe=(2)
+1260 2
++1 2
++1 1
+-6 2
++1 1
+-88 3
++1 1
++50 6
+-1 2
++2 4
++1 1
++3 2
++1 2
+-1 2
++1 2
++1 2
++1 6
++1 2
+-45 2
++2 1
++7 1
++18 1
+-25 1
+-3 1
++10 1
+-19 3
++1 1
+fi=(3)
+146 3
++38 3
++5 2
++7 2
++1 3
++16 3
++14 3
++7 2
+fe=(2)
+1310 2
+cfi=(6)
+cfn=(10)
+calls=1 861 
+* 27
++3 2
++20 2
++94 6
++5 2
+cfi=(20) /build/buildd/eglibc-2.15/elf/dl-load.c
+cfn=(60) _dl_init_paths
+calls=1 712 
+* 1544
++3 3
+cfi=(25)
+cfn=(76)
+calls=1 52 
+* 18
++7 1
+-7 1
++2 1
++5 1
++4 1
++1 1
++2 1
+-1 1
+-2 3
++1 1
++3 1
++5 2
++5 1
++2 2
++2 1
+892 2
+1463 1
+892 1
+1464 1
+892 1
+1468 1
++1 2
++1 2
+-1 1
++1 2
++2 2
++1 2
++5 2
++5 3
+911 1
+1664 3
++3 2
++4 3
++5 2
++1 1
+cfi=(25)
+cfn=(78)
+calls=1 77 
+* 1
++4 3
++15 3
++4 3
++31 3
+cfi=(21)
+cfn=(64) access
+calls=1 82 
+* 11
+* 2
++77 4
++17 3
++1 1
+-1 1
++1 2
+-1 1
++1 4
+cfi=(31) /build/buildd/eglibc-2.15/elf/dl-deps.c
+cfn=(114) _dl_map_object_deps
+calls=1 149 
+* 123283
++1 1
++5 1
+-5 3
++2 2
++3 4
++1 4
+-1 2
++1 72
+-1 36
++4 3
++1 3
++1 1
++2 2
++1 2
+-1 1
++1 42
+-1 39
++47 2
++2 2
+-2 2
++1 2
+-1 1
++2 1
+-1 2
++1 1
+cfi=(26)
+cfn=(136) _dl_receive_error
+calls=1 198 
+* 46354
++10 1
++1 1
+-1 1
++1 1
++3 2
++3 1
+cfn=(152) security_init
+calls=1 857 
+* 22
++2 3
+2136 3
++56 1
++11 1
+-11 1
++4 4
++4 2
++3 1
++8 2
+1295 1
++3 1
+-5 1
++3 1
++2 1
++1 2
++4 2
+-57 3
+2292 4
++2 1
++6 1
+-6 1
++6 1
++9 4
++1 1
++5 2
+cfi=(34) /build/buildd/eglibc-2.15/elf/dl-tls.c
+cfn=(238) _dl_allocate_tls_init
+calls=1 377 
+* 380
++4 2
++14 3
++2 4
++15 1
++2 1
+-2 1
++3 2
+-3 2
++3 2
+-3 1
++3 1
+cfi=(39) /build/buildd/eglibc-2.15/elf/dl-reloc.c
+cfn=(156) _dl_relocate_object
+calls=1 154 
+* 9787
++1 4
++2 2
++8 1
+cfi=(7)
+cfn=(240) _dl_sysdep_start_cleanup
+calls=1 252 
+* 1
++4 3
++20 3
+cfi=(25)
+cfn=(76)
+calls=1 52 
+* 9
++1 1
++1 1
+cfi=(25)
+cfn=(78)
+calls=1 77 
+* 1
++4 1
+cfi=(33) /build/buildd/eglibc-2.15/elf/dl-cache.c
+cfn=(242) _dl_unload_cache
+calls=1 309 
+* 15
++5 8
+fi=(3)
+133 4
+fe=(2)
+2257 3
++7 1
+-7 1
++9 5
++1 5
++1 40
++2 19
+-2 19
++2 38
++5 38
++2 38
++7 19
+-2 19
++2 38
++1 144
+cfi=(39)
+cfn=(156)
+calls=18 154 
+* 2739471
++4 46
++1 8
+cfi=(34)
+cfn=(188) _dl_add_to_slotinfo
+calls=4 817 
+* 84
+* 4
+1841 2
++13 1
+-1 1
++1 1
+-1 1
++1 1
++2 1
++2 4
++2 1
+-4 1
++5 1
+-1 2
++14 2
++1 2
++1 3
++2 2
++1 1
+-28 1
++28 2
+fi=(3)
+136 4
++1 1
++1 3
+fe=(2)
+1329 2
++98 1
+cfi=(18) /build/buildd/eglibc-2.15/elf/../sysdeps/unix/sysv/linux/dl-sysdep.c
+cfn=(56) _dl_discover_osversion
+calls=1 67 
+* 89
+* 2
++29 4
+-11 4
+2138 1
+904 2
+729 1
+-4 2
++4 2
+cfn=(146) init_tls.part.3
+calls=1 -7 
+* 791
+* 2
+1707 2
+cfi=(9) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../rtld-strlen.S
+cfn=(18) strlen
+calls=1 29 
+* 81
+* 8
+cfi=(16) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../memcpy.S
+cfn=(44) memcpy
+calls=1 62 
+* 47
+* 1
++3 5
+-12 1
++12 2
++3 3
+cfi=(15)
+cfn=(74)
+calls=1 320 
+* 768
+* 3
+cfi=(15)
+cfn=(74)
+calls=1 320 
+* 8
+* 6
++1 2
++1 3
++2 4
+cfn=(80)
+calls=1 810 
+* 2459
+* 2
++2 1
++1 2
+-1 3
++2 3
++91 5
++1 1
+-1 3
++4 3
++1 1
++1 2
++1 2
+2279 1
++1 1
+-3 2
+
+fn=(88) map_doit
+631 2
++2 7
+cfi=(20)
+cfn=(90) _dl_map_object
+calls=1 2276 
+* 2363
+* 1
++2 2
+
+fn=(146)
+722 1
++13 1
++4 4
+cfi=(15)
+cfn=(34)
+calls=1 111 
+* 38
++11 1
+-15 1
++3 1
++8 1
+-11 1
++15 1
++2 1
+-1 2
++3 38
++4 4
++2 4
+-2 12
+-5 4
+-1 8
++1 15
+-1 32
++10 3
++3 1
+cfi=(34)
+cfn=(148) _dl_determine_tlsoffset
+calls=1 113 
+* 181
++7 1
+cfi=(34)
+cfn=(150) _dl_allocate_tls_storage
+calls=1 329 
+* 419
++1 1
+-1 1
++1 1
++6 1
++8 1
+-8 1
++8 6
++7 1
+-3 1
++3 2
+
+fn=(50)
+850 67
++1 67
+
+fn=(152)
+857 2
++2 1
+fi=(38) /build/buildd/eglibc-2.15/elf/../sysdeps/unix/sysv/linux/dl-osinfo.h
+74 2
++23 1
++2 2
+fe=(2)
+861 1
++6 3
++2 1
+fi=(38)
+114 2
++11 1
+fe=(2)
+872 1
++2 1
++6 1
++1 3
+
+fl=(16)
+fn=(44)
+62 74
++2 74
++2 74
++3 65
++1 65
++2 20
++1 20
++2 20
++1 20
++5 20
++1 20
+-1 45
++1 45
++2 16
++1 16
++2 16
++1 32
++5 16
++1 16
+-1 49
++1 49
++2 19
++1 19
++2 19
++1 19
++5 19
++1 19
+-1 46
++1 46
++2 36
++1 36
++2 36
++1 36
++5 36
++1 36
+-1 29
++1 57
++5 28
++1 28
++1 28
++1 28
++2 28
++2 28
++1 28
++2 28
++8 65
++8 33
++6 33
++2 33
++1 33
++3 12
++1 24
++5 12
++1 12
++2 12
++2 12
++1 12
++2 12
+-8 23
++1 23
++2 23
++2 23
++1 23
++2 35
++9 12
++1 12
+-1 21
++1 21
++3 33
++1 33
++1 33
++5 32
++2 32
++1 32
++1 32
++1 32
++2 32
++1 32
++1 32
++1 32
++2 32
++1 32
++2 32
++2 2
++2 2
++1 2
++1 2
++1 2
++2 2
++1 2
++1 2
++1 2
++2 2
++1 2
++2 3
++5 1
++6 1
++1 1
+-7 32
++6 32
++1 32
++2 9
+
+fl=(33)
+fn=(122) _dl_load_cache_lookup
+183 128
++8 32
++3 48
++45 45
++6 48
++15 48
+cfi=(21)
+cfn=(64)
+calls=16 82 
+* 176
++5 16
+-5 16
++19 16
+-14 80
++14 16
+-15 16
++15 64
+-25 16
++25 16
+-25 16
++25 2208
+cfn=(126) _dl_cache_libcmp
+calls=143 164 
+* 11837
+* 635
++21 144
+197 4
+cfi=(28)
+cfn=(124)
+calls=1 44 
+* 68
++8 1
+-8 1
++8 4
++1 4
+cfi=(12)
+cfn=(28)
+calls=1 322 
+* 98
+* 2
++7 1
+-3 1
++3 3
++3 1
++1 2
+-1 1
++1 1
++1 3
+cfi=(12)
+cfn=(28)
+calls=1 322 
+* 157
+* 2
++18 2
++43 118
+cfn=(126)
+calls=18 164 
+* 1542
+* 42
+-97 2
++97 10
+-97 16
++97 192
+-97 16
++97 32
+-97 16
++97 304
++16 64
+-16 80
+
+fn=(126)
+164 483
+-23 362
++2 1794
++2 897
+-2 897
++2 44
++6 20
++1 40
+-1 20
++2 20
+-1 20
+-1 20
++2 62
++1 8
+-1 8
++2 102
++1 8
+-1 8
++2 40
++6 1750
++2 1750
++5 1468
+-1 734
++1 734
+-29 1468
++32 54
+-7 564
+-5 4
+
+fn=(242)
+309 1
++1 4
++2 2
+cfi=(23)
+cfn=(244) munmap
+calls=1 82 
+* 5
++1 1
++2 2
+
+fl=(70) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../cacheinfo.c
+fn=(306) handle_intel
+307 2
++6 2
+-6 14
++1 4
++13 2
++1 2
++2 2
+-5 2
++11 4
++5 2
+-5 4
++5 2
++7 10
+cfn=(308) intel_check_word
+calls=2 163 
+* 1606
++1 4
++3 10
+cfn=(308)
+calls=2 163 
+* 785
++1 4
++3 5
+cfn=(308)
+calls=1 163 
+* 21
++1 2
++3 5
+cfn=(308)
+calls=1 163 
+* 203
++1 2
+-18 2
++1 4
++26 16
+
+fn=(308)
+163 60
++1 12
++8 6
+-2 40
++14 26
++53 26
++36 65
+-1 13
++1 13
+cfi=(72) /build/buildd/eglibc-2.15/stdlib/bsearch.c
+cfn=(310) bsearch
+calls=13 27 
+* 2186
++2 26
++2 12
++14 2
++6 11
+172 22
++2 13
++2 26
+301 4
++1 42
+-23 2
++2 4
++2 4
+
+fn=(302) init_cacheinfo
+552 1
++13 1
+-13 1
++13 1
+-13 1
++13 1
++7 2
+-6 1
+cfi=(71) /build/buildd/eglibc-2.15/csu/../sysdeps/x86_64/multiarch/init-arch.c
+cfn=(304) __init_cpu_features
+calls=1 53 
+* 57
+* 2
++8 3
+cfn=(306)
+calls=1 307 
+* 1667
++4 2
+-4 1
++4 1
+cfn=(306)
+calls=1 307 
+* 1054
++2 1
+-2 1
+-1 1
++3 1
++29 1
+-18 1
++18 3
++7 5
++6 2
+-6 12
++6 6
++3 20
++2 1
++6 6
++7 5
++2 1
++2 2
+-4 4
++2 1
++2 6
++2 4
++5 1
++2 2
++1 1
+-1 2
++1 1
++5 1
++12 4
++75 2
++2 1
++1 1
++2 1
+-3 1
++5 1
+-5 1
++4 3
++4 2
++2 1
++1 1
++2 1
+-3 1
++5 1
++2 1
+-7 1
++4 2
++3 1
+-3 1
++3 2
+-93 7
+
+fn=(312) intel_02_known_compare
+152 87
++1 87
+-1 174
++3 168
++1 87
+
+fl=(31)
+fn=(114)
+149 1
++1 1
+-1 2
++1 1
+-1 1
++1 1
+-1 1
++1 2
+-1 5
++1 1
+-1 1
++1 2
++16 1
+-16 1
++14 1
++1 1
++1 1
++6 4
++10 2
+-14 1
++14 1
+-36 3
++20 1
+-2 1
++19 1
+-17 1
++6 1
+-6 1
+-2 1
++2 1
+-2 1
++1 1
++1 1
++6 3
++10 1
+-10 1
++10 5
++4 1
++21 1
++1 1
+-22 2
++19 1
++3 3
+-3 1
++7 1
++1 1
+-1 1
++5 1
++4 2
+-9 18
++1 18
+-1 18
++5 18
++4 36
++12 38
++2 17
++11 17
+-4 17
++1 17
+-2 17
+-6 17
++7 17
++1 17
+-8 17
++5 17
++6 119
++50 88
++1 114
+-51 1628
++1 814
++6 220
+cfi=(24) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../strchr.S
+cfn=(70) index
+calls=44 26 
+* 1397
+* 132
++5 220
+-3 44
++3 44
+cfi=(26)
+cfn=(82)
+calls=44 -98 
+* 106816
++2 132
++15 44
++2 88
++5 17
++6 17
++2 17
+-8 34
++5 17
+-2 17
++1 17
++2 17
++4 102
+-59 8
+-19 2
+477 38
++2 51
++3 34
+-1 17
+cfi=(15)
+cfn=(38)
+calls=17 95 
+* 493
++2 17
+-2 17
++2 17
++4 68
+-1 17
++2 17
+-1 17
+cfi=(16)
+cfn=(44)
+calls=17 62 
+* 484
++1 68
+cfi=(16)
+cfn=(44)
+calls=17 62 
+* 484
++4 17
+-1 17
++5 95
++2 19
++1 128
+222 128
++2 17
++2 17
+-2 17
++2 34
++2 39
+499 1
+206 1
+499 2
++4 5
++1 2
++3 5
++11 3
+-1 1
+cfi=(15)
+cfn=(38)
+calls=1 95 
+* 29
++3 1
+-3 1
++3 1
++5 2
++1 1
+-1 2
++1 1
+-1 1
++1 8
++8 4
++4 2
+-10 3
+-2 18
++8 72
++4 36
+-10 55
++13 2
++51 5
++2 3
+213 2
+637 1
+-5 1
++6 2
+-2 1
++1 5
++1 3
+cfi=(30) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../memset.S
+cfn=(108) memset
+calls=1 44 
+* 20
+* 5
++4 1
++7 1
+-6 2
++6 1
+-7 22
++7 22
+-6 44
++6 66
++2 88
++1 44
+-1 652
++1 346
++3 1416
+-1 1896
++23 180
+-28 360
++31 54
++3 136
+cfi=(30)
+cfn=(108)
+calls=17 44 
+* 297
+* 51
+-24 55
+cfi=(35)
+cfn=(130)
+calls=5 49 
+* 369
++4 10
+-2 5
++2 25
++20 1
++7 2
++2 1
++1 1
+-1 1
++9 2
++3 3
++3 8
+-37 10
+-1 5
++1 10
+cfi=(35)
+cfn=(130)
+calls=5 49 
+* 300
++2 10
++2 10
+299 1452
+630 6
+cfi=(16)
+cfn=(44)
+calls=1 62 
+* 88
++2 3
+
+fn=(116) openaux
+62 88
++7 44
+-4 132
++2 44
+-2 44
++2 44
+-2 220
+cfi=(20)
+cfn=(90)
+calls=44 2276 
+* 103560
+* 44
++5 88
+
+fl=(9)
+fn=(18)
+29 72
++1 72
++1 72
++1 72
++2 43
++1 43
++2 43
++1 43
+-1 98
++1 98
++1 140
++1 140
++1 140
++2 142
++5 71
++1 71
++1 71
++1 71
++3 71
+-6 29
++1 29
++1 29
++1 29
++3 29
++1 85
++1 85
++1 85
++2 85
++3 65
++1 65
++1 65
++1 65
++3 65
++1 57
++1 57
++1 57
++2 57
++3 36
++1 36
++1 36
++1 36
++3 36
++1 36
++1 36
++1 36
++2 36
++3 35
++1 35
++1 35
++1 35
++3 35
++1 31
++1 31
++1 31
++2 33
++3 2
++2 2
++1 2
+-3 69
++2 69
++1 69
++1 53
++2 53
++1 53
++1 52
++2 52
++1 52
++1 49
++2 49
++1 49
++1 37
++2 37
++2 37
++1 37
++1 32
++2 32
++1 32
++1 23
++2 23
++1 23
++1 10
++2 10
++1 10
+-1 62
++1 62
+
+fl=(39)
+fn=(156)
+154 19
++11 38
+-11 95
++10 38
+-10 57
++15 19
+-15 38
++11 19
++4 19
++1 95
++6 38
++6 57
++4 38
++8 38
+-33 19
++78 19
+fi=(4)
+96 38
+fe=(39)
+239 38
+fi=(4)
+96 19
++39 3
+fe=(39)
+265 757
+152 1
+265 2
+152 1
+265 1
+fi=(5)
+57 1
+fe=(39)
+265 1
+fi=(5)
+67 1
+fe=(39)
+265 1
+fi=(5)
+56 2
++11 2
+fe=(39)
++85 18
+265 36
+152 18
+265 18
+fi=(5)
+57 18
+fe=(39)
+265 18
+fi=(5)
+67 18
+fe=(39)
+265 18
+fi=(5)
+56 36
++11 36
+fe=(39)
+265 19
+fi=(5)
+57 19
+fe=(39)
+265 19
+fi=(5)
+67 19
+fe=(39)
+265 19
+fi=(5)
+56 38
++11 38
++3 90
+fi=(4)
+470 3126
++4 3126
++2 4689
++1 1563
+fi=(5)
+70 4734
++2 4740
++2 55
+-4 6
++13 36
++1 10
++1 34
+fi=(4)
+470 34
++24 17
+fi=(5)
+84 17
+fi=(4)
+494 17
++2 17
+cob=(4)
+cfi=(51)
+cfn=(230)
+calls=1 23 
+* 14
+cob=(4)
+cfi=(60)
+cfn=(226)
+calls=1 15 
+* 14
+cob=(4)
+cfi=(57)
+cfn=(224)
+calls=1 14 
+* 12
+cob=(4)
+cfi=(59)
+cfn=(222)
+calls=1 26 
+* 11
+cob=(4)
+cfi=(58)
+cfn=(220)
+calls=1 26 
+* 11
+cob=(4)
+cfi=(57)
+cfn=(218)
+calls=1 10 
+* 12
+cob=(4)
+cfi=(56)
+cfn=(216)
+calls=1 26 
+* 11
+cob=(4)
+cfi=(54)
+cfn=(212)
+calls=1 15 
+* 14
+cob=(4)
+cfi=(53)
+cfn=(210)
+calls=1 8 
+* 12
+cob=(4)
+cfi=(52)
+cfn=(208)
+calls=1 26 
+* 11
+cob=(4)
+cfi=(51)
+cfn=(206)
+calls=1 20 
+* 14
+cob=(4)
+cfi=(48)
+cfn=(190)
+calls=1 15 
+* 1902
+cob=(3)
+cfi=(47) /build/buildd/eglibc-2.15/time/../sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
+cfn=(184) gettimeofday
+calls=1 31 
+* 76
+cob=(3)
+cfi=(41) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/strcmp.S
+cfn=(182) strncasecmp
+calls=1 127 
+* 9
+cob=(3)
+cfi=(46) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/strnlen.S
+cfn=(180) strnlen
+calls=1 30 
+* 6
+cob=(3)
+cfi=(43) /build/buildd/eglibc-2.15/time/../sysdeps/unix/sysv/linux/x86_64/time.c
+cfn=(174) time
+calls=1 29 
+* 76
+cob=(3)
+cfi=(41)
+cfn=(170) strcasecmp
+calls=1 104 
+* 67
+fi=(5)
+84 17
+fi=(4)
+497 17
+fi=(5)
+84 19
+184 2
+fe=(39)
++81 6
+fi=(5)
+-81 36
+fe=(39)
++81 108
++3 57
++40 19
++3 38
++17 57
++2 152
+fi=(5)
+93 20
++2 40
++12 20
+-14 20
++14 20
+-14 20
++14 20
++10 36
++3 36
+fi=(4)
+460 17
+fi=(5)
+121 17
+fi=(4)
+460 17
+fi=(5)
+121 17
+fe=(39)
++31 34
+fi=(5)
+-31 20404
+fi=(4)
+460 20404
++1 20438
+fi=(5)
+120 20438
+fi=(4)
+461 10219
+fi=(5)
+120 10219
++7 60
++3 19
++3 19
+-3 19
++3 55
+fi=(4)
+396 72
+fi=(5)
+136 12070
++9 4828
++1 2414
++2 4828
+fi=(4)
+268 2414
+fi=(5)
+147 2414
+-2 2414
++1 7242
+fi=(4)
+268 2414
++18 4828
++7 30094
+fi=(5)
+146 12
++1 12
+fi=(4)
+293 24
+fi=(5)
+146 12
+fi=(4)
+293 5388
+fi=(5)
+146 1338
++1 1338
+fi=(4)
+293 2676
+fi=(5)
+146 1338
+fi=(4)
+293 20214
+cfi=(6)
+cfn=(162)
+calls=1350 716 
+* 2422754
+* 5400
++2 7242
++3 2383
+-3 4766
++3 7149
++6 4828
+96 36
++6 36
++4 54
++13 18
+-8 18
++8 36
++13 18
++3 18
+-3 18
++3 54
+fe=(39)
++49 57
+fi=(4)
+-49 36
+fe=(39)
+265 108
+fi=(4)
++28 5352
+fi=(5)
+133 42
++19 36
+fi=(4)
+304 9656
++85 2387
+fi=(5)
+133 4774
+fi=(4)
+389 2387
+fi=(5)
+133 2404
+-16 3
+fe=(39)
+337 18
+-1 36
++1 18
+-1 36
++2 36
++3 36
++1 54
+cfi=(23)
+cfn=(106) mprotect
+calls=18 82 
+* 90
+* 36
+fi=(4)
++83 6
++4 10
+cfi=(16)
+cfn=(44)
+calls=2 62 
+* 36
++2 8
++1 2
+-60 57
++4 57
++5 38
+fi=(5)
+133 19
+fi=(4)
+382 38
+fi=(5)
+133 38
+fi=(4)
+330 6
++1 4
+fi=(5)
+133 2
+fi=(4)
+331 2
+fi=(5)
+133 4
+fi=(4)
+322 8
++1 4
+fi=(5)
+133 4
+fi=(4)
+323 4
+fi=(5)
+133 8
++36 9
++2 15
++8 6
++1 3
+-1 3
++1 3
+fi=(4)
++88 3
+fi=(5)
+-89 6
+fi=(4)
++89 3
++18 6
++7 84
+cfi=(6)
+cfn=(162)
+calls=3 716 
+* 4119
+* 12
++2 9
++3 1
+-3 2
++3 3
++6 6
+-11 24
+fi=(5)
+169 12
++14 2
+fi=(4)
+304 12
++85 9
+-96 24079
+fe=(39)
+
+fl=(20)
+fn=(72) fillin_rpath
+491 3
++2 1
+-2 11
++4 3
+cfi=(15)
+cfn=(74)
+calls=1 320 
+* 240
+* 3
+cfi=(15)
+cfn=(74)
+calls=1 320 
+* 8
+* 6
++3 2
+cfi=(9)
+cfn=(18)
+calls=1 29 
+* 44
++4 1
+-4 1
++4 1
++7 4
++5 2
++3 3
++4 17
++1 8
++18 3
++4 2
+-1 1
++2 1
+-1 1
+-1 2
+cfi=(15)
+cfn=(38)
+calls=1 95 
+* 29
++3 1
+-3 1
++3 3
++5 1
++1 2
+-2 1
++2 2
+cfi=(22)
+cfn=(66)
+calls=1 62 
+* 31
++3 1
+-3 1
++1 1
++2 2
++6 4
++1 2
+-73 5
++73 2
+-73 1
++73 3
++1 1
+-1 3
++1 1
+-1 12
++1 2
+-1 6
++4 1
+-1 2
++1 1
++7 1
++1 1
++3 3
++5 1
++3 9
+-14 2
+
+fn=(90)
+2276 450
++7 45
+-7 135
++7 45
++1 90
++3 270
++12 706
+-12 1059
++5 1143
++1 762
++2 1143
+cfi=(28)
+cfn=(92)
+calls=381 305 
+* 24020
+* 762
+2570 405
+2322 17
+-1 85
++11 51
++26 34
+-2 17
++2 17
+cfi=(24)
+cfn=(70)
+calls=17 26 
+* 563
+* 34
+2501 6
+cfn=(94) expand_dynamic_string_token
+calls=1 421 
+* 231
++1 1
+-3 1
++4 1
+-1 1
++4 9
+cfn=(96) open_verify
+calls=1 1857 
+* 413
++3 1
+-3 1
++3 1
++12 68
++2 34
++45 17
+-1 17
++1 136
+-1 17
++1 51
+cfn=(102) _dl_map_object_from_fd
+calls=17 916 
+* 27849
+* 34
+2321 34
++41 32
+cfi=(9)
+cfn=(18)
+calls=16 29 
+* 826
+* 16
++2 16
+-2 16
++2 16
++7 64
++35 32
++1 240
+cfn=(118) open_path
+calls=16 2127 
+* 4405
++6 16
+-6 16
++6 16
++80 32
+-80 32
+689 48
++3 6
+2414 6
+692 6
++3 18
+2421 64
++5 32
+cfi=(33)
+cfn=(122)
+calls=16 183 
+* 18411
++2 16
+-2 16
++2 16
++5 48
++8 32
++27 144
+cfn=(96)
+calls=16 1857 
+* 6937
++3 16
+-3 16
++3 16
+161 32
+cfi=(9)
+cfn=(18)
+calls=16 29 
+* 1238
+* 16
++1 48
+cfi=(15)
+cfn=(38)
+calls=16 -67 
+* 464
++2 48
++3 48
+cfi=(16)
+cfn=(44)
+calls=16 62 
+* 958
+2474 16
+-1 16
++1 16
+-94 16
+-5 32
++5 16
++3 32
+-3 32
++3 64
+-3 96
+689 96
++3 6
+2381 6
+692 6
++3 18
+2395 64
++1 112
+689 48
++9 12
+2300 1059
++3 268
++2 268
+-1 536
++1 268
+cfi=(17)
+cfn=(52)
+calls=268 135 
+* 7021
+* 536
+698 12
+
+fn=(96)
+1857 432
++36 36
+-36 72
++36 142
++21 144
+cfi=(21)
+cfn=(98)
+calls=36 82 
+* 294
++1 36
+-1 36
++1 36
++11 51
+-1 17
++1 34
+cfi=(21)
+cfn=(100) read
+calls=17 82 
+* 85
++7 17
+-7 34
++7 17
++16 68
+cfi=(12)
+cfn=(28)
+calls=17 322 
+* 1309
+* 34
++2 17
+-2 34
++4 68
+cfi=(12)
+cfn=(28)
+calls=17 322 
+* 1190
+-4 34
++60 34
++5 34
++2 51
++6 34
++7 17
++1 17
+-1 68
++1 51
++1 34
++15 965
++2 310
++4 48
++1 16
+-1 16
++14 16
++1 16
+-1 16
++1 16
+-1 16
++1 16
+-2 16
++4 48
++5 5
++1 5
+-13 20
+cfi=(12)
+cfn=(28)
+calls=5 322 
+* 350
+* 64
+cfi=(12)
+cfn=(28)
+calls=16 322 
+* 1200
+* 42
++16 10
++6 5
+-3 5
++1 5
++1 5
++1 10
++1 15
+-4 5
++1 5
++1 5
+-1 15
+-1 5
++4 10
++28 324
+1905 22
+
+fn=(102)
+916 187
++11 17
+-11 17
++11 17
+-11 34
++11 17
+cfi=(25)
+cfn=(76)
+calls=17 52 
+* 153
++4 51
+-4 17
++4 17
+cfi=(29)
+cfn=(104)
+calls=17 37 
+* 170
+* 34
++11 119
++1 51
+-1 510
++1 680
++17 34
++25 51
++10 34
++22 68
++31 34
+928 17
+1051 119
+cfi=(13)
+cfn=(30)
+calls=17 63 
+* 7602
++1 17
+-1 17
++1 17
++11 17
++2 17
+-2 17
++5 17
+-4 17
+-1 17
++4 17
+-2 17
++2 17
+-3 17
++5 17
+-2 17
++1 51
++25 17
++8 17
+-27 17
++19 85
++8 51
+-8 17
++8 34
+-8 17
++8 51
++89 34
+-95 17
+-1 17
+-10 17
+1190 51
+-88 220
++6 34
++1 68
+-8 1048
++1 743
++60 12
++4 4
++1 4
++1 4
+-1 4
++1 8
++3 12
++1 4
++3 4
+-3 4
++7 16
++6 4
+cfi=(34)
+cfn=(128) _dl_next_tls_modid
+calls=4 51 
+* 32
+* 12
++1 4
+-73 10
++1 5
+1244 32
++1 48
++1 16
+-6 34
++1 17
+1119 170
++6 68
++1 34
+-1 136
++10 68
+-2 34
++1 34
++4 34
+-4 34
+-1 68
++1 34
+-1 34
++2 34
+-1 34
++3 34
+-1 34
++3 34
++4 34
+-7 34
++2 34
++1 34
++4 34
++1 85
++5 119
++10 17
+-10 119
++10 17
++90 34
++13 17
+1064 17
+1262 17
+-3 17
++3 51
+1064 17
+1262 17
++2 17
+-2 17
++2 17
++14 34
++5 102
+cfi=(23)
+cfn=(68)
+calls=17 82 
+* 102
++4 17
+-4 17
++4 34
++7 34
++1 17
++2 17
+-3 17
++1 17
++2 17
++10 17
++35 102
++1 54
++2 68
++7 136
++6 17
++2 17
+-2 17
++1 17
++2 17
+-1 17
++1 17
+-1 68
++8 34
++3 34
++11 136
+cfi=(30)
+cfn=(108)
+calls=17 44 
+* 2767
++1 102
++5 34
++15 34
+-73 170
++2 68
++2 170
+cfi=(23)
+cfn=(68)
+calls=17 82 
+* 102
+* 34
+-30 17
+-1 85
+cfi=(23)
+cfn=(106)
+calls=17 82 
+* 85
+* 17
+1407 17
+-77 17
++77 34
++9 34
+fi=(3)
+115 17
+fe=(20)
+1416 17
+fi=(3)
+115 17
++6 17
+-2 17
++2 34
++7 17
++5 17
++3 17
+-7 17
+fe=(20)
+913 34
+fi=(3)
+129 336
++10 84
+-18 252
++8 299
++10 299
+-18 897
++18 16
+-18 48
++2 798
++5 400
++2 64
++16 34
++20 57
++1 68
++1 68
++1 68
++2 68
++5 68
++1 67
++1 67
++6 51
++5 34
++7 34
++1 51
++16 51
++5 6
++2 6
+-2 12
++2 6
++1 1
++1 12
++2 12
++3 51
++2 6
++2 6
++3 34
+fe=(20)
+1422 68
++16 51
++19 34
++2 85
++55 51
++1 8
++3 8
+cfi=(21)
+cfn=(112)
+calls=4 82 
+* 20
+* 26
+cfi=(21)
+cfn=(112)
+calls=13 82 
+* 65
+* 34
++8 34
++3 51
++2 17
+-2 17
++2 17
++16 34
+cfi=(6)
+cfn=(10)
+calls=17 861 
+* 449
++4 34
++19 34
++4 17
+-4 17
++8 17
+-8 17
++4 17
++4 17
++6 51
+cfi=(13)
+cfn=(46)
+calls=17 34 
+* 1224
++4 51
++20 153
+-56 34
++1 4
++4 2
++4 2
+-3 1
++3 3
+cfi=(35)
+cfn=(130)
+calls=1 49 
+* 69
++4 4
+fi=(3)
+133 64
++3 64
++1 16
++1 48
+fe=(20)
+1346 60
++2 12
+-1 48
++1 48
+-1 24
++3 48
++42 32
+cfi=(23)
+cfn=(68)
+calls=4 82 
+* 24
++3 8
+
+fn=(94)
+421 7
++10 1
+-10 1
++10 1
+-10 1
++10 1
+cfi=(24)
+cfn=(70)
+calls=1 26 
+* 43
+* 2
+161 2
+cfi=(9)
+cfn=(18)
+calls=1 29 
+* 81
+* 1
++1 2
+cfi=(15)
+cfn=(38)
+calls=1 -67 
+* 29
++2 2
++3 2
+446 3
+167 1
+446 3
+167 1
+cfi=(16)
+cfn=(44)
+calls=1 62 
+* 47
+
+fn=(60)
+712 1
++15 2
+-15 8
++15 3
+cfi=(7)
+cfn=(62) _dl_important_hwcaps
+calls=1 354 
+* 351
++5 1
+-5 1
++5 1
+cfi=(15)
+cfn=(38)
+calls=1 95 
+* 29
++1 1
+-1 1
+-1 1
++2 1
++8 1
+-1 1
++1 1
+-1 4
++5 2
+cfi=(15)
+cfn=(38)
+calls=1 95 
+* 52
++2 1
+-3 1
++3 1
++17 1
++12 1
+-14 1
++12 1
+-5 1
+-5 1
++3 1
++9 1
+-65 1
++42 1
++1 1
++13 1
+-56 1
++54 1
+-54 1
++57 1
+-12 1
+-45 1
++62 8
+-62 20
++61 8
+-61 4
++61 12
++2 4
+-1 12
++1 4
+-1 48
++1 8
+-1 24
++3 18
+-14 3
++14 3
+-12 3
+-2 3
++2 3
++4 3
+-3 3
++2 3
++2 3
+-1 6
++4 3
+-3 3
++3 6
+-3 3
+-7 6
++25 1
+-11 1
++6 1
++1 1
++5 2
++2 4
++2 3
++32 5
++8 3
+cfi=(24)
+cfn=(70)
+calls=1 26 
+* 34
+* 2
++2 2
+cfi=(9)
+cfn=(18)
+calls=1 29 
+* 52
+* 8
+cfi=(16)
+cfn=(44)
+calls=1 62 
+* 31
+* 1
++17 8
++2 1
++1 3
++1 1
+-4 3
++2 13
++1 39
++1 13
+-4 40
++8 1
+cfi=(15)
+cfn=(38)
+calls=1 95 
+* 29
++1 1
+-2 1
++2 1
++6 7
+cfn=(72)
+calls=1 491 
+* 507
++4 3
++6 1
++4 8
+-72 1
+-2 1
++2 2
++11 2
+
+fn=(118)
+2127 128
++1 16
+-1 80
++7 16
+-7 16
++1 16
++6 16
++5 32
++52 16
+-52 32
++52 16
+-59 16
+-1 16
++60 16
+-52 96
++12 16
+-9 16
++9 16
++7 48
++1 32
+-1 16
+cfi=(22)
+cfn=(66)
+calls=16 62 
+* 496
++1 16
+-1 16
++1 32
++20 8
+-20 243
++3 128
+-39 19
++43 19
+-43 38
++43 76
+cfi=(22)
+cfn=(66)
+calls=19 62 
+* 295
+* 76
+cfi=(22)
+cfn=(66)
+calls=19 62 
+* 477
+* 19
++3 19
++3 38
++3 133
+cfn=(96)
+calls=19 1857 
+* 874
+* 19
++2 57
++26 60
++2 45
+-21 8
++1 36
++6 8
++2 12
+-2 4
++2 4
+cfi=(32) /build/buildd/eglibc-2.15/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c
+cfn=(120) _xstat
+calls=4 37 
+* 49
+* 8
++1 4
++2 6
++7 6
+-44 9
++44 2
+-44 3
++85 80
++7 16
+-2 16
++2 48
++3 48
++13 16
++1 144
+-70 3
+
+fl=(10) /build/buildd/eglibc-2.15/elf/../misc/sbrk.c
+fn=(20) sbrk
+35 3
++8 1
+-8 1
++8 5
++4 2
++11 5
+
+fl=(27) /build/buildd/eglibc-2.15/setjmp/../sysdeps/x86_64/setjmp.S
+fn=(86) __sigsetjmp
+26 45
++2 45
++1 90
++1 45
++4 45
++1 45
++1 45
++1 45
++1 45
++2 90
++2 45
++1 45
++2 90
++2 45
++4 45
++1 45
+
+fl=(72)
+fn=(310)
+27 130
++7 13
+-7 13
++20 13
+-13 52
++7 26
++1 23
+-8 46
++2 87
++2 87
+-2 87
++1 348
++1 174
+cfi=(70)
+cfn=(312)
+calls=87 152 
+* 603
++1 174
++1 61
+-6 122
++13 10
++1 117
+
+fl=(195) /build/buildd/eglibc-2.15/elf/dl-fini.c
+fn=(1710) _dl_sort_fini
+34 9
++2 1
+-2 2
++50 1
+-48 1
++5 1
++1 1
+-1 2
++1 1
++1 1
+-1 1
++1 2
+-1 3
++1 3
+cfi=(30)
+cfn=(108)
+calls=1 +1 
+* 20
++15 5
++62 4
++3 102
+cfi=(30)
+cfn=(108)
+calls=17 -79 
+* 297
+* 17
+-75 17
+-1 17
++1 17
+-1 17
++5 17
+-5 17
++5 34
+-4 6
+-1 6
++1 6
+-1 6
++5 6
+-5 6
++5 58
++6 23
++1 90
++2 88
++1 44
+-1 652
++1 346
++3 1416
+-1 1896
++31 540
++21 180
+-57 360
++61 68
++3 1
++4 8
+-57 65
+cfi=(35)
+cfn=(130)
+calls=5 -21 
+* 369
++4 5
+-2 5
++2 15
+-2 5
++2 5
++8 10
++7 30
+cfi=(35)
+cfn=(130)
+calls=5 -40 
+* 300
++1 15
++2 5
+
+fn=(1708) _dl_fini
+133 5
++19 1
+-19 1
++12 1
+-12 2
++13 1
++9 4
+-23 5
++26 2
+cob=(5)
+cfi=(109) /build/buildd/eglibc-2.15/nptl/pthread_mutex_lock.c
+cfn=(932) pthread_mutex_lock
+calls=1 47 
+* 27
++3 1
++3 2
++2 6
++11 4
++2 2
++3 9
++11 3
++2 38
++2 38
++2 38
++1 19
++1 19
++4 19
+-12 57
++14 2
++5 5
+cfn=(1710)
+calls=1 34 
+* 7245
++9 2
+cob=(5)
+cfi=(114) /build/buildd/eglibc-2.15/nptl/pthread_mutex_unlock.c
+cfn=(952) pthread_mutex_unlock
+calls=1 +68 
+* 28
++4 4
++2 2
++2 3
+-2 36
++2 54
++3 38
++3 57
++4 4
++7 34
++4 8
++1 2
++1 2
+-1 2
++2 8
++1 8
+cob=(8)
+cfi=(200) /build/buildd/eglibc-2.15/dlfcn/dlerror.c
+cfn=(2098) fini
+calls=1 -46 
+* 11
+cob=(15)
+cfi=(93)
+cfn=(1906) 0x00000000000034c0
+calls=1 0 
+* 1994
+-1 8
++5 51
++1 51
+cob=(2)
+cfi=(14)
+cfn=(2142)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(2122)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(2102)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(2078)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(2060)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(2040)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(2020)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(2002)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(1972)
+calls=1 0 
+* 3627
+cob=(2)
+cfi=(14)
+cfn=(1952)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(1932)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(1914)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(1786)
+calls=1 0 
+* 13575
+cob=(2)
+cfi=(14)
+cfn=(1766)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(1746)
+calls=1 0 
+* 2008
+cob=(2)
+cfi=(14)
+cfn=(1722)
+calls=1 0 
+* 1409
+cob=(2)
+cfi=(14)
+cfn=(1712)
+calls=1 0 
+* 22
++5 95
++16 38
+-55 38
+-70 3
+285 5
+-49 34
++3 30
++52 2
++7 8
+
+fl=(7)
+fn=(62)
+354 1
++3 1
+-3 7
++3 1
+-1 1
++1 1
++9 1
+-12 4
++12 1
++10 1
+-1 1
+-1 1
++2 3
++44 5
+cfi=(21)
+cfn=(64)
+calls=1 82 
+* 11
+* 4
+611 9
+418 1
++17 1
+-17 1
++17 5
++3 2
++27 2
++8 2
++2 1
++1 1
+-1 2
++1 4
++4 1
++4 1
+-4 1
++1 1
+-1 1
++4 1
++4 4
+-1 2
++4 6
++1 2
++18 8
++1 1
+-1 2
++1 3
+cfi=(15)
+cfn=(38)
+calls=1 95 
+* 29
++1 1
+-1 1
++1 1
++7 2
++25 1
+-3 3
++3 1
++28 4
+-5 1
++5 4
++1 1
+-1 6
++1 3
+-1 9
++10 1
+352 1
+577 2
++5 1
+352 2
+577 3
++3 1
+-3 1
++3 1
+-3 3
++3 1
+-3 1
++3 7
++1 12
++1 4
+-1 4
++1 8
+-2 4
++1 8
+-1 14
++4 4
++3 1
++2 2
+-1 1
+-1 2
++2 4
++13 3
+-13 1
++13 4
++1 1
++2 2
+-3 3
++1 1
++2 2
++3 3
++2 1
+448 2
+-12 2
+546 3
+cfi=(22)
+cfn=(66)
+calls=1 62 
+* 22
+* 1
++1 1
+-1 1
++1 2
+cfi=(22)
+cfn=(66)
+calls=1 62 
+* 22
+* 5
+
+fn=(12)
+89 7
++25 1
+-1 1
++1 1
+-25 1
++25 134
++3 1
+-3 1
+-23 1
++27 1
+-28 1
++27 1
++3 1
+-6 1
++6 10
++1 1
+-1 3
++1 102
++3 3
+-4 1
+-34 2
++34 20
+-34 34
++34 60
+fi=(18)
+-84 2
+cfi=(8)
+cfn=(14)
+calls=1 -7 
+* 11
+fi=(4)
+224 5
+fe=(7)
++5 2
+cfi=(10)
+cfn=(20)
+calls=1 35 
+* 17
+* 3
++12 3
++3 5
+cfi=(2)
+cfn=(22)
+calls=1 896 
+* 2927806
++2 9
+-67 1
++1 1
+-26 1
++1 1
++8 1
++1 1
+-4 1
++1 1
+-4 1
++1 1
+-25 1
++1 1
+-4 1
++1 1
+-4 1
++1 1
++99 1
+cfi=(9)
+cfn=(18)
+calls=1 29 
+* 35
+* 2
+
+fn=(240)
+252 1
+
+fl=(18)
+fn=(56)
+67 7
++2 4
++85 9
+-45 2
+cfi=(19) /build/buildd/eglibc-2.15/posix/../sysdeps/unix/syscall-template.S
+cfn=(58) uname
+calls=1 -27 
+* 5
+* 1
++15 1
+-15 1
++20 1
+-1 1
++3 12
++4 3
+-2 9
++2 9
++7 3
+-1 3
++4 3
+-2 3
++2 10
++5 2
+
+fl=(21)
+fn=(98)
+82 148
++1 37
++1 114
+
+fn=(100)
+82 68
++1 17
+
+fn=(112)
+82 72
++1 18
+
+fn=(64)
+82 72
++1 18
++1 108
+
+fl=(1) ???
+fn=(0) 0x00000000000016b0
+0 2
+cfi=(2)
+cfn=(2)
+calls=1 368 
+0 2929143
+0 14
+cfi=(61) /build/buildd/eglibc-2.15/elf/dl-init.c
+cfn=(248) _dl_init
+calls=1 93 
+0 250181
+0 3
+cob=(20)
+cfi=(153)
+cfn=(1444) 0x00000000004019f0
+calls=1 0 
+0 1301836400
+
+fl=(50)
+fn=(200)
+74 154
++6 154
+-6 77
++6 77
+-6 231
++3 77
+-1 77
++6 77
+-5 77
++3 77
++1 77
+-1 77
++1 77
++1 77
+-1 154
++6 77
+-6 231
++6 77
++4 231
++4 77
+-2 77
++2 154
++4 152
++1 304
++2 228
++7 231
+-1 77
++8 154
++3 693
+cfi=(6)
+cfn=(162)
+calls=77 716 
+* 131872
+* 77
++4 231
++4 308
++6 539
++8 77
++8 308
++4 231
+fi=(4)
++81 77
+fe=(50)
+-77 462
+fi=(99) /build/buildd/eglibc-2.15/elf/../sysdeps/x86_64/dl-irel.h
+33 8
+cob=(3)
+cfi=(159) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/strchr.S
+cfn=(1492) index
+calls=1 -4 
+* 7
+cob=(3)
+cfi=(47)
+cfn=(184)
+calls=2 -2 
+* 152
+cob=(3)
+cfi=(137) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/strstr-c.c
+cfn=(1162) strstr
+calls=1 -18 
+* 10
+cob=(3)
+cfi=(102) /build/buildd/eglibc-2.15/posix/../sysdeps/x86_64/multiarch/sched_cpucount.c
+cfn=(788) __sched_cpucount
+calls=1 +3 
+* 10
+cob=(3)
+cfi=(100) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/memset.S
+cfn=(776) memset
+calls=3 -6 
+* 21
+* 8
+fe=(50)
+
+fl=(30)
+fn=(108)
+44 57
++1 57
++1 57
++1 2
++1 2
++2 55
++1 55
++1 55
++1 55
++2 55
++1 55
++2 44
++5 44
++1 44
++1 44
++1 44
++1 44
+315 2
++1 2
++1 2
++1 2
+-2 2
++1 2
++1 2
++4 1
++2 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-15 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-12 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
+-11 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-6 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-4 4
++1 4
++1 4
++1 4
++1 4
+-3 1
++1 1
++1 1
++1 1
+-2 8
++1 8
++1 8
+-1 4
++1 4
++24 2
++1 2
++1 2
+-1 2
++1 2
++22 2
++1 2
++1 2
++1 2
++1 2
+-3 2
++1 2
++1 2
++1 2
+-2 2
++1 2
++1 2
++12 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-11 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-2 2
++1 2
++1 2
+-1 2
++1 2
++23 2
++1 2
++1 2
++1 2
+-2 2
++1 2
++1 2
++23 2
++1 2
++1 2
++1 2
+-2 2
++1 2
++1 2
++23 2
++1 2
++1 2
++1 2
++1 2
+-3 2
++1 2
++1 2
++1 2
++8 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++5 11
++1 11
++1 11
++1 11
++1 11
++35 2
++1 2
++1 2
+-1 4
++1 4
++35 1
++1 1
++1 2
+1214 1
++1 1
+593 10
+1214 10
++1 21
++4 11
++1 11
++1 22
++5 11
++2 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++1 11
++2 11
++2 11
+-21 102
++2 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++1 102
++2 102
++2 102
++3 11
++1 11
++6 11
++1 11
++1 11
++1 11
++1 11
+
+fl=(71)
+fn=(304)
+53 1
+-8 1
++8 1
++3 1
+-3 1
++3 5
++91 2
++12 1
++1 1
++2 1
++1 2
+-98 1
+-33 2
++6 1
+-6 2
++6 1
++1 1
++30 1
+-30 1
++30 1
+-37 1
++6 1
++27 1
+-26 1
++26 1
++4 1
++1 1
+-38 2
++33 1
++5 1
++5 1
++2 1
+-2 1
++3 1
++1 2
++33 1
+-54 1
++54 1
++4 1
+-37 8
+
+fl=(11)
+fn=(26)
+31 3
++1 3
++2 11
++2 84
++11 40
+-13 120
++17 1
+-14 22
++5 2
+-3 2
++3 2
++2 2
+
+fl=(61)
+fn=(250) call_init.part.0
+35 18
++21 18
+-21 144
++21 18
++8 54
++2 34
++4 68
+cob=(2)
+cfi=(14)
+cfn=(1422)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(1402)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(1382)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(878)
+calls=1 -70 
+* 205209
+cob=(2)
+cfi=(14)
+cfn=(694)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(674)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(654)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(480)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(460)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(440)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(420)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(400)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(378)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(358)
+calls=1 -70 
+* 29
+cob=(2)
+cfi=(14)
+cfn=(338)
+calls=1 -70 
+* 29
+cob=(3)
+cfi=(73) /build/buildd/eglibc-2.15/csu/../sysdeps/unix/sysv/linux/x86_64/../init-first.c
+cfn=(314) _init
+calls=1 -17 
+* 217
+cob=(2)
+cfi=(14)
+cfn=(252)
+calls=1 -70 
+* 9442
++4 18
++1 36
++6 10
++2 10
+-2 5
++3 10
+-49 28
++50 32
+cob=(15)
+cfi=(93)
+cfn=(866) 0x00000000000040c0
+calls=1 -85 
+* 2177
+cob=(12)
+cfi=(89)
+cfn=(648) 0x000000000005a690
+calls=1 -85 
+* 21
+cob=(12)
+cfi=(89)
+cfn=(646) 0x000000000005a460
+calls=1 -85 
+* 54
+cob=(12)
+cfi=(89)
+cfn=(620) 0x000000000005a3a0
+calls=1 -85 
+* 49
+cob=(12)
+cfi=(89)
+cfn=(594) 0x000000000005a2e0
+calls=1 -85 
+* 49
+cob=(12)
+cfi=(89)
+cfn=(564) 0x000000000005a2c0
+calls=1 -85 
+* 3296
+cob=(12)
+cfi=(89)
+cfn=(540) 0x000000000005a250
+calls=1 -85 
+* 3586
+cob=(3)
+cfi=(80) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../cacheinfo.c
+cfn=(328) init_cacheinfo
+calls=1 552 
+* 2865
+* 20
+cob=(15)
+cfi=(93)
+cfn=(714) 0x0000000000003820
+calls=1 -85 
+* 18689
+cob=(12)
+cfi=(89)
+cfn=(500) 0x000000000005a150
+calls=1 -85 
+* 103
+cob=(8)
+cfi=(85) /build/buildd/eglibc-2.15/dlfcn/dlfcn.c
+cfn=(398) init
+calls=1 -55 
+* 3
+cob=(3)
+cfi=(79) /build/buildd/eglibc-2.15/elf/dl-altinit.c
+cfn=(326) dlinit_alt
+calls=1 -52 
+* 4
+cfi=(70)
+cfn=(302)
+calls=1 552 
+* 2925
+-1 13
++1 13
+-1 13
++3 108
+
+fn=(248)
+93 11
++1 1
++1 1
++3 3
++7 2
++27 2
++1 6
++1 19
+-1 19
++1 38
+-97 57
++9 18
+-3 36
++3 36
++5 34
++1 68
+cfn=(250)
+calls=17 -17 
+* 240294
++81 34
++7 8
+-88 4
+-5 3
+-10 3
++9 1
+-3 2
++3 2
++5 2
++1 4
+cfn=(250)
+calls=1 -17 
+* 9471
++49 2
+
+fl=(24)
+fn=(70)
+26 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++1 63
++2 51
++1 51
++1 51
++1 51
++1 51
++1 51
++1 51
++1 51
++1 51
++2 63
++1 63
++1 1
++1 1
++1 1
++1 1
++1 62
++1 63
+
+fl=(34)
+fn=(148)
+113 7
++6 3
++3 2
++36 3
++2 9
+-2 28
++2 6
++3 4
+-1 4
++5 8
+-4 4
+-1 4
++17 4
+-17 4
++3 8
++2 4
++12 4
+-12 8
++16 20
++2 4
++1 4
+-1 8
++4 3
++6 1
+-12 2
++12 3
+-12 6
++15 6
++1 1
++51 1
++1 8
+
+fn=(188)
+817 4
++9 4
+-9 12
++6 8
++8 12
++42 4
+-1 12
++1 4
+-1 4
++1 4
++1 16
+
+fn=(238)
+377 7
++1 1
+-1 1
++1 1
++4 1
++8 1
+-5 1
++5 1
+-6 1
+-2 1
++8 3
++5 6
++6 3
+-25 5
++47 8
++1 16
++2 8
++1 8
++8 16
++1 4
++1 12
+cfi=(22)
+cfn=(66)
+calls=4 62 
+* 74
+* 20
+cfi=(30)
+cfn=(108)
+calls=4 44 
+* 94
+* 12
+-42 12
++6 16
++3 4
++1 8
++6 12
++3 4
+-1 8
++38 2
++3 9
+
+fn=(128)
+51 4
++3 12
++48 8
++4 8
+
+fn=(150)
+329 1
++13 1
+-13 2
++2 1
++11 2
+cfi=(15)
+cfn=(42)
+calls=1 53 
+* 49
++1 1
+-1 1
++1 1
++7 1
++4 306
+-58 1
++1 3
+cfi=(15)
+cfn=(34)
+calls=1 111 
+* 38
++1 2
+-2 2
++11 2
++64 5
+
+fn=(266) _dl_get_tls_static_info
+321 2
++1 2
++1 1
+
+fl=(17)
+fn=(52)
+135 7653
++1 7653
++1 7653
++1 3075
++1 3075
++1 3075
++1 3075
+cfn=(53) strcmp'2
+calls=3075 -6 
+* 155564
++5 4578
++1 4578
++1 4578
++1 4578
+
+fn=(53)
+135 21766
++1 21766
++1 21766
++1 20292
++1 20292
++1 20292
++1 20292
+cfn=(53)
+calls=18691 -6 
+* 724590
++2 1601
++1 1601
++2 1474
++1 1474
++1 1474
++1 1474
+
+fl=(37)
+fn=(142) _dl_check_map_versions
+180 171
++15 19
+-15 38
++15 38
++2 19
++3 19
+-3 19
++2 19
++1 19
++2 19
+-3 19
++3 19
++3 51
++4 17
+-4 17
++4 85
++17 17
+62 17
+226 34
+62 102
+226 16
+62 16
+226 32
+62 162
++1 270
+-1 540
++2 909
+cfi=(28)
+cfn=(92)
+calls=303 305 
+* 19040
+* 606
+230 66
++4 99
++5 132
++20 54
+-16 895
+cfn=(144) match_symbol
+calls=5 82 
+* 709
+* 246
+cfn=(144)
+calls=82 82 
+* 14838
+* 87
++8 174
+-8 174
++11 261
++9 132
++5 48
++1 16
+-80 2
+-8 2
++96 38
++3 36
++10 81
+-7 162
+-3 162
++6 243
+-3 18
+-3 18
++6 27
++8 38
++87 171
+-81 72
+cfi=(15)
+cfn=(34)
+calls=18 111 
+* 730
++1 18
+-2 18
++2 18
++11 18
++2 18
+-5 18
++3 36
++2 18
++3 68
++4 99
++18 54
+-15 162
++2 162
+-2 99
++2 99
++2 87
++1 87
+-1 261
++1 87
++1 87
+-2 87
++2 174
++1 261
++3 261
++8 99
++5 16
++1 16
++4 36
++3 45
++20 81
+-14 81
+-2 81
++2 90
+-2 9
++2 9
++4 81
++2 81
+-1 162
++1 81
+-1 243
++1 81
++1 81
++3 279
+
+fn=(144)
+82 870
++9 87
+-8 87
+-1 261
++1 87
++8 87
++6 261
++15 87
++1 174
++2 87
++5 174
++14 1286
++12 1668
++4 556
+-30 1112
++16 87
++3 435
+cfi=(17)
+cfn=(52)
+calls=87 -4 
+* 7097
+* 261
++3 87
++32 696
+
+fn=(140)
+387 5
++2 1
+-2 2
++4 4
++1 57
++1 76
+cfn=(142)
+calls=19 180 
+* 46029
+-2 19
++1 76
+-1 38
++5 7
+
+fl=(32)
+fn=(120)
+37 4
+-1 4
++1 4
++1 24
++4 1
+-4 12
+
+fl=(26)
+fn=(82)
+160 315
++9 45
++2 45
+cfi=(2)
+cfn=(84)
+calls=45 804 
+* 90
+* 45
++1 45
++2 90
+-2 45
++2 45
+cfi=(27)
+cfn=(86)
+calls=45 26 
+* 855
++1 45
+-1 45
++1 45
++2 90
++1 45
+-1 45
++1 45
+cfi=(31)
+cfn=(116)
+calls=44 62 
+* 104308
+cfi=(2)
+cfn=(88)
+calls=1 631 
+* 2375
++1 135
++2 45
+-1 90
++1 45
++1 90
++10 180
+
+fn=(136)
+198 10
++1 1
+cfi=(2)
+cfn=(84)
+calls=1 804 
+* 2
++5 1
+-1 1
+-4 1
++9 1
++2 1
+-3 1
++3 1
+cfi=(2)
+cfn=(138)
+calls=1 663 
+* 46324
++2 1
++1 1
++1 8
+
+fl=(13)
+fn=(30)
+63 162
++1 18
+-1 72
++1 18
+cfi=(9)
+cfn=(18)
+calls=18 -35 
+* 917
++6 18
+-6 18
++6 234
++7 72
+cfi=(15)
+cfn=(34)
+calls=18 +34 
+* 806
++3 18
+-3 18
++3 36
++4 18
+-1 18
+-19 18
++25 18
+-5 18
++5 18
+-1 36
++1 18
+cfi=(16)
+cfn=(44)
+calls=18 -27 
+* 466
++2 18
+-2 18
++5 36
+-1 18
++1 54
++3 18
+-3 18
++3 18
++6 18
++3 18
+-7 18
++4 18
++3 18
+-45 5
++47 2
+-2 2
++2 30
+-2 30
++18 18
+-6 18
++1 18
+-1 18
++6 108
++2 17
++3 17
+-3 68
++3 17
++4 115
++4 51
++8 1
++6 1
+-3 2
++3 19
+-3 34
++3 34
++2 34
+cfi=(9)
+cfn=(18)
+calls=17 29 
+* 1104
+* 17
++4 17
+-4 17
++4 17
++64 17
++4 162
+-88 51
+-39 36
++26 2
+-2 1
++7 4
++8 3
++24 34
+cfi=(15)
+cfn=(38)
+calls=17 -66 
+* 493
++1 17
+-1 17
++1 51
++45 51
+cfi=(22)
+cfn=(66)
+calls=17 62 
+* 699
+* 17
++5 229
++1 229
+-1 229
++1 246
+-1 17
++1 17
++2 34
++3 34
+
+fn=(46)
+34 72
++2 18
+-2 18
++2 18
+cfi=(2)
+cfn=(48)
+calls=18 844 
+* 36
++2 127
++3 663
++2 17
++2 17
++4 17
++4 17
+-4 34
++1 34
++1 34
++2 17
++1 51
+-1 17
+cfi=(2)
+cfn=(50)
+calls=17 850 
+* 34
+-4 1
++4 1
+-4 2
++1 2
++1 2
++2 1
++1 3
+-1 1
+cfi=(2)
+cfn=(50)
+calls=1 850 
+* 2
+-5 2
+
+fl=(19)
+fn=(58)
+82 4
++1 1
+
+fl=(23)
+fn=(68)
+82 245
+
+ob=(17)
+fl=(150)
+fn=(1768)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(1390)
+0 6
+
+fn=(1384)
+0 6
+
+fn=(1396)
+0 11
+
+ob=(1)
+fl=(23)
+fn=(68)
+83 49
+
+fn=(106)
+82 140
++1 35
+
+fn=(244)
+82 4
++1 1
+
+ob=(5)
+fl=(107) /build/buildd/eglibc-2.15/nptl/pthread_attr_setdetachstate.c
+fn=(848) pthread_attr_setdetachstate
+36 2
++6 1
++4 2
+
+fl=(105) /build/buildd/eglibc-2.15/nptl/pthread_attr_init.c
+fn=(832) pthread_attr_init@@GLIBC_2.2.5
+36 2
++6 24
++6 1
+cob=(3)
+cfi=(106) /build/buildd/eglibc-2.15/misc/../sysdeps/unix/sysv/linux/getpagesize.c
+cfn=(838) getpagesize
+calls=1 -18 
+* 7
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 -17 
+* 1775
+* 2
++3 3
+
+fl=(69)
+fn=(2062)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(290)
+0 6
+
+fn=(296)
+0 11
+
+fl=(109)
+fn=(932)
+47 4
++3 4
+-3 4
++3 8
++1 8
++3 4
++2 8
++5 10
++1 6
++65 4
+-2 4
++5 4
++1 8
+-67 4
++5 4
++13 8
++2 4
++1 4
+
+fl=(108) /build/buildd/eglibc-2.15/nptl/pthread_key_create.c
+fn=(872) pthread_key_create
+51 1
+-20 1
++20 2
+-18 1
++2 5
++2 5
++4 2
++3 1
++3 2
+
+fl=(128) /build/buildd/eglibc-2.15/nptl/cleanup_defer_compat.c
+fn=(1082) _pthread_cleanup_push_defer
+31 10
++1 10
++1 20
++2 10
++3 20
++17 40
++2 10
++1 10
+
+fn=(1084) _pthread_cleanup_pop_restore
+66 10
++3 20
++3 30
++23 20
++2 20
+
+fl=(97) /build/buildd/eglibc-2.15/nptl/pthread_self.c
+fn=(760) pthread_self
+27 3
++1 3
+
+fl=(62)
+fn=(254)
+292 1
++16 1
+-2 1
+-14 1
++16 1
+-16 2
++16 3
++1 2
++1 1
++4 3
++5 1
++4 1
++4 2
+-8 1
++2 1
++6 1
++32 1
+-8 1
++8 6
++1 1
+-3 1
++3 1
++1 2
++1 2
++7 3
++3 1
+fi=(202) /build/buildd/eglibc-2.15/nptl/../nptl/sysdeps/pthread/list.h
+61 1
+fe=(62)
+372 1
++1 1
+fi=(202)
+61 1
++1 1
++1 1
++2 1
+fe=(62)
+377 2
++6 1
++2 2
++2 2
+-3 1
+-1 1
++2 19
++2 2
+cfi=(63) /build/buildd/eglibc-2.15/nptl/../sysdeps/unix/sysv/linux/x86_64/sigaction.c
+cfn=(256) __libc_sigaction
+calls=1 50 
+* 64
++3 1
++3 2
+-2 1
+-1 1
++3 2
+cfi=(63)
+cfn=(256)
+calls=1 50 
+* 64
+fi=(64) /build/buildd/eglibc-2.15/nptl/../sysdeps/unix/sysv/linux/bits/sigset.h
+119 1
+fe=(62)
+401 1
+fi=(64)
+119 1
+fe=(62)
+401 5
++5 3
+cob=(1)
+cfi=(34)
+cfn=(266)
+calls=1 -85 
+* 5
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 2711
++3 3
++4 2
++5 2
+-5 4
++5 1
+cob=(3)
+cfi=(65) /build/buildd/eglibc-2.15/resource/../sysdeps/unix/syscall-template.S
+cfn=(272) getrlimit
+calls=1 82 
+* 5
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1862
+* 2
++12 2
++1 3
++1 2
++4 4
++1 1
++4 1
+cob=(3)
+cfi=(66) /build/buildd/eglibc-2.15/elf/dl-tsd.c
+cfn=(278) __libc_dl_error_tsd
+calls=1 49 
+* 3
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1965
+* 2
+cob=(1)
+cfi=(2)
+cfn=(84)
+calls=1 804 
+* 2
+* 1
++6 1
+-6 1
++1 1
++6 1
+-1 1
++2 1
+-7 1
++4 1
++4 1
+-4 1
++4 1
++3 1
++3 1
++8 2
+-11 1
++5 1
+-2 1
++8 1
+-6 1
++6 1
+cob=(3)
+cfi=(67) /build/buildd/eglibc-2.15/nptl/../nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c
+cfn=(284) __libc_pthread_init
+calls=1 43 
+* 443
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 2130
++4 1
+-6 1
++7 5
+-50 3
++4 1
++3 3
+-15 3
+
+fl=(98) /build/buildd/eglibc-2.15/nptl/../nptl/sysdeps/unix/sysv/linux/pthread_getaffinity.c
+fn=(768) pthread_getaffinity_np@@GLIBC_2.3.4
+32 2
++5 2
+-5 1
++5 4
++1 2
++4 6
+cob=(3)
+cfi=(101)
+cfn=(778)
+calls=1 +2 
+* 28
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 -11 
+* 1695
++2 1
++1 2
+
+fl=(63)
+fn=(256)
+50 2
++4 2
+-4 2
++4 2
++2 4
++1 64
++1 8
++2 4
++7 28
++1 8
++8 4
+
+fl=(199) /build/buildd/eglibc-2.15/nptl/pthread_key_delete.c
+fn=(1912) pthread_key_delete
+31 2
++2 4
++2 2
++1 4
+-7 4
+
+fl=(114)
+fn=(952)
+289 4
+37 4
+289 4
+37 8
++1 8
++3 8
++5 4
++3 4
++3 12
++1 4
+291 8
+55 4
++3 6
++3 2
++2 2
+-2 8
+
+ob=(7)
+fl=(83)
+fn=(2124)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(366)
+0 6
+
+fn=(360)
+0 6
+
+fn=(372)
+0 11
+
+ob=(10)
+fl=(87)
+fn=(2042)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(428)
+0 6
+
+fn=(422)
+0 6
+
+fn=(434)
+0 11
+
+ob=(15)
+fl=(93)
+fn=(702)
+0 6
+
+fn=(696)
+0 6
+
+fn=(708)
+0 11
+
+fn=(714)
+0 9
+cob=(3)
+cfi=(94) /build/buildd/eglibc-2.15/stdlib/getenv.c
+cfn=(722) getenv
+calls=1 36 
+0 301
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1531
+0 6
+cfn=(730) 0x00000000000034d0
+calls=1 0 
+0 318
+0 3
+cfn=(730)
+calls=1 0 
+0 318
+0 4
+cfn=(740) 0x0000000000003590
+calls=1 0 
+0 337
+0 4
+cfn=(740)
+calls=1 0 
+0 338
+0 4
+cfn=(752) 0x0000000000009150
+calls=1 0 
+0 7603
+0 6
+cfn=(740)
+calls=1 0 
+0 324
+0 6
+cob=(3)
+cfi=(94)
+cfn=(722)
+calls=1 36 
+0 314
+0 5
+cob=(3)
+cfi=(94)
+cfn=(722)
+calls=1 36 
+0 301
+0 5
+cob=(3)
+cfi=(94)
+cfn=(722)
+calls=1 36 
+0 301
+0 10
+cob=(3)
+cfi=(96)
+cfn=(830) pthread_attr_init@@GLIBC_2.2.5
+calls=1 56 
+0 1821
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 3
+cob=(3)
+cfi=(96)
+cfn=(846) pthread_attr_setdetachstate
+calls=1 62 
+0 12
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2232
+0 3
+cfn=(852) 0x0000000000003680
+calls=1 0 
+0 328
+0 5
+cfn=(852)
+calls=1 0 
+0 323
+0 19
+
+fn=(1916)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(1610) omp_get_max_threads
+0 8
+
+fn=(730)
+0 16
+cob=(3)
+cfi=(94)
+cfn=(722)
+calls=2 36 
+0 602
+0 18
+
+fn=(852)
+0 20
+cob=(3)
+cfi=(94)
+cfn=(722)
+calls=2 36 
+0 607
+0 24
+
+fn=(1906)
+0 3
+cob=(5)
+cfi=(199)
+cfn=(1912)
+calls=1 31 
+0 16
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1975
+
+fn=(752)
+0 2
+cob=(3)
+cfi=(96)
+cfn=(758)
+calls=1 187 
+0 9
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1789
+0 4
+cob=(5)
+cfi=(98)
+cfn=(768)
+calls=1 32 
+0 1743
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2122
+0 5
+cob=(3)
+cfi=(104) /build/buildd/eglibc-2.15/posix/../posix/sched_cpucount.c
+cfn=(792) popcount_cpucount
+calls=1 28 
+0 103
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1819
+0 7
+
+fn=(866)
+0 4
+cob=(5)
+cfi=(108)
+cfn=(872)
+calls=1 51 
+0 20
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 2147
+0 6
+
+fn=(740)
+0 33
+cob=(3)
+cfi=(94)
+cfn=(722)
+calls=3 36 
+0 930
+0 36
+
+ob=(18)
+fl=(151)
+fn=(1748)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(1410)
+0 6
+
+fn=(1404)
+0 6
+
+fn=(1416)
+0 11
+
+ob=(3)
+fl=(177) /build/buildd/eglibc-2.15/stdlib/../sysdeps/x86_64/mul_1.S
+fn=(1578) __mpn_mul_1
+33 923
++3 923
++1 923
++1 923
++1 923
++1 923
++2 923
++1 923
++2 923
++1 923
++1 923
++1 923
++1 923
++2 923
++1 923
++1 923
++1 923
++69 923
++2 923
++3 923
+
+fl=(188) /build/buildd/eglibc-2.15/stdio-common/printf_fp.c
+fn=(1680) __printf_fp
+163 20
++33 2
++2 2
++22 8
++59 2
+-59 4
++59 2
++2 12
++1 4
++23 6
++97 4
++4 2
+cfi=(189) /build/buildd/eglibc-2.15/math/../sysdeps/ieee754/dbl-64/wordsize-64/s_isnan.c
+cfn=(1682) isnan
+calls=2 31 
+* 14
+* 4
+1274 18
+313 2
+178 2
+-1 2
+354 2
++2 2
+-2 2
++67 4
+cfi=(190) /build/buildd/eglibc-2.15/math/../sysdeps/ieee754/dbl-64/wordsize-64/s_isinf.c
+cfn=(1684) isinf
+calls=2 20 
+* 26
+* 4
++56 2
++12 2
+-12 12
++1 2
++1 2
++1 2
++1 8
++1 4
++1 4
+-2 2
++1 2
+-1 2
++2 2
++7 2
+-8 2
++1 2
++7 4
++9 6
++15 4
+160 2
+555 2
+160 6
+555 4
+-6 2
+-1 2
++1 12
+cfi=(143) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../memcpy.S
+cfn=(1244) __GI_memcpy
+calls=2 62 
+* 46
+* 2
++15 6
++11 78
+-2 48
+-54 24
++4 120
+-4 2
++4 10
++2 4
+-88 20
+cfi=(191) /build/buildd/eglibc-2.15/stdlib/../sysdeps/ieee754/dbl-64/dbl2mpn.c
+cfn=(1686) __mpn_extract_double
+calls=2 36 
+* 42
+* 2
++4 6
++68 2
+-2 2
++2 10
+-2 18
+cfi=(172) /build/buildd/eglibc-2.15/stdlib/../sysdeps/x86_64/lshift.S
+cfn=(1566) __mpn_lshift
+calls=2 30 
+* 30
+* 2
++3 18
++1 2
+-1 2
++1 2
++1 12
++52 10
+cfi=(192) /build/buildd/eglibc-2.15/stdlib/cmp.c
+cfn=(1688) __mpn_cmp
+calls=2 50 
+* 38
+* 8
++3 10
+cfi=(143)
+cfn=(1244)
+calls=2 62 
+* 46
++1 4
++2 2
+-2 2
++1 6
+-1 2
++1 2
++1 8
++6 2
++6 4
+-6 2
++6 2
++4 10
+160 4
+586 6
++4 2
++2 6
+844 4
+-10 2
++10 4
+-10 2
++10 2
++2 2
+-2 2
++2 2
++10 4
++48 2
+-61 2
++61 2
++14 12
++7 4
+fi=(203) /build/buildd/eglibc-2.15/stdio-common/../nptl/sysdeps/pthread/allocalim.h
+28 4
+fe=(188)
+935 2
+-9 2
++9 12
++4 2
+-3 2
++3 4
++3 20
++3 4
+cfn=(1692) hack_digit.14957
+calls=2 236 
+* 218
+* 4
+cfn=(1692)
+calls=2 236 
+* 222
+* 8
+-3 8
+160 12
+942 2
++6 6
++3 2
+-4 2
++4 4
++8 2
++13 4
+-13 4
++13 12
+-7 56
++1 4
++3 12
+-1 12
++1 12
+cfn=(1692)
+calls=12 236 
+* 1426
+* 12
++1 36
++2 3
++9 6
+cfn=(1692)
+calls=2 236 
+* 240
++1 6
++4 4
++23 4
++5 30
++2 3
+-2 3
++3 3
+-3 9
++2 1
+-2 1
++3 1
+-3 3
++5 4
++2 4
++2 4
++11 12
++70 6
++7 4
++3 4
++13 6
++46 12
++2 4
+213 2
+1175 8
++2 2
+-2 2
++2 8
+213 2
+1180 4
++7 10
++9 6
++6 6
++4 4
+cfi=(95) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../strlen.S
+cfn=(724) __GI_strlen
+calls=2 26 
+* 28
++2 4
+-2 2
++3 2
+-1 2
++5 2
++1 2
+-1 2
++1 2
+-1 2
++2 6
++11 12
++1 2
++6 4
+-6 2
++6 16
++3 32
++3 32
+-6 54
++1 54
++1 6
+cfi=(135) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/memcpy.S
+cfn=(1136) __GI_mempcpy
+calls=2 62 
+* 36
+* 4
+-53 6
++61 4
+-1 2
++18 10
++3 6
++7 6
+-86 4
+859 2
+-1 2
++1 8
++3 6
++2 2
+-5 2
++2 2
+-1 2
+-1 2
++5 2
++2 2
+-2 2
++2 4
+1260 226
+cfi=(121) /build/buildd/eglibc-2.15/libio/genops.c
+cfn=(1696) __overflow
+calls=18 246 
+* 666
+* 64
+606 4
++15 12
++16 14
+cfi=(193) /build/buildd/eglibc-2.15/stdlib/../sysdeps/x86_64/rshift.S
+cfn=(1690) __mpn_rshift
+calls=2 30 
+* 34
++3 4
+-1 2
++1 4
+-1 4
++1 4
+cfi=(193)
+cfn=(1690)
+calls=2 30 
+* 34
++2 6
++14 22
+-38 6
+859 6
+586 10
+1014 4
+
+fn=(1692)
+236 72
++3 54
++2 54
++7 54
++4 108
+cfi=(194) /build/buildd/eglibc-2.15/stdlib/divrem.c
+cfn=(1694) __mpn_divrem
+calls=18 57 
+* 843
++1 72
++4 18
+-4 18
++1 18
++2 18
++1 108
++11 72
+cfi=(177)
+cfn=(1578)
+calls=18 33 
+* 360
++1 36
++1 75
++4 90
+-17 36
+
+fl=(100)
+fn=(776)
+27 3
++1 3
++2 3
++1 3
++1 3
++1 3
++1 3
+
+fl=(192)
+fn=(1688)
+50 2
+-7 10
++2 4
++1 4
++1 8
++8 8
++1 2
+
+fl=(194)
+fn=(1694)
+57 144
++3 18
+-3 72
++3 18
+245 162
+73 18
++1 18
+-16 18
++18 36
++6 72
++1 36
+-38 26
++39 13
+-1 13
++1 26
+-1 39
++4 18
+-2 18
++2 36
++3 18
++2 18
+-14 2
++1 4
+
+fl=(162)
+fn=(1510)
+38 9
++6 3
+cfi=(163) /build/buildd/eglibc-2.15/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c
+cfn=(1512) __libc_sigaction
+calls=3 +6 
+* 268
+
+fl=(179) /build/buildd/eglibc-2.15/posix/../sysdeps/unix/sysv/linux/x86_64/sysconf.c
+fn=(1594) sysconf
+33 6
++1 2
+-1 4
++1 4
+fi=(180) /build/buildd/eglibc-2.15/posix/../sysdeps/unix/sysv/linux/x86_64/../sysconf.c
++38 12
+fe=(179)
+-34 10
+fi=(181) /build/buildd/eglibc-2.15/posix/../sysdeps/posix/sysconf.c
++16 12
+fi=(180)
++18 4
+fi=(181)
++5 2
+cfi=(182) /build/buildd/eglibc-2.15/misc/../sysdeps/unix/sysv/linux/getclktck.c
+cfn=(1600) __getclktck
+calls=2 -46 
+* 12
+* 4
+fe=(179)
+
+fl=(101)
+fn=(778)
+44 4874
++1 4874
++1 4874
++4 4874
++1 4874
++1 4874
++1 4874
++2 4874
++1 4874
++2 4845
++5 4845
++1 4845
++1 4845
++1 4845
++1 4845
+322 4485
++2 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
++1 4485
+-16 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
+-13 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-12 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
+-8 84
++1 84
++1 84
++1 84
++1 84
++1 84
++1 84
++1 84
++1 84
+-4 245
++1 245
++1 245
++1 245
++1 245
+504 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++5 29
++1 29
++1 29
++1 29
++1 29
++85 29
++1 29
++2 29
++1 29
++25 27
++64 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++41 1
++1 1
++1 1
++1 1
++1 1
++1 1
+866 29
++1 29
++1 58
++4 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++1 29
++2 29
++1 29
+-12 386
++1 386
++1 386
++1 386
++1 386
++1 386
++1 386
++1 386
++1 386
++1 386
++2 386
++1 386
++1 29
++5 29
++1 29
++1 29
++1 29
++1 29
+
+fl=(161) /build/buildd/eglibc-2.15/signal/../sysdeps/posix/sysv_signal.c
+fn=(1508) sysv_signal
+41 1
++4 1
+-4 1
++4 5
++7 3
+-1 1
++5 1
+-2 1
+-2 1
++4 1
+-4 17
++4 2
+cfi=(162)
+cfn=(1510)
+calls=1 -18 
+* 106
+* 1
++3 3
++1 2
+
+fl=(65)
+fn=(272)
+82 4
++1 1
+
+fl=(186) /build/buildd/eglibc-2.15/stdlib/exit.c
+fn=(1662) exit
+100 1
+-1 1
++1 2
+cfn=(1664) __run_exit_handlers
+calls=1 -63 
+* 64443
+
+fn=(1664)
+37 8
++50 1
+-45 3
++37 1
+-33 2
++33 3
+-33 14
++3 7
+-1 28
++2 43
++24 3
++4 6
+-2 6
++2 3
+cob=(1)
+cfi=(195)
+cfn=(1708)
+calls=1 +55 
+* 54953
+cob=(20)
+cfi=(164) /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/../single-thread/nbody.c
+cfn=(1706) Universe_Cleanup
+calls=1 204 
+* 143
+cob=(20)
+cfi=(164)
+cfn=(1666) DisplayStatistics
+calls=1 245 
+* 8914
++1 3
++4 1
++1 1
+-1 1
++1 1
++6 2
++1 5
+cfi=(121)
+cfn=(2162) _IO_cleanup
+calls=1 1007 
+* 281
+* 3
++2 2
+cfi=(201) /build/buildd/eglibc-2.15/posix/../sysdeps/unix/sysv/linux/_exit.c
+cfn=(2172) _Exit
+calls=1 -64 
+* 5
+
+fl=(187) /build/buildd/eglibc-2.15/stdio-common/printf.c
+fn=(1672) printf
+30 16
++4 1
+-4 1
++5 1
+-1 5
++1 3
+cfi=(123) /build/buildd/eglibc-2.15/stdio-common/vfprintf.c
+cfn=(1046) vfprintf
+calls=1 211 
+* 7061
++4 2
+
+fl=(138)
+fn=(1166)
+167 42
++5 18
++3 18
++4 12
+-86 24
+fi=(139) /usr/lib/gcc/x86_64-linux-gnu/4.6/include/emmintrin.h
+685 6
+fe=(138)
+207 12
+fi=(140) /usr/lib/gcc/x86_64-linux-gnu/4.6/include/smmintrin.h
+681 6
++16 6
+-16 12
++16 6
+-16 6
++24 6
+-8 6
+-16 6
++24 6
+fe=(138)
+218 12
++20 12
++3 6
+fi=(139)
+1257 6
+685 6
+fe=(138)
+241 745
++2 738
+93 1476
+fi=(139)
+685 369
+fi=(140)
+-57 369
++77 369
+-24 369
++24 369
+fe=(138)
+251 738
+fi=(140)
+681 369
+fe=(138)
+251 1108
+385 4
+260 1
+385 4
+93 24
+fi=(139)
+685 12
+fe=(138)
+255 15
+385 20
+-10 5
++10 20
+95 2
++1 2
+-1 2
++1 2
+fi=(139)
+1257 2
++98 6
+fe=(138)
+98 6
+
+fl=(197) /build/buildd/eglibc-2.15/nptl/../nptl/sysdeps/unix/sysv/linux/unregister-atfork.c
+fn=(1738) __unregister_atfork
+37 16
+-8 48
++11 32
++1 80
++5 16
+-6 32
++6 16
+-6 32
++82 32
+
+fl=(135)
+fn=(1136)
+62 5
++4 5
++3 5
++1 5
++2 3
++1 3
++2 3
++1 3
++5 3
++1 3
+-1 2
++1 2
++2 3
++1 3
++2 3
++1 3
++5 3
++1 3
+-1 2
++1 2
++2 1
++1 1
++2 1
++1 1
++5 1
++1 1
+-1 4
++1 4
++2 1
++1 1
++2 1
++1 2
++5 1
++1 1
+-1 4
++1 4
++21 5
++4 5
+
+fl=(120) /build/buildd/eglibc-2.15/libio/vsnprintf.c
+fn=(1036) vsnprintf
+101 16
++9 2
+-9 2
++4 2
++5 6
++6 10
++6 2
+-6 2
+cfi=(121)
+cfn=(1038) _IO_no_init
+calls=2 648 
+* 82
++1 2
++2 8
+-2 2
++1 2
++1 2
+cfi=(122) /build/buildd/eglibc-2.15/libio/strops.c
+cfn=(1042) _IO_str_init_static_internal
+calls=2 -79 
+* 112
++1 8
+cfi=(123)
+cfn=(1046)
+calls=2 +91 
+* 1910
++2 4
++1 4
++2 14
+
+fl=(172)
+fn=(1566)
+30 5440
++1 5440
++2 5440
++1 5440
++1 5440
++12 5440
++1 5440
++1 5440
++1 5440
++1 5440
++1 5440
++1 5440
++6 5440
++1 5440
++1 5440
+
+fl=(43)
+fn=(174)
+29 1
+-1 1
+fi=(44) /build/buildd/eglibc-2.15/time/../sysdeps/generic/dl-hash.h
++17 1
+fe=(43)
+-16 2
+fi=(44)
++17 1
+fe=(43)
+-17 1
+fi=(44)
++15 1
++5 4
++1 2
++13 2
+-17 3
++3 12
++1 6
++13 6
+-17 9
++22 1
+fe=(43)
+-39 2
++3 2
+-3 1
++3 1
+cfi=(45) /build/buildd/eglibc-2.15/elf/../sysdeps/unix/sysv/linux/dl-vdso.c
+cfn=(178) _dl_vdso_vsym
+calls=1 -5 
+* 12
+* 3
++1 2
+
+fl=(190)
+fn=(1684)
+20 2
++1 2
+-2 2
++1 2
++3 2
+-2 2
++1 6
++1 6
++1 2
+
+fl=(106)
+fn=(838)
+30 1
++1 4
++2 2
+
+fl=(154) /build/buildd/eglibc-2.15/csu/libc-start.c
+fn=(1452) (below main)
+96 7
++10 1
+-10 3
++10 3
++52 1
+-52 1
++52 1
++1 4
+cfi=(90)
+cfn=(556)
+calls=1 57 
+* 65
++22 4
++3 2
++1 5
+cob=(20)
+cfi=(153)
+cfn=(1454) __libc_csu_init
+calls=1 0 
+* 54
++4 4
++15 2
++9 2
+cfi=(155) /build/buildd/eglibc-2.15/setjmp/../sysdeps/x86_64/bsd-_setjmp.S
+cfn=(1476) _setjmp
+calls=1 34 
+* 29
++1 2
++5 2
++1 2
++3 2
++3 5
+cob=(20)
+cfi=(158) /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/main.c
+cfn=(1482) main
+calls=1 40 
+* 1301834364
+106 2
+
+fl=(182)
+fn=(1600)
+31 10
++1 2
+
+fl=(168) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/strtok.S
+fn=(1552) strtok
+69 4000
++1 4000
++2 4000
++1 4000
++1 4000
++1 4000
++1 132000
++13 4000
++2 4000
++4 4000
++1 4000
++1 4000
++1 4000
++1 4000
++6 4000
++1 4000
++1 4000
+-2 4000
++1 4000
++1 4000
++1 4000
++2 4000
++1 4000
++1 4000
++1 4000
++2 4000
++1 4000
++1 4000
++1 4000
++2 4000
++1 4000
++1 4000
++1 4000
++1 4000
++4 4000
++11 4000
++2 4000
++1 4000
++1 4000
++20 4000
++2 4000
++2 4000
++1 4000
++1 4000
+-4 5989
++2 5989
++1 5989
++1 5989
++2 8455
++1 8455
++1 8455
++2 6937
++1 6937
++1 6937
++2 6488
++1 6488
++1 6488
++2 499
++1 499
++1 499
++2 499
++1 499
+-4 449
++1 449
++2 449
++1 449
+-3 1518
++2 1518
++1 1518
+-1 1534
++1 1534
++2 3500
++3 3500
++1 3500
++1 3500
++3 3500
++4 3500
++2 3500
+-2 500
++2 500
++3 500
++2 500
++1 500
+
+fl=(46)
+fn=(180)
+30 1
++1 1
++2 1
++1 1
++1 1
++2 1
+
+fl=(73)
+fn=(314)
+53 7
++6 3
++17 1
+fi=(74) /build/buildd/eglibc-2.15/csu/../sysdeps/generic/dl-hash.h
+-31 1
+fe=(73)
++29 1
++1 1
+fi=(75) /build/buildd/eglibc-2.15/csu/../sysdeps/unix/sysv/linux/x86_64/init-first.c
+-37 1
+fi=(74)
++8 1
+fi=(75)
+-8 1
+fe=(73)
++38 1
+fi=(75)
+-38 2
+fi=(74)
++6 1
++5 4
++1 2
++13 2
+-17 3
++3 12
++1 6
++13 6
+-17 9
++22 1
+fi=(75)
+-30 2
++2 2
+-2 1
++2 1
+cfi=(45)
+cfn=(178)
+calls=1 -13 
+* 12
++6 2
+-4 2
++1 2
++1 1
++2 1
+cfi=(45)
+cfn=(178)
+calls=1 -19 
+* 12
++4 2
+fe=(73)
++40 1
+fi=(75)
+-40 1
+fe=(73)
++40 1
+fi=(75)
+-39 2
++1 1
+fe=(73)
++38 2
+cfi=(76) /build/buildd/eglibc-2.15/misc/init-misc.c
+cfn=(320) __init_misc
+calls=1 -59 
+* 75
++8 1
+cfi=(78) /build/buildd/eglibc-2.15/ctype/ctype-info.c
+cfn=(324) __ctype_init
+calls=1 -65 
+* 16
++5 5
+-35 1
+-9 1
++9 4
+
+fl=(124) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/strchrnul.S
+fn=(1048) strchrnul
+27 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++1 8
++2 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++2 8
++1 8
++1 8
+
+fl=(157) /build/buildd/eglibc-2.15/setjmp/sigjmp.c
+fn=(1480) __sigjmp_save
+30 2
+-1 2
++1 2
++5 3
+
+fl=(94)
+fn=(722)
+36 88
++1 11
+cfi=(95)
+cfn=(724)
+calls=11 -11 
+* 199
+* 11
++4 55
++1 11
+-1 22
++3 22
+-2 11
++55 88
+-16 11
+-8 11
++6 11
+-1 11
++3 1870
++9 924
+
+fl=(111) /build/buildd/eglibc-2.15/malloc/hooks.c
+fn=(944) malloc_hook_ini
+30 1
+fi=(112) /build/buildd/eglibc-2.15/malloc/arena.c
+371 1
+fe=(111)
+31 1
+fi=(112)
+371 1
+fe=(111)
+31 1
+fi=(112)
+371 3
+cfn=(948) ptmalloc_init.part.8
+calls=1 -2 
+* 57883
+* 1
+fe=(111)
+34 1
+-1 1
+cfi=(110)
+cfn=(943) malloc'2
+calls=1 2910 
+* 1170
+
+fn=(1256) realloc_hook_ini
+38 1
++1 2
++1 2
+fi=(112)
+371 3
+fe=(111)
+43 1
+-1 1
+cfi=(110)
+cfn=(1255) realloc'2
+calls=1 2989 
+* 135
+
+fl=(148) /build/buildd/eglibc-2.15/stdlib/../stdlib/strtol.c
+fn=(1296) __strtol_internal
+99 3
+cfi=(149) /build/buildd/eglibc-2.15/stdlib/../stdlib/strtol_l.c
+cfn=(1298) ____strtol_l_internal
+calls=1 232 
+* 116
+
+fn=(1502) strtol
+110 8
+cfi=(149)
+cfn=(1298)
+calls=2 232 
+* 292
+
+fl=(173) /build/buildd/eglibc-2.15/stdlib/../sysdeps/ieee754/dbl-64/mpn2dbl.c
+fn=(1570) __mpn_construct_double
+40 3421
+-6 13684
++6 6842
++1 13684
++6 6842
++1 3421
+
+fl=(80)
+fn=(330) handle_intel
+307 2
++6 2
+-6 14
++1 4
++13 2
++1 2
++2 2
+-5 2
++11 4
++5 2
+-5 4
++5 2
++7 10
+cfn=(332) intel_check_word
+calls=2 163 
+* 1606
++1 4
++3 10
+cfn=(332)
+calls=2 163 
+* 785
++1 4
++3 5
+cfn=(332)
+calls=1 163 
+* 21
++1 2
++3 5
+cfn=(332)
+calls=1 163 
+* 203
++1 2
+-18 2
++1 4
++26 16
+
+fn=(328)
+552 1
++13 1
+-13 1
++13 1
+-13 1
++13 1
++7 2
++2 3
+cfn=(330)
+calls=1 307 
+* 1667
++4 2
+-4 1
++4 1
+cfn=(330)
+calls=1 307 
+* 1054
++2 1
+-2 1
+-1 1
++3 1
++29 1
+-18 1
++18 3
++7 5
++6 2
+-6 12
++6 6
++3 20
++2 1
++6 6
++7 5
++2 1
++2 2
+-4 4
++2 1
++2 6
++2 4
++5 1
++2 2
++1 1
+-1 2
++1 1
++5 1
++12 4
++75 2
++2 1
++1 1
++2 1
+-3 1
++5 1
+-5 1
++4 3
++4 2
++2 1
++1 1
++2 1
+-3 1
++5 1
++2 1
+-7 1
++4 2
++3 1
+-3 1
++3 2
+-93 7
+
+fn=(332)
+163 60
++1 12
++8 6
+-2 40
++14 26
++53 26
++36 65
+-1 13
++1 13
+cfi=(81) /build/buildd/eglibc-2.15/stdlib/bsearch.c
+cfn=(334) bsearch
+calls=13 27 
+* 2186
++2 26
++2 12
++14 2
++6 11
+172 22
++2 13
++2 26
+301 4
++1 42
+-23 2
++2 4
++2 4
+
+fn=(336) intel_02_known_compare
+152 87
++1 87
+-1 174
++3 168
++1 87
+
+fl=(178) /build/buildd/eglibc-2.15/time/../sysdeps/unix/sysv/linux/clock.c
+fn=(1592) clock
+26 2
++2 2
+-2 2
++2 2
+cfi=(179)
+cfn=(1594)
+calls=2 +5 
+* 72
++9 2
+-9 2
++9 2
+cfi=(183) /build/buildd/eglibc-2.15/posix/../sysdeps/unix/sysv/linux/times.c
+cfn=(1602) times
+calls=2 -11 
+* 20
++2 4
++3 8
+-1 4
++4 4
+-4 2
++4 2
+
+fl=(169) /build/buildd/eglibc-2.15/stdlib/atof.c
+fn=(1558) atof
+28 7000
+cfi=(170) /build/buildd/eglibc-2.15/stdlib/strtod.c
+cfn=(1560) strtod
+calls=3500 +42 
+* 1830376
+
+fl=(122)
+fn=(1042)
+40 18
++4 3
+-4 6
++4 3
++1 3
+cfi=(146) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../rawmemchr.S
+cfn=(1286) __GI___rawmemchr
+calls=1 -19 
+* 229
+* 1
++5 5
+cfi=(121)
+cfn=(1044) _IO_setb
+calls=1 404 
+* 21
+* 10
+cfi=(121)
+cfn=(1044)
+calls=2 404 
+* 42
++5 3
+-3 3
++1 3
++1 3
++1 3
++2 2
++1 2
++1 2
++9 2
++1 12
+-1 1
++1 6
+-23 2
++1 8
++16 1
++1 1
++1 2
+
+fl=(196)
+fn=(1736)
+31 48
++18 16
+-18 80
++4 64
++4 308
++5 128
++2 4
++1 4
++2 16
+-3 8
++5 4
++3 4
++2 4
+-2 8
++2 4
+cob=(12)
+cfi=(89)
+cfn=(1994) 0x000000000006a760
+calls=1 -56 
+* 7
+cob=(12)
+cfi=(89)
+cfn=(1992) 0x000000000006a750
+calls=1 -56 
+* 7
+cob=(12)
+cfi=(89)
+cfn=(1984) 0x000000000006cf50
+calls=1 -56 
+* 1556
+cob=(2)
+cfi=(14)
+cfn=(1798)
+calls=1 -56 
+* 2
++4 8
+-21 13
+-4 48
++32 48
++4 96
+-4 48
++12 32
++3 16
+-2 16
++2 96
+-2 16
+cfi=(197)
+cfn=(1738)
+calls=16 -43 
+* 304
+
+fl=(146)
+fn=(1286)
+26 1
++1 1
++2 1
++1 1
++2 1
++1 1
++2 1
++1 1
++2 1
++1 1
++2 1
++1 1
++2 1
++1 1
++1 1
++1 1
++28 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++2 1
++1 1
++1 1
++2 2
++4 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++2 1
++2 1
++1 1
+-18 9
++1 9
++1 9
++1 9
++2 9
++1 9
++1 9
++1 9
++2 9
++1 9
++1 9
++1 9
++2 9
++2 9
++1 9
++2 1
++2 1
++1 1
++1 1
++2 1
++1 1
++1 1
++2 1
++1 1
++2 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
+
+fl=(102)
+fn=(788)
+36 1
+-36 9
+
+fl=(165) /build/buildd/eglibc-2.15/libio/iofgets.c
+fn=(1530) fgets
+37 501
++5 501
+-5 2505
++5 501
++2 1002
++8 8517
++5 501
++1 1002
+-1 501
++1 1002
+-1 501
++1 1503
+cfi=(166) /build/buildd/eglibc-2.15/libio/iogetline.c
+cfn=(1532) _IO_getline
+calls=501 -16 
+* 98159
++5 501
+-2 2505
+-5 501
++15 501
+-2 1002
+fi=(136) /build/buildd/eglibc-2.15/libio/libioP.h
+984 1002
++1 5511
+fe=(165)
+72 2505
+-6 2004
+
+fl=(171) /build/buildd/eglibc-2.15/stdlib/strtod_l.c
+fn=(1562) ____strtod_l_internal
+416 31500
++56 3500
+-2 3500
+-54 3500
++56 3500
++18 3500
+-1 3500
++15 3500
++1 10500
+cfi=(95)
+cfn=(724)
+calls=3500 26 
+* 49000
++22 3500
+-22 3500
++16 3500
++6 14000
++3 7000
++1 10500
++3 7000
++5 4994
+-17 2497
++17 2497
++13 10500
++1 14000
++75 17500
+422 3500
+647 7000
++1 12412
++1 3824
+-1 3824
++1 1912
++22 1912
++1 3824
+-1 1912
++1 5736
+-1 1588
++1 3176
+-1 1588
++1 4764
++42 17967
++1 6988
++12 6988
++16 6988
++42 6988
++9 6988
++1 10982
+-1 8982
++7 2994
++1 2994
+-1 2994
++1 14970
++1 62874
++15 8982
+561 10500
+1589 28000
+718 2495
++22 4990
++1 4990
+-68 1912
+-2 1912
++2 1912
++5 3824
++1 5736
++12 12
+-19 12
++27 36
+cfi=(174) /build/buildd/eglibc-2.15/stdlib/grouping.c
+cfn=(1572) __correctly_grouped_prefixmb
+calls=6 56 
+* 114
++5 18
+1045 384
+819 1000
++5 500
++1 1000
+-3 500
++8 500
+-6 500
++6 500
++3 1500
++59 6988
++10 18318
++19 6988
++3 6988
++3 11988
++9 1150
++2 1150
++9 1150
++1 575
+-1 575
++1 1725
++1 575
+-1 1150
++5 6842
++78 18226
++1 2846
++1 2846
++3 2846
+-4 2846
++1 2846
++3 8538
+-4 575
++1 575
++3 575
+-4 575
++1 575
++3 1725
++6 6842
++6 10263
++3 20644
+cfn=(1564) str_to_mpn.isra.0
+calls=1588 276 
+* 91922
+* 1588
++6 6352
+678 5718
++8 3812
+537 2006
+-1 1003
++1 2006
++91 5736
+743 6988
+896 13027
++1 13027
+-3 35036
+-53 1000
+-3 1000
++6 3000
++5 500
++1 1000
++2 500
+-2 500
++2 500
+-3 1
++1 2
++2 1
+-2 1
++2 1
++28 1002
++2 1503
++2 1000
+-66 500
++1 500
++1 11982
+686 5718
+795 2000
+1101 1588
++1 4764
+-1 3176
++1 1588
++4 3176
++9 3176
++32 3176
++3 11968
++2 2992
++8 2992
++2 16456
+cfi=(172)
+cfn=(1566)
+calls=1496 30 
+* 22440
++4 4488
++15 10472
+cfn=(1568) round_and_return
+calls=1496 182 
+* 56848
+* 1496
+827 5499
+1048 3666
+523 10998
+1221 1833
++6 1833
+-6 5591
++6 92
+-6 276
++8 1925
+-20 1925
+-1 1925
++2 1925
++23 1925
+-1 1925
+-24 3850
++41 1925
+-20 1925
+-20 3850
++34 1925
++1 5775
+-1 1925
++1 5775
+cfi=(143)
+cfn=(1244)
+calls=1925 62 
+* 34650
++15 3267
++1 3267
++2 6534
+-26 6534
++3 2830
++2 5660
++8 8145
+cfi=(176) /build/buildd/eglibc-2.15/stdlib/mul.c
+cfn=(1576) __mpn_mul
+calls=905 58 
+* 51585
++4 905
++1 905
+-1 905
++1 905
++1 1810
++1 2715
++8 5775
++4 19250
+cfn=(1564)
+calls=1925 276 
+* 124848
++17 1925
++2 1925
+-2 5775
++2 3850
++4 9625
+cfi=(172)
+cfn=(1566)
+calls=1925 30 
+* 28875
++1 9625
+cfi=(172)
+cfn=(1566)
+calls=1925 30 
+* 28875
++1 5775
++13 1925
+-2 1925
++2 1925
+1581 9625
+cfn=(1568)
+calls=1925 182 
+* 86980
+* 1925
+807 39279
+411 3351
+807 3351
+411 10053
+810 3351
+-1 3351
++1 21315
+-1 14613
++1 29226
+1030 1150
++1 1725
+1313 1925
++1 1925
++5 1925
++38 3850
+-38 5775
++38 1925
+-38 1925
++38 36752
++6 1833
+-1 1833
++1 3666
+-1 1833
+-1 5499
++2 92
+-1 92
++1 184
+-1 92
+-1 276
+-4 184
+390 184
+1357 552
+389 460
+cfi=(172)
+cfn=(1566)
+calls=92 30 
+* 1380
++1 552
+1186 552
+cfi=(143)
+cfn=(1244)
+calls=92 62 
+* 1656
+* 1012
++79 4525
+cfi=(143)
+cfn=(1244)
+calls=905 62 
+* 16290
+* 1810
+
+fn=(1568)
+182 20526
++1 3421
+-1 10263
++1 3421
++56 6842
++1 4149
+fi=(175) /build/buildd/eglibc-2.15/stdlib/../stdlib/gmp.h
+448 1383
+fe=(171)
+245 2766
+fi=(175)
+449 1383
+fe=(171)
+245 1383
++10 2766
++8 6842
++3 10263
++1 17105
+-1 3421
+cfi=(173)
+cfn=(1570)
+calls=3421 40 
+* 47894
+
+fn=(1564)
+276 14052
++10 3513
+-10 7026
++13 3513
+-13 7026
++9 3513
+-9 10539
++13 3513
+-13 7026
++47 25408
++3 2700
++7 2700
++3 1350
++3 1350
+-3 2700
++1 1350
++2 1350
+-3 1350
++3 1350
+-3 5002
++3 5002
+-3 10004
++1 5002
++2 5002
+-3 5002
++3 5002
+-46 5678
++48 12039
++7 6026
++2 3013
+-2 3013
++2 3013
++2 3513
++1 3513
++12 31617
+-22 1000
++1 500
++1 500
+-2 500
++7 500
+-6 500
++6 500
+
+fl=(160) /build/buildd/eglibc-2.15/stdlib/atoi.c
+fn=(1500) atoi
+27 2
++1 6
+cfi=(148)
+cfn=(1502)
+calls=2 +82 
+* 300
++1 4
+
+fl=(155)
+fn=(1476)
+34 1
++2 1
+cfi=(156) /build/buildd/eglibc-2.15/setjmp/../sysdeps/x86_64/setjmp.S
+cfn=(1478) __sigsetjmp
+calls=1 -10 
+* 27
+
+fl=(159)
+fn=(1492)
+29 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
+
+fn=(1494) __strchr_sse42
+89 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++3 1
++1 1
++1 1
++1 1
++2 1
++2 1
++2 1
++1 1
++1 1
++1 1
++16 1
++1 1
++23 1
++1 1
+
+fl=(201)
+fn=(2172)
+29 2
++4 1
++2 2
+
+fl=(81)
+fn=(334)
+27 130
++7 13
+-7 13
++20 13
+-13 52
++7 26
++1 23
+-8 46
++2 87
++2 87
+-2 87
++1 348
++1 174
+cfi=(80)
+cfn=(336)
+calls=87 152 
+* 603
++1 174
++1 61
+-6 122
++13 10
++1 117
+
+fl=(191)
+fn=(1686)
+36 4
++2 6
++1 10
++9 4
++9 4
+-9 2
++9 2
++47 4
++4 2
+-4 2
++4 2
+
+fl=(110)
+fn=(986)
+3233 5948
+-13 5948
++13 5948
+-3 5948
++3 5948
+-13 35688
++10 5948
++3 11896
++8 11896
++1 11896
++10 59480
++7 5948
++8 5948
+-7 11896
++7 11896
++7 17844
+cfn=(956) _int_malloc
+calls=5948 3415 
+* 855514
+* 5948
++3 23792
++2 59480
++34 5948
+-3 5948
++3 23792
++10 5948
++1 11896
++1 11896
++2 11896
++7 1461
+-3 1461
++1 1461
++1 1461
++1 1461
++3 11
+-2 11
++1 11
++1 11
++3 8
+-2 8
++1 8
++1 8
++1 7
++1 14
++7 53532
+-49 4
++13 12
++15 13461
+cfi=(101)
+cfn=(778)
+calls=4487 44 
+* 151819
+* 4487
+
+fn=(1300) malloc_consolidate.part.3
+4192 16
++24 6
++2 2
++10 2
++1 4
++2 4
++1 4
+-1 36
++1 55
++26 1
++4 1
+-3 1
++1 1
++2 1
++5 1
++1 1
++1 1
+-2 1
++3 1
+-3 1
++12 2
+-41 1
+-3 1
++3 2
++4 1
+-3 1
++1 1
++2 1
+-2 1
++9 2
++3 2
++4 2
++26 20
+-90 20
++90 40
++6 16
+
+fn=(1302) sYSTRIm.isra.1
+2776 45
++10 5
++44 5
+-44 5
+-1 5
++1 5
++3 25
++2 15
++40 45
+
+fn=(1060)
+2957 74774
++1 74774
++5 74774
++5 5957
+-2 5957
++2 11914
++14 17871
++1 11914
+cfn=(1182) _int_free
+calls=5957 3906 
+* 607062
+2861 31430
+
+fn=(1182)
+3906 53748
++13 5972
+-13 5972
++13 11944
++6 23888
++1 11944
++10 11944
++13 11944
++11 5752
++1 4314
++24 4314
++3 4314
++1 2876
++1 1438
++3 1438
+-3 1438
++9 2876
+-5 2876
++10 2876
++1 4272
++1 1424
++2 4272
+-2 14
++2 4356
++2 5724
+4176 11560
+4021 9068
++1 9068
+3917 4534
+4022 9068
++18 13602
++6 4534
+-10 4534
++10 4534
++8 13602
++7 9068
+-1 4534
++2 9068
++6 13602
++4 9068
++1 3082
++2 3082
+-1 3082
++2 31558
++3 9068
++5 9058
++1 375
++1 33
++11 33
+-1 33
++2 66
+-1 4496
+-1 4496
++2 8992
++7 4529
+-2 4529
++1 4529
++1 4529
++2 355
++1 355
++3 355
++2 355
+-3 355
++3 355
++1 355
+-1 355
++31 710
+-33 4174
++2 4174
+-3 4174
++3 4174
++1 4174
+-1 4174
++31 8358
++1 20
++3 10
+4031 31689
++2 9054
++55 8992
++76 13602
++1 13581
++1 18108
++10 36216
+-51 5
++1 15
++1 10
++88 5
+cfn=(1300)
+calls=1 -23 
+* 113
+* 1
+-65 25
++2 20
+cfn=(1302)
+calls=5 2776 
+* 155
+* 5
+4048 13602
+-2 9068
+
+fn=(1258) _int_realloc
+4297 4928
++21 616
+-21 616
++21 1232
++1 1848
++11 1232
++2 616
++1 616
++1 1232
+-1 1232
++2 1232
++6 1848
++8 1232
++11 30
++2 7
+-1 14
++9 36
+cfn=(956)
+calls=9 3415 
+* 1332
++1 9
+-1 9
++1 18
++4 9
+-1 9
++6 18
++11 9
++3 18
++1 18
++2 18
++4 7
++3 7
+-3 7
++1 14
++1 14
++1 7
++1 2
++2 2
+-2 2
++1 4
++1 2
++1 1
++2 1
+-2 1
++1 2
++1 1
++8 36
+cfn=(1182)
+calls=9 3906 
+* 631
++2 9
+-55 60
++64 12
++2 12
++6 12
+-1 6
++1 12
++1 6
++4 6
+-4 18
++3 6
++1 12
+cfn=(1182)
+calls=6 3906 
+* 499
++4 6
++1 4928
+-55 2
++6 4
+cfi=(143)
+cfn=(1244)
+calls=2 62 
+* 246
+* 2
+-47 601
+-1 601
+-1 1202
++3 1202
++4 601
+-4 1803
++2 601
+-2 601
++2 601
+-2 1803
++1 1202
++1 601
++2 601
++81 6
++1 6
+-1 12
+
+fn=(942)
+2910 54
++5 18
++1 18
++3 16
++2 72
++3 24
+cfn=(956)
+calls=8 3415 
+* 1095
++1 8
+-1 8
++1 8
++18 32
++1 64
++3 56
+-30 1
++30 5
+-30 1
+cfi=(111)
+cfn=(944)
+calls=1 30 
+* 59064
+
+fn=(943)
+2910 6
++5 2
++1 2
++3 2
++2 9
++3 3
+cfn=(956)
+calls=1 3415 
+* 1124
++1 1
+-1 1
++1 1
++18 4
++1 8
++3 7
+
+fn=(1254)
+2989 5553
++7 1234
++1 1234
++4 1232
++4 1232
++5 615
+-2 615
++2 1230
++6 2460
++1 1230
++6 4920
++2 1230
++18 1845
++9 3690
++8 3075
+cfn=(1258)
+calls=615 4297 
+* 38619
+* 615
++2 2460
++1 7380
++15 5535
+-73 1
++73 7
+-73 1
+cfn=(942)
+calls=1 -95 
+* 188
+-7 1
++80 7
+-80 1
+cfi=(111)
+cfn=(1256)
+calls=1 38 
+* 145
+
+fn=(1255)
+2989 9
++7 2
++1 2
++4 2
++4 2
++5 1
+-2 1
++2 2
++6 4
++1 2
++6 8
++2 2
++18 3
++9 6
++8 5
+cfn=(1258)
+calls=1 4297 
+* 58
+* 1
++2 4
++1 12
++15 9
+
+fn=(956)
+3415 53694
++30 47728
++8 11932
++1 4404
++1 1468
++1 1468
++4 2936
+-5 8
++8 16
+-8 8
++8 24
++1 8
+-1 8
++1 16
++2 40
+3872 5958
+-1 5958
++1 11916
++26 53694
+3489 11916
++1 17871
++1 11914
++2 17871
++1 2
++36 8
++1 4
+3885 5958
+-2 5958
+3570 5958
+3885 5958
+-2 11916
++2 5958
+-2 5958
++2 11916
+3570 5958
+3885 113202
+3663 5958
+3551 11918
++65 14
++1 21
++1 7
++45 42
++7 7
+-6 7
++1 7
++1 7
++1 7
++3 7
+3551 17898
++2 10
+-1 10
++1 20
++1 20
++3 10
++10 40
++35 8
+-5 8
++1 8
++4 8
++13 14
+-46 10
+-1 20
++1 10
++4 2
++1 4
++4 2
+-2 2
+-1 4
++2 4
++1 2
++6 2
++3 2
+-3 12
++2 4
+-2 2
++2 2
++5 2
+-1 2
++1 4
++88 11912
++71 5956
++1 5956
++3 5956
+-2 5956
++2 5956
+-3 5956
++1 5956
++2 5956
+-1 17868
++6 29803
++2 71379
++2 71372
++2 1
++1 1
+-1 2
++5 1
+-5 1
++5 2
++1 1
++2 2
+-2 48
++2 96
+-3 122
++7 13
++3 26
++1 7
++1 7
++1 7
+-2 21
++60 7
++18 5950
++1 17850
++2 11900
++17 21
+4215 7
+cfn=(1300)
+calls=1 -23 
+* 140
+* 3
+3882 1
++1 1
+-1 1
+3604 1
+-1 2
++1 2
++76 2
++3 3
+3530 4
+3787 24
++3 12
++5 66
+-3 12
++6 12
++13 4
++1 8
+-6 4
++17 4
+-6 4
++1 4
++2 4
+-1 4
++4 4
++1 4
++1 8
++5 28
++2 8
+-2 4
++2 4
++1 8
+3530 2
+3800 2
+-1 2
++1 6
+4215 3
+1913 127
++1 127
+-2 127
++2 254
+-2 127
++6 3
++7 1
+-2 2
++2 2
+3866 17829
+-3 5943
++1 5943
++2 17829
++2 5943
+-2 5943
+-1 5943
++1 17829
++2 11886
+2370 6
++1 18
+-1 18
++11 6
+-11 6
++11 6
++58 6
++9 12
+-9 6
++9 41
++6 10
+-6 2
++9 18
+2742 12
++1 6
++5 12
++3 12
++4 6
+-3 6
++1 6
++2 6
+-1 6
++4 6
+-3 12
++1 6
+-1 24
++1 6
+3893 48
+2507 6
++19 6
+-19 6
++8 6
+-8 24
++19 30
++8 6
+-8 6
++8 6
++1 24
+cfi=(115) /build/buildd/eglibc-2.15/malloc/morecore.c
+cfn=(958) __default_morecore
+calls=6 48 
+* 298
+* 6
++2 30
++2 12
++1 12
++17 12
++26 12
++1 1
++1 2
++6 1
+-6 1
++6 1
+-6 10
++6 5
+-6 5
++6 15
++1 25
++2 4
++40 5
++19 1
++3 1
++1 1
+-1 1
++1 3
++2 2
++1 4
+cfi=(115)
+cfn=(958)
+calls=1 48 
+* 27
++12 3
++5 2
++1 2
++17 1
+3894 1
+2697 1
++1 1
+-2 1
++1 2
++12 1
+-12 1
++1 1
++11 1
+-84 2
+1922 3
+
+fl=(112)
+fn=(948)
+369 6
++11 1
+-8 1
++8 1
++7 2
++1 2
+-1 1
++1 10
+cfi=(68) /build/buildd/eglibc-2.15/nptl/../nptl/sysdeps/unix/sysv/linux/register-atfork.c
+cfn=(954) __linkin_atfork
+calls=1 117 
+* 9
++2 4
++16 1
+-16 1
+-58 4
++2 84
++16 42
+-18 126
+455 2
++5 2
++1 2
++2 1
++1 7
+-83 5
+cfi=(113) /build/buildd/eglibc-2.15/elf/dl-addr.c
+cfn=(950) _dl_addr
+calls=1 127 
+* 57560
+* 2
++1 3
+-47 2
++1 2
+
+fl=(77) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/multiarch/../strrchr.S
+fn=(322) __GI_strrchr
+26 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++2 2
++1 2
++1 2
++1 2
++2 1
++1 1
++1 1
++1 1
++2 1
++1 1
++1 1
++1 1
++1 1
++2 1
+
+fl=(143)
+fn=(1244)
+62 3670
++2 3670
++2 3670
++3 3661
++1 3661
++2 257
++1 257
++2 257
++1 257
++5 257
++1 257
+-1 3404
++1 3404
++2 249
++1 249
++2 249
++1 498
++5 249
++1 249
+-1 3412
++1 3412
++2 249
++1 249
++2 249
++1 249
++5 249
++1 249
+-1 3412
++1 3412
++2 3340
++1 3340
++2 3340
++1 3340
++5 3340
++1 3340
+-1 321
++1 1053
++5 732
++1 732
++1 732
++1 732
++2 732
++2 732
++1 732
++2 732
++8 3661
++8 501
++6 501
++2 501
++1 501
++3 433
++1 866
++5 433
++1 433
++2 433
++2 433
++1 433
++2 433
+-8 1305
++1 1305
++2 1305
++2 1305
++1 1305
++2 1738
++9 433
++1 433
+-1 68
++1 68
++3 501
++1 501
++1 501
++5 505
++2 505
++1 505
++1 505
++1 505
++2 505
++1 505
++1 505
++1 505
++2 505
++1 505
++2 505
++2 14
++2 14
++1 14
++1 14
++1 14
++2 14
++1 14
++1 14
++1 14
++2 14
++1 14
++2 22
++5 8
++6 8
++1 8
+-7 493
++6 493
++1 493
++2 9
+
+fl=(198)
+fn=(1876)
+28 2
++6 33
++2 2
++1 1
+
+fl=(66)
+fn=(278)
+49 2
++1 1
+
+fl=(115)
+fn=(958)
+48 7
++1 7
+cfi=(116) /build/buildd/eglibc-2.15/misc/sbrk.c
+cfn=(960) sbrk
+calls=7 -14 
+* 276
++2 21
++2 14
+
+fl=(79)
+fn=(326)
+33 3
++1 1
+
+fl=(117) /build/buildd/eglibc-2.15/misc/../sysdeps/unix/sysv/linux/x86_64/brk.c
+fn=(962) brk
+29 7
++3 49
++8 7
+-6 14
++7 7
+
+fl=(76)
+fn=(320)
+31 3
++1 1
+-1 1
++1 4
++2 3
+cfi=(77)
+cfn=(322)
+calls=1 -8 
+* 51
++4 5
++1 3
++2 4
+
+fl=(183)
+fn=(1602)
+26 2
++2 4
++1 2
+-1 2
++1 2
++26 6
++3 2
+
+fl=(119)
+fn=(1034)
+30 12
++4 2
++1 2
+-1 10
++1 2
+cfi=(120)
+cfn=(1036)
+calls=2 +66 
+* 2192
++4 4
+
+fl=(193)
+fn=(1690)
+30 4
++1 4
++1 4
++13 4
++1 4
++16 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++5 4
++1 4
++1 4
++1 4
++1 4
+
+fl=(134) /build/buildd/eglibc-2.15/misc/../sysdeps/unix/syscall-template.S
+fn=(1202) munmap
+82 16
++1 4
+
+fn=(1122) mmap
+82 25
++1 5
+
+fl=(145) /build/buildd/eglibc-2.15/libio/iovsscanf.c
+fn=(1284) vsscanf
+36 7
++6 5
+-2 1
++2 1
+cfi=(121)
+cfn=(1038)
+calls=1 648 
+* 41
++1 1
++1 4
+-1 1
++1 1
+cfi=(122)
+cfn=(1042)
+calls=1 -4 
+* 285
++1 5
+cfi=(147) /build/buildd/eglibc-2.15/stdio-common/vfscanf.c
+cfn=(1288) _IO_vfscanf
+calls=1 214 
+* 2599
++2 5
+
+fl=(104)
+fn=(792)
+28 1
+-2 1
++2 1
++2 3
++2 2
++3 2
+-5 2
++2 30
++3 30
+-5 30
++30 1
+
+fl=(129) /build/buildd/eglibc-2.15/io/../sysdeps/unix/syscall-template.S
+fn=(1088) open
+82 8
+cfn=(1090) __open_nocancel
+calls=4 * 
+* 20
+
+fn=(1132) read
+82 32
+cfn=(1134) __read_nocancel
+calls=16 * 
+* 80
+
+fn=(1702) write
+82 2
+cfn=(1704) __write_nocancel
+calls=1 * 
+* 5
+
+fn=(1090)
+82 20
+
+fn=(1134)
+82 80
+
+fn=(1704)
+82 5
+
+fn=(1200) __close_nocancel
+82 20
+
+fl=(96)
+fn=(930)
+182 14
+cob=(5)
+cfi=(109)
+cfn=(932)
+calls=2 47 
+* 46
+
+fn=(758)
+187 21
+cob=(5)
+cfi=(97)
+cfn=(760)
+calls=3 27 
+* 6
+
+fn=(830)
+56 7
+cob=(5)
+cfi=(105)
+cfn=(832)
+calls=1 -20 
+* 1814
+
+fn=(978)
+184 14
+cob=(5)
+cfi=(114)
+cfn=(952)
+calls=2 289 
+* 34
+
+fn=(846)
+62 7
+cob=(5)
+cfi=(107)
+cfn=(848)
+calls=1 -26 
+* 5
+
+fl=(137)
+fn=(1162)
+15 1
+-15 9
+
+fl=(41)
+fn=(182)
+127 1
++1 1
++4 1
++1 1
++1 1
++2 1
++1 1
++1 1
++5 1
+
+fn=(170)
+104 1
++1 1
++1 1
+cfi=(42)
+cfn=(172) __init_cpu_features
+calls=1 -53 
+* 57
++3 1
++1 1
++1 1
++2 1
++1 1
++1 1
++5 1
+
+fl=(67)
+fn=(284)
+43 1
++2 1
++3 1
+-5 1
++5 4
+cfi=(68)
+cfn=(286) __register_atfork
+calls=1 +39 
+* 50
+* 1
++19 2
++2 1
++1 2
++1 1
+-4 3
++2 53
++1 106
++1 53
+-4 159
++12 1
+-6 1
++6 2
+
+fl=(47)
+fn=(184)
+31 3
+-1 3
+fi=(44)
++15 3
+fe=(47)
+-14 6
+fi=(44)
++15 3
+fe=(47)
+-15 3
+fi=(44)
++13 3
++5 12
++1 6
++13 6
+-17 9
++3 36
++1 18
++13 18
+-17 27
++22 3
+fe=(47)
+-37 6
++3 6
+-3 3
++3 3
+cfi=(45)
+cfn=(178)
+calls=3 -7 
+* 36
++1 9
++1 6
+
+fl=(163)
+fn=(1512)
+50 3
++4 3
+-4 3
++4 3
++2 6
++1 96
++1 12
++2 6
++7 42
++1 12
++2 4
++1 64
++1 4
++1 4
++3 6
+
+fl=(132) /build/buildd/eglibc-2.15/libio/filedoalloc.c
+fn=(1116) _IO_file_doallocate
+99 25
++15 10
+-1 5
++1 25
+cfi=(127) /build/buildd/eglibc-2.15/libio/fileops.c
+cfn=(1118) _IO_file_stat
+calls=5 1246 
+* 70
+* 10
++2 20
++11 10
+-14 5
++14 10
++1 15
++3 35
+cfi=(134)
+cfn=(1122)
+calls=5 -49 
+* 30
+* 10
++1 25
+cfi=(121)
+cfn=(1044)
+calls=5 404 
+* 105
++1 5
++1 25
+-13 1
+fi=(204) /build/buildd/eglibc-2.15/libio/../sysdeps/unix/sysv/linux/sys/sysmacros.h
+-74 6
+fe=(132)
++74 1
+-2 2
++5 2
+
+fl=(95)
+fn=(724)
+26 3513
++1 3513
++1 3513
++1 3513
++1 3513
++1 3513
++1 3511
++1 3511
++1 3511
++1 3511
++1 3511
++1 2
++1 2
++1 2
++2 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++1 2
++2 3
++1 3
++1 3
++1 6
++3 3
++1 3
++1 3
++1 3
++18 1
++2 1
++1 1
++1 1
+-2 3509
++1 3509
++1 3509
++3 3
++1 3
++1 3
++1 3
+
+fl=(144)
+fn=(1282)
+29 7
++4 1
++1 1
+-1 5
++1 1
+cfi=(145)
+cfn=(1284)
+calls=1 +2 
+* 2956
++4 2
+
+fl=(167) /build/buildd/eglibc-2.15/string/../sysdeps/x86_64/memchr.S
+fn=(1540) memchr
+26 508
++1 508
++2 508
++1 508
++1 508
++1 508
++2 508
++1 508
++2 508
++1 508
++2 397
++1 397
++1 397
++1 397
++2 397
++1 395
++1 395
++1 395
++1 395
++1 395
++1 395
++1 395
++1 395
++1 389
++4 111
++1 111
++1 111
++2 111
++2 111
++2 111
++1 111
++1 111
++12 111
++1 111
++1 111
++1 109
++1 109
++1 216
++4 107
++1 107
++1 107
++1 107
++1 107
+-4 389
++1 389
++1 389
++1 389
++1 389
++2 493
++1 493
++1 493
++1 493
++1 493
++2 490
++1 490
++1 490
++1 490
++1 490
++2 396
++1 396
++1 396
++1 396
++1 396
++1 396
++88 8
++1 8
++2 4
++1 4
++1 4
++1 4
++1 4
++2 4
++1 4
++1 4
++1 4
++1 4
++2 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++2 3
++1 3
++1 3
++1 3
++6 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++2 1
++1 1
++1 1
++1 1
++1 1
++1 1
++4 396
++1 396
++1 396
++4 3
++1 3
++1 3
++4 3
++1 3
++1 3
++4 94
++1 94
++1 94
++4 2
++1 2
++1 2
++1 2
++1 2
++20 3
++1 3
++1 3
++1 3
++1 3
++4 6
++1 6
+
+fl=(174)
+fn=(1572)
+56 48
++6 12
+202 54
+
+fl=(131)
+fn=(1108)
+37 236
++1 236
+-1 236
++1 236
+-1 1652
++4 472
++2 3540
++1 944
+cfi=(121)
+cfn=(1110) _IO_sgetn
+calls=236 500 
+* 14962
+* 236
+fi=(136)
+984 708
++1 2832
+fe=(131)
+46 484
++1 1652
+
+fl=(147)
+fn=(1288)
+214 10
++11 1
+-11 2
++11 1
++1 1
+-1 1
++1 1
++88 7
++6 3
++3 5
++4 1
++31 1
+-31 1
++31 1
+-23 1
++6 1
++2 1
+-2 1
++2 2
++15 1
+-23 1
++8 1
++15 3
++5 1
++4 1
+2148 1
+269 1
+-49 1
+-1 1
+2148 1
+275 1
+-2 1
+-1 1
+-7 2
+367 1
+264 1
+-1 1
+-1 1
+-12 1
+-20 1
+-12 1
+2148 1
+367 2
++37 6
++25 3
++1 3
+-1 3
++1 3
++3 5
++23 3
+-89 9
+223 1
+2925 2
++10 7
++5 2
++3 2
++17 2
++6 9
+435 2
++40 2
+-6 2
++6 6
++49 12
++80 8
++5 8
++1 5
++3 1
++1 2
+-1 1
++1 2
++6 2
+-7 1
++1 2
+-1 1
++1 2
++6 25
++3 12
+-12 4
++13 2
+-13 2
++14 4
++4 2
+-4 10
+cfi=(121)
+cfn=(1290) _IO_sputbackc
+calls=2 727 
+* 30
++4 2
+-4 6
++4 12
+211 8
+481 6
++12 8
++4 1
+-4 1
+211 1
+493 4
+211 2
+493 4
++1 2
++20 4
++7 2
+-7 6
+-17 2
++27 10
+320 2
+2935 6
+cob=(5)
+cfi=(128)
+cfn=(1084)
+calls=1 66 
+* 10
++2 2
++1 2
+cfi=(110)
+cfn=(1060)
+calls=1 +19 
+* 272
+* 1
+1386 1
+-1 1
++9 8
++5 1
+-5 1
++5 3
++9 2
++3 4
++2 4
++1 7
++2 7
++12 5
+-27 1
++33 2
+1729 5
+-9 4
++2 2
++5 5
++57 2
++1 2
+-1 3
++27 4
+cfi=(121)
+cfn=(1290)
+calls=1 727 
+* 15
+* 2
++3 5
++11 2
+-1 1
++1 4
+-1 2
++1 1
+cfi=(148)
+cfn=(1296)
+calls=1 99 
+* 119
+* 1
++4 3
++3 3
++2 2
++4 2
++2 2
++21 3
+472 1
+1408 1
+-9 1
++9 1
++26 4
+1011 2
+1729 5
+358 7
+cob=(5)
+cfi=(128)
+cfn=(1082)
+calls=1 31 
+* 13
+* 2
+1013 3
++2 8
++10 2
+-10 1
++10 3
++71 10
+-3 20
++45 80
+1025 20
+1138 10
+1025 36
++2 4
+cfi=(121)
+cfn=(1290)
+calls=1 727 
+* 15
+1140 3
+1785 7
++57 2
++1 2
++14 10
+1413 8
+cfi=(110)
+cfn=(1254)
+calls=1 2989 
+* 214
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1171
+* 15
+cfi=(143)
+cfn=(1244)
+calls=1 62 
+* 14
+* 7
+
+fl=(127)
+fn=(1118)
+1246 5
++2 15
+cfi=(133) /build/buildd/eglibc-2.15/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c
+cfn=(1120) _fxstat
+calls=5 37 
+* 50
+
+fn=(1698) new_do_write
+526 6
++2 1
+-2 2
++2 2
++15 5
+cfn=(1700) _IO_file_write@@GLIBC_2.2.5
+calls=1 1282 
+* 44
++1 1
+-1 1
++1 2
++7 1
+-4 1
++4 1
+-4 3
++1 2
++3 1
+-2 1
++4 7
+-18 4
++9 2
++6 2
+
+fn=(1086) _IO_file_fopen@@GLIBC_2.2.5
+259 40
++11 8
++2 12
++25 4
+-10 4
++10 37
++41 3
+229 3
++1 6
+-1 3
+338 1
+229 1
++1 2
+-1 1
++4 4
+cfi=(129)
+cfn=(1088)
+calls=4 82 
+* 28
+* 4
++4 8
++3 4
+-1 4
++1 8
++1 8
+-1 4
++1 4
++7 8
+cfi=(121)
+cfn=(1080) _IO_link_in
+calls=4 104 
+* 44
+358 12
+cfi=(130) /build/buildd/eglibc-2.15/string/../string/strstr.c
+cfn=(1092) __GI_strstr
+calls=4 53 
+* 124
++1 4
+-1 4
++1 4
+-62 4
++32 1
+-32 11
+-21 4
+-1 4
+-15 8
+436 4
+-77 4
++77 28
+
+fn=(1194) _IO_file_close_it@@GLIBC_2.2.5
+163 12
++2 4
+-2 4
++2 4
++4 4
++3 4
+-3 4
+-1 8
++6 4
++3 4
+-3 4
+cfi=(121)
+cfn=(1196) _IO_unsave_markers
+calls=4 1118 
+* 20
++3 8
++4 12
++9 20
+cfi=(121)
+cfn=(1044)
+calls=4 404 
+* 156
++1 8
++3 4
+-3 4
++1 12
++2 4
+cfi=(121)
+cfn=(1192) _IO_un_link
+calls=4 64 
+* 40
++5 4
+-4 4
++1 4
++1 4
++2 4
++1 20
+-23 12
+cfn=(1198) _IO_file_close
+calls=4 1273 
+* 28
+* 8
+
+fn=(1198)
+1273 8
+cfi=(129)
+cfn=(1200)
+calls=4 82 
+* 20
+
+fn=(1676) _IO_file_overflow@@GLIBC_2.2.5
+850 88
++1 22
+-1 22
++1 44
++7 128
++35 44
++3 40
++3 20
++1 20
+-1 40
++1 40
++1 40
++4 20
++1 80
+-45 2
++12 2
++9 4
++5 2
++2 1
++1 1
+-4 1
++4 1
+-6 1
++1 1
++4 1
++1 4
++1 2
++3 2
++1 2
++11 6
+-12 2
+cfn=(1678) _IO_do_write@@GLIBC_2.2.5
+calls=2 516 
+* 108
+-31 2
+cfi=(121)
+cfn=(1114) _IO_doallocbuf
+calls=1 419 
+* 113
++1 6
+
+fn=(1678)
+516 4
+-2 4
++2 2
++1 2
+-1 1
+cfn=(1698)
+calls=1 +10 
+* 89
+* 4
++1 2
+
+fn=(1674) _IO_file_xsputn@@GLIBC_2.2.5
+1309 14
++7 7
+-7 35
++6 7
+-6 14
++6 7
++7 24
++17 5
++32 8
+cfn=(1676)
+calls=2 850 
+* 292
+* 4
++7 4
++1 12
++2 6
++11 4
++1 4
+cfi=(121)
+cfn=(1050) _IO_default_xsputn
+calls=1 452 
+* 119
+* 2
+-50 18
++4 10
+-42 5
++56 5
+-56 25
++57 15
+-1 10
++1 21
+-1 14
+-56 10
++58 5
+-58 5
++58 5
++2 15
++2 15
++28 12
++1 49
+-72 10
++1 5
+-1 5
++1 10
++3 15
++2 19
+-2 22
++2 21
++2 4
+-4 8
++31 5
+-54 10
+
+fn=(1112) _IO_file_xsgetn
+1404 1652
++7 236
+-7 236
++7 236
++11 708
++2 472
+-2 236
++2 236
++1 472
++8 16
++13 24
++9 24
++1 32
+-34 10
++2 15
++1 10
++2 699
+cfi=(143)
+cfn=(1244)
+calls=233 62 
+* 5359
++1 466
++69 466
+-1 466
++1 932
+-61 6
++5 3
+-5 3
+cfi=(135)
+cfn=(1136)
+calls=3 62 
+* 67
++6 3
+-6 6
++22 16
+cfi=(121)
+cfn=(1124) __underflow
+calls=8 335 
+* 786
+* 16
++39 6
+-1 6
++1 12
+-83 9
++5 6
+cfi=(121)
+cfn=(1114)
+calls=3 419 
+* 303
+* 3
+
+fn=(1700)
+1282 1
++2 1
+-2 7
++2 4
++11 1
++1 1
+-12 2
++5 1
+-1 3
++1 2
+cfi=(129)
+cfn=(1702)
+calls=1 82 
+* 7
++1 2
++9 3
++3 6
+-18 3
+
+fn=(1078) _IO_file_init@@GLIBC_2.2.5
+148 12
++5 4
+-1 4
+-4 4
++4 4
++3 4
+cfi=(121)
+cfn=(1080)
+calls=4 -51 
+* 460
++1 4
++1 16
+
+fn=(1126) _IO_file_underflow@@GLIBC_2.2.5
+558 64
++8 48
++6 48
++3 32
++13 32
++20 32
+cfi=(121)
+cfn=(1128) _IO_switch_to_get_mode
+calls=16 188 
+* 320
++6 16
++5 64
+-5 32
++1 16
++2 16
+-1 32
++3 16
+cfn=(1130) _IO_file_read
+calls=16 1221 
+* 208
++2 32
++10 13
+-3 13
++3 26
++2 26
++1 52
+-10 3
+-1 3
++1 3
+fi=(136)
+985 3
+fe=(127)
+634 3
+-4 3
++4 9
+-56 3
++5 2
+cfi=(121)
+cfn=(1114)
+calls=1 419 
+* 101
+* 2
+
+fn=(1206) _IO_file_finish@@GLIBC_2.2.5
+207 4
++1 4
+-1 4
++1 4
++6 8
++1 4
+-1 4
+cfi=(121)
+cfn=(1208) _IO_default_finish
+calls=4 687 
+* 96
+
+fn=(1130)
+1221 16
++3 16
+-1 16
++1 16
++1 16
+-1 16
+cfi=(129)
+cfn=(1132)
+calls=16 82 
+* 112
+
+fn=(2166) _IO_file_setbuf@@GLIBC_2.2.5
+466 2
++1 1
+cfi=(121)
+cfn=(2168) _IO_default_setbuf
+calls=1 +95 
+* 67
+* 2
++4 2
+-1 2
++2 3
++3 3
+
+fn=(2170) _IO_file_sync@@GLIBC_2.2.5
+912 1
++5 1
+-5 1
++5 3
++2 1
++1 2
++17 2
++4 2
+
+fl=(118)
+fn=(1024)
+63 2
++1 1
+
+fl=(45)
+fn=(178)
+27 12
++2 6
+-2 6
++1 12
++4 12
++18 24
+
+fl=(133)
+fn=(1120)
+37 5
+-1 5
++1 5
++1 30
++4 5
+
+fl=(125) /build/buildd/eglibc-2.15/stdio-common/_itoa.c
+fn=(1052) _itoa_word
+179 12
++7 6
++9 174
++9 6
+
+fl=(156)
+fn=(1478)
+26 1
++2 1
++1 2
++1 1
++4 1
++1 1
++1 1
++1 1
++1 1
++2 2
++2 1
++1 1
++2 2
++2 1
++9 1
+cfi=(157)
+cfn=(1480)
+calls=1 -26 
+* 9
+
+fl=(170)
+fn=(1560)
+70 14000
+cfi=(171)
+cfn=(1562)
+calls=3500 416 
+* 1816376
+
+fl=(116)
+fn=(960)
+35 35
++8 46
++4 14
++4 24
++3 6
+cfi=(117)
+cfn=(962)
+calls=6 -25 
+* 72
++1 18
++3 42
+-14 1
++1 1
+-1 1
+cfi=(117)
+cfn=(962)
+calls=1 -15 
+* 12
+* 4
+
+fl=(123)
+fn=(1046)
+211 30
++35 3
+-35 3
++35 6
+1292 10
++4 15
++11 6
++11 3
+fi=(205) /build/buildd/eglibc-2.15/stdio-common/printf-parse.h
+99 6
+fe=(123)
+1318 15
+fi=(205)
+99 3
+cfi=(124)
+cfn=(1048)
+calls=3 -72 
+* 78
+fe=(123)
+1333 3
+fi=(205)
+99 3
+fe=(123)
+1333 6
++4 12
+236 3
+1337 15
+cfi=(127)
+cfn=(1674)
+calls=1 -28 
+* 19
+cfi=(121)
+cfn=(1050)
+calls=2 452 
+* 189
+* 3
+253 3
+1337 12
++4 3
+-4 3
++4 6
++4 16
+250 2
+1322 2
+-8 2
+216 4
+1393 45
+-3 5
+-1 5
+-17 5
++1 5
++1 5
++1 5
++1 5
++1 5
++1 5
++1 5
++1 5
++1 5
++1 5
++3 5
++1 5
++7 5
+1292 4
++41 4
++1 14
+1623 158
+cfi=(127)
+cfn=(1674)
+calls=2 1309 
+* 486
+cfi=(121)
+cfn=(1050)
+calls=1 452 
+* 67
+* 9
+2029 6
+cfi=(110)
+cfn=(1060)
+calls=3 2957 
+* 21
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1058
++1 6
+cfi=(110)
+cfn=(1060)
+calls=3 2957 
+* 21
++2 15
++1 15
+cob=(5)
+cfi=(128)
+cfn=(1084)
+calls=1 66 
+* 10
++3 24
+-4 6
+1333 7
+cob=(5)
+cfi=(128)
+cfn=(1082)
+calls=1 31 
+* 13
+* 1
++1 2
++59 45
+1642 10
++8 5
+fi=(205)
+99 5
+fe=(123)
+1650 5
+fi=(205)
+99 15
+cfi=(124)
+cfn=(1048)
+calls=5 -72 
+* 115
+fe=(123)
+1654 5
+fi=(205)
+99 5
+fe=(123)
+1654 50
+cfi=(127)
+cfn=(1674)
+calls=4 1309 
+* 436
+cfi=(121)
+cfn=(1050)
+calls=1 452 
+* 87
+* 45
+-14 5
++16 10
+-12 4
+-21 36
+cfi=(125)
+cfn=(1052)
+calls=3 179 
+* 198
+* 185
+cfi=(188)
+cfn=(1680)
+calls=2 163 
+* 5051
+* 98
+
+fl=(176)
+fn=(1576)
+58 10860
++6 905
+-6 905
++6 905
++13 905
+-1 1810
++5 905
++1 1810
++9 2715
+cfi=(177)
+cfn=(1578)
+calls=905 -58 
+* 18100
+* 905
++7 905
+-5 1810
++5 905
++54 7240
+
+fl=(90)
+fn=(556)
+57 14
+-22 7
++22 35
+-22 7
+cfn=(558) __new_exitfn
+calls=7 +38 
+* 294
++2 14
++4 14
++3 7
+-1 7
++2 7
++2 7
++1 7
++11 35
+
+fn=(558)
+73 7
++6 14
+-6 21
++6 28
++2 42
++2 21
++1 30
+-3 1
++10 1
+-10 3
++13 12
++25 6
++1 6
+-1 6
++1 6
+-1 6
++7 6
++1 6
++3 12
+-4 1
++1 1
++3 16
++3 35
+-35 2
++14 1
++1 2
+-19 2
+
+fl=(113)
+fn=(950)
+127 3
++2 1
+-2 6
++5 1
+-5 2
++5 2
+cob=(5)
+cfi=(109)
+cfn=(932)
+calls=1 -85 
+* 27
++3 5
++1 4
++1 40
++1 2
+31 1
++1 1
+-1 1
++4 2
++5 1
++6 1
+-7 1
++2 3
++2 3
++3 1
++5 7
++2 1
++1 2
+-1 1010
++1 2020
++2 4890
++6 10905
++2 8724
++1 15883
++7 2181
+-2 2181
++2 7554
+-21 2022
++49 2
++1 2
++1 2
++3 2
++41 2
+cob=(5)
+cfi=(114)
+cfn=(952)
+calls=1 289 
+* 28
++3 9
+-13 21
+-19 1
++1 1
++23 2
+
+fl=(121)
+fn=(1208)
+687 8
++2 12
++6 12
++3 12
++6 4
++6 4
+-6 4
+cfn=(1192)
+calls=4 64 
+* 40
+
+fn=(2162)
+1007 1
++3 1
+-3 6
++3 1
+cfn=(2164) _IO_flush_all_lockp
+calls=1 823 
+* 88
+-59 1
++59 1
+-59 2
++11 2
+-9 12
++2 2
+-1 4
++3 3
++5 16
++45 1
+-38 5
++10 5
+cfi=(127)
+cfn=(2166)
+calls=1 466 
+* 82
++2 2
++6 3
+-36 9
++71 9
+-51 1
++4 1
+-4 1
++2 1
++1 1
++1 1
+-2 1
++3 4
++5 3
++1 11
+
+fn=(1124)
+335 8
++2 8
+-2 8
++2 19
++6 24
++3 32
++2 24
++6 16
++7 16
++1 8
+-1 16
+cfi=(127)
+cfn=(1126)
+calls=8 558 
+* 581
+-24 10
++22 16
+
+fn=(1128)
+188 32
+-1 32
++1 16
++3 48
++5 16
+-1 32
++1 16
++7 16
+-4 16
++2 32
++2 16
++1 16
++1 32
+
+fn=(1196)
+1118 8
++19 8
++1 4
+
+fn=(2164)
+823 1
++6 1
+-6 7
++6 2
++6 1
+-11 1
++10 1
++2 2
++4 2
+-1 3
+-1 3
++1 3
++3 9
++10 6
++4 3
+-2 3
++2 6
++7 3
+-27 6
++31 2
++2 2
++4 9
+-31 12
+
+fn=(1050)
+452 5
++4 5
+-1 5
+-3 30
++3 20
++5 28
++2 12
++3 8
++10 8
+-27 4
++31 4
+-31 4
++31 4
+-31 8
++32 12
+-1 8
++1 81
+-1 54
++2 4
+-2 4
++2 4
++2 4
++2 22
+cfi=(127)
+cfn=(1676)
+calls=2 850 
+* 62
+* 6
++2 2
++1 2
++1 10
++1 30
+-42 12
+
+fn=(1080)
+104 32
++1 24
++4 4
+-2 8
++2 8
++1 40
++2 4
+-2 4
++1 4
++1 4
+-2 4
++2 4
+-2 4
++2 52
++2 4
+-2 4
++4 4
++2 4
+-3 4
+-1 4
++4 28
++2 4
+-1 4
++1 32
++1 32
+cob=(5)
+cfi=(128)
+cfn=(1084)
+calls=4 -55 
+* 40
++3 32
+-15 28
+cob=(5)
+cfi=(128)
+cfn=(1082)
+calls=4 -78 
+* 52
+* 4
++9 28
+
+fn=(1114)
+419 5
++1 5
+-1 5
++1 5
++6 10
+-4 10
++1 15
+cfi=(132)
+cfn=(1116)
+calls=5 99 
+* 452
+* 10
+
+fn=(1192)
+64 48
++1 24
++4 12
++1 40
++2 4
+-2 4
++1 4
++1 64
++2 12
++2 8
++14 8
++2 4
+-2 4
++2 28
++2 4
+-1 4
++1 36
++1 32
+cob=(5)
+cfi=(128)
+cfn=(1084)
+calls=4 -29 
+* 40
++3 48
+-29 28
+cob=(5)
+cfi=(128)
+cfn=(1082)
+calls=4 -38 
+* 52
+* 4
++23 24
+-13 4
++1 4
+-1 8
+
+fn=(2168)
+562 5
++1 1
+-1 2
++1 1
+cfi=(127)
+cfn=(2170)
+calls=1 912 
+* 13
+* 2
++2 2
++2 1
++1 5
+cfn=(1044)
+calls=1 404 
+* 23
++7 3
++1 3
++2 6
+
+fn=(1044)
+404 52
++1 13
+-1 13
++1 49
++3 13
++2 52
+-3 13
++3 13
++3 13
+-1 13
++1 39
+-7 28
+cfi=(134)
+cfn=(1202)
+calls=4 82 
+* 20
+* 16
+
+fn=(1536) __uflow
+368 8
++2 8
+-2 8
++2 16
++6 24
++3 32
++2 24
++6 16
++7 16
++1 8
+-1 16
+cfn=(1538) _IO_default_uflow
+calls=8 +46 
+* 788
+-24 16
++22 16
+
+fn=(1038)
+648 63
++1 7
+cfn=(1040) _IO_old_init
+calls=7 -13 
+* 159
++3 7
+-2 7
++2 7
++2 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++1 4
++2 4
++3 4
++1 24
+-1 3
++1 18
+
+fn=(1040)
+636 7
+-21 7
++1 7
+-1 7
++2 7
++1 7
++1 7
++17 7
+-16 7
++1 7
++1 7
++1 7
++1 7
++1 7
++2 7
++1 7
++1 7
++1 7
++1 7
++5 7
++1 19
+
+fn=(1538)
+440 8
+-1 16
++1 8
+cfi=(127)
+cfn=(1126)
+calls=8 558 
+* 692
++1 16
++2 32
++1 16
+
+fn=(1696)
+246 54
++2 54
+cfi=(127)
+cfn=(1676)
+calls=18 850 
+* 558
+
+fn=(1110)
+500 708
+cfi=(127)
+cfn=(1112)
+calls=236 1404 
+* 14254
+
+fn=(1290)
+727 4
++3 4
+-3 4
++3 8
++1 12
++9 4
++3 8
+-10 4
++1 4
+-1 8
+
+fl=(149)
+fn=(1298)
+232 27
++26 3
+-12 3
++12 3
++22 3
+-1 3
++10 24
++9 18
++2 3
+-2 3
++2 3
++5 6
++5 3
+-6 3
++6 3
++4 6
++10 4
++7 6
++48 6
++59 3
+-59 3
++1 9
++58 3
++2 6
++16 3
+-16 9
++38 3
+-22 6
+-14 21
++7 2
+-9 8
++49 6
++1 1
++5 6
++3 12
+-2 6
++17 18
++18 24
+334 12
+-82 3
+376 6
++90 4
++4 18
++3 24
++5 6
++1 18
+-41 26
++46 6
+316 6
+
+fl=(68)
+fn=(286)
+87 1
++2 1
+-2 5
++2 1
+-2 1
++2 4
+-44 1
++37 1
+-30 2
++1 3
++19 3
++1 1
++1 1
++22 1
++1 1
++1 1
++1 2
++18 2
++2 4
+-1 2
+-13 4
++2 2
++1 3
+-1 1
++1 2
+
+fn=(954)
+117 2
++2 4
+-1 2
++2 1
+
+fl=(189)
+fn=(1682)
+31 2
+-1 2
++1 2
++1 4
++1 2
++1 2
+
+fl=(78)
+fn=(324)
+33 7
++2 4
++2 4
++1 1
+
+fl=(166)
+fn=(1534) _IO_getline_info
+63 5010
++2 501
+-2 1503
++2 501
++2 1503
++2 2505
++28 508
++2 1016
+-2 508
++2 1016
+cfi=(167)
+cfn=(1540)
+calls=508 -73 
+* 23699
++1 508
+-1 508
++1 508
++14 21
++3 7
+-1 7
+-2 7
+cfi=(143)
+cfn=(1244)
+calls=7 -52 
+* 265
++1 7
+-46 14
++2 1548
++1 1032
++2 16
+cfi=(121)
+cfn=(1536)
+calls=8 368 
+* 996
++1 16
++6 16
++11 8
+-1 16
+-22 16
++34 501
++1 501
+-2 501
++1 501
+-1 501
++2 1002
++2 501
++2 1002
++2 2505
+cfi=(143)
+cfn=(1244)
+calls=501 -48 
+* 40343
++1 501
++1 501
+-1 501
++10 4008
+-53 2
+
+fn=(1532)
+42 1002
+cfn=(1534)
+calls=501 +21 
+* 97157
+
+fl=(126)
+fn=(1072) __fopen_internal
+68 28
++8 4
+-8 4
++8 4
+cfi=(110)
+cfn=(942)
+calls=4 2910 
+* 690
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 -45 
+* 1031
++2 4
+-2 4
++2 4
++3 4
++3 20
+-3 4
++3 4
+cfi=(121)
+cfn=(1038)
+calls=4 648 
+* 228
++4 4
++1 4
+-1 4
++1 4
+cfi=(127)
+cfn=(1078)
+calls=4 +59 
+* 512
++4 20
+cfi=(127)
+cfn=(1086)
+calls=4 259 
+* 469
+* 4
++2 4
+-2 4
++7 20
+-5 4
+cfn=(1094) __fopen_maybe_mmap
+calls=4 -50 
+* 16
+
+fn=(1070)
+107 8
+cfn=(1072)
+calls=4 -39 
+* 3102
+
+fn=(1094)
+45 4
+-2 4
++2 4
++15 4
+
+fl=(141)
+fn=(1190)
+43 12
++14 4
+-14 4
++14 12
++3 68
++4 12
+-3 8
+fi=(136)
+984 8
++1 24
+fe=(141)
+66 16
+cfi=(127)
+cfn=(1206)
+calls=4 207 
+* 128
++1 12
++18 24
++2 4
++1 8
+cfi=(110)
+cfn=(1060)
+calls=4 2957 
+* 542
++4 20
+-10 8
+-20 8
+cfi=(127)
+cfn=(1194)
+calls=4 163 
+* 432
+* 12
+-4 4
+cfi=(121)
+cfn=(1192)
+calls=4 +6 
+* 472
+* 12
+fi=(136)
+985 24
+fe=(141)
+
+fl=(42)
+fn=(172)
+53 1
+-8 1
++8 1
++3 1
+-3 1
++3 5
++91 2
++12 1
++1 1
++2 1
++1 2
+-98 1
+-33 2
++6 1
+-6 2
++6 1
++1 1
++30 1
+-30 1
++30 1
+-37 1
++6 1
++27 1
+-26 1
++26 1
++4 1
++1 1
+-38 2
++33 1
++5 1
++5 1
++2 1
+-2 1
++3 1
++1 2
++33 1
+-54 1
++54 1
++4 1
+-37 8
+
+fn=(204)
+170 36
++4 24
+
+fl=(130)
+fn=(1092)
+53 36
++10 17
+-5 2
++6 5
+-1 3
++2 8
++24 36
+-15 8
+-11 3
+-5 6
+
+ob=(12)
+fl=(89)
+fn=(548) std::error_category::error_category()
+0 12
+
+fn=(620)
+0 49
+
+fn=(506) 0x000000000005b0d0
+0 5
+
+fn=(516) 0x000000000005aa90
+0 21
+
+fn=(540)
+0 3
+cfn=(548)
+calls=1 0 
+0 4
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1670
+0 7
+cob=(3)
+cfi=(90)
+cfn=(556)
+calls=1 57 
+0 65
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1759
+0 2
+cfn=(548)
+calls=1 0 
+0 4
+0 7
+cob=(3)
+cfi=(90)
+cfn=(556)
+calls=1 57 
+0 65
+
+fn=(1994)
+0 3
+cfn=(1990) std::error_category::~error_category()
+calls=1 0 
+0 4
+
+fn=(530) 0x000000000005b120
+0 5
+
+fn=(564)
+0 2
+cfn=(566) 0x000000000006d040
+calls=1 0 
+0 3290
+0 4
+
+fn=(574) __cxa_guard_acquire
+0 28
+
+fn=(488)
+0 6
+
+fn=(594)
+0 49
+
+fn=(482)
+0 6
+
+fn=(494)
+0 11
+
+fn=(646)
+0 54
+
+fn=(1974)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 1705
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(1990)
+0 12
+
+fn=(500)
+0 39
+cfn=(530)
+calls=1 0 
+0 5
+0 4
+cfn=(516)
+calls=1 0 
+0 21
+0 7
+cfn=(506)
+calls=1 0 
+0 5
+0 22
+
+fn=(566)
+0 5
+cfn=(574)
+calls=1 0 
+0 28
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1599
+0 4
+cfn=(548)
+calls=1 0 
+0 4
+0 4
+cfn=(586) __cxa_guard_release
+calls=1 0 
+0 7
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1567
+0 4
+cob=(3)
+cfi=(90)
+cfn=(556)
+calls=1 57 
+0 65
+0 3
+
+fn=(648)
+0 21
+
+fn=(1984)
+0 3
+cfn=(1990)
+calls=1 0 
+0 4
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1549
+
+fn=(586)
+0 7
+
+fn=(1992)
+0 3
+cfn=(1990)
+calls=1 0 
+0 4
+
+ob=(13)
+fl=(91)
+fn=(662)
+0 6
+
+fn=(656)
+0 6
+
+fn=(668)
+0 11
+
+fn=(1954)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+ob=(20)
+fl=(158)
+fn=(1486) IntegerArgument
+206 8
++1 6
++6 10
+cob=(3)
+cfi=(159)
+cfn=(1494)
+calls=1 89 
+* 23
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1615
+* 1
++1 2
++18 9
+cob=(3)
+cfi=(160)
+cfn=(1500)
+calls=1 27 
+* 141
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1478
+* 1
++1 2
++5 3
++1 5
++2 4
++1 2
+
+fn=(1482)
+40 5
++2 3
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++1 1
++3 2
++9 5
+cfn=(1484) HandleArguments
+calls=1 +41 
+* 3419
++3 3
++9 3
+cob=(3)
+cfi=(161)
+cfn=(1508)
+calls=1 -35 
+* 147
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 -45 
+* 1718
++1 3
+cfi=(153)
+cfn=(1514) atexit
+calls=1 -77 
+* 1830
++1 3
+cfi=(153)
+cfn=(1514)
+calls=1 -78 
+* 71
++1 4
+cfi=(164)
+cfn=(1520) System_Init
+calls=1 +76 
+* 2485696
++3 3
+cob=(16)
+cfi=(142)
+cfn=(1222)
+calls=1 -82 
+* 3
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 -51 
+* 2040
+* 2
++6 1
+cob=(3)
+cfi=(178)
+cfn=(1592)
+calls=1 -62 
+* 65
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 -57 
+* 1422
+* 1
++1 5
+cfi=(184) /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/nbody.c
+cfn=(1604) Simulation_Run
+calls=1 -63 
+* 1299271874
++5 2
+cob=(3)
+cfi=(186)
+cfn=(1662)
+calls=1 +6 
+* 64447
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 -63 
+* 1577
+
+fn=(1484)
+105 5
++1 2
++2 24
++4 3
++1 6
++9 1
++2 24
++16 7
+cfn=(1486)
+calls=1 +66 
+* 3310
++1 3
++15 4
++1 1
+-11 2
+-40 25
++87 2
+
+fl=(153)
+fn=(1514)
+0 12
+cob=(3)
+cfi=(90)
+cfn=(556)
+calls=2 57 
+0 130
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1759
+
+fn=(1464)
+0 6
+
+fn=(1458)
+0 6
+
+fn=(1470)
+0 11
+
+fn=(1444)
+0 11
+cob=(3)
+cfi=(154)
+cfn=(1452)
+calls=1 96 
+0 1301834567
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1822
+
+fn=(1454)
+0 15
+cob=(2)
+cfi=(14)
+cfn=(1456)
+calls=1 0 
+0 29
+0 10
+
+fn=(1714)
+0 18
+
+fl=(185) /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/tree.c
+fn=(1624) Node_AddBody
+166 202585
++1 40517
++1 81034
++2 24509352
++2 270795
++1 193425
++1 77370
+-6 15286988
++12 10992
++1 7328
++2 8694
+cob=(3)
+cfi=(110)
+cfn=(986)
+calls=1449 3233 
+* 329764
+* 5796
++3 3447
+cob=(3)
+cfi=(110)
+cfn=(1254)
+calls=383 2989 
+* 54654
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1711
+* 766
++1 5362
+cob=(3)
+cfi=(101)
+cfn=(778)
+calls=383 44 
+* 9776
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1695
++5 12824
++1 9160
++1 1832
++2 81034
+
+fn=(1636) Node_SetSpace
+7 166520
++1 66608
++2 699384
++1 699384
+-3 366344
++5 66608
+
+fn=(1640) Node_CalculateMass
+241 40
++1 30
++1 40
++3 40
++10 20
++1 150
+-1 110
++3 20
++2 480
++2 480
+cfn=(1641) Node_CalculateMass'2
+calls=80 -22 
+* 3893620
+* 80
++1 400
++1 160
++1 4080
+-1 880
+-6 260
++10 20
++1 330
+-1 110
++4 40
++1 20
+
+fn=(1641)
+241 121632
++1 91224
++1 121632
++1 42510
++2 36612
++2 21448
+cfn=(1642) Node_Body
+calls=5362 356 
+* 187670
+* 5362
++1 32172
++1 10724
++1 144774
+-1 58982
++3 16086
++3 7582
++1 56865
+-1 41701
++3 7582
++2 181968
++2 181968
+cfn=(1641)
+calls=30328 -22 
+* 12716645
+* 30328
++1 151640
++1 60656
++1 1546728
+-1 333608
+-6 98566
++10 7582
++1 125103
+-1 41701
++4 15164
++1 7582
+-1 53234
++1 53234
+
+fn=(1620) Node_FindBodies
+53 166665
++3 133332
++2 19782
++1 363348
+-1 342354
++3 66666
++2 133332
++2 58
++2 174000
+cfn=(1622) Node_ContainsBody
+calls=14500 417 
+* 1295796
+* 29000
++1 135600
+cfn=(1624)
+calls=11300 +98 
+* 36440557
+-3 72645
++8 66608
++2 4041488
+cfn=(1622)
+calls=367408 417 
+* 15299946
+* 734816
++1 321387
+cfn=(1624)
+calls=29217 +90 
+* 4766344
+-3 2370968
++7 66666
++1 66666
+
+fn=(1650) Update_Tree
+232 50
++1 50
+cfn=(1618) Node_FitSystem
+calls=10 -13 
+* 17124090
++2 50
+cfn=(1634) Node_Subdivide
+calls=10 90 
+* 46249411
++1 20
++1 20
+
+fn=(1614) Node_Create
+331 17956
++1 13467
+cob=(3)
+cfi=(110)
+cfn=(986)
+calls=4489 3233 
+* 1137064
+* 4489
++2 13467
++12 4489
++2 8978
+
+fn=(1622)
+417 1527632
++1 763816
++1 273136
++1 490680
++2 6198080
++1 4924048
++1 409646
+-4 1204371
++6 40517
++1 763816
+
+fn=(1618)
+220 55
++1 11
++2 14
++2 147
++1 147
+-3 77
+-2 90
+cfn=(1620)
+calls=18 53 
+* 19433811
+* 72
++8 22
+
+fn=(1616) Generate_Tree
+204 5
++1 2
++2 12
++1 12
+-3 11
++6 5
+cfn=(1618)
+calls=1 +9 
+* 2310356
++3 5
+cfn=(1634)
+calls=1 90 
+* 7006303
++2 2
++1 2
+
+fn=(1652) Node_Destroy
+22 4
++2 2
++5 4
++2 4
+cob=(3)
+cfi=(110)
+cfn=(1060)
+calls=1 2957 
+* 120
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 * 
+* 1577
++1 2
++2 2
++1 2
++2 2
++2 48
+cfn=(1653) Node_Destroy'2
+calls=8 -17 
+* 1980747
++1 48
+cob=(3)
+cfi=(110)
+cfn=(1060)
+calls=8 2957 
+* 1119
++1 32
+-4 27
++7 2
+
+fn=(1653)
+22 143648
++2 71824
++5 17952
++2 5792
+cob=(3)
+cfi=(110)
+cfn=(1060)
+calls=1448 2957 
+* 122594
++1 2896
++2 2896
++1 2896
++2 2896
+-3 6080
++1 6080
++2 6080
++2 215424
+cfn=(1653)
+calls=35904 -17 
+* 8545638
++1 215424
+cob=(3)
+cfi=(110)
+cfn=(1060)
+calls=35904 2957 
+* 790225
++1 143616
+-4 121176
+-12 31424
++19 71824
+
+fn=(1634)
+90 55
++1 55
+cfn=(1620)
+calls=11 -38 
+* 18836312
+* 22
++2 11
++2 22
++1 231
+-1 121
++3 22
++2 528
++1 24
+cfn=(1614)
+calls=8 331 
+* 2278
+* 32
++3 440
++3 33
++1 33
++1 33
++1 11
++2 55
++1 33
++1 33
++1 11
++2 33
++1 55
++1 33
++1 11
++2 33
++1 33
++1 55
++1 11
++2 55
++1 55
++1 33
++1 11
++2 55
++1 33
++1 55
++2 11
++2 33
++1 55
++1 55
++1 11
++2 55
++1 55
++1 55
++1 11
++3 99
+cfn=(1636)
+calls=11 7 
+* 682
+* 693
+cfn=(1636)
+calls=77 7 
+* 4774
++1 704
+cfn=(1635) Node_Subdivide'2
+calls=88 -60 
+* 34406882
+* 88
++1 176
+-53 286
++55 11
++1 22
+
+fn=(1635)
+90 166520
++1 166520
+cfn=(1620)
+calls=33304 -38 
+* 28837901
+* 66608
++1 87456
++1 4152
++2 8304
++1 87192
+-1 45672
++3 8304
++2 199296
++1 13440
+cfn=(1614)
+calls=4480 331 
+* 1197285
+* 17920
++3 166080
++3 12456
++1 12456
++1 12456
++1 4152
++2 20760
++1 12456
++1 12456
++1 4152
++2 12456
++1 20760
++1 12456
++1 4152
++2 12456
++1 12456
++1 20760
++1 4152
++2 20760
++1 20760
++1 12456
++1 4152
++2 20760
++1 12456
++1 20760
++2 4152
++2 12456
++1 20760
++1 20760
++1 4152
++2 20760
++1 20760
++1 20760
++1 4152
++3 37368
+cfn=(1636)
+calls=4152 7 
+* 257424
+* 261576
+cfn=(1636)
+calls=29064 7 
+* 1801968
++1 265728
+cfn=(1635)
+calls=33216 -60 
+* 78777867
+* 33216
++1 66432
+-53 107952
++55 4152
++1 66608
+
+fn=(1642)
+356 10745448
++1 2686362
++1 2686362
++1 5372724
++2 21490896
++1 2686362
++1 8059086
++2 18804534
++1 2686362
+-7 10745448
++11 2686362
++1 5372724
+
+fn=(1644) Node_Forces
+277 30000
++1 20000
++3 85000
++5 10000
++2 20000
++17 35000
++14 5000
++1 10000
++2 240000
++2 360000
+cfn=(1645) Node_Forces'2
+calls=40000 -47 
+* 1218628564
+* 40000
+-4 130000
++7 5000
++1 10000
+
+fn=(1645)
+277 91224000
++1 60816000
++1 21255000
++2 77800500
++5 9153000
++2 18306000
++2 10724000
+cfn=(1642)
+calls=2681000 +66 
+* 93835000
+* 2681000
++1 8043000
++1 10724
++2 5351276
++1 184619022
+-1 29432018
++3 34783294
++1 26756380
++1 8026914
++1 5351276
++1 152511366
+-1 29432018
++2 5351276
++3 13268500
++14 1895500
++1 3791000
++2 90984000
++2 136476000
+cfn=(1645)
+calls=15164000 -47 
+* 4651568394
+* 15164000
+-4 49283000
++7 1895500
++1 30408000
+
+fl=(164)
+fn=(1638) ExitCondition
+270 33
++1 11
++1 33
+-1 22
++1 44
++1 10
+-1 32
+-1 10
++4 10
++1 20
+-5 1
++4 1
++1 2
+
+fn=(1520)
+155 8
++5 5
+cob=(3)
+cfi=(126)
+cfn=(1070)
+calls=1 -53 
+* 544
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1635
+* 1
++1 5
+cob=(3)
+cfi=(165)
+cfn=(1530)
+calls=1 37 
+* 414
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1558
+* 2
+cob=(3)
+cfi=(160)
+cfn=(1500)
+calls=1 27 
+* 171
+* 3
++1 6
+cob=(3)
+cfi=(110)
+cfn=(986)
+calls=1 3233 
+* 3999
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1498
+* 3
++1 2
++4 2
++2 2500
+cob=(3)
+cfi=(165)
+cfn=(1530)
+calls=500 37 
+* 132314
+* 1000
++2 4500
++1 2500
+cob=(3)
+cfi=(168)
+cfn=(1552)
+calls=500 69 
+* 48501
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1660
+* 500
++1 1500
+cob=(3)
+cfi=(169)
+cfn=(1558)
+calls=500 28 
+* 188011
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1502
+* 1000
++2 1000
++2 6000
+cob=(3)
+cfi=(168)
+cfn=(1552)
+calls=1500 69 
+* 173046
+* 1500
++1 4500
+cob=(3)
+cfi=(169)
+cfn=(1558)
+calls=1500 28 
+* 697374
+* 4500
+-3 5500
++5 1000
++2 6000
+cob=(3)
+cfi=(168)
+cfn=(1552)
+calls=1500 69 
+* 169462
+* 1500
++1 4500
+cob=(3)
+cfi=(169)
+cfn=(1558)
+calls=1500 28 
+* 951991
+* 6000
+-3 5500
++7 500
++1 2000
+cob=(3)
+cfi=(168)
+cfn=(1552)
+calls=500 69 
+* 41500
+* 500
+-1 2000
+-20 2504
++28 3
+cob=(3)
+cfi=(141)
+cfn=(1190)
+calls=1 43 
+* 452
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1515
++1 5
+
+fn=(1666)
+245 3
++1 1
+cob=(3)
+cfi=(178)
+cfn=(1592)
+calls=1 26 
+* 65
+* 1
++2 4
+cob=(16)
+cfi=(142)
+cfn=(1222)
+calls=1 0 
+* 3
+* 2
++5 22
++1 9
++1 14
+cob=(3)
+cfi=(187)
+cfn=(1672)
+calls=1 30 
+* 7090
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+* 1698
++1 2
+
+fn=(1706)
+204 3
++2 3
++26 3
+cob=(3)
+cfi=(110)
+cfn=(1060)
+calls=1 2957 
+* 132
++2 2
+
+fn=(1648) Body_Position
+96 15000
++1 10000
++1 195000
+-1 55000
++2 10000
+
+fn=(1646) Body_Velocity
+85 15000
++1 10000
++1 270000
+-1 55000
++2 10000
+
+fl=(184)
+fn=(1604)
+26 5
++2 3
++1 1
+cob=(15)
+cfi=(93)
+cfn=(1610)
+calls=1 -29 
+* 8
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 +2 
+* 1732
+* 1
++2 3
++28 1
+cfn=(1612) Compute
+calls=1 +8 
+* 1299270118
++4 2
+
+fn=(1612)
+67 3
++1 2
+cfi=(185)
+cfn=(1614)
+calls=1 331 
+* 347
+* 1
++2 4
+cfi=(185)
+cfn=(1616)
+calls=1 204 
+* 9316715
++2 1
++2 30
+cfi=(185)
+cfn=(1640)
+calls=10 241 
+* 3901410
++1 20
++2 10000
++1 165000
+-1 55000
++2 60000
+cfi=(185)
+cfn=(1644)
+calls=5000 277 
+* 1219628564
++1 45000
+cfi=(164)
+cfn=(1646)
+calls=5000 +5 
+* 360000
+-5 20030
++8 20
++3 45000
+cfi=(164)
+cfn=(1648)
+calls=5000 +10 
+* 285000
+-3 20030
++6 40
+cfi=(185)
+cfn=(1650)
+calls=10 232 
+* 63373691
++2 30
++1 30
+-20 11
+cfi=(164)
+cfn=(1638)
+calls=11 270 
+* 229
+* 33
++26 3
+cfi=(185)
+cfn=(1652)
+calls=1 -76 
+* 1983742
++1 3
+cob=(3)
+cfi=(110)
+cfn=(1060)
+calls=1 2957 
+* 127
++1 2
+
+ob=(8)
+fl=(84)
+fn=(2104)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(386)
+0 6
+
+fn=(380)
+0 6
+
+fn=(392)
+0 11
+
+fl=(200)
+fn=(2100) check_free
+188 3
++1 3
++12 3
+
+fn=(2098)
+208 2
+cfn=(2100)
+calls=1 -20 
+* 9
+
+fl=(85)
+fn=(398)
+30 1
++1 1
++1 1
+
+ob=(11)
+fl=(88)
+fn=(2022)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1895
+0 13
+
+fn=(448)
+0 6
+
+fn=(442)
+0 6
+
+fn=(454)
+0 11
+
+ob=(19)
+fl=(152)
+fn=(1430)
+0 6
+
+fn=(1724)
+0 10
+cob=(3)
+cfi=(196)
+cfn=(1736)
+calls=1 31 
+0 86
+cob=(1)
+cfi=(49)
+cfn=(198)
+calls=1 31 
+0 1296
+0 13
+
+fn=(1424)
+0 6
+
+fn=(1436)
+0 11
+
+totals: 1305015743
diff --git a/course/semester2/pprog/assignment1/nbody-bh/cubes.png b/course/semester2/pprog/assignment1/nbody-bh/cubes.png
new file mode 100644 (file)
index 0000000..436c74d
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/cubes.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/efficiency.png b/course/semester2/pprog/assignment1/nbody-bh/efficiency.png
new file mode 100644 (file)
index 0000000..955b363
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/efficiency.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/error.png b/course/semester2/pprog/assignment1/nbody-bh/error.png
new file mode 100644 (file)
index 0000000..3e56ae8
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/error.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/error2.png b/course/semester2/pprog/assignment1/nbody-bh/error2.png
new file mode 100644 (file)
index 0000000..ddd3299
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/error2.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/error3.png b/course/semester2/pprog/assignment1/nbody-bh/error3.png
new file mode 100644 (file)
index 0000000..18876db
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/error3.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/error_graph.png b/course/semester2/pprog/assignment1/nbody-bh/error_graph.png
new file mode 100644 (file)
index 0000000..6f5fb54
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/error_graph.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/error_zoom.png b/course/semester2/pprog/assignment1/nbody-bh/error_zoom.png
new file mode 100644 (file)
index 0000000..8225d32
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/error_zoom.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/graphics.c b/course/semester2/pprog/assignment1/nbody-bh/graphics.c
new file mode 120000 (symlink)
index 0000000..6fc2284
--- /dev/null
@@ -0,0 +1 @@
+../single-thread/graphics.c
\ No newline at end of file
diff --git a/course/semester2/pprog/assignment1/nbody-bh/graphics.h b/course/semester2/pprog/assignment1/nbody-bh/graphics.h
new file mode 120000 (symlink)
index 0000000..aebee13
--- /dev/null
@@ -0,0 +1 @@
+../single-thread/graphics.h
\ No newline at end of file
diff --git a/course/semester2/pprog/assignment1/nbody-bh/graphics.o b/course/semester2/pprog/assignment1/nbody-bh/graphics.o
new file mode 100644 (file)
index 0000000..d2bec61
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/graphics.o differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/kcachegrind.png b/course/semester2/pprog/assignment1/nbody-bh/kcachegrind.png
new file mode 100644 (file)
index 0000000..f989d1c
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/kcachegrind.png differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/main.c b/course/semester2/pprog/assignment1/nbody-bh/main.c
new file mode 120000 (symlink)
index 0000000..37e5985
--- /dev/null
@@ -0,0 +1 @@
+../single-thread/main.c
\ No newline at end of file
diff --git a/course/semester2/pprog/assignment1/nbody-bh/main.c~ b/course/semester2/pprog/assignment1/nbody-bh/main.c~
new file mode 100644 (file)
index 0000000..e9bb3ac
--- /dev/null
@@ -0,0 +1,296 @@
+/**
+ * @file main.c
+ * @author Sam Moore (20503628) - 2012
+ * @purpose Contains main function, argument handling
+ * NOTE: This file is identical for both the single-threaded and multi-threaded versions of the program
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <signal.h>
+#include <string.h> // For parsing arguments
+
+#include "nbody.h"
+#include "graphics.h"
+
+// --- Variable definitions --- //
+System universe; // global variable declared in "nbody.h" - The universe of bodies
+Options options; // global variable declared in "nbody.h" - Options passed to program through arguments
+
+
+// --- Function forward declarations --- //
+void HandleArguments(int argc, char ** argv); //Interprets program arguments and sets up the "options" variable
+unsigned IntegerArgument(unsigned * i, int argc, char ** argv, int * store, int * store2); //Helper function to get integer switch
+void FloatArgument(unsigned * i, int argc, char ** argv, float * store); //Helper function to get switch value for float
+void DisplayStatistics(); //Called on exit of program, displays information about computation time, steps computed, etc
+void Interrupt(int dummy); // Interrupt handler function, called when SIGINT (Ctrl-C) is sent to program
+
+
+// --- Function implementations --- //
+
+/**
+ * @function main
+ * @purpose The main function. Calls HandleArguments to set up options, 
+ *             sets up functions to call at exit, starts simulation and graphics loops
+ * @param argc - Number of arguments
+ * @param argv - The argument strings
+ */
+int main(int argc, char** argv)
+{
+       //Set default options values here
+       options.program = argv[0];
+       options.input = NULL;
+       options.output = NULL;
+       options.num_threads = 0;
+       options.nested_threads = 0;
+       options.num_steps = -1; // Negative values => simulation runs forever unless otherwise specified
+       options.timeout = -1;
+       options.draw_graphics = true;
+       options.pedantic_graphics = false;
+       options.print_positions = false;
+       options.verbosity = 0;
+       options.theta = 0.50;
+
+       //If there are no arguments, print information about usage
+       if (argc == 1)
+       {
+               printf("Usage: %s [OPTIONS] field\n", argv[0]);
+               printf("Controls:\n X - exit\n I, J, K, M - rotate\n W, Z, A, S - move to view"
+                       " point\n ./, - zoom in/out\n +/- - scaled zoom in/out\n");
+               exit(EXIT_SUCCESS);
+       }
+
+       //Parse the arguments
+       HandleArguments(argc, argv);
+       
+       //Check there is an initial field.
+       if (options.input == NULL)
+       {
+               fprintf(stderr, "Usage: %s [OPTIONS] field\n", argv[0]);
+               fprintf(stderr, " (You did not provide a file for the initial field of bodies)\n");
+               exit(EXIT_FAILURE);
+       }
+
+
+
+       signal(SIGINT, Interrupt); //Handle SIGINT signals
+       atexit(Universe_Cleanup); //On exit, cleanup universe (and write positions of bodies to file if supplied).
+       atexit(DisplayStatistics); //On exit, print information about the computations done
+       System_Init(&universe,options.input); //Initialise the universe from the initial field
+       
+       //Setup the time of day at which the simulation starts
+       if (gettimeofday(&(options.start_time), NULL) != 0)
+       {
+               perror("Couldn't get time of day");
+               exit(EXIT_FAILURE);
+       }
+       
+       options.start_clock = clock(); //Get CPU cycles executed before simulation starts
+       Simulation_Run(argc, argv); // Start the simulation
+       
+       //printf("Main thread done!\n");
+       
+       //pthread_exit(NULL);
+       exit(EXIT_SUCCESS); //Should never get to this line
+}
+
+
+/**
+ * @function HandleArguments
+ * @purpose Fill the "options" variable by parsing command line arguments
+ * @param argc - Number of arguments
+ * @param argv - Argument strings
+ */
+void HandleArguments(int argc, char ** argv)
+{
+       for (unsigned i = 1; i < argc; ++i) //For all arguments
+       {
+               if (argv[i][0] != '-') //If the argument is not a switch value...
+               {
+                       //Interpret first non switch as input file, and second as output file.
+                       //If there are too many non switch arguments, give an error.
+                       if (options.input == NULL) 
+                               options.input = argv[i];
+                       else if (options.output == NULL)
+                               options.output = argv[i];
+                       else
+                       {
+                               fprintf(stderr,"Usage: %s [OPTIONS] field [output]\n", argv[0]);
+                               fprintf(stderr," (You provided too many file names)\n");
+                               exit(EXIT_FAILURE);
+                       }
+                       continue;
+               }
+               switch (argv[i][1]) //The argument is a switch if we get here
+               {
+                       case 'n': //Number of threads switch
+                               IntegerArgument(&i, argc, argv, &(options.num_threads), &(options.nested_threads));
+                               #ifdef SINGLE_THREADED
+                               fprintf(stderr, "Warning: -%c switch has no effect in the single-threaded program.\n", 'n');
+                               
+                               #else
+                               if (options.num_threads <= 0)
+                               {
+                                       fprintf(stderr, "Require at least one thread (-%c %s is invalid).\n",'n', argv[i]);
+                                       exit(EXIT_FAILURE);
+                               }
+                               #endif //SINGLE_THREADED
+                               break;
+                       case 's': //Number of steps switch
+                               IntegerArgument(&i, argc, argv, &(options.num_steps), NULL);
+                               if (options.num_steps < 0)
+                               {
+                                       fprintf(stderr, "Require zero or more steps to run (-%c %s is invalid).\n", 's', argv[i]);
+                                       exit(EXIT_FAILURE);
+                               }
+                               break;
+                       case 't': //Timeout switch (in seconds)
+                               IntegerArgument(&i, argc, argv, &(options.timeout), NULL);
+                               if (options.timeout < 0)
+                               {
+                                       fprintf(stderr, "Require a timeout greater or equal to zero (-%c %s is invalid).", 't', argv[i]);
+                                       exit(EXIT_FAILURE);
+                               }                               
+                               break;
+                       case 'g': //Graphics switch
+                               options.draw_graphics = !options.draw_graphics;
+                               break;
+                       case 'v': //Verbosity switch
+                               IntegerArgument(&i, argc, argv, &(options.verbosity), NULL);
+                               break;
+
+                       case '-':
+                               if (strcmp(argv[i]+2, "pedantic-graphics") == 0)
+                               {
+                                       options.pedantic_graphics = true;
+                                       #ifdef SINGLE_THREADED
+                                       fprintf(stderr, "Warning: %s switch has no effect in the single threaded program.\n", argv[i]);
+                                       #endif //SINGLE_THREADED
+                               }
+                               else if (strcmp(argv[i]+2, "fast-graphics") == 0)
+                               {
+                                       options.pedantic_graphics = false;
+                                       #ifdef SINGLE_THREADED
+                                       fprintf(stderr, "Warning: %s switch has no effect in the single threaded program.\n", argv[i]);
+                                       #endif //SINGLE_THREADED
+
+                               }
+                               else if (strcmp(argv[i]+2, "theta") == 0)
+                               {
+                                       FloatArgument(&i, argc, argv, &(options.theta));
+                                       #ifndef BARNES_HUT
+                                       fprintf(stderr, "Warning: %s switch only works in Barnes Hut version.\n", argv[i-1]);
+                                       #else
+                                       if (options.theta < 0)
+                                       {
+                                               fprintf(stderr, "Require a theta value greater or equal to zero (%s %s is invalid).\n", argv[i-1], argv[i]);
+                                               exit(EXIT_FAILURE);
+                                       }
+                                       
+                                       #endif //BARNS_HUT
+                                       
+                               }
+                               else
+                               {
+                                       fprintf(stderr, "Unrecognised switch %s\n", argv[i]);
+                                       exit(EXIT_FAILURE);
+                               }
+                               break;
+
+
+                       default:
+                               fprintf(stderr, "Unrecognised switch -%c\n", argv[i][1]);
+                               exit(EXIT_FAILURE);
+                               break;
+               }
+               
+       }
+}
+
+/**
+ * @function IntegerArgument
+ * @purpose Helper function to get up to two integers following a argument switch, seperated by ':'
+ * @param i - position in the argument array, will be updated after this function
+ * @param argc - number of arguments
+ * @param argv - argument strings
+ * @param store - pointer to unsigned to store result in
+ * @param store2 - pointer to second integer (set to NULL if there is only one integer)
+ * @returns 1 if store was filled, 2 if both store1 and store2 were filled
+ */
+unsigned IntegerArgument(unsigned * i, int argc, char ** argv, int * store, int * store2)
+{
+       if (*i >= argc-1)
+       {
+               fprintf(stderr,"Supply a positive integer for the -%c switch.\n", argv[*i][1]);
+               exit(EXIT_FAILURE);
+       }
+
+       char * seperator = strstr(argv[*i+1], ":");
+       if (seperator != NULL)
+       {
+               if (store2 == NULL)
+               {
+                       fprintf(stderr,"Supply a positive integer for the -%c switch.\n", argv[*i][1]);
+                       exit(EXIT_FAILURE);     
+               }
+               int val = atoi(seperator+1);
+               if (val <= 0)
+               {
+                       fprintf(stderr,"Supply a positive integer for the -%c switch.\n", argv[*i][1]);
+                       exit(EXIT_FAILURE);     
+               }       
+               *store2 = (unsigned)val;
+
+               *seperator = '\0';
+       }
+       
+       int val = atoi(argv[*i+1]);
+       if (val <= 0 && strcmp("0", argv[*i+1]) != 0)
+       {
+               fprintf(stderr,"Supply a positive integer for the -%c switch. %s is invalid.\n", argv[*i][1], argv[*i+1]);
+               exit(EXIT_FAILURE);
+       }
+       *store = val;
+       *i += 1;
+
+       return (seperator == NULL) ? 1 : 2;
+}
+/**
+ * @function FloatArgument
+ * @purpose Helper function to get a float following a argument switch
+ * @param i - position in the argument array, will be updated after this function
+ * @param argc - number of arguments
+ * @param argv - argument strings
+ * @param store - pointer to float to store result in
+ */
+void FloatArgument(unsigned * i, int argc, char ** argv, float * store)
+{
+       if (*i >= argc-1)
+       {
+               fprintf(stderr,"Supply a float for the -%c switch.\n", argv[*i][1]);
+               exit(EXIT_FAILURE);
+       }
+       *store = atof(argv[*i+1]);
+       if (*store == 0.0 && argv[*i+1][0] != '0')
+       {
+               fprintf(stderr,"Supply a float for the -%c switch.\n", argv[*i][1]);
+               exit(EXIT_FAILURE);
+       }
+       *i += 1;
+}
+
+
+
+/**
+ * @function Interrupt
+ * @purpose Handle SIGINT signal; quit the program gracefully, so that statistics are still displayed
+ * @param dummy - a dummy
+ */
+
+void Interrupt(int dummy)
+{
+       QuitProgram(false);
+}
+
+
diff --git a/course/semester2/pprog/assignment1/nbody-bh/main.o b/course/semester2/pprog/assignment1/nbody-bh/main.o
new file mode 100644 (file)
index 0000000..6cd2493
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/main.o differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/nbody b/course/semester2/pprog/assignment1/nbody-bh/nbody
new file mode 100755 (executable)
index 0000000..e62f551
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/nbody differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/nbody.c b/course/semester2/pprog/assignment1/nbody-bh/nbody.c
new file mode 100644 (file)
index 0000000..1a6d46c
--- /dev/null
@@ -0,0 +1,249 @@
+/**
+ * @file nbody.c
+ * @purpose Barnes Hut OpenMP version of N-Body simulator, implementation
+ * @author Sam Moore (20503628) - 2012
+ */
+
+#include "nbody.h"
+#include "../single-thread/nbody.c" // Include original code
+#include "graphics.h" // For Graphics functions
+
+#include "tree.h"
+
+
+
+omp_lock_t runstate_lock;
+
+#ifdef USE_THREADS
+omp_lock_t nested_lock;
+#endif //USE_THREADS
+
+Node * parent = NULL;
+
+/**
+ * @function Simulation_Run
+ * @purpose Start the simulation
+ * @param argc, argv - Passed to Graphics_Run if needed, otherwise unused
+ */
+void Simulation_Run(int argc, char ** argv)
+{      
+       
+       omp_init_lock(&runstate_lock);
+       #ifdef USE_THREADS
+       omp_init_lock(&nested_lock);
+       #endif //USE_THREADS
+
+       #ifdef DUAL_UNIVERSE
+       if (!options.pedantic_graphics)
+       {
+               fprintf(stderr, "Warning: Using pedantic graphics to ensure alternate reality matches our own (as closely as possible).\n");
+               options.pedantic_graphics = true;
+       }
+       #endif //DUAL_UNIVERSE
+
+       omp_set_nested(1);
+       if (omp_get_nested() == 0)
+       {
+               fprintf(stderr, "Couldn't enable nested parallelism\n.");
+               exit(EXIT_FAILURE);
+       }       
+
+       if (options.num_threads == 0)
+       {
+               options.num_threads = omp_get_max_threads();
+               if (options.draw_graphics)
+                       options.num_threads -= 1;
+       }
+       if (options.nested_threads == 0)
+       {
+               options.nested_threads = omp_get_max_threads() - options.num_threads;
+               if (options.nested_threads == 0)
+                       options.nested_threads = 1;
+       }
+
+       #ifdef DUAL_UNIVERSE
+               System_Init(&alternate_universe, options.input);
+       #endif //DUAL_UNIVERSE
+
+       if (options.draw_graphics)
+       {       
+               Graphics_Run(argc, argv);
+               if (options.pedantic_graphics == false)
+               {
+                       
+
+
+                       #pragma omp parallel num_threads(2)
+                       {
+                               // This can't be done with sections!
+                               // Because glut is useless, and can only be dealt with in the main thread
+                               // I just hope that thread "0" is always the main thread!
+                               if (omp_get_thread_num() == 0) // #pragma omp section
+                               {
+                                       //printf("Thread %d gets graphics\n", omp_get_thread_num());
+                                       glutMainLoop();
+                                       QuitProgram(false); // Program gets to here if the window is quit
+                               } 
+                               else // #pragma omp section
+                               {
+                                       //printf("Thread %d gets computations\n", omp_get_thread_num());
+                                       Compute();
+                               }
+
+                       }
+                       return;
+               }
+       }
+       Compute();
+
+       omp_destroy_lock(&runstate_lock);
+       #ifdef USE_THREADS
+       omp_destroy_lock(&nested_lock);
+       #endif //USE_THREADS
+       
+
+
+}
+
+/**
+ * @function Compute
+ * @purpose The main computation loop
+ *     Uses threading, but only on the first level
+ *     I tried to introduce threading to some of the recursive functions in the tree...
+ *     But failed
+ */
+void Compute(void) 
+{
+       omp_set_nested(1);
+       if (omp_get_nested() == 0)
+       {
+               fprintf(stderr, "Couldn't enable nested parallelism\n.");
+               exit(EXIT_FAILURE);
+       }       
+
+       omp_set_num_threads(options.num_threads);
+       if (omp_get_max_threads() != options.num_threads)
+       {
+               fprintf(stderr, "Couldn't use %d threads!\n", options.num_threads);
+               exit(EXIT_FAILURE);
+       }
+
+       parent = Node_Create(NULL); 
+       
+       Generate_Tree(&universe, parent);
+
+
+
+
+#pragma omp parallel
+{
+       while (!ExitCondition())
+       {
+               #pragma omp single
+               {
+                       Node_CalculateMass(parent);
+               }
+
+               #pragma omp for // The easiest way to parallelise it
+               for (unsigned a = 0; a < universe.N; ++a)
+               {
+                       for (unsigned i = 0; i < DIMENSIONS; ++i)
+                               universe.body[a].F[i] = 0;
+
+                       Node_Forces(universe.body+a, parent, options.theta);
+                       //printf("Forces on %p done\n", (void*)(universe.body+a));
+                       Body_Velocity(universe.body+a); 
+               }
+
+               // put a nowait here so that the first thread out can start updating the tree
+               #pragma omp for nowait 
+               for (unsigned a = 0; a < universe.N; ++a)
+               {
+
+                       Body_Position(universe.body+a);
+               }
+
+               #pragma omp single // Ideally the first thread out should do this
+               {
+                       Update_Tree(&universe, parent);
+               }
+
+               // I haven't noticed any difference in performance.
+               // I'm just showing off.
+               #pragma omp barrier
+
+               // Only the master may do stuff with graphics
+               #pragma omp master
+               {
+                       if (options.draw_graphics && options.pedantic_graphics)
+                       {
+                               glutMainLoopEvent();
+                               Graphics_Display();
+                       }
+               }
+
+               // Someone should do this stuff too
+               #pragma omp single
+               {
+                       universe.steps += 1;
+                       if (options.verbosity != 0 && universe.steps % options.verbosity == 0)
+                               DisplayStatistics();
+               }
+               
+       }
+}
+       Node_Destroy(parent);
+       free(parent);
+
+       QuitProgram(false);
+}
+
+
+void QuitProgram(bool error)
+{
+       if (runstate == QUIT || runstate == QUIT_ERROR)
+               return;
+       omp_set_lock(&runstate_lock);
+       runstate = (error) ? QUIT_ERROR : QUIT;
+       omp_unset_lock(&runstate_lock);
+}
+
+#ifdef DUAL_UNIVERSE
+void BeforeDraw()
+{
+       // Before drawing the main universe... compute and draw the alternate universe
+       // Not threaded, because I am too lazy
+       System_Compute(&alternate_universe);
+       
+       for (int i = 0; i < alternate_universe.N; ++i) 
+       {
+       
+               Body * b = alternate_universe.body+i;
+               Body * original = universe.body+i;
+               //glColor3f(0.0f, b->mass/1e11*100, 0.0f);
+               glColor3f(1.0f, 0.0f, 1.0f);
+               glPushMatrix(); // to save the current matrix
+               glTranslated(scale*b->x[0], scale*b->x[1], scale*b->x[2]);
+               glutSolidSphere (BALL_SIZE, 10, 10);
+               glPopMatrix(); // restore the previous matrix
+
+               // Draw a line from the "alternate" body to the real one
+               glBegin(GL_LINES);
+               glVertex3f(scale*b->x[0], scale*b->x[1], scale*b->x[2]);
+               glVertex3f(scale*original->x[0], scale*original->x[1], scale*original->x[2]);
+               glEnd();
+       }
+}
+#endif //DUAL_UNIVERSE
+
+#ifndef AfterDraw
+void AfterDraw()
+{
+       /* // Uncomment to draw cubes
+       glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
+       Draw_Node(parent);
+       glFlush();
+       glPolygonMode( GL_FRONT_AND_BACK, GL_FILL);
+       */
+}
+#endif //AfterDraw
diff --git a/course/semester2/pprog/assignment1/nbody-bh/nbody.c~ b/course/semester2/pprog/assignment1/nbody-bh/nbody.c~
new file mode 100644 (file)
index 0000000..c6fa458
--- /dev/null
@@ -0,0 +1,249 @@
+/**
+ * @file nbody.c
+ * @purpose Barnes Hut OpenMP version of N-Body simulator, implementation
+ * @author Sam Moore (20503628) - 2012
+ */
+
+#include "nbody.h"
+#include "../single-thread/nbody.c" // Include original code
+#include "graphics.h" // For Graphics_Run function only
+
+#include "tree.h"
+
+
+
+omp_lock_t runstate_lock;
+
+#ifdef USE_THREADS
+omp_lock_t nested_lock;
+#endif //USE_THREADS
+
+Node * parent = NULL;
+
+/**
+ * @function Simulation_Run
+ * @purpose Start the simulation
+ * @param argc, argv - Passed to Graphics_Run if needed, otherwise unused
+ */
+void Simulation_Run(int argc, char ** argv)
+{      
+       
+       omp_init_lock(&runstate_lock);
+       #ifdef USE_THREADS
+       omp_init_lock(&nested_lock);
+       #endif //USE_THREADS
+
+       #ifdef DUAL_UNIVERSE
+       if (!options.pedantic_graphics)
+       {
+               fprintf(stderr, "Warning: Using pedantic graphics to ensure alternate reality matches our own (as closely as possible).\n");
+               options.pedantic_graphics = true;
+       }
+       #endif //DUAL_UNIVERSE
+
+       omp_set_nested(1);
+       if (omp_get_nested() == 0)
+       {
+               fprintf(stderr, "Couldn't enable nested parallelism\n.");
+               exit(EXIT_FAILURE);
+       }       
+
+       if (options.num_threads == 0)
+       {
+               options.num_threads = omp_get_max_threads();
+               if (options.draw_graphics)
+                       options.num_threads -= 1;
+       }
+       if (options.nested_threads == 0)
+       {
+               options.nested_threads = omp_get_max_threads() - options.num_threads;
+               if (options.nested_threads == 0)
+                       options.nested_threads = 1;
+       }
+
+       #ifdef DUAL_UNIVERSE
+               System_Init(&alternate_universe, options.input);
+       #endif //DUAL_UNIVERSE
+
+       if (options.draw_graphics)
+       {       
+               Graphics_Run(argc, argv);
+               if (options.pedantic_graphics == false)
+               {
+                       
+
+
+                       #pragma omp parallel num_threads(2)
+                       {
+                               // This can't be done with sections!
+                               // Because glut is useless, and can only be dealt with in the main thread
+                               // I just hope that thread "0" is always the main thread!
+                               if (omp_get_thread_num() == 0) // #pragma omp section
+                               {
+                                       //printf("Thread %d gets graphics\n", omp_get_thread_num());
+                                       glutMainLoop();
+                                       QuitProgram(false); // Program gets to here if the window is quit
+                               } 
+                               else // #pragma omp section
+                               {
+                                       //printf("Thread %d gets computations\n", omp_get_thread_num());
+                                       Compute();
+                               }
+
+                       }
+                       return;
+               }
+       }
+       Compute();
+
+       omp_destroy_lock(&runstate_lock);
+       #ifdef USE_THREADS
+       omp_destroy_lock(&nested_lock);
+       #endif //USE_THREADS
+       
+
+
+}
+
+/**
+ * @function Compute
+ * @purpose The main computation loop
+ *     Uses threading, but only on the first level
+ *     I tried to introduce threading to some of the recursive functions in the tree...
+ *     But failed
+ */
+void Compute(void) 
+{
+       omp_set_nested(1);
+       if (omp_get_nested() == 0)
+       {
+               fprintf(stderr, "Couldn't enable nested parallelism\n.");
+               exit(EXIT_FAILURE);
+       }       
+
+       omp_set_num_threads(options.num_threads);
+       if (omp_get_max_threads() != options.num_threads)
+       {
+               fprintf(stderr, "Couldn't use %d threads!\n", options.num_threads);
+               exit(EXIT_FAILURE);
+       }
+
+       parent = Node_Create(NULL); 
+       
+       Generate_Tree(&universe, parent);
+
+
+
+
+#pragma omp parallel
+{
+       while (!ExitCondition())
+       {
+               #pragma omp single
+               {
+                       Node_CalculateMass(parent);
+               }
+
+               #pragma omp for // The easiest way to parallelise it
+               for (unsigned a = 0; a < universe.N; ++a)
+               {
+                       for (unsigned i = 0; i < DIMENSIONS; ++i)
+                               universe.body[a].F[i] = 0;
+
+                       Node_Forces(universe.body+a, parent, options.theta);
+                       //printf("Forces on %p done\n", (void*)(universe.body+a));
+                       Body_Velocity(universe.body+a); 
+               }
+
+               // put a nowait here so that the first thread out can start updating the tree
+               #pragma omp for nowait 
+               for (unsigned a = 0; a < universe.N; ++a)
+               {
+
+                       Body_Position(universe.body+a);
+               }
+
+               #pragma omp single // Ideally the first thread out should do this
+               {
+                       Update_Tree(&universe, parent);
+               }
+
+               // I haven't noticed any difference in performance.
+               // I'm just showing off.
+               #pragma omp barrier
+
+               // Only the master may do stuff with graphics
+               #pragma omp master
+               {
+                       if (options.draw_graphics && options.pedantic_graphics)
+                       {
+                               glutMainLoopEvent();
+                               Graphics_Display();
+                       }
+               }
+
+               // Someone should do this stuff too
+               #pragma omp single
+               {
+                       universe.steps += 1;
+                       if (options.verbosity != 0 && universe.steps % options.verbosity == 0)
+                               DisplayStatistics();
+               }
+               
+       }
+}
+       Node_Destroy(parent);
+       free(parent);
+
+       QuitProgram(false);
+}
+
+
+void QuitProgram(bool error)
+{
+       if (runstate == QUIT || runstate == QUIT_ERROR)
+               return;
+       omp_set_lock(&runstate_lock);
+       runstate = (error) ? QUIT_ERROR : QUIT;
+       omp_unset_lock(&runstate_lock);
+}
+
+#ifdef DUAL_UNIVERSE
+void BeforeDraw()
+{
+       // Before drawing the main universe... compute and draw the alternate universe
+       // Not threaded, because I am too lazy
+       System_Compute(&alternate_universe);
+       
+       for (int i = 0; i < alternate_universe.N; ++i) 
+       {
+       
+               Body * b = alternate_universe.body+i;
+               Body * original = universe.body+i;
+               //glColor3f(0.0f, b->mass/1e11*100, 0.0f);
+               glColor3f(1.0f, 0.0f, 1.0f);
+               glPushMatrix(); // to save the current matrix
+               glTranslated(scale*b->x[0], scale*b->x[1], scale*b->x[2]);
+               glutSolidSphere (BALL_SIZE, 10, 10);
+               glPopMatrix(); // restore the previous matrix
+
+               // Draw a line from the "alternate" body to the real one
+               glBegin(GL_LINES);
+               glVertex3f(scale*b->x[0], scale*b->x[1], scale*b->x[2]);
+               glVertex3f(scale*original->x[0], scale*original->x[1], scale*original->x[2]);
+               glEnd();
+       }
+}
+#endif //DUAL_UNIVERSE
+
+#ifndef AfterDraw
+void AfterDraw()
+{
+       /* // Uncomment to draw cubes
+       glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
+       Draw_Node(parent);
+       glFlush();
+       glPolygonMode( GL_FRONT_AND_BACK, GL_FILL);
+       */
+}
+#endif //AfterDraw
diff --git a/course/semester2/pprog/assignment1/nbody-bh/nbody.h b/course/semester2/pprog/assignment1/nbody-bh/nbody.h
new file mode 100644 (file)
index 0000000..b9fea98
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _NBODY_BARNES_HUT_H
+#define _NBODY_BARNES_HUT_H
+
+/**
+ * @file nbody.h
+ * @purpose OpenMP version of N-Body simulator, declarations
+ * @author Sam Moore (20503628) - 2012
+ */
+
+#include "../single-thread/nbody.h" //Include original code
+#include <omp.h>
+
+
+#undef SINGLE_THREADED
+#define BARNES_HUT
+
+// Define to simultaneously Brute force a copy of the universe, and display together
+//#define DUAL_UNIVERSE 
+
+
+// Replace default macros with thread-safe functions
+#undef Simulation_Run
+void Simulation_Run(int argc, char ** argv);
+//#undef QuitProgram
+//#define QuitProgram(x) break
+
+#undef BeforeDraw
+#ifdef DUAL_UNIVERSE
+       System alternate_universe;
+       void BeforeDraw();
+#else
+       #define BeforeDraw() (void)0 // Do nothing (apparently this is how to do nothing with a macro)
+#endif //DUAL_UNIVERSE
+
+#undef AfterDraw 
+#define AfterDraw() (void)0
+//void AfterDraw();
+
+#undef QuitProgram
+void QuitProgram(bool error);
+
+void Compute(void);
+
+#endif //_NBODY_BARNES_HUT_H
+
+//EOF
diff --git a/course/semester2/pprog/assignment1/nbody-bh/nbody.h~ b/course/semester2/pprog/assignment1/nbody-bh/nbody.h~
new file mode 100644 (file)
index 0000000..b9fea98
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _NBODY_BARNES_HUT_H
+#define _NBODY_BARNES_HUT_H
+
+/**
+ * @file nbody.h
+ * @purpose OpenMP version of N-Body simulator, declarations
+ * @author Sam Moore (20503628) - 2012
+ */
+
+#include "../single-thread/nbody.h" //Include original code
+#include <omp.h>
+
+
+#undef SINGLE_THREADED
+#define BARNES_HUT
+
+// Define to simultaneously Brute force a copy of the universe, and display together
+//#define DUAL_UNIVERSE 
+
+
+// Replace default macros with thread-safe functions
+#undef Simulation_Run
+void Simulation_Run(int argc, char ** argv);
+//#undef QuitProgram
+//#define QuitProgram(x) break
+
+#undef BeforeDraw
+#ifdef DUAL_UNIVERSE
+       System alternate_universe;
+       void BeforeDraw();
+#else
+       #define BeforeDraw() (void)0 // Do nothing (apparently this is how to do nothing with a macro)
+#endif //DUAL_UNIVERSE
+
+#undef AfterDraw 
+#define AfterDraw() (void)0
+//void AfterDraw();
+
+#undef QuitProgram
+void QuitProgram(bool error);
+
+void Compute(void);
+
+#endif //_NBODY_BARNES_HUT_H
+
+//EOF
diff --git a/course/semester2/pprog/assignment1/nbody-bh/nbody.o b/course/semester2/pprog/assignment1/nbody-bh/nbody.o
new file mode 100644 (file)
index 0000000..842e01f
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/nbody.o differ
diff --git a/course/semester2/pprog/assignment1/nbody-bh/tree.c b/course/semester2/pprog/assignment1/nbody-bh/tree.c
new file mode 100644 (file)
index 0000000..f7c9b22
--- /dev/null
@@ -0,0 +1,590 @@
+/**
+ * @file "tree.c"
+ * @purpose Implementation of Barnes Hut algorithms
+ * @author Sam Moore (20503628) 2012
+ */
+
+#include "tree.h"
+#include "math.h"
+#include <string.h>
+#include "graphics.h"
+
+#ifdef USE_THREADS
+unsigned nested_used = 0;
+#endif //USE_THREADS
+
+
+/**
+ * @function Node_SetSpace
+ * @purpose Set the position and space occupied by a node
+ * @param node - The Node
+ * @param x - The vertex with the smallest coordinate values
+ * @param size - The dimensions of the cube that the Node represents
+ */
+void Node_SetSpace(Node * node, float x[DIMENSIONS], float size[DIMENSIONS])
+{
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+       {
+               node->x[i] = x[i];
+               node->size[i] = size[i];
+       }
+}
+
+/**
+ * @function Node_Destroy
+ * @purpose Confuse Java programmers
+ *     *ahem* Cleanup the memory used by the Node and its children
+ * @param node - The Node
+ */
+void Node_Destroy(Node * node)
+{
+       
+       if (node == NULL)
+               return;
+
+       //printf("Destroy node %p\n", (void*)node);
+
+       if (node->body != NULL)
+       {
+               free(node->body);
+               node->body = NULL;
+       }
+       node->allocated = 0;
+       node->N = 0;
+
+       #ifdef USE_THREADS
+               Prepare_Threads(SUB_DIVISIONS);
+       #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               Node_Destroy(node->children[i]);
+               free(node->children[i]);
+               node->children[i] = NULL;
+       }
+       
+}
+
+/**
+ * @function Node_FindBodies
+ * @purpose Search for bodies in a system within a Node, and add them to the Node's array of bodies.
+ * @param n The Node
+ * @param s The System
+ * @returns The total number of bodies found from s within n
+ */
+unsigned Node_FindBodies(Node * n, System * s)
+{
+
+       if (n->body != NULL)
+       {
+
+               // reset the body array first
+               #ifdef USE_THREADS
+               //Prepare_Threads(options.nested_threads);
+               //#pragma omp parallel for
+               #endif //USE_THREADS
+               for (unsigned i = 0; i < n->allocated; ++i)
+                       n->body[i] = NULL;
+       }
+       n->N = 0; // Don't forget this!
+
+       if (n->parent == NULL)
+       {
+               #ifdef USE_THREADS
+               //Prepare_Threads(options.nested_threads);
+               //#pragma omp parallel for
+               #endif //USE_THREADS
+               for (unsigned a = 0; a < s->N; ++a)
+               {
+                       if (Node_ContainsBody(n, s->body+a))
+                               Node_AddBody(n, s->body+a);
+               }
+       }
+       else
+       {
+               #ifdef USE_THREADS
+               //Prepare_Threads(options.nested_threads);
+               //#pragma omp parallel for
+               #endif //USE_THREADS
+               for (unsigned a = 0; a < n->parent->allocated; ++a)
+               {
+                       if (Node_ContainsBody(n, n->parent->body[a]))
+                               Node_AddBody(n, n->parent->body[a]);
+               }
+       }
+       //printf("Node %p contains %d bodies\n", (void*)(n), n->N);
+       return n->N;
+}
+
+/** 
+ * @function Node_Subdivide
+ * @purpose Subdivide a Node into more nodes and fill them with bodies
+ * @param node - The Node
+ * @param s - The system which the bodies are from 
+ * @returns The number of bodies contained in all children of node after this is finished
+ */
+unsigned Node_Subdivide(Node * node, System * s)
+{
+       if (Node_FindBodies(node, s) <= 1) // First find all bodies in the node
+               return node->N; // If there was one or less, no need to subdivide
+
+       unsigned count = 0; // stores the return value of the function
+       float size[DIMENSIONS]; // size of the children of this node
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+               size[i] = node->size[i] / 2.0;
+
+       #ifdef USE_THREADS
+       //      Prepare_Threads(SUB_DIVISIONS);
+       // #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned a = 0; a < SUB_DIVISIONS; ++a)
+       {
+               if (node->children[a] == NULL)
+                       node->children[a] = Node_Create(node);  //Create child node if necessary
+
+               float x[DIMENSIONS];
+
+               // Determine the placement of each child node in space
+               // Annoyingly long switch statement.
+               switch (a)
+               {
+                       case 0:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 1:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 2:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 3:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2] + size[2];
+                               break;
+                       case 4:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 5:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2] + size[2];
+
+                               break;
+                       case 6:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2] + size[2];
+                               break;
+                       case 7:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2] + size[2];
+                               break;
+               }
+
+               Node_SetSpace(node->children[a], x, size); // Setup the child in space
+               unsigned sub = Node_Subdivide(node->children[a], s); // Recurse for the child
+               count += sub;
+       }
+       return count;
+}
+
+
+/**
+ * @function Node_AddBody
+ * @purpose Terrify third year computer science students
+ *     *ahem* Add a Body* to the node's dynamic Body* array. Dynamically. Got that?
+ *     I love pointers! They are fun!
+ * @param node - The Node; what did you think it was?
+ * @param b - The Body to add
+ * @returns - The index in the array that the Body* now occupies
+ */
+unsigned Node_AddBody(Node * node, Body * b)
+{
+       unsigned i = 0;
+       for (i = 0; i < node->allocated; ++i) // Search for an empty spot in the array
+       {
+               if (node->body[i] == NULL) // Got one!
+               {
+                       node->body[i] = b; // Fill it!
+                       node->N += 1;
+                       return i; // return!
+               }
+       }
+
+       // No empty spots found :(
+       // The index got outside the array's allocated space, so allocate some more!
+       node->allocated = 2 * (node->allocated + 1); // Doubling the space each time, like what C++ std::vector does
+
+       if (node->body == NULL) 
+               node->body = (Body**)(calloc(node->allocated, sizeof(Body*))); // First Body* added, create new array
+       else // Subsequent allocations use realloc
+       {
+               // realloc is expensive. That's why I double the space each time, instead of just adding a constant.
+               // Of course, in the worst case, we are wasting half the memory after the last realloc
+               // But performance wise it is better.
+               node->body = (Body**)(realloc(node->body, sizeof(Body*) * node->allocated)); // Resize existing array
+               memset(node->body+i, 0, sizeof(Body*) * (node->allocated - i)); // set all the new elements to NULL
+       }
+
+       //We now have a valid position in the array that is not filled
+       node->body[i] = b; // So fill it
+       node->N += 1; // don't forget to update this
+       return i; //index in array of Body*
+       
+}
+
+/**
+ * @function Generate_Tree
+ * @purpose Generate the tree from a System
+ * @param s - The System
+ * @param n - The root node
+ * @returns The number of bodies in the node (should be the same as in the system)
+ */
+unsigned Generate_Tree(System * s, Node * n)
+{
+       for (unsigned i = 0; i < DIMENSIONS; ++i) // set initial size of node
+       {
+               n->x[i] = -1.0;
+               n->size[i] = 2.0;
+       }
+
+       Node_FitSystem(n, s); // size node so that it contains all bodies in the system
+
+       
+       Node_Subdivide(n, s);
+
+       return n->N;
+}
+
+/**
+ * @function Node_FitSystem
+ * @purpose Resize a Node until all bodies in a System are within it
+ * @param n - The Node
+ * @param s - The System
+ */
+void Node_FitSystem(Node * n, System * s)
+{
+       // I'm sure there is a faster way of doing this
+       // But I like this algorithm. 
+
+
+       while (Node_FindBodies(n, s) < s->N) // Find bodies in the node...
+       {
+               // As long as the number found is less than the number in the system...
+               
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+               {
+                       n->x[i] *= 2.0;
+                       n->size[i] *= 2.0; // Double the size of the Node!
+               }
+       }
+}
+
+/**
+ * @function Update_Tree
+ * @purpose Update the tree (it must already have been Generated with Generate_Tree)
+ * @param s - The System
+ * @param n - The root node of the tree
+ * @returns The number of bodies in the tree
+ */
+unsigned Update_Tree(System * s, Node * n)
+{
+       Node_FitSystem(n, s);
+
+       Node_Subdivide(n, s);
+       return n->N;
+}
+
+/**
+ * @function Node_CalculateMass
+ * @purpose Calculate the mass and centre of mass of a node
+ * @param node - The node
+ * @returns The mass of the node
+ */
+float Node_CalculateMass(Node * node)
+{
+       node->mass = 0.0;
+       if (node->N <= 0) // No bodies in the node
+               return 0.0;
+
+       if (node->N == 1) // Only one body in the node
+       {
+               Body * b = Node_Body(node, 0);
+               node->mass = b->mass;
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+                       node->com[i] = b->x[i];
+       //printf("Body %p has mass %f, center of mass at %f %f %f\n", (void*)(node), node->mass, node->com[0], node->com[1], node->com[2]);
+               return node->mass;
+       }
+
+
+       // For more than 1 body in the node, calculate mass and com from child nodes
+
+       for (unsigned i = 0; i < DIMENSIONS; ++i) // init com
+               node->com[i] = 0.0;
+
+
+       #ifdef USE_THREADS
+               Prepare_Threads(SUB_DIVISIONS);
+       #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               if (node->children[i] != NULL)
+               {
+                       float m = Node_CalculateMass(node->children[i]); // Recurse for children
+                       node->mass += m;
+                       for (unsigned j = 0; j < DIMENSIONS; ++j)
+                               node->com[j] += m * node->children[i]->com[j];                  
+               }
+       }
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+               node->com[i] = node->com[i] / node->mass; // weighted average for centre of masses
+
+       //printf("Node %p has mass %f, center of mass at %f %f %f\n", (void*)(node), node->mass, node->com[0], node->com[1], node->com[2]);
+       return node->mass;
+}
+
+/**
+ * @function Node_Forces
+ * @purpose Calculate the forces on a body due to a Node
+ * @param a - The Body
+ * @param n - The node
+ * @param theta - The approximation factor; 0.0 for no approximation.
+ * @returns The depth reached by the recursive algorithm 
+ */
+unsigned Node_Forces(Body * a, Node * n, float theta)
+{
+       if (n->N <= 0)
+               return 0;
+
+
+       if (n->N == 1) // external node with one body in it
+       {
+               Body * b = Node_Body(n, 0);
+               if (b == a) //ignore self
+               {
+                       return 0;
+               }
+               Body_Force(a, b); // calculate force
+               return 1;
+       }
+
+       // internal node with more than one body in it...
+       
+
+       float con;
+       float gd;
+       float d = 0;
+       float s = n->size[0] + n->size[1] + n->size[2] / 3.0;
+
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+               d += square(a->x[i] - n->com[i]);       
+       d = sqrt(d);
+
+       if (s / d <= theta) // approximation is "valid"
+       {
+               // Calculate force based on centre of mass of the node
+               con = G * a->mass * n->mass / square(d);
+               gd = con / d;
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+                       a->F[i] += gd * (n->com[i] - a->x[i]);
+               return 1;
+       }
+       
+       // approximation "invalid" because node is too close
+       // Then recursively calculate forces due to the node's children
+       
+       unsigned count = 0;
+       #ifdef USE_THREADS
+               Prepare_Threads(SUB_DIVISIONS);
+       #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               if (n->children[i] != NULL)
+               {
+                       count += Node_Forces(a, n->children[i], theta);
+               }
+       }
+       return count;
+}
+
+/**
+ * @function Node_Create
+ * @purpose Create a Node
+ * @param parent - The parent of the Node (NULL if the node is the root of the tree)
+ * @returns The new Node
+ */
+Node * Node_Create(Node * parent)
+{
+       Node * result = (Node*)(calloc(1, sizeof(Node)));
+
+       result->parent = parent;
+
+       /* // In theory, using calloc instead of malloc should make everything zero
+               // So I don't need to do it manually
+               // Kept code here anyway. Because I don't trust gcc.
+       
+       result->N = 0;
+       result->allocated = 0;
+       result->body = 0;
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+               result->children[i] = NULL;
+       */
+
+       return result;
+       
+}
+
+/**
+ * @function Node_Body
+ * @purpose Identify a Body within a Node by its position in the array of Body*
+ *     Because elements of the array may be NULL in general, n->body[index] may fail
+ *     Actually I think in my code it will work in all cases, because I never set elements of the array to NULL.
+ *     It's not worth the risk anyway, I might change my code.
+ *
+ * @param n - The Node
+ * @param index - The position of the Body* in the array
+ * @returns the Body* from the array
+ */
+Body * Node_Body(Node * n, unsigned index)
+{
+       unsigned count = 0;
+       Body * result = NULL;
+
+       // Can't parallelise this, due to the break statement
+       for (unsigned i = 0; i < n->allocated; ++i) // Go through the array...
+       {
+               if (n->body[i] != NULL)
+                       count += 1; // Count each non-empty entry
+               if (count > index)
+               {
+                       result = n->body[i]; // return element once counter expires
+                       break;
+               }
+       }
+
+       return result;
+}
+
+/**
+ * @function Draw_Node
+ * @purpose Draw a node as a series of rectangular prisms
+ *     Draws all children of the node too. But only nodes with N == 1 will be shown.
+ * @param n - The Node
+ */
+void Draw_Node(Node * n)
+{
+       
+       if (n->N == 1)
+       {
+       glBegin(GL_QUADS);
+       glColor3f(0.0f, 1.0f, 0.0f);
+       glVertex3f(n->x[0] + n->size[0], n->x[1] + n->size[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1] + n->size[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1] + n->size[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]+n->size[2]);
+
+       glVertex3f(n->x[0] + n->size[0], n->x[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0], n->x[1] , n->x[2] + n->size[2]);
+       glVertex3f(n->x[0], n->x[1], n->x[2]);
+       glVertex3f(n->x[0] + n->size[0], n->x[1], n->x[2]);
+
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]+n->size[2]);
+       glVertex3f(n->x[0], n->x[1]+n->size[1], n->x[2]+n->size[2]);
+       glVertex3f(n->x[0], n->x[1], n->x[2]+n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2]+n->size[2]);
+
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1]+n->size[1], n->x[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]);
+
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2]);
+       glEnd();
+       }
+       //printf("Node %p contains %u bodies in volume %f\n", (void*)n, n->N, n->size[0] * n->size[1] * n->size[2]);
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               if (n->children[i] != NULL && n->children[i]->N > 0)
+                       Draw_Node(n->children[i]);
+       }
+
+}
+
+/**
+ * @function Node_ContainsBody
+ * @purpose Indicate whether body is within a node
+ * @param n - The Node
+ * @param b - The Body
+ * @returns true iff the body was in the node
+ */
+bool Node_ContainsBody(Node * n, Body * b)
+{
+       if (b == NULL)
+               return false;
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+       {
+               float p = b->x[i] - n->x[i];
+               if (p < 0.00 || p > n->size[i])
+                       return false;
+       }
+       return true;
+}
+
+// Doesn't work
+#ifdef USE_THREADS
+/**
+ * @function Prepare_Threads
+ * @purpose Tell OMP to spawn up to the specified number of threads on the next parallel section
+ * @param max - Spawn at most this many threads; in reality, less will be spawned
+ */
+void Prepare_Threads(unsigned max)
+{
+       //return;
+       
+       if (options.nested_threads == 1)
+       {
+               omp_set_num_threads(1);
+               return;
+       }
+       //printf("Thread %d in nest %d thinking of spawning more threads...\n", omp_get_thread_num(), omp_get_level());
+       //printf("There are %d nested threads, %d in current level\n", nested_used, omp_get_num_threads());
+       //printf("Got past check\n");
+       
+       if (max > options.nested_threads)
+               max = options.nested_threads;
+       if (max <= 0)
+               max = options.nested_threads;
+
+       
+       
+
+       unsigned available = options.nested_threads - nested_used;
+       if (available <= 0)
+               available = 1;  
+       if (available < max)
+               max = available;
+               
+       omp_set_num_threads(max);
+
+       omp_set_lock(&nested_lock);
+       nested_used += max-1;
+       omp_unset_lock(&nested_lock);
+       
+}
+#endif //USE_THREADS
diff --git a/course/semester2/pprog/assignment1/nbody-bh/tree.c~ b/course/semester2/pprog/assignment1/nbody-bh/tree.c~
new file mode 100644 (file)
index 0000000..f3a9e07
--- /dev/null
@@ -0,0 +1,589 @@
+/**
+ * @file "tree.c"
+ * @purpose Implementation of Barnes Hut algorithms
+ * @author Sam Moore (20503628) 2012
+ */
+
+#include "tree.h"
+#include "math.h"
+#include <string.h>
+#include "graphics.h"
+
+#ifdef USE_THREADS
+unsigned nested_used = 0;
+#endif //USE_THREADS
+
+
+/**
+ * @function Node_SetSpace
+ * @purpose Set the position and space occupied by a node
+ * @param node - The Node
+ * @param x - The vertex with the smallest coordinate values
+ * @param size - The dimensions of the cube that the Node represents
+ */
+void Node_SetSpace(Node * node, float x[DIMENSIONS], float size[DIMENSIONS])
+{
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+       {
+               node->x[i] = x[i];
+               node->size[i] = size[i];
+       }
+}
+
+/**
+ * @function Node_Destroy
+ * @purpose Confuse Java programmers
+ *     *ahem* Cleanup the memory used by the Node and its children
+ * @param node - The Node
+ */
+void Node_Destroy(Node * node)
+{
+       
+       if (node == NULL)
+               return;
+
+       //printf("Destroy node %p\n", (void*)node);
+
+       if (node->body != NULL)
+       {
+               free(node->body);
+               node->body = NULL;
+       }
+       node->allocated = 0;
+       node->N = 0;
+
+       #ifdef USE_THREADS
+               Prepare_Threads(SUB_DIVISIONS);
+       #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               Node_Destroy(node->children[i]);
+               free(node->children[i]);
+               node->children[i] = NULL;
+       }
+       
+}
+
+/**
+ * @function Node_FindBodies
+ * @purpose Search for bodies in a system within a Node, and add them to the Node's array of bodies.
+ * @param n The Node
+ * @param s The System
+ * @returns The total number of bodies found from s within n
+ */
+unsigned Node_FindBodies(Node * n, System * s)
+{
+
+       if (n->body != NULL)
+       {
+
+               // reset the body array first
+               #ifdef USE_THREADS
+               //Prepare_Threads(options.nested_threads);
+               //#pragma omp parallel for
+               #endif //USE_THREADS
+               for (unsigned i = 0; i < n->allocated; ++i)
+                       n->body[i] = NULL;
+       }
+       n->N = 0; // Don't forget this!
+
+       if (n->parent == NULL)
+       {
+               #ifdef USE_THREADS
+               //Prepare_Threads(options.nested_threads);
+               //#pragma omp parallel for
+               #endif //USE_THREADS
+               for (unsigned a = 0; a < s->N; ++a)
+               {
+                       if (Node_ContainsBody(n, s->body+a))
+                               Node_AddBody(n, s->body+a);
+               }
+       }
+       else
+       {
+               #ifdef USE_THREADS
+               //Prepare_Threads(options.nested_threads);
+               //#pragma omp parallel for
+               #endif //USE_THREADS
+               for (unsigned a = 0; a < n->parent->allocated; ++a)
+               {
+                       if (Node_ContainsBody(n, n->parent->body[a]))
+                               Node_AddBody(n, n->parent->body[a]);
+               }
+       }
+       //printf("Node %p contains %d bodies\n", (void*)(n), n->N);
+       return n->N;
+}
+
+/** 
+ * @function Node_Subdivide
+ * @purpose Subdivide a Node into more nodes and fill them with bodies
+ * @param node - The Node
+ * @param s - The system which the bodies are from 
+ * @returns The number of bodies contained in all children of node after this is finished
+ */
+unsigned Node_Subdivide(Node * node, System * s)
+{
+       if (Node_FindBodies(node, s) <= 1) // First find all bodies in the node
+               return node->N; // If there was one or less, no need to subdivide
+
+       unsigned count = 0; // stores the return value of the function
+       float size[DIMENSIONS]; // size of the children of this node
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+               size[i] = node->size[i] / 2.0;
+
+       #ifdef USE_THREADS
+       //      Prepare_Threads(SUB_DIVISIONS);
+       // #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned a = 0; a < SUB_DIVISIONS; ++a)
+       {
+               if (node->children[a] == NULL)
+                       node->children[a] = Node_Create(node);  //Create child node if necessary
+
+               float x[DIMENSIONS];
+
+               // Determine the placement of each child node in space
+               // Annoyingly long switch statement.
+               switch (a)
+               {
+                       case 0:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 1:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 2:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 3:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2] + size[2];
+                               break;
+                       case 4:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2];
+                               break;
+                       case 5:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1];
+                               x[2] = node->x[2] + size[2];
+
+                               break;
+                       case 6:
+                               x[0] = node->x[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2] + size[2];
+                               break;
+                       case 7:
+                               x[0] = node->x[0] + size[0];
+                               x[1] = node->x[1] + size[1];
+                               x[2] = node->x[2] + size[2];
+                               break;
+               }
+
+               Node_SetSpace(node->children[a], x, size); // Setup the child in space
+               unsigned sub = Node_Subdivide(node->children[a], s); // Recurse for the child
+               count += sub;
+       }
+       return count;
+}
+
+
+/**
+ * @function Node_AddBody
+ * @purpose Terrify third year computer science students
+ *     *ahem* Add a Body* to the node's dynamic Body* array. Dynamically. Got that?
+ *     I love pointers! They are fun!
+ * @param node - The Node; what did you think it was?
+ * @param b - The Body to add
+ * @returns - The index in the array that the Body* now occupies
+ */
+unsigned Node_AddBody(Node * node, Body * b)
+{
+       unsigned i = 0;
+       for (i = 0; i < node->allocated; ++i) // Search for an empty spot in the array
+       {
+               if (node->body[i] == NULL) // Got one!
+               {
+                       node->body[i] = b; // Fill it!
+                       node->N += 1;
+                       return i; // return!
+               }
+       }
+
+       // No empty spots found :(
+       // The index got outside the array's allocated space, so allocate some more!
+       node->allocated = 2 * (node->allocated + 1); // Doubling the space each time, like what C++ std::vector does
+
+       if (node->body == NULL) 
+               node->body = (Body**)(calloc(node->allocated, sizeof(Body*))); // First Body* added, create new array
+       else // Subsequent allocations use realloc
+       {
+               // realloc is expensive. That's why I double the space each time, instead of just adding a constant.
+               // Of course, in the worst case, we are wasting half the memory after the last realloc
+               // But performance wise it is better.
+               node->body = (Body**)(realloc(node->body, sizeof(Body*) * node->allocated)); // Resize existing array
+               memset(node->body+i, 0, sizeof(Body*) * (node->allocated - i)); // set all the new elements to NULL
+       }
+
+       //We now have a valid position in the array that is not filled
+       node->body[i] = b; // So fill it
+       node->N += 1; // don't forget to update this
+       return i; //index in array of Body*
+       
+}
+
+/**
+ * @function Generate_Tree
+ * @purpose Generate the tree from a System
+ * @param s - The System
+ * @param n - The root node
+ * @returns The number of bodies in the node (should be the same as in the system)
+ */
+unsigned Generate_Tree(System * s, Node * n)
+{
+       for (unsigned i = 0; i < DIMENSIONS; ++i) // set initial size of node
+       {
+               n->x[i] = -1.0;
+               n->size[i] = 2.0;
+       }
+
+       Node_FitSystem(n, s); // size node so that it contains all bodies in the system
+
+       
+       Node_Subdivide(n, s);
+
+       return n->N;
+}
+
+/**
+ * @function Node_FitSystem
+ * @purpose Resize a Node until all bodies in a System are within it
+ * @param n - The Node
+ * @param s - The System
+ */
+void Node_FitSystem(Node * n, System * s)
+{
+       // I'm sure there is a faster way of doing this
+       // But I like this algorithm. 
+
+
+       while (Node_FindBodies(n, s) < s->N) // Find bodies in the node...
+       {
+               // As long as the number found is less than the number in the system...
+               
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+               {
+                       n->x[i] *= 2.0;
+                       n->size[i] *= 2.0; // Double the size of the Node!
+               }
+       }
+}
+
+/**
+ * @function Update_Tree
+ * @purpose Update the tree (it must already have been Generated with Generate_Tree)
+ * @param s - The System
+ * @param n - The root node of the tree
+ * @returns The number of bodies in the tree
+ */
+unsigned Update_Tree(System * s, Node * n)
+{
+       Node_FitSystem(n, s);
+
+       Node_Subdivide(n, s);
+       return n->N;
+}
+
+/**
+ * @function Node_CalculateMass
+ * @purpose Calculate the mass and centre of mass of a node
+ * @param node - The node
+ * @returns The mass of the node
+ */
+float Node_CalculateMass(Node * node)
+{
+       node->mass = 0.0;
+       if (node->N <= 0) // No bodies in the node
+               return 0.0;
+
+       if (node->N == 1) // Only one body in the node
+       {
+               Body * b = Node_Body(node, 0);
+               node->mass = b->mass;
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+                       node->com[i] = b->x[i];
+       //printf("Body %p has mass %f, center of mass at %f %f %f\n", (void*)(node), node->mass, node->com[0], node->com[1], node->com[2]);
+               return node->mass;
+       }
+
+
+       // For more than 1 body in the node, calculate mass and com from child nodes
+
+       for (unsigned i = 0; i < DIMENSIONS; ++i) // init com
+               node->com[i] = 0.0;
+
+
+       #ifdef USE_THREADS
+               Prepare_Threads(SUB_DIVISIONS);
+       #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               if (node->children[i] != NULL)
+               {
+                       float m = Node_CalculateMass(node->children[i]); // Recurse for children
+                       node->mass += m;
+                       for (unsigned j = 0; j < DIMENSIONS; ++j)
+                               node->com[j] += m * node->children[i]->com[j];                  
+               }
+       }
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+               node->com[i] = node->com[i] / node->mass; // weighted average for centre of masses
+
+       //printf("Node %p has mass %f, center of mass at %f %f %f\n", (void*)(node), node->mass, node->com[0], node->com[1], node->com[2]);
+       return node->mass;
+}
+
+/**
+ * @function Node_Forces
+ * @purpose Calculate the forces on a body due to a Node
+ * @param a - The Body
+ * @param n - The node
+ * @param theta - The approximation factor; 0.0 for no approximation.
+ * @returns The depth reached by the recursive algorithm 
+ */
+unsigned Node_Forces(Body * a, Node * n, float theta)
+{
+       if (n->N <= 0)
+               return 0;
+
+
+       if (n->N == 1) // external node with one body in it
+       {
+               Body * b = Node_Body(n, 0);
+               if (b == a) //ignore self
+               {
+                       return 0;
+               }
+               Body_Force(a, b); // calculate force
+               return 1;
+       }
+
+       // internal node with more than one body in it...
+       
+
+       float con;
+       float gd;
+       float d = 0;
+       float s = n->size[0] + n->size[1] + n->size[2] / 3.0;
+
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+               d += square(a->x[i] - n->com[i]);       
+       d = sqrt(d);
+
+       if (s / d <= theta) // approximation is "valid"
+       {
+               // Calculate force based on centre of mass of the node
+               con = G * a->mass * n->mass / square(d);
+               gd = con / d;
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+                       a->F[i] += gd * (n->com[i] - a->x[i]);
+               return 1;
+       }
+       
+       // approximation "invalid" because node is too close
+       // Then recursively calculate forces due to the node's children
+       
+       unsigned count = 0;
+       #ifdef USE_THREADS
+               Prepare_Threads(SUB_DIVISIONS);
+       #pragma omp parallel for
+       #endif //USE_THREADS
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               if (n->children[i] != NULL)
+               {
+                       count += Node_Forces(a, n->children[i], theta);
+               }
+       }
+       return count;
+}
+
+/**
+ * @function Node_Create
+ * @purpose Create a Node
+ * @param parent - The parent of the Node (NULL if the node is the root of the tree)
+ * @returns The new Node
+ */
+Node * Node_Create(Node * parent)
+{
+       Node * result = (Node*)(calloc(1, sizeof(Node)));
+
+       result->parent = parent;
+
+       /* // In theory, using calloc instead of malloc should make everything zero
+               // So I don't need to do it manually
+               // Kept code here anyway. Because I don't trust gcc.
+       
+       result->N = 0;
+       result->allocated = 0;
+       result->body = 0;
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+               result->children[i] = NULL;
+       */
+
+       return result;
+       
+}
+
+/**
+ * @function Node_Body
+ * @purpose Identify a Body within a Node by its position in the array of Body*
+ *     Because elements of the array may be NULL in general, n->body[index] may fail
+ *     Actually I think in my code it will work in all cases, because I never set elements of the array to NULL.
+ *     It's not worth the risk anyway, I might change my code.
+ *
+ * @param n - The Node
+ * @param index - The position of the Body* in the array
+ * @returns the Body* from the array
+ */
+Body * Node_Body(Node * n, unsigned index)
+{
+       unsigned count = 0;
+       Body * result = NULL;
+
+       // Can't parallelise this, due to the break statement
+       for (unsigned i = 0; i < n->allocated; ++i) // Go through the array...
+       {
+               if (n->body[i] != NULL)
+                       count += 1; // Count each non-empty entry
+               if (count > index)
+               {
+                       result = n->body[i]; // return element once counter expires
+                       break;
+               }
+       }
+
+       return result;
+}
+
+/**
+ * @function Draw_Node
+ * @purpose Draw a node as a series of rectangular prisms
+ *     Draws all children of the node too. But only nodes with N == 1 will be shown.
+ * @param n - The Node
+ */
+void Draw_Node(Node * n)
+{
+       
+       if (n->N == 1)
+       {
+       glBegin(GL_QUADS);
+       glColor3f(0.0f, 1.0f, 0.0f);
+       glVertex3f(n->x[0] + n->size[0], n->x[1] + n->size[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1] + n->size[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1] + n->size[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]+n->size[2]);
+
+       glVertex3f(n->x[0] + n->size[0], n->x[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0], n->x[1] , n->x[2] + n->size[2]);
+       glVertex3f(n->x[0], n->x[1], n->x[2]);
+       glVertex3f(n->x[0] + n->size[0], n->x[1], n->x[2]);
+
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]+n->size[2]);
+       glVertex3f(n->x[0], n->x[1]+n->size[1], n->x[2]+n->size[2]);
+       glVertex3f(n->x[0], n->x[1], n->x[2]+n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2]+n->size[2]);
+
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1], n->x[2]);
+       glVertex3f(n->x[0], n->x[1]+n->size[1], n->x[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]);
+
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1]+n->size[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2] + n->size[2]);
+       glVertex3f(n->x[0]+n->size[0], n->x[1], n->x[2]);
+       glEnd();
+       }
+       //printf("Node %p contains %u bodies in volume %f\n", (void*)n, n->N, n->size[0] * n->size[1] * n->size[2]);
+       for (unsigned i = 0; i < SUB_DIVISIONS; ++i)
+       {
+               if (n->children[i] != NULL && n->children[i]->N > 0)
+                       Draw_Node(n->children[i]);
+       }
+
+}
+
+/**
+ * @function Node_ContainsBody
+ * @purpose Indicate whether body is within a node
+ * @param n - The Node
+ * @param b - The Body
+ * @returns true iff the body was in the node
+ */
+bool Node_ContainsBody(Node * n, Body * b)
+{
+       if (b == NULL)
+               return false;
+       for (unsigned i = 0; i < DIMENSIONS; ++i)
+       {
+               float p = b->x[i] - n->x[i];
+               if (p < 0.00 || p > n->size[i])
+                       return false;
+       }
+       return true;
+}
+
+#ifdef USE_THREADS
+/**
+ * @function Prepare_Threads
+ * @purpose Tell OMP to spawn up to the specified number of threads on the next parallel section
+ * @param max - Spawn at most this many threads; in reality, less will be spawned
+ */
+void Prepare_Threads(unsigned max)
+{
+       //return;
+       
+       if (options.nested_threads == 1)
+       {
+               omp_set_num_threads(1);
+               return;
+       }
+       //printf("Thread %d in nest %d thinking of spawning more threads...\n", omp_get_thread_num(), omp_get_level());
+       //printf("There are %d nested threads, %d in current level\n", nested_used, omp_get_num_threads());
+       //printf("Got past check\n");
+       
+       if (max > options.nested_threads)
+               max = options.nested_threads;
+       if (max <= 0)
+               max = options.nested_threads;
+
+       
+       
+
+       unsigned available = options.nested_threads - nested_used;
+       if (available <= 0)
+               available = 1;  
+       if (available < max)
+               max = available;
+               
+       omp_set_num_threads(max);
+
+       omp_set_lock(&nested_lock);
+       nested_used += max-1;
+       omp_unset_lock(&nested_lock);
+       
+}
+#endif //USE_THREADS
diff --git a/course/semester2/pprog/assignment1/nbody-bh/tree.h b/course/semester2/pprog/assignment1/nbody-bh/tree.h
new file mode 100644 (file)
index 0000000..a125b65
--- /dev/null
@@ -0,0 +1,76 @@
+/**
+ * @file tree.h
+ * @purpose Declaration of tree structures for Barnes Hut clustering algorithm for N-Body simulator
+ * @author Sam Moore (20503628) - 2012
+ */
+
+#ifndef _TREE_H
+#define _TREE_H
+
+#include "nbody.h"
+
+#define SUB_DIVISIONS 8
+
+// Define to break everything and nest the threading
+// (Program becomes impossibly slow, but feel free to try)
+// #define USE_THREADS
+
+/**
+ * Structure to represent each node of the tree (a cube (actually a prism) in space)
+ *     I call them.... "Data Prisms"
+ *     But that takes too long to type, so they are Node instead
+ */
+typedef struct n 
+{
+       float x[DIMENSIONS]; // The corner of the cube with smallest valued co-ordinates
+       float size[DIMENSIONS]; // The lengths of the cube faces.
+
+       Body * * body; // Array of pointers to bodies in the node; dynamically created
+       unsigned N; // Number of bodies in the node; valid length of array
+       unsigned allocated; //space allocated for bodies; used to dynamically resize array (doubles every time array is filled).
+
+       float mass;
+       float com[DIMENSIONS]; // Centre of Mass
+
+       struct n * children[SUB_DIVISIONS]; // children nodes (smaller data prisms)
+       struct n * parent; // parent node; the bodies in this node are also in the parent node (bigger data prism)
+
+       
+} Node;
+
+void Node_SetSpace(Node * node, float x[DIMENSIONS], float size[DIMENSIONS]); //set the position and volume of a Node
+void Node_Destroy(Node * node); // Cleanup a Node
+unsigned Node_FindBodies(Node * n, System * s); // Find all bodies in System s contained in Node n
+unsigned Node_Subdivide(Node * node, System * s); // Divide Node n into smaller nodes until each node has 1 Body in it
+
+float Node_CalculateMass(Node * node); // Calculate the total mass of a Node
+
+unsigned Node_AddBody(Node * n, Body * b); // Add a body to a Node
+
+unsigned Generate_Tree(System * s, Node * n); // Generate the tree of Nodes for the *first* time
+
+unsigned Update_Tree(System * s, Node * n); // Subsequently update the tree
+
+unsigned Node_Forces(Body * b, Node * node, float theta); // Calculate forces on body due to node. Theta is the approximation factor.
+
+void Node_FitSystem(Node * n, System * s); // Take a node and increase the size until it contains the entire system.
+
+
+Node * Node_Create(Node * parent); // Construct a node for the first time
+
+bool Node_ContainsBody(Node * n, Body * b); // Check if a Body is in a Node
+Body * Node_Body(Node * n, unsigned index); // Identify the n'th body in a Node. Required because the Body* array is slightly special.
+void Draw_Node(Node * n); // Draw a cube corresponding to Node n
+
+
+// Used if nested threading is desired; not recommended. Breaks things
+#ifdef USE_THREADS
+void Prepare_Threads(unsigned max); // Attempt to create "max" threads on the next #pragma omp parallel
+extern unsigned nested_used; // Number of nested threads created
+extern omp_lock_t nested_lock; // Lock around nested_used
+#endif //USE_THREADS
+
+
+#endif //_TREE_H
+
+//EOF
diff --git a/course/semester2/pprog/assignment1/nbody-bh/tree.h~ b/course/semester2/pprog/assignment1/nbody-bh/tree.h~
new file mode 100644 (file)
index 0000000..213c7d0
--- /dev/null
@@ -0,0 +1,76 @@
+/**
+ * @file tree.h
+ * @purpose Declaration of tree structures for Barnes Hut clustering algorithm for N-Body simulator
+ * @author Sam Moore (20503628) - 2012
+ */
+
+#ifndef _TREE_H
+#define _TREE_H
+
+#include "nbody.h"
+
+#define SUB_DIVISIONS 8
+
+// Define to break everything and nest the threading
+// (Program becomes impossibly slow, but feel free to try)
+// #define USE_THREADS
+
+/**
+ * Structure to represent each node of the tree (a cube (actually a prism) in space)
+ *     I call them.... "Data Prisms"
+ *     But that takes too long to type, so they are Node instead
+ */
+typedef struct n 
+{
+       float x[DIMENSIONS]; // The corner of the cube with smallest valued co-ordinates
+       float size[DIMENSIONS]; // The lengths of the cube faces.
+
+       Body * * body; // Array of pointers to bodies in the node; dynamically created
+       unsigned N; // Number of bodies in the node; valid length of array
+       unsigned allocated; //space allocated for bodies; used to dynamically resize array (doubles every time array is filled).
+
+       float mass;
+       float com[DIMENSIONS]; // Centre of Mass
+
+       struct n * children[SUB_DIVISIONS]; // children nodes (smaller data prisms)
+       struct n * parent; // parent node; the bodies in this node are also in the parent node (bigger data prism)
+
+       
+} Node;
+
+void Node_SetSpace(Node * node, float x[DIMENSIONS], float size[DIMENSIONS]); //set the position and volume of a Node
+void Node_Destroy(Node * node); // Cleanup a Node
+unsigned Node_FindBodies(Node * n, System * s); // Find all bodies in System s contained in Node n
+unsigned Node_Subdivide(Node * node, System * s); // Divide Node n into smaller nodes until each node has 1 Body in it
+
+float Node_CalculateMass(Node * node); // Calculate the total mass of a Node
+
+unsigned Node_AddBody(Node * n, Body * b); // Add a body to a Node
+
+unsigned Generate_Tree(System * s, Node * n); // Generate the tree of Nodes for the *first* time
+
+unsigned Update_Tree(System * s, Node * n); // Subsequently update the tree
+
+unsigned Node_Forces(Body * b, Node * node, float theta); // Calculate forces on body due to node. Theta is the approximation factor.
+
+void Node_FitSystem(Node * n, System * s); // Take a node and increase the size until it contains the entire system.
+
+
+Node * Node_Create(Node * parent); // Construct a node for the first time
+
+bool Node_ContainsBody(Node * n, Body * b); // Check if a Body is in a Node
+Body * Node_Body(Node * n, unsigned index); // Identify the n'th body in a Node. Required because the Body* array is slightly special.
+void Draw_Node(Node * n); // Draw a cube corresponding to Node n
+
+
+// Used if nested threading is desired; not recommended. Breaks things
+#ifdef USE_THREADS
+void Prepare_Threads(unsigned max); 
+extern unsigned nested_used;
+extern omp_lock_t nested_lock;
+#endif //USE_THREADS
+
+
+#endif //_TREE_H
+
+//EOF
diff --git a/course/semester2/pprog/assignment1/nbody-bh/tree.o b/course/semester2/pprog/assignment1/nbody-bh/tree.o
new file mode 100644 (file)
index 0000000..4d55d94
Binary files /dev/null and b/course/semester2/pprog/assignment1/nbody-bh/tree.o differ
diff --git a/course/semester2/pprog/assignment1/odict.py b/course/semester2/pprog/assignment1/odict.py
new file mode 100644 (file)
index 0000000..3bf708a
--- /dev/null
@@ -0,0 +1,328 @@
+# -*- coding: utf-8 -*-
+"""
+    odict
+    ~~~~~
+
+    This module is an example implementation of an ordered dict for the
+    collections module.  It's not written for performance (it actually
+    performs pretty bad) but to show how the API works.
+
+
+    Questions and Answers
+    =====================
+
+    Why would anyone need ordered dicts?
+
+        Dicts in python are unordered which means that the order of items when
+        iterating over dicts is undefined.  As a matter of fact it is most of
+        the time useless and differs from implementation to implementation.
+
+        Many developers stumble upon that problem sooner or later when
+        comparing the output of doctests which often does not match the order
+        the developer thought it would.
+
+        Also XML systems such as Genshi have their problems with unordered
+        dicts as the input and output ordering of tag attributes is often
+        mixed up because the ordering is lost when converting the data into
+        a dict.  Switching to lists is often not possible because the
+        complexity of a lookup is too high.
+
+        Another very common case is metaprogramming.  The default namespace
+        of a class in python is a dict.  With Python 3 it becomes possible
+        to replace it with a different object which could be an ordered dict.
+        Django is already doing something similar with a hack that assigns
+        numbers to some descriptors initialized in the class body of a
+        specific subclass to restore the ordering after class creation.
+
+        When porting code from programming languages such as PHP and Ruby
+        where the item-order in a dict is guaranteed it's also a great help
+        to have an equivalent data structure in Python to ease the transition.
+
+    Where are new keys added?
+
+        At the end.  This behavior is consistent with Ruby 1.9 Hashmaps
+        and PHP Arrays.  It also matches what common ordered dict
+        implementations do currently.
+
+    What happens if an existing key is reassigned?
+
+        The key is *not* moved.  This is consitent with existing
+        implementations and can be changed by a subclass very easily::
+
+            class movingodict(odict):
+                def __setitem__(self, key, value):
+                    self.pop(key, None)
+                    odict.__setitem__(self, key, value)
+
+        Moving keys to the end of a ordered dict on reassignment is not
+        very useful for most applications.
+
+    Does it mean the dict keys are sorted by a sort expression?
+
+        That's not the case.  The odict only guarantees that there is an order
+        and that newly inserted keys are inserted at the end of the dict.  If
+        you want to sort it you can do so, but newly added keys are again added
+        at the end of the dict.
+
+    I initializes the odict with a dict literal but the keys are not
+    ordered like they should!
+
+        Dict literals in Python generate dict objects and as such the order of
+        their items is not guaranteed.  Before they are passed to the odict
+        constructor they are already unordered.
+
+    What happens if keys appear multiple times in the list passed to the
+    constructor?
+
+        The same as for the dict.  The latter item overrides the former.  This
+        has the side-effect that the position of the first key is used because
+        the key is actually overwritten:
+
+        >>> odict([('a', 1), ('b', 2), ('a', 3)])
+        odict.odict([('a', 3), ('b', 2)])
+
+        This behavor is consistent with existing implementation in Python
+        and the PHP array and the hashmap in Ruby 1.9.
+
+    This odict doesn't scale!
+
+        Yes it doesn't.  The delitem operation is O(n).  This is file is a
+        mockup of a real odict that could be implemented for collections
+        based on an linked list.
+
+    Why is there no .insert()?
+
+        There are few situations where you really want to insert a key at
+        an specified index.  To now make the API too complex the proposed
+        solution for this situation is creating a list of items, manipulating
+        that and converting it back into an odict:
+
+        >>> d = odict([('a', 42), ('b', 23), ('c', 19)])
+        >>> l = d.items()
+        >>> l.insert(1, ('x', 0))
+        >>> odict(l)
+        odict.odict([('a', 42), ('x', 0), ('b', 23), ('c', 19)])
+
+    :copyright: (c) 2008 by Armin Ronacher and PEP 273 authors.
+    :license: modified BSD license.
+"""
+from itertools import izip, imap
+from copy import deepcopy
+
+missing = object()
+
+
+class odict(dict):
+    """
+    Ordered dict example implementation.
+
+    This is the proposed interface for a an ordered dict as proposed on the
+    Python mailinglist (proposal_).
+
+    It's a dict subclass and provides some list functions.  The implementation
+    of this class is inspired by the implementation of Babel but incorporates
+    some ideas from the `ordereddict`_ and Django's ordered dict.
+
+    The constructor and `update()` both accept iterables of tuples as well as
+    mappings:
+
+    >>> d = odict([('a', 'b'), ('c', 'd')])
+    >>> d.update({'foo': 'bar'})
+    >>> d
+    odict.odict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])
+    
+    Keep in mind that when updating from dict-literals the order is not
+    preserved as these dicts are unsorted!
+
+    You can copy an odict like a dict by using the constructor, `copy.copy`
+    or the `copy` method and make deep copies with `copy.deepcopy`:
+
+    >>> from copy import copy, deepcopy
+    >>> copy(d)
+    odict.odict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])
+    >>> d.copy()
+    odict.odict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])
+    >>> odict(d)
+    odict.odict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])
+    >>> d['spam'] = []
+    >>> d2 = deepcopy(d)
+    >>> d2['spam'].append('eggs')
+    >>> d
+    odict.odict([('a', 'b'), ('c', 'd'), ('foo', 'bar'), ('spam', [])])
+    >>> d2
+    odict.odict([('a', 'b'), ('c', 'd'), ('foo', 'bar'), ('spam', ['eggs'])])
+
+    All iteration methods as well as `keys`, `values` and `items` return
+    the values ordered by the the time the key-value pair is inserted:
+
+    >>> d.keys()
+    ['a', 'c', 'foo', 'spam']
+    >>> d.values()
+    ['b', 'd', 'bar', []]
+    >>> d.items()
+    [('a', 'b'), ('c', 'd'), ('foo', 'bar'), ('spam', [])]
+    >>> list(d.iterkeys())
+    ['a', 'c', 'foo', 'spam']
+    >>> list(d.itervalues())
+    ['b', 'd', 'bar', []]
+    >>> list(d.iteritems())
+    [('a', 'b'), ('c', 'd'), ('foo', 'bar'), ('spam', [])]
+
+    Index based lookup is supported too by `byindex` which returns the
+    key/value pair for an index:
+
+    >>> d.byindex(2)
+    ('foo', 'bar')
+
+    You can reverse the odict as well:
+
+    >>> d.reverse()
+    >>> d
+    odict.odict([('spam', []), ('foo', 'bar'), ('c', 'd'), ('a', 'b')])
+    
+    And sort it like a list:
+
+    >>> d.sort(key=lambda x: x[0].lower())
+    >>> d
+    odict.odict([('a', 'b'), ('c', 'd'), ('foo', 'bar'), ('spam', [])])
+
+    .. _proposal: http://thread.gmane.org/gmane.comp.python.devel/95316
+    .. _ordereddict: http://www.xs4all.nl/~anthon/Python/ordereddict/
+    """
+
+    def __init__(self, *args, **kwargs):
+        dict.__init__(self)
+        self._keys = []
+        self.update(*args, **kwargs)
+
+    def __delitem__(self, key):
+        dict.__delitem__(self, key)
+        self._keys.remove(key)
+
+    def __setitem__(self, key, item):
+        if key not in self:
+            self._keys.append(key)
+        dict.__setitem__(self, key, item)
+
+    def __deepcopy__(self, memo=None):
+        if memo is None:
+            memo = {}
+        d = memo.get(id(self), missing)
+        if d is not missing:
+            return d
+        memo[id(self)] = d = self.__class__()
+        dict.__init__(d, deepcopy(self.items(), memo))
+        d._keys = self._keys[:]
+        return d
+
+    def __getstate__(self):
+        return {'items': dict(self), 'keys': self._keys}
+
+    def __setstate__(self, d):
+        self._keys = d['keys']
+        dict.update(d['items'])
+
+    def __reversed__(self):
+        return reversed(self._keys)
+
+    def __eq__(self, other):
+        if isinstance(other, odict):
+            if not dict.__eq__(self, other):
+                return False
+            return self.items() == other.items()
+        return dict.__eq__(self, other)
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+    def __cmp__(self, other):
+        if isinstance(other, odict):
+            return cmp(self.items(), other.items())
+        elif isinstance(other, dict):
+            return dict.__cmp__(self, other)
+        return NotImplemented
+
+    @classmethod
+    def fromkeys(cls, iterable, default=None):
+        return cls((key, default) for key in iterable)
+
+    def clear(self):
+        del self._keys[:]
+        dict.clear(self)
+
+    def copy(self):
+        return self.__class__(self)
+
+    def items(self):
+        return zip(self._keys, self.values())
+
+    def iteritems(self):
+        return izip(self._keys, self.itervalues())
+
+    def keys(self):
+        return self._keys[:]
+
+    def iterkeys(self):
+        return iter(self._keys)
+
+    def pop(self, key, default=missing):
+        if default is missing:
+            return dict.pop(self, key)
+        elif key not in self:
+            return default
+        self._keys.remove(key)
+        return dict.pop(self, key, default)
+
+    def popitem(self, key):
+        self._keys.remove(key)
+        return dict.popitem(key)
+
+    def setdefault(self, key, default=None):
+        if key not in self:
+            self._keys.append(key)
+        dict.setdefault(self, key, default)
+
+    def update(self, *args, **kwargs):
+        sources = []
+        if len(args) == 1:
+            if hasattr(args[0], 'iteritems'):
+                sources.append(args[0].iteritems())
+            else:
+                sources.append(iter(args[0]))
+        elif args:
+            raise TypeError('expected at most one positional argument')
+        if kwargs:
+            sources.append(kwargs.iteritems())
+        for iterable in sources:
+            for key, val in iterable:
+                self[key] = val
+
+    def values(self):
+        return map(self.get, self._keys)
+
+    def itervalues(self):
+        return imap(self.get, self._keys)
+
+    def index(self, item):
+        return self._keys.index(item)
+
+    def byindex(self, item):
+        key = self._keys[item]
+        return (key, dict.__getitem__(self, key))
+
+    def reverse(self):
+        self._keys.reverse()
+
+    def sort(self, *args, **kwargs):
+        self._keys.sort(*args, **kwargs)
+
+    def __repr__(self):
+        return 'odict.odict(%r)' % self.items()
+
+    __copy__ = copy
+    __iter__ = iterkeys
+
+
+if __name__ == '__main__':
+    import doctest
+    doctest.testmod()
diff --git a/course/semester2/pprog/assignment1/odict.pyc b/course/semester2/pprog/assignment1/odict.pyc
new file mode 100644 (file)
index 0000000..310adec
Binary files /dev/null and b/course/semester2/pprog/assignment1/odict.pyc differ
diff --git a/course/semester2/pprog/assignment1/openmp/graphics.o b/course/semester2/pprog/assignment1/openmp/graphics.o
new file mode 100644 (file)
index 0000000..2778e73
Binary files /dev/null and b/course/semester2/pprog/assignment1/openmp/graphics.o differ
diff --git a/course/semester2/pprog/assignment1/openmp/main.o b/course/semester2/pprog/assignment1/openmp/main.o
new file mode 100644 (file)
index 0000000..314825d
Binary files /dev/null and b/course/semester2/pprog/assignment1/openmp/main.o differ
diff --git a/course/semester2/pprog/assignment1/openmp/nbody b/course/semester2/pprog/assignment1/openmp/nbody
new file mode 100755 (executable)
index 0000000..992f565
Binary files /dev/null and b/course/semester2/pprog/assignment1/openmp/nbody differ
index 053625b..bc2d173 100644 (file)
@@ -13,6 +13,8 @@
 System * sub_system = NULL; 
 #endif //OVER_ENGINEERED
 
+omp_lock_t runstate_lock;
+
 /**
  * @function Simulation_Run
  * @purpose Start the simulation
@@ -20,7 +22,7 @@ System * sub_system = NULL;
  */
 void Simulation_Run(int argc, char ** argv)
 {      
-       
+       omp_init_lock(&runstate_lock);
        if (options.num_threads == 0)
                options.num_threads = omp_get_max_threads();
 
@@ -38,15 +40,21 @@ void Simulation_Run(int argc, char ** argv)
                        }       
 
 
-                       #pragma omp parallel sections num_threads(2)
+                       #pragma omp parallel num_threads(2)
                        {
-                               #pragma omp section
-                               {
-                                       Compute();
-                               }
-                               #pragma omp section
+                               // This can't be done with sections!
+                               // Because glut is useless, and can only be dealt with in the main thread
+                               // I just hope that thread "0" is always the main thread!
+                               if (omp_get_thread_num() == 0) // #pragma omp section
                                {
+                                       //printf("Thread %d gets graphics\n", omp_get_thread_num());
                                        glutMainLoop();
+                                       QuitProgram(false); // Program gets to here if the window is quit
+                               } 
+                               else // #pragma omp section
+                               {
+                                       //printf("Thread %d gets computations\n", omp_get_thread_num());
+                                       Compute();
                                }
                        }
                        return;
@@ -55,7 +63,7 @@ void Simulation_Run(int argc, char ** argv)
        Compute();
 
 
-
+       omp_destroy_lock(&runstate_lock);
 }
 
 
@@ -134,5 +142,15 @@ void Compute(void)
                                
                }
        }
+       QuitProgram(false);
+}
+
+void QuitProgram(bool error)
+{
+       if (runstate == QUIT || runstate == QUIT_ERROR)
+               return;
+       omp_set_lock(&runstate_lock);
+       runstate = (error) ? QUIT_ERROR : QUIT;
+       omp_unset_lock(&runstate_lock);
 }
 
index aea97bf..d128a95 100644 (file)
@@ -31,7 +31,8 @@ void Simulation_Run(int argc, char ** argv);
 #define AfterDraw() (void)0
 //void AfterDraw();
 
-
+#undef QuitProgram
+void QuitProgram(bool error);
 
 void Compute(void);
 void Compute2(void);
diff --git a/course/semester2/pprog/assignment1/openmp/nbody.o b/course/semester2/pprog/assignment1/openmp/nbody.o
new file mode 100644 (file)
index 0000000..33e5c04
Binary files /dev/null and b/course/semester2/pprog/assignment1/openmp/nbody.o differ
diff --git a/course/semester2/pprog/assignment1/performance_time_vs_steps.png b/course/semester2/pprog/assignment1/performance_time_vs_steps.png
new file mode 100644 (file)
index 0000000..c7fa4b3
Binary files /dev/null and b/course/semester2/pprog/assignment1/performance_time_vs_steps.png differ
diff --git a/course/semester2/pprog/assignment1/report/report.aux b/course/semester2/pprog/assignment1/report/report.aux
new file mode 100644 (file)
index 0000000..a25d880
--- /dev/null
@@ -0,0 +1,41 @@
+\relax 
+\ifx\hyper@anchor\@undefined
+\global \let \oldcontentsline\contentsline
+\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global \let \oldnewlabel\newlabel
+\gdef \newlabel#1#2{\newlabelxx{#1}#2}
+\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\let \contentsline\oldcontentsline
+\let \newlabel\oldnewlabel}
+\else
+\global \let \hyper@last\relax 
+\fi
+
+\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{2}{section.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {2}Euler's Method}{2}{section.2}}
+\@writefile{toc}{\contentsline {section}{\numberline {3}Parallelisation}{3}{section.3}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Graphics}{3}{subsection.3.1}}
+\@writefile{toc}{\contentsline {section}{\numberline {4}POSIX Threads (pthreads)}{4}{section.4}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Barriers}{4}{subsection.4.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Division of Labour}{4}{subsection.4.2}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Single Threaded Section}{5}{subsection.4.3}}
+\@writefile{toc}{\contentsline {section}{\numberline {5}OpenMP}{5}{section.5}}
+\@writefile{toc}{\contentsline {section}{\numberline {6}Barnes Hut Algorithm}{5}{section.6}}
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Barnes Hut - One body per cube\relax }}{6}{figure.1}}
+\newlabel{cubes.png}{{1}{6}{Barnes Hut - One body per cube\relax \relax }{figure.1}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Errors}{6}{subsection.6.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Performance for different $\theta $ values}{6}{subsection.6.2}}
+\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Barnes Hut mean error\relax }}{7}{figure.2}}
+\newlabel{error_graph.png}{{2}{7}{Barnes Hut mean error\relax \relax }{figure.2}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Barnes Hut single threaded performance\relax }}{8}{figure.3}}
+\newlabel{efficiency.png}{{3}{8}{Barnes Hut single threaded performance\relax \relax }{figure.3}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {7}Performance Analysis}{9}{section.7}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.1}Time vs Steps}{9}{subsection.7.1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.2}Time to compute vs Number of Bodies}{9}{subsection.7.2}}
+\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Implementation Performance\relax }}{10}{figure.4}}
+\newlabel{time_vs_steps.png}{{4}{10}{Implementation Performance\relax \relax }{figure.4}{}}
+\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Efficiency vs $n$\relax }}{11}{figure.5}}
+\newlabel{time_vs_n.png}{{5}{11}{Efficiency vs $n$\relax \relax }{figure.5}{}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {7.3}Analysis with Callgrind}{12}{subsection.7.3}}
+\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Kcachegrind reveals why my program is slow\relax }}{13}{figure.6}}
+\newlabel{kcachegrind.png}{{6}{13}{Kcachegrind reveals why my program is slow\relax \relax }{figure.6}{}}
diff --git a/course/semester2/pprog/assignment1/report/report.dvi b/course/semester2/pprog/assignment1/report/report.dvi
new file mode 100644 (file)
index 0000000..abc93f4
Binary files /dev/null and b/course/semester2/pprog/assignment1/report/report.dvi differ
diff --git a/course/semester2/pprog/assignment1/report/report.log b/course/semester2/pprog/assignment1/report/report.log
new file mode 100644 (file)
index 0000000..1399560
--- /dev/null
@@ -0,0 +1,531 @@
+This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=pdflatex 2012.8.19)  3 OCT 2012 15:46
+entering extended mode
+ %&-line parsing enabled.
+**\nonstopmode \input{"/home/sam/Documents/University/honours/course/semester2/
+pprog/assignment1/report/report.tex"}
+
+(/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/repo
+rt/report.tex (/usr/share/texmf-texlive/tex/latex/base/article.cls
+Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
+(/usr/share/texmf-texlive/tex/latex/base/size10.clo
+File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+)
+(/usr/share/texmf-texlive/tex/latex/graphics/graphicx.sty
+Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
+
+(/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks14
+)
+(/usr/share/texmf-texlive/tex/latex/graphics/graphics.sty
+Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
+
+(/usr/share/texmf-texlive/tex/latex/graphics/trig.sty
+Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
+)
+(/etc/texmf/tex/latex/config/graphics.cfg
+File: graphics.cfg 2009/08/28 v1.8 graphics configuration of TeX Live
+)
+Package graphics Info: Driver file: pdftex.def on input line 91.
+
+(/usr/share/texmf-texlive/tex/latex/pdftex-def/pdftex.def
+File: pdftex.def 2010/03/12 v0.04p Graphics/color for pdfTeX
+\Gread@gobject=\count87
+))
+\Gin@req@height=\dimen103
+\Gin@req@width=\dimen104
+)
+(/usr/share/texmf-texlive/tex/latex/caption/caption.sty
+Package: caption 2009/10/09 v3.1k Customizing captions (AR)
+
+(/usr/share/texmf-texlive/tex/latex/caption/caption3.sty
+Package: caption3 2009/10/09 v3.1k caption3 kernel (AR)
+\captionmargin=\dimen105
+\captionmargin@=\dimen106
+\captionwidth=\dimen107
+\caption@indent=\dimen108
+\caption@parindent=\dimen109
+\caption@hangindent=\dimen110
+)
+\c@ContinuedFloat=\count88
+)
+(/usr/share/texmf-texlive/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2000/07/18 v2.13 AMS math features
+\@mathmargin=\skip43
+
+For additional information on amsmath, use the `?' option.
+(/usr/share/texmf-texlive/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01
+
+(/usr/share/texmf-texlive/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0
+\@emptytoks=\toks15
+\ex@=\dimen111
+))
+(/usr/share/texmf-texlive/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d
+\pmbraise@=\dimen112
+)
+(/usr/share/texmf-texlive/tex/latex/amsmath/amsopn.sty
+Package: amsopn 1999/12/14 v2.01 operator names
+)
+\inf@bad=\count89
+LaTeX Info: Redefining \frac on input line 211.
+\uproot@=\count90
+\leftroot@=\count91
+LaTeX Info: Redefining \overline on input line 307.
+\classnum@=\count92
+\DOTSCASE@=\count93
+LaTeX Info: Redefining \ldots on input line 379.
+LaTeX Info: Redefining \dots on input line 382.
+LaTeX Info: Redefining \cdots on input line 467.
+\Mathstrutbox@=\box26
+\strutbox@=\box27
+\big@size=\dimen113
+LaTeX Font Info:    Redeclaring font encoding OML on input line 567.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 568.
+\macc@depth=\count94
+\c@MaxMatrixCols=\count95
+\dotsspace@=\muskip10
+\c@parentequation=\count96
+\dspbrk@lvl=\count97
+\tag@help=\toks16
+\row@=\count98
+\column@=\count99
+\maxfields@=\count100
+\andhelp@=\toks17
+\eqnshift@=\dimen114
+\alignsep@=\dimen115
+\tagshift@=\dimen116
+\tagwidth@=\dimen117
+\totwidth@=\dimen118
+\lineht@=\dimen119
+\@envbody=\toks18
+\multlinegap=\skip44
+\multlinetaggap=\skip45
+\mathdisplay@stack=\toks19
+LaTeX Info: Redefining \[ on input line 2666.
+LaTeX Info: Redefining \] on input line 2667.
+)
+(/usr/share/texmf-texlive/tex/latex/tools/bm.sty
+Package: bm 2004/02/26 v1.1c Bold Symbol Support (DPC/FMi)
+\symboldoperators=\mathgroup4
+\symboldletters=\mathgroup5
+\symboldsymbols=\mathgroup6
+LaTeX Font Info:    Redeclaring math alphabet \mathbf on input line 138.
+LaTeX Info: Redefining \bm on input line 204.
+)
+(/usr/share/texmf-texlive/tex/latex/fancyhdr/fancyhdr.sty
+\fancy@headwidth=\skip46
+\f@ncyO@elh=\skip47
+\f@ncyO@erh=\skip48
+\f@ncyO@olh=\skip49
+\f@ncyO@orh=\skip50
+\f@ncyO@elf=\skip51
+\f@ncyO@erf=\skip52
+\f@ncyO@olf=\skip53
+\f@ncyO@orf=\skip54
+)
+(/usr/share/texmf-texlive/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2009/10/09 v6.79a Hypertext links for LaTeX
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/ifpdf.sty
+Package: ifpdf 2009/04/10 v2.0 Provides the ifpdf switch (HO)
+Package ifpdf Info: pdfTeX in pdf mode detected.
+)
+(/usr/share/texmf-texlive/tex/generic/oberdiek/ifvtex.sty
+Package: ifvtex 2008/11/04 v1.4 Switches for detecting VTeX and its modes (HO)
+Package ifvtex Info: VTeX not detected.
+)
+(/usr/share/texmf-texlive/tex/generic/ifxetex/ifxetex.sty
+Package: ifxetex 2009/01/23 v0.5 Provides ifxetex conditional
+)
+(/usr/share/texmf-texlive/tex/latex/oberdiek/hycolor.sty
+Package: hycolor 2009/10/02 v1.5 Code for color options of hyperref/bookmark (H
+O)
+
+(/usr/share/texmf-texlive/tex/latex/oberdiek/xcolor-patch.sty
+Package: xcolor-patch 2009/10/02 xcolor patch
+))
+\@linkdim=\dimen120
+\Hy@linkcounter=\count101
+\Hy@pagecounter=\count102
+
+(/usr/share/texmf-texlive/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2009/10/09 v6.79a Hyperref: PDFDocEncoding definition (HO)
+)
+(/usr/share/texmf-texlive/tex/generic/oberdiek/etexcmds.sty
+Package: etexcmds 2007/12/12 v1.2 Prefix for e-TeX command names (HO)
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/infwarerr.sty
+Package: infwarerr 2007/09/09 v1.2 Providing info/warning/message (HO)
+)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
+(etexcmds)             that some package has redefined \expanded.
+(etexcmds)             In the latter case, load this package earlier.
+)
+(/usr/share/texmf-texlive/tex/latex/latexconfig/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
+)
+(/usr/share/texmf-texlive/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2009/08/13 v3.4 Keyval support for LaTeX options (HO)
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/kvsetkeys.sty
+Package: kvsetkeys 2009/07/30 v1.5 Key value parser with default handler suppor
+t (HO)
+))
+Package hyperref Info: Hyper figures OFF on input line 2975.
+Package hyperref Info: Link nesting OFF on input line 2980.
+Package hyperref Info: Hyper index ON on input line 2983.
+Package hyperref Info: Plain pages OFF on input line 2990.
+Package hyperref Info: Backreferencing OFF on input line 2995.
+
+Implicit mode ON; LaTeX internals redefined
+Package hyperref Info: Bookmarks ON on input line 3191.
+(/usr/share/texmf-texlive/tex/latex/ltxmisc/url.sty
+\Urlmuskip=\muskip11
+Package: url 2006/04/12  ver 3.3  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 3428.
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/bitset.sty
+Package: bitset 2007/09/28 v1.0 Data type bit set (HO)
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/intcalc.sty
+Package: intcalc 2007/09/27 v1.1 Expandable integer calculations (HO)
+)
+(/usr/share/texmf-texlive/tex/generic/oberdiek/bigintcalc.sty
+Package: bigintcalc 2007/11/11 v1.1 Expandable big integer calculations (HO)
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/pdftexcmds.sty
+Package: pdftexcmds 2009/09/23 v0.6 LuaTeX support for pdfTeX utility functions
+ (HO)
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/ifluatex.sty
+Package: ifluatex 2009/04/17 v1.2 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+)
+(/usr/share/texmf-texlive/tex/generic/oberdiek/ltxcmds.sty
+Package: ltxcmds 2009/08/05 v1.0 Some LaTeX kernel commands for general use (HO
+)
+)
+Package pdftexcmds Info: LuaTeX not detected.
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+)))
+\Fld@menulength=\count103
+\Field@Width=\dimen121
+\Fld@charsize=\dimen122
+\Field@toks=\toks20
+Package hyperref Info: Hyper figures OFF on input line 4377.
+Package hyperref Info: Link nesting OFF on input line 4382.
+Package hyperref Info: Hyper index ON on input line 4385.
+Package hyperref Info: backreferencing OFF on input line 4392.
+Package hyperref Info: Link coloring OFF on input line 4397.
+Package hyperref Info: Link coloring with OCG OFF on input line 4402.
+Package hyperref Info: PDF/A mode OFF on input line 4407.
+
+(/usr/share/texmf-texlive/tex/generic/oberdiek/atbegshi.sty
+Package: atbegshi 2008/07/31 v1.9 At begin shipout hook (HO)
+)
+\Hy@abspage=\count104
+\c@Item=\count105
+\c@Hfootnote=\count106
+)
+*hyperref using default driver hpdftex*
+(/usr/share/texmf-texlive/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2009/10/09 v6.79a Hyperref driver for pdfTeX
+\Fld@listcount=\count107
+)
+(/usr/share/texmf-texlive/tex/latex/graphics/lscape.sty
+Package: lscape 2000/10/22 v3.01 Landscape Pages (DPC)
+)
+(/usr/share/texmf-texlive/tex/latex/graphics/color.sty
+Package: color 2005/11/14 v1.0j Standard LaTeX Color (DPC)
+
+(/etc/texmf/tex/latex/config/color.cfg
+File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
+)
+Package color Info: Driver file: pdftex.def on input line 130.
+)
+(/usr/share/texmf-texlive/tex/latex/listings/listings.sty
+\lst@mode=\count108
+\lst@gtempboxa=\box28
+\lst@token=\toks21
+\lst@length=\count109
+\lst@currlwidth=\dimen123
+\lst@column=\count110
+\lst@pos=\count111
+\lst@lostspace=\dimen124
+\lst@width=\dimen125
+\lst@newlines=\count112
+\lst@lineno=\count113
+\lst@maxwidth=\dimen126
+
+(/usr/share/texmf-texlive/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 2007/02/22 1.4 (Carsten Heinz)
+\c@lstnumber=\count114
+\lst@skipnumbers=\count115
+\lst@framebox=\box29
+)
+(/usr/share/texmf-texlive/tex/latex/listings/listings.cfg
+File: listings.cfg 2007/02/22 1.4 listings configuration
+))
+Package: listings 2007/02/22 1.4 (Carsten Heinz)
+
+(/usr/share/texmf-texlive/tex/latex/listings/lstlang1.sty
+File: lstlang1.sty 2004/09/05 1.3 listings language file
+)
+(/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/repo
+rt/report.aux)
+\openout1 = `report.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 49.
+LaTeX Font Info:    ... okay on input line 49.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 49.
+LaTeX Font Info:    ... okay on input line 49.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 49.
+LaTeX Font Info:    ... okay on input line 49.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 49.
+LaTeX Font Info:    ... okay on input line 49.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 49.
+LaTeX Font Info:    ... okay on input line 49.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 49.
+LaTeX Font Info:    ... okay on input line 49.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 49.
+LaTeX Font Info:    ... okay on input line 49.
+ (/usr/share/texmf-texlive/tex/context/base/supp-pdf.mkii
+[Loading MPS to PDF converter (version 2006.09.02).]
+\scratchcounter=\count116
+\scratchdimen=\dimen127
+\scratchbox=\box30
+\nofMPsegments=\count117
+\nofMParguments=\count118
+\everyMPshowfont=\toks22
+\MPscratchCnt=\count119
+\MPscratchDim=\dimen128
+\MPnumerator=\count120
+\everyMPtoPDFconversion=\toks23
+)
+Package caption Info: Begin \AtBeginDocument code.
+Package caption Info: hyperref package is loaded.
+Package caption Info: listings package is loaded.
+Package caption Info: End \AtBeginDocument code.
+Package hyperref Info: Link coloring OFF on input line 49.
+ (/usr/share/texmf-texlive/tex/latex/hyperref/nameref.sty
+Package: nameref 2007/05/29 v2.31 Cross-referencing by name of section
+
+(/usr/share/texmf-texlive/tex/latex/oberdiek/refcount.sty
+Package: refcount 2008/08/11 v3.1 Data extraction from references (HO)
+)
+\c@section@level=\count121
+)
+LaTeX Info: Redefining \ref on input line 49.
+LaTeX Info: Redefining \pageref on input line 49.
+
+(/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/repo
+rt/report.out)
+(/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/repo
+rt/report.out)
+\@outlinefile=\write3
+\openout3 = `report.out'.
+
+\AtBeginShipoutBox=\box31
+\c@lstlisting=\count122
+
+(/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/repo
+rt/report.toc)
+\tf@toc=\write4
+\openout4 = `report.toc'.
+
+ [1
+
+{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
+LaTeX Font Info:    Try loading font information for OMS+cmr on input line 99.
+
+(/usr/share/texmf-texlive/tex/latex/base/omscmr.fd
+File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
+)
+LaTeX Font Info:    Font shape `OMS/cmr/m/n' in size <9> not available
+(Font)              Font shape `OMS/cmsy/m/n' tried instead on input line 99.
+ [2] [3] [4]
+</home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbod
+y-bh/cubes.png, id=158, 777.90625pt x 693.59125pt>
+File: /home/sam/Documents/University/honours/course/semester2/pprog/assignment1
+/nbody-bh/cubes.png Graphic file (type png)
+
+<use /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/
+nbody-bh/cubes.png>
+
+Package caption Warning: The option `hypcap=true' will be ignored for this
+(caption)                particular \caption on input line 216.
+See the caption package documentation for explanation.
+
+[5]
+
+Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
+(hyperref)                removing `math shift' on input line 226.
+
+
+Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
+(hyperref)                removing `\theta' on input line 226.
+
+
+Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
+(hyperref)                removing `math shift' on input line 226.
+
+[6 </home/sam/Documents/University/honours/course/semester2/pprog/assignment1/n
+body-bh/cubes.png (PNG copy)>]
+</home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbod
+y-bh/error_graph.png, id=175, 1326.9575pt x 653.44125pt>
+File: /home/sam/Documents/University/honours/course/semester2/pprog/assignment1
+/nbody-bh/error_graph.png Graphic file (type png)
+
+<use /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/
+nbody-bh/error_graph.png>
+
+Package caption Warning: The option `hypcap=true' will be ignored for this
+(caption)                particular \caption on input line 235.
+See the caption package documentation for explanation.
+
+
+Overfull \hbox (39.2236pt too wide) in paragraph at lines 234--235
+ [] 
+ []
+
+
+</home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbod
+y-bh/efficiency.png, id=176, 1363.0925pt x 654.445pt>
+File: /home/sam/Documents/University/honours/course/semester2/pprog/assignment1
+/nbody-bh/efficiency.png Graphic file (type png)
+
+<use /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/
+nbody-bh/efficiency.png>
+
+Package caption Warning: The option `hypcap=true' will be ignored for this
+(caption)                particular \caption on input line 240.
+See the caption package documentation for explanation.
+
+
+Overfull \hbox (57.29106pt too wide) in paragraph at lines 239--240
+ [] 
+ []
+
+[7
+
+ </home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbo
+dy-bh/error_graph.png (PNG copy)>] [8 </home/sam/Documents/University/honours/c
+ourse/semester2/pprog/assignment1/nbody-bh/efficiency.png (PNG copy)>]
+LaTeX Font Info:    Font shape `OMS/cmr/m/n' in size <10> not available
+(Font)              Font shape `OMS/cmsy/m/n' tried instead on input line 255.
+
+[9
+
+]
+</home/sam/Documents/University/honours/course/semester2/pprog/assignment1/perf
+ormance_time_vs_steps.png, id=194, 1355.0625pt x 655.44875pt>
+File: /home/sam/Documents/University/honours/course/semester2/pprog/assignment1
+/performance_time_vs_steps.png Graphic file (type png)
+
+<use /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/
+performance_time_vs_steps.png>
+
+Package caption Warning: The option `hypcap=true' will be ignored for this
+(caption)                particular \caption on input line 278.
+See the caption package documentation for explanation.
+
+
+Overfull \hbox (53.27608pt too wide) in paragraph at lines 277--278
+ [] 
+ []
+
+
+</home/sam/Documents/University/honours/course/semester2/pprog/assignment1/time
+_vs_n.png, id=195, 1355.0625pt x 659.46375pt>
+File: /home/sam/Documents/University/honours/course/semester2/pprog/assignment1
+/time_vs_n.png Graphic file (type png)
+
+<use /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/
+time_vs_n.png>
+
+Package caption Warning: The option `hypcap=true' will be ignored for this
+(caption)                particular \caption on input line 284.
+See the caption package documentation for explanation.
+
+
+Overfull \hbox (53.27608pt too wide) in paragraph at lines 283--284
+ [] 
+ []
+
+[10
+
+ </home/sam/Documents/University/honours/course/semester2/pprog/assignment1/per
+formance_time_vs_steps.png (PNG copy)>] [11 </home/sam/Documents/University/hon
+ours/course/semester2/pprog/assignment1/time_vs_n.png (PNG copy)>] [12
+
+]
+</home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbod
+y-bh/kcachegrind.png, id=215, 1371.1225pt x 770.88pt>
+File: /home/sam/Documents/University/honours/course/semester2/pprog/assignment1
+/nbody-bh/kcachegrind.png Graphic file (type png)
+
+<use /home/sam/Documents/University/honours/course/semester2/pprog/assignment1/
+nbody-bh/kcachegrind.png>
+
+Package caption Warning: The option `hypcap=true' will be ignored for this
+(caption)                particular \caption on input line 310.
+See the caption package documentation for explanation.
+
+
+Overfull \hbox (61.30605pt too wide) in paragraph at lines 309--310
+ [] 
+ []
+
+[13
+
+ </home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbo
+dy-bh/kcachegrind.png (PNG copy)>]
+(/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/repo
+rt/report.aux) ) 
+Here is how much of TeX's memory you used:
+ 7377 strings out of 495061
+ 110393 string characters out of 1182621
+ 230909 words of memory out of 3000000
+ 10356 multiletter control sequences out of 15000+50000
+ 15617 words of font info for 55 fonts, out of 3000000 for 9000
+ 28 hyphenation exceptions out of 8191
+ 39i,13n,43p,849b,1217s stack positions out of 5000i,500n,10000p,200000b,50000s
+</usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmbx10
+.pfb></usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/
+share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmbx9.pfb></usr/share/texmf-
+texlive/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/share/texmf-texlive/fon
+ts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share/texmf-texlive/fonts/type1/pu
+blic/amsfonts/cm/cmmi7.pfb></usr/share/texmf-texlive/fonts/type1/public/amsfont
+s/cm/cmmib10.pfb></usr/share/texmf-texlive/fonts/type1/public/amsfonts/cmextra/
+cmmib7.pfb></usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr10.pfb><
+/usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/t
+exmf-texlive/fonts/type1/public/amsfonts/cm/cmr5.pfb></usr/share/texmf-texlive/
+fonts/type1/public/amsfonts/cm/cmr7.pfb></usr/share/texmf-texlive/fonts/type1/p
+ublic/amsfonts/cm/cmr9.pfb></usr/share/texmf-texlive/fonts/type1/public/amsfont
+s/cm/cmsy10.pfb></usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmsy9.
+pfb></usr/share/texmf-texlive/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/s
+hare/texmf-texlive/fonts/type1/public/amsfonts/cm/cmtt10.pfb>
+Output written on report.pdf (13 pages, 900519 bytes).
+PDF statistics:
+ 294 PDF objects out of 1000 (max. 8388607)
+ 81 named destinations out of 1000 (max. 500000)
+ 159 words of extra memory for PDF output out of 10000 (max. 10000000)
+
diff --git a/course/semester2/pprog/assignment1/report/report.out b/course/semester2/pprog/assignment1/report/report.out
new file mode 100644 (file)
index 0000000..425dc8b
--- /dev/null
@@ -0,0 +1,16 @@
+\BOOKMARK [1][-]{section.1}{Introduction}{}
+\BOOKMARK [1][-]{section.2}{Euler's Method}{}
+\BOOKMARK [1][-]{section.3}{Parallelisation}{}
+\BOOKMARK [2][-]{subsection.3.1}{Graphics}{section.3}
+\BOOKMARK [1][-]{section.4}{POSIX Threads \(pthreads\)}{}
+\BOOKMARK [2][-]{subsection.4.1}{Barriers}{section.4}
+\BOOKMARK [2][-]{subsection.4.2}{Division of Labour}{section.4}
+\BOOKMARK [2][-]{subsection.4.3}{Single Threaded Section}{section.4}
+\BOOKMARK [1][-]{section.5}{OpenMP}{}
+\BOOKMARK [1][-]{section.6}{Barnes Hut Algorithm}{}
+\BOOKMARK [2][-]{subsection.6.1}{Errors}{section.6}
+\BOOKMARK [2][-]{subsection.6.2}{Performance for different \040values}{section.6}
+\BOOKMARK [1][-]{section.7}{Performance Analysis}{}
+\BOOKMARK [2][-]{subsection.7.1}{Time vs Steps}{section.7}
+\BOOKMARK [2][-]{subsection.7.2}{Time to compute vs Number of Bodies}{section.7}
+\BOOKMARK [2][-]{subsection.7.3}{Analysis with Callgrind}{section.7}
diff --git a/course/semester2/pprog/assignment1/report/report.pdf b/course/semester2/pprog/assignment1/report/report.pdf
new file mode 100644 (file)
index 0000000..64796f2
Binary files /dev/null and b/course/semester2/pprog/assignment1/report/report.pdf differ
diff --git a/course/semester2/pprog/assignment1/report/report.ps b/course/semester2/pprog/assignment1/report/report.ps
new file mode 100644 (file)
index 0000000..d91a8c3
--- /dev/null
@@ -0,0 +1,4400 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.98 Copyright 2009 Radical Eye Software
+%%Title: report.dvi
+%%CreationDate: Fri Sep 28 19:08:36 2012
+%%Pages: 3
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentFonts: CMBX12 CMR12 CMBX10 CMR10 CMMI10 CMR5 CMR9 CMSY9 CMTI10
+%%DocumentPaperSizes: Letter
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -o report.ps report.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource:  TeX output 2012.09.28:1908
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+end
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin @defspecial
+
+ systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get
+put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict
+/cleartomark get put}ifelse
+
+ /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution
+mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup
+dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder
+{1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx
+pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly
+exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx
+exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips
+exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx
+exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF
+HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder
+sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint
+exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def
+@fedspecial end
+%%BeginFont: CMBX12
+%!PS-AdobeFont-1.0: CMBX12 003.002
+%%Title: CMBX12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup
+/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX12 def
+/FontBBox {-53 -251 1139 750 }readonly def
+/UniqueID 5000769 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX12.) readonly def
+/FullName (CMBX12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 69 /E put
+dup 72 /H put
+dup 73 /I put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 83 /S put
+dup 84 /T put
+dup 86 /V put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE
+0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D
+2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608
+1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C
+42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557
+FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE
+78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18
+22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE
+A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811
+4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065
+4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7
+95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D
+9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC
+5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF
+9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3
+CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511
+BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65
+9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68
+EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A
+D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE
+2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE
+947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B
+0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6
+4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C
+BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2
+F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4
+6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514
+D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415
+F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8
+481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24
+FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D
+419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6
+7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B
+70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988
+2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE
+0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC
+9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A
+C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D
+1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2
+A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969
+21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530
+7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198
+17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60
+30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F
+3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257
+96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3
+B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950
+1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B
+57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE
+B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC
+8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91
+8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59
+B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E
+BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC
+21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91
+D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4
+FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F
+A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4
+A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082
+A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA
+DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38
+7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F
+07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9
+BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E
+8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89
+E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C
+B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5
+45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67
+2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5
+5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF
+A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28
+5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975
+E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01
+5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94
+6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30
+8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB
+BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6
+9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB
+B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B
+B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E
+8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD
+595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E
+FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15
+13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A
+FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3
+DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB
+313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248
+C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89
+F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD
+DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844
+8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753
+E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197
+A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3
+C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20
+417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43
+19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4
+9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85
+12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83
+3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1
+A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68
+90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94
+3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5
+B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B
+82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550
+1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94
+AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D
+9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985
+2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5
+99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A
+31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414
+3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86
+F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5
+70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E
+5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891
+84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978
+BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047
+8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7
+5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7
+9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B
+F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E
+94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE
+0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC
+E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4
+7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581
+596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442
+F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E
+7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1
+1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785
+AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE
+4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F
+744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D
+67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA
+054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA
+6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B
+8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE
+CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39
+EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4
+C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76
+57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5
+5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F
+C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1
+CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2
+848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C
+B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB
+77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28
+87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58
+3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8
+409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7
+A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B
+72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D
+99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD
+8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB
+E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C
+82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3
+C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0
+EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634
+23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A
+59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F
+C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0
+1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C
+403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90
+1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893
+75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E
+0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35
+82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25
+C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8
+A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC
+9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06
+0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C
+5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060
+62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D
+6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08A430B643B6ED36DCAA09B41
+FEFDB90E10C8A8B74EB358437D0CEBB9E03109C593BAC09CA996278246E7CA38
+4F311F23DC5A7F7DB374E0E3D066C874EEE28CFA47054DC41A389203BFB3D601
+BC9A4817F8DAC250A102E7404CA135B33DD66F8FF40D106F52081FBA3E79CE29
+FCA5C502B38C86D8D507AEF30436472D2381DEA09B8B3BCB109BCD72332A9483
+E61ECF0F89A85BC37B8C10FF3F7C0A84FB8D0F4A7898D3F8A395DD600436E0BF
+5E08BD0A759A0B410960809C42841DC80FA3DE0AC470A6C6E7D808EA36D3E700
+E206C7F3DDB0ABBE58F6A55D23AB20B89951104A62A074B44B977E862A90D623
+28EF718ECDBFD7503A0750027042AE2825075C0C870F02D282D9102774AE552A
+3B53F518DD2E5018D71033BC87D1763EB4A54CD90AEA953E8D062E5A32A70663
+FC35F9E35AB1A1FC0D0AC356610F09BEAC9A0CAB4EF1834679444F7CD7CB1465
+A51A086B3698154D0039C0B0425D26B6E8F995F177B0F15EC6CAE0B2D08130DE
+9C2D3A7CA364E087D4134C8C65B2FBBECC6BEE345A4A21F4FB0DCC1823208C59
+C3FC9565299D28E3E8EC6466E774E51878831FB778D7CC4B21B8A90AD5AAD046
+AF5704FE0522B6BDE4DD456E91E26C2F80C772F6F89B5800B55787EF6A13484D
+6EE300E5EE17E86B202A6ABE7EA287951EE4BD7D1B2BB444FC2DAE7B469B0A46
+8824954D319D13E631EB0C119DCE48D855B045902ACCF380E4E71FDF9D34739C
+E4A9201B04D969A5B9ECECD05093069F8A4DDC42B1F5214654AA6EC013EE034D
+97F2435B0F165C97867B57A6FA177DF5BF4D31F63C8F4B7D73DE25139009FD0E
+AEB026BEB5B1705F40C8F63A5F780A374F6B95B9D3C72759888920B4A9C7BDC0
+D6501BD8237E6286DB8D25E2EC5622C5B83812904BB57D46D8CB735608F289DB
+5471B140238D88AA7372E1031C52BB2F36C2DDC91F33FC8F0744C417800258E6
+40B07150DC329D1533E92DA4BBFD6CD8581B503C6E10CE1ADD7505A7B52C9F91
+F41881A36AF1C447B1575EF025AAE788E301D1FD9973019AE67837BBE25ED27D
+2BBC3D530A404BAD4B0FF3779D39D3496981F999A6A5AC9D10B7DFFC6F0B8B30
+7D37C15812CCE21E2057C4FF17AEAF56159B724B67EBC34C15AC3F2FB3B52AEC
+338F0660655E8F8FF5CC0C12A7A251BB171F57E537B51DA546A7DD8EFDE2A916
+C43F4B18F6061C7DAC5A45CEFEA1101A16DB18FE9C04C72BAAFA455AD2999E74
+9541FF31A2D29E3E06B72013C4F960640C970F8C7EBE15A588F98FAD021A5389
+7B63D6510FE5958DB7260A07309DC49A07CE2C64EE3D49A20E4D8ECB515907A2
+F5E806A948D7B69B23B2FCF5F8BC52E17980F7C893CDA92F2F5DA179D72F1DAD
+6202C470218EFA3BCF0052A587BC60D3F63DE7D6A36E0F1BFB6F3CE1B62EB3E2
+8B4073173008325DE34D586CB0580EBCB5A0F190B42F47BA40D86E7315DFFD40
+E6EC984AB3C5D93B4A11EF9A036D05AA1278BBBFCEFFCB3CE835171E1643A19A
+F5EAE5891E5CABE61565BC1DE393C3F3334854C5661EDB1CEEFD34DF0F95963D
+89A801F57FFB7BC82C0425CE46232A3995A36C8D483992F01852F384361D2655
+3DEBDB04D0DADA25767F2132510A586069928516101A2E7E1CB51FBB8650E5C2
+CEEFEFCD170B0CA694DFE13B3AA664DD24FA1AFC05C0164F7FAECDAF95DAC014
+7AE51C96EB3EB80C6C2D4075CB43C9015CDF23230B5F6ED2D35109E6C9015A77
+142DE22E7712D4676D9C4C94873F72FA4255A11E131DFB46F1174CB4E88FE03D
+5FAF3819D2EF1AAEE9C0D12756D96573B52488443C22628E66F97279E92CDA8A
+D277E5F530F9818895EC376DC45BA94BE12B35646124E38F624AEC2E85F77672
+C50C9429DDCEC162468C9D55BBA7F6893C1872E3BCDC94A2D96F96CEB2F38AD5
+A4C25294AE29BBEEB4DC49AE3E21A47A12604CD3396F1D2D07CE8E3A58AE7CB0
+CB1324047403ECA89F7AE06BFE23150D3327C660DF53C58364BB54C70AF4639F
+8CCDDF031830C2A5366F87AF982B61D6D9F0EC8EDA0EC94C8D109EEDA1060D9E
+DEA6E1C5D6535E8CC9325B6FC102ACBBCA76487145DE04207B86D6C43B794BB7
+7B36255F3F885D76C84EC1154955637D5D4408F6A1D0C07F96FC938AE2CC17A4
+9A7A7CF64AD6A06B96B448A39B97F90C2EE0EF4E56F8A4795F7279A54DE2455A
+4F11A55A0A20244DCF2BC8136B6A2A055F9CFCFD5D28CB54CBACA235359AC65A
+1D94C1809A226035F6F123F54551D1F51023A7A03EE0BCCCB745DDBD4DF80592
+F3C89B7972F2E3BFE873C84D523707A1DC0E57CF1C88E6C3604538F09076A091
+CA69088507BB795C405C6E0DCA73800ABAC4266F508F946BF404C65D9413314F
+A03BAAFEE53E8EB035F75952CCA684F0D69D3E26C3CC533FCD52F30D8CFE1BCB
+273EFC4E077DC922397242625494BE74DEF5AA5DFF6216B0BE33CC46EE7FE869
+ECFB47AD2547A41B84BC85274978D1DC1C6DCC29CEE8F88C5AB80BE0E2D21BBA
+8022361F75C42A86C70CC82692FEE76387E58F85F42F244C5E247B26A6DAFF0B
+5758934B877B0CA677275FEEFC800873E6C411818B6183DF5ECC582E1E29A4D1
+014DB6D1C77D710856F9CED82B9427268CB6D7C3F5E4ED1364070DB64C2E948F
+18955F88F9A18E68DEF003B4C0EAC2E9A9FA12424D24F0EA5194C23C20391A44
+6FD8F770E5DFC6D5392693501227E563448D851967773599310F2D526264B259
+ED2A3113D5BC68B0DA2BA595B36F064B725F5A48051DE6E4FF09ED14AB8C6370
+37C84B5F0CC9DA1D482936C7AD0194B2FEF1BB0437A1EA57421289E41B2D77AB
+76EB4309BD712F7CB15AD7126B9EB4B2950972E09612CAAE7B86B482F8B389A5
+29B5741E8D2C31FF01AC6BE35F370B477C06AD037CB3C2C17915BF79A198E855
+BB2270E5519B7C209007D9B839377B43F7406D6DFA9567A4DB78D01949B53902
+5FABAF002DB503A6287C932D7ABF886E31E5B413B5DFF075391676870FEF1736
+D160FA581703F51D7CF3F44056CDA2C613E857B4BF4A2E9F3B236D718790CD64
+D9AC82C3A576D0AAEC249D06E322D1190E996F4A2A0D536882599F19E9995213
+52C05D86864DB63F65D38109F2366B125B972864ECBAAA85337C78682CD50FBE
+55D23B0B8D735A9FA03F21B9F62AA565C4AF596260E117EA9B42A870832C814F
+EA79055A38A61C8CD3D23EF3FBDCDE348678257DC34A148E1CB9CED61624F601
+BDAE8401F6BABAB025E779BA6559B72E4B3767DED321577E6F089FFF090CD5C7
+5A061F131C6F7727C1FE9EA1DD6B7DBDBFEA92D1A03B2AB474CF0A289586D70E
+34B1B3929EA15AEEA15C54043525619B0005E1B0DD64F795287F903453904A08
+F71A4E582C5CF77E6BC2E45CEB96A25A50E759BBDDBAC995924732963579603F
+9C24627A8E6B15AEB95AA6D070E15EF70AC97449BE9F0DA0188CAF7DA11EC358
+328611ACFBF05728AF4B1A35561D70EA041F07F9BF724BC14E84B5186F94C2B5
+4F070682E3F477695FA44CEB9CDE53DC26C5D553026842D63B806C965228715A
+35672390F06EA8C00A2CFC2852CF0F6F1EC644C172D23232868E7F0D96D3C438
+510477A111FE32A9C964B4E0D47D305C301C003E12AD65C4ACC4077C580FAD9D
+8863F613B915C476764F93E1BC525992A3971DF163DEB192AF6D3C4F9195A34C
+E35BD4B3EBC1C8EBA3D6C560293A288AA1A4B0490EBDC3DE1DB1161134B21D2A
+67262318A260A49BA2F20FB6F4816B6E4F01DCDD64C7CAB6D17A3A55E0F2362F
+6152D6D5FAD746BA7E02C83AEE3172162568C4C335315DB0144057E6F984EF54
+0447420648C823629D475DD2EFE175C5338DB6F9C0FB6C9AA6D8A3873F21460E
+5210EB2820621D4026195019894223449DB7D64511C79165B531539A03674223
+2DE828E4FF2835B6DB3517F97BA6A0BF1D1FAC5C53F9D775E96C67CD2EF397A2
+52669F273C54DF9BD9B35084EBF0CA75E43BFEDB0EDCEEC9F0D0C66DEAE9A815
+2F60AA27EF56DE8366E6BED0AC4DEBF0AD4E32656858EB895A2A51EAB93F6107
+BB1F00B9D784121DE29C9FBAFA3234007B76FC27A6205DC7129FC6B76D023C4A
+4780BD3DF5FD96292886BD54D778ED544B772402AFC61D6DD720EB6A542C5268
+18A91456D6D324B35C55BA213DC7C6F79A35C6201C3FF80655232CCB618B13C6
+532ED292500DB841CC5931877EF1B9D62AC02D0EC263C74729FADCAAF2C20C68
+259DE2A86728BCA3B90AA87474DBDDC7CCC642C9579A78323DFCF7C6A14C9AED
+426A956426117514DF89CE56ACA1555908DCED0D266B0051BC5972D3635D019A
+F77EA138CDDD6F6BA402F426BAECBC007CFD872DE9A72B8A04EE030D0024AA27
+3AA5D6AD0CD1F96658ECDC196103E847FBA0B0F367BF5A633DBF30BF684BAD75
+DCB2F11045B2D435B48100EE6F747C275B9E8C1A0AAC776FCA08838D311CD7A6
+C7350D794BE001493840F3C7CF14644F7664BE110AF35A5E1FA44709E0A396AB
+424AEEC4BE36D9D32A5FA3055C63E7C1BAAD2CE11281F9AC3586D0B85B0B4B79
+DCBB634B6C2AA268E8962D7C65545756BCDCCBDFCD7385F8BE8F826871BF1D63
+F9A74937E7C690480061553F07DBC3E279CE118AFA35348370A81E2A364421DE
+4C2D340F38A80115F5AAF65B970DA742055324C4F33870BE5CD5B8631C687EE1
+B79313BAC2A96C7B9B9E8A8F42DA78437E97DEC48C44CC2246F65A07C58B8E33
+D79708F24045FA2D0952C8860A2B3E2D82CB3F9A19610F1E5AC8F64986DAFE1B
+3413841264E147F6D938B15DD693458601B8DCC1F6D64FEC132370A05137BF47
+83A8469911AEF5D63F8BC87882B200F326E0430A5024892FF204AA1A16739E28
+74AD632FDB7001C1C07B7E88BE5FA81E440E6150DD2ECFE9E1D90AC3BF73045E
+413DF7CE854FD54176DF9ED35C2901CE1F109A096BABBF2B2F89542ABC685F0E
+3DA61AE13BE6A7BE94CED7D74EA73EB26E87449220A989D96753092F69B7BB60
+249E6B377E93E285B2580C6915DD3CBBEAEC05EFAE34FD2FBC366A918A7088C0
+AD4AF3DD5BB7ABD5E4C20801138F927076E1C2BD1A45285F8EA0FFF9942E747F
+057C0BDE057A21F20EE83C83CAC59DADDA50A83374B03D64A233FD09AD0D846A
+C492DC647FE81CF88EF1B4ABF13BF762AB6E321BD641F390EAB9C0905F1A2EA2
+F8D5F01C41BB24CD680941DC9D00548CFC31F5442258513DF0CF9411D7591AFE
+6406A04DA2799C692231B4A95DFF4B4B7B798D33A4E690EF31CDA26B6B33EFE2
+9654887C9CF668DCC06A71E6A4BA562DFF71E5B3A21C8DC58E3172E499EE08D3
+C0E369A42BAB1AECE77C28FC255E21C7FBEAC2B5FF14B606C2D6339532D60BE9
+5BF760A22C4BCFEA66A057E432C06E5DEFCF8C6B02AA1DAF4649B01E67FD83C3
+6BDB46E5704EA448C4AF16D88C1E94C5DF92FB5481A97DEFC4A94E6E458DE310
+0098FFD761B8CF7460C709419657845BE58ADD62C4473D7542B54E168AB39928
+B8ED0198275AC36023362175FF1CD9B2370C1558DBDF931D58C8BDC3128F8C7F
+472D49BDEA11DF793810DE76977C41D9F404C45FD4CCD23ABCB501A6345903B2
+6400E5B516B337D1ACF65A6A18EB09012F4276EAD5CF501A61E5F932FAD63978
+3403C004C675D96CE73989D2D44E6E8658AF1A62EC8BDA5A4BD45EF4356BA037
+8CEDC0A9906F50E6E8F137CA270CFA32B36DBD0143E1DA3EEF431BF5B293F950
+2D3CD14C76B982D007A26665509D4B5CFC04586B608CDC5EE5FB91144BE4074A
+19744538ECCF968635F520B446FFCA806E1482A0F48F4AE6ED1F9BCCDD2F3A37
+27567E00BCACE6B9B39B15D923DA391C60B4E1E524844CC53024B03DCAA5808B
+1628BD444DD1B0EFDA50ADDC24B8FB0FAB69A2AB4535605044E48F000053D50B
+32A125150CDA6C3AAB6F57E50FA52D875378A26BEEBB9039A078FDD47C83DEBC
+B9DA9787CC8236EC1C0B33F7252DBB191ED2BF883537D5EFE3C6DFC504B936B3
+42DF9AC4C1074471BDBBEA8C7FDCEE44BE5052DFFA4B3F5387902483B89D98FE
+E5079BBB2B2DA6CE5635954D92A6011D7C55127057E8872E0F92B2A111920604
+1649E877EC12EF096A8EAF5AC9588A1DC1EF680173A8C005838A01039F6A57B8
+78410BD7E5D83DF9BEC1D4B18354FA71C4D7A077B20D1820CC2DDA30C981CE61
+00834A3E2DB1FB9BBFD8A5DE835AB416D4D98AC0C1F3F710A86063836EFB045E
+65881CDD5DDC6E54BC4A5442B808FADDE88C2F2B14B358B8BE66B60CDBF53326
+05153D41FC17C1841A41A287703DE8A0E2FBE6641C483E43B0215FFB0186DBFD
+3914ECB94C4AA2055CE109DC2D3252659BC2DB4A514515E7653CB141AA8FA089
+7F6EAA4681EF9345A765273B475413CC108AABA13967A674B01647E6F0A51D57
+CD7E6961E2460FD14AB22908485780220EE4D2130163D4DE515C51F7813F4193
+8B18954625D0B7B4AAA8D3227A062D035CB5FBCED45414AD2285119C04E21159
+1A8381CC89BF62CA5F6830831FF5E1A1F093D2D4C4CE34F25D052600E9255A34
+4A0F5FA337BEFE83A34D806DFC16E243FF1AC61B1A851D491A0D9FA02881CFCA
+A3FB6DC488370C7DEA9662366A7CBBB8A471AFB1356B49A80EC58AB724C6658C
+6FDE4CF5A9FD8B25D5B47A208A8366CB900795744FB207CCAD832244F30C023A
+95ACB630138C9B03ED2FE4843FBF8B5DCEE275DEEF095E7E38C4FC2111832801
+492FAA0F95C903D4A5DDBEEAEA2EEEC5467662F10EDA29C2084D41029DF26A0F
+6F4851B8E5BB28449B51A81455D40F5C6DDD99A17FA71AAD7D936BFD3B98ED91
+59391080815132AF1081A164EB78B90A6E655D4D45FEF5EF5D776D94C434E2C8
+7D4F030C87964F0C6515A55B73B23AE113B27C84B59D19604702ACE60F233123
+B3CE4CCFB5D89FB29E812A759E527E48448E7288E18B8C18D6F1CBBBB803943A
+8C69C97806329E50328A13658DBE0FA59F72ABB4E9CF9F23C2A70E0F8EBFE9C4
+110FAF604609D77CFEED2B5C04AD39069C3B00192580E995139B28BAF8306FD2
+DB17803F133BDE5FC5B7A2CA28FC6E0B16C972CC301496897895FF2733BB6C8D
+7F5EEAB0C1A5359B46A9840DB19F9CA1CDAECC0FFB2C9AC4A87BC8904349F338
+FB41C7B82883DA8E31A92AD156DEB9C8F1E78DD70456B06122F873125FAE5CA6
+2AE548A8727D589FB60B5050D2836C9857D4C618F81D7185C50E31AA97B064ED
+D761384923B4A94A9B8E73DECF3322C52DE90B363A55DFA01DCB304A0DBF4387
+AF350A85F7276D1133F0EFAD0386853C1077C3A6E4A55509D38605B6E800995E
+785CA6B29266F6F4EA8A6B272ADDFFB7835AED7BCD527D93F901A151FAB83650
+61A82D7B6B44A433EC3EC5BFF6D88522104187000DF5D54FE3C7C6275B95EE6C
+413F9D4B037B4EA1C9EC68462B7376CAE040D7704B68E8DF4B5A0DD9A7FA6772
+08775D3AD81ECC740BB490E0BB4C929FE977913E43C02DD42A7240EDD496C8A4
+71A3C580631BDA8EC75E8DB6451C7259130CC2E804DE6F2C73DA86EA67293F27
+AE18562D434F981179E98E53C80CB060D9F6E14E3AD85652B3415BF3A4F46660
+37FE3207B669A1A71B593907484EDBA7937D9BC1BFE874D2A72C2BF0B645C4D2
+451AC2C138EBF84E93F5762739F642BF3113B155ECE02BD32EB0A171DED1F60B
+3E05164E4C64B7D2B153B967DCBB544136A93803D43311F872A60C70045991AB
+4C475D7A782065F72664B0B182F34CB726C683D4C056CE60A641E09F50B4B56D
+BF9AE2CCDE8BAFCAF9ED2CE4E8DEF615694BA08842811810ED9628FDC86AD439
+FC1A70B0F2810B860CD15B2A6C980FB948BD789561A389EAD648517A4536D3FA
+F72E278DEFCA9F905F7A2F9F1690B8D0814C440112DFDEBBA3BC55090EE40297
+8098E70E237471C6CF8E85CF36E76A5CF74F7DEF3DFF70839BD6062EF555AE24
+ADCF25D2A51391E5AD9C37ED262889139A2E52A94F036C7C72BA4EFC519A2F1B
+2E14896D299193DAA7D5EC7C50B24985358FA46BC627295C9CF1D4D3BE00FC08
+59C564A0A18590C2B17C5DEA5D3A97DE02DECDDFD5083C73EE486FAAF31DE10D
+F49BDD64FB6D29C60BBB9723FFA6DEDD7128EA185D84DC12728755AE0A342879
+A14F73EB83C2281ABB998007BBD818FCE7ACB9B43711C53125B3124BC27F648A
+B53384B32BB376B32A868D47C479C3EB45324337677AC4FA77C729CB7A226F07
+5347242CCDDCC32E9D075198B7E54483F9E4540DF608F71E074B29523E4D57A3
+D7A3334E22FF12805F28C7F4575E62FFB9F4EF22B2347D5E4DF09B50467BA45F
+37C1A36F5F7AC7D5E5D3A9381906F3A26FA7F421C213FAA2590DD9D6A709EF27
+04335CD87B62C1A8B2867D117B3939FB077A9F938319FC5C7FD338BBB648112E
+1DC2D6DD4C61154FD04402108052BEEC739BCED11418D48ECFDDDCD6E43A2E4C
+D4C644B4CAE5C424D7510B851B8AB01EC4A2C90DB827392625A7349DBFBB865B
+757E8A13276348EF08E5BE4AD17F8280FDEC157007E6BA1DA3C442C6FE45E5CF
+B3BC3B6F97D32C4820A085B16F8D46BBA36B25840C57C412F1F0BF37BA3BB94F
+A84BC6F58CE699E42520C7DF53E1C547C2C90B03530C0270A54F76F975A1106C
+C32ED866716522B50DF26BCECD762CAE23FAAD15BDDDE2C694E339971797F5A9
+9D3BF7A72D92129165230C33EEF315B9C9E593F9CAA094AFCAA0F206B3C3663E
+82BA715CED7D64F587062A49E48687C6CC79E81C767207868C6119D754929339
+5832965BDD9301D779B22FDD44FDFC90E25F3DF4306FC2A16B30F86807CDD635
+97405B70A825641CF5D993082F7555F9FB4B88337FE214D885C6CAF4A6A906B7
+953BF4A0DD237E939625CEBA624C78CCDDC9DF888ED039428C4E34250AD9071F
+2DF68FFEA0AB65A61015B4A2214D46A49D02A5C93FE632C00C4A7B86BFE1FF25
+14948AC8E01A6B80E9A5116626BD6B984760837219C7EA02399725101438899F
+B2058FCA3E2F17C625C77F5315C59EE66CFE0C7C939CF8556534E7C654F34883
+2E9151ACBC014C49DB1B05B86A772397950D5EE4CA3BF095A6B9E9F4830CCA6E
+8B8828151DE3D2222002B8F6E08EF7B48EF9FC376CEDF745296F65772653B5A7
+26E50809FC02067BA9E341A7D24A8E05011B02EFB30E5756FC0374E96C86AADE
+70E05A4CC589F72F87382C53171B04B1EB2CCE2D70A82A267F9B4881B474D5C6
+F61E22D154C7BAF2F4569AE97110F76432132F37DC80F1A910DFBD9275DAB337
+1061587578DA24E661E3CB37E6071F4DA4FD8559CEF1B29CCB3026D9C1AD8C3D
+8B00475C492DD36B68847A93F66FF508BD8C5EED4DBB334A7AC8E01DD95B51AB
+3E68C8B4535DA4E4C848B8EB741A8059976D2D19FA0783646616B8FF6273FD2D
+B3E566621DCD058CA4994F6AD3FD29545259A461A514323AEE4440A06FBE4181
+1129B33A974A159C5C224B5837D38D9C95ADE97C9D0A5CB61ADAAC447FFB6394
+0881CD250DB02490DA55BA1A64DD9A766C8999A245BC5C5A0157E333E16A4195
+B264C818B0EB1894FC76E7AFDA2C85D42867FA3B70B468D5491654A1C5326617
+6971A30D060B3375940E1FAF03CF5695BC8A2CAA7BF2990E7972CE073EBE5E18
+0F72D6825F06BAE3104B808B928E6305AE406C89B554FA4336333A45D055235B
+F8C48D94AEBEE771599DB536E737FF9D6CEEE5278F5256BF28FAEC103C15434C
+EFF0EF451002FC46EA87105E42BD2D28D8D634EA228897631AD731D5C9B94B5A
+AB6E7EF64B9F37ACBD501561D9A6CCBC11B9A1F54D5A1FEA158E035ED45D932B
+EA301BB965B94159F8D4C5E544484F8CAF30B2578118918F977993A3CBBAF5AA
+A9DAB0D3D8046F46D16FD8576BB78DF04E18A2B56C58E809A0970797B6E941E8
+994F94BD09D4C54A1F72C5DDFA9A0CFE0888D95B3D0C14B6E81DC55C0602F93B
+E05275B63CC72A0EE305B5E45FD1ABC543472494C64D2D9652CCDC519B07372C
+6E89CA8103F7C533550D211FA8B698514F453C78F7856FEF205FB9142F461B74
+3C8070ACE9997BEA6F7944B5C3EE69AB17673B2CBEB0D43AADDF76D98C506C25
+6658465D0EDB347555B6FD635F292490EBB52F3535A00551F4EA11D3C867D0DD
+BCB0C7FA6046D8828CDA01AB02AA40EC6062D876FB98E01DAABE9985ADE9B3E3
+32E6997F9B531F8145C3CB20C52729800C8BC6B139A21038B178DA2EB9D2C304
+9A6D1D1041C95D25EA53F4C9CD48DAC23C92C3B6DF349B349492C58B00E35EDD
+44EC9F5AAD729DA58538CC7A4F07E14EA238711F98B8C03B12CFB7C0F6CCB359
+6F96E865D90133FFD3289BDDA26574DE6F6BD11F1F95F44F957CA1399B0E0F0F
+7FDBCBBC0DCDEAE788AEEC4BEA03EB6D99ECB59C5B8F05990822432C351F0AFF
+9CB65AECB3F7D2FC3B48465456F0A3D0FAD719D17CC2ED3EA27334D64CE1CD72
+04266D587BD04FC2ED505B0528F718010505A65947402183009489286763FCEE
+9C319D9ED2DA26453BF98508FA198BA955789701E332F26EF121031DD0B9F614
+E608EBE662E1516F363FF24E8815F8C580AD990977FF793B6F560D8DF21F6080
+1D844CBF6D7F2CCF9310CC55741EBE8D0267949F2B20AED6A3F3B06D8BEBFC4D
+EC4D47EA10CFB136458838F05822FEA24606EC2A9F5FD25115B839AC94252668
+AE0A0FBD715EA045EE918413A92D41BA48B871E4306FC335627A4200B8FB30A3
+B92F2C18DEF1933080EDA9B1776FA4467AAAAF51D113EBAC621F19D2109AB26B
+A7756DB5A0189F98554527F2341781219E459FC19F7553A037F1579CCFEA9F0C
+35C509942BE81E92712E5F182576CC83ECF40BFB86609C1D63D86B38D8608E8D
+F1936F5668A8D28D398993FE3373DD3209D44A8BFA0D99397C851E697F16FDDE
+E433201DFC5750C514DBCD64EF203544A64B7C1580FEB7DC2824F1CD0B08B0E0
+5E812B631966436FAFD3084E0AE1F54D9E25695BF596015A86F305016F99B740
+D1AE3C0FFC2C6E2E813C4609BD3AEF1A622904A66FE79B6260F400BAC49BE0E7
+4934869DCA984AF60E898905B07CE5E37E756C1FC373851759B80CFAA01B9C49
+5E4D0F8D7A71E1072C6B50A0F7
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMTI10
+%!PS-AdobeFont-1.0: CMTI10 003.002
+%%Title: CMTI10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup
+/UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMTI10 def
+/FontBBox {-35 -250 1124 750 }readonly def
+/UniqueID 5000828 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI10.) readonly def
+/FullName (CMTI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 97 /a put
+dup 108 /l put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7
+5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99
+8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716
+EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C
+02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D
+46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A
+4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E
+2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A
+EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD
+8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF
+CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2
+7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC
+32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09
+482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF
+118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381
+1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC
+C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA
+8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4
+61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20
+C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504
+3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70
+9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A
+D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0
+125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8
+34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A
+30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9
+39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49
+9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184
+2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF
+0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348
+3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D
+9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757
+802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28
+FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0
+98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9
+5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF
+AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD
+A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93
+5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815
+DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37
+4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC
+8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B
+A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362
+E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F
+42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96
+3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59
+A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F
+7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4
+49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428
+D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C
+0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955
+CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485
+1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB
+8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388
+6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468
+83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29
+60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284
+42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2
+1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A
+21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA
+206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9
+D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7
+7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B
+55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4
+6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762
+4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392
+871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E
+9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645
+DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5
+41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8
+2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F
+220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001
+A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D
+981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F
+337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8
+139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B
+1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC
+100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A
+1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905
+F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB
+72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7
+A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D
+310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928
+7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989
+1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2
+8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33
+80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610
+3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C
+C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996
+4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB
+865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B
+301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48
+3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9
+1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B
+E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29
+0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0
+30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E
+2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0
+C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89
+14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A
+44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC
+CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654
+DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34
+9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87
+4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3
+2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676
+21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26
+47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4
+F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9
+D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F
+03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5
+886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8
+352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD
+9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0
+9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3
+92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F
+821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93
+3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0
+47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0
+F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B
+9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1
+AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71
+C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978
+B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED
+D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD
+F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E
+81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038
+970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C
+6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7
+97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668
+A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE
+AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594
+971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96
+514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7
+8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C
+392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170
+3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F
+464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE
+C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E
+F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053
+911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6
+261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED
+D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA
+147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D
+C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516
+C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB
+61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD
+FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3
+F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C
+2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C
+7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193
+11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C
+9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66
+C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3
+1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692
+5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5
+6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0
+EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E
+F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23
+AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D
+8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94
+376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6
+B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B
+02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56
+4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF
+9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD
+751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198
+3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A
+40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962
+2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360
+D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A
+0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E
+8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946
+AFFD0B2B724EF0F28393F4FE25E8DCC5832AD77B4516E2531E00FD1710119FDD
+B6C70904591CB5263AED6095A96B509D24027446B0481EE02680CA5C31C59381
+BB2359CE8DE4CBE5B6409D4903CF37E2CD6D813DDFFF35ABD9AED47339CA2001
+5326BBB45A5A151A329AB20B8A48A155EBD50A5DC1919F4F11B8EEC07E57B5D6
+98353161B2D1280DBAB7E40A85051E79939718243DB1F50F2802135F1BD4EDF9
+C332B35169B5E03A6D5C36883E95575A8B730A57721EE9D678A759A85F77BAFF
+8D46AC997C8ED678DBBECEC95B1E3EB16DD6D25801A9A1822013C4B64C9BFD51
+0200C2E03FA05EC6213212E127B968C9D09176613CDBBF70DD3497A59CD2F278
+16A9E869703F94EAC7041BB08566DC1E95448ED2EDD5640F536A5888CD81D75B
+60865AF75C1BBB8EDF5FEBD36C6E600300261D453EF3794BEF61C658D53D1A83
+C0538DF2F8252B6B963B85BB230DFA655EA6AC56160496E102C4FA87EE82799C
+F60EF3466C90C26944439B59CDD0C32A0411F64D4486413808BAFA1BA43F4592
+A98C8D2FFF3F7C0A84FB8D0F4A789DDB7197A9152E517EF0F65FC96F998CBF98
+917D87F7CD75E5038E74DD522232F5546377C9A9BE0E1BD49625E46C51D541D2
+3F9D2633D0ADDAF128E4E336E7A4920CD30285E1AB7983940A58AF4444718A35
+73E939A79DA117BE5648B03E79CB24C30B17AB03262A06F62E89E0F168D4D129
+50FA0B17EBE7E676C5E99F0522E052D215865DE535A61C2DE2AD7AF729DEC052
+B1314AE5CC71BA9B8CEA1FEBE62D888E525888557F6A458B1FFD3230CB86CC47
+C82291767018909002301F04D445F8F69CA4B90D34988C1C1AE72CE581E82E69
+F52A37B4A9D8774A3000FF4128513867EDA173A2E6C08D00E814009234E2A36E
+FBD854F868BC9301D33D0D38023BDA6569691729EA004A3D96F0FBB300F405FF
+1AA54C887BD6424A4B3C207F0ED2FD18B021DBB08CD31777AE4D4700A54726D9
+8DC816FF725055C7E70F05B8582508625DCA254C16904F7179DD3ACA8EF3919F
+E465EB90E99319899C4D60A587EFA6A7FE7DBD3DC333682147E2105C9451A8BC
+7AF79380074F253C698B313478D3A561567FA356526D55D81D676E2D15EA9209
+42BACEC4455C6641F5010F1B79AA194C275E82C34247A28B2E6E72CA3A58CE0C
+9027FB4B449A39B1AC3CAC77D2F15CE2E76B58C5426440E07144429742455547
+7C2A21762A1029DB673660FCABBA60E42C5DC5F0E077C3E8A3CFFD52A8FCC882
+C04E590EE30AC9D5C6E4C71D647FF03DC50362C0C656537CC6FEA71C0693F4D1
+C40E6EB94A41CF66167012EEE83F7DDAC1F3AA5016F339714AEA5CF6B8C2CEBF
+36093A6FD0651A29A87992B4E5E9AB5F198A13FA52461345CFA7DD255D94DE75
+AE5C76C9A51ABF5FF1C861CC9119609F87B0CBD35E3A456A2CAABDE0C7E41EAF
+D3121D8577931283E1B0B7BB113FC461AE9BF4096BC239AB957D20D8BBB534C3
+59A8F5BA55897D1D864D9978D5D9269FA745A12D2B9BD20A6D1248C1C939724E
+FE25F978B12D8A2CC3FAB29B81C37C11047B5872D8E868A67D39D91D4C5C5327
+FE7C0EDACDCCA792BD8164F95E260DF3E54228FDB4AF37D26F65CC2758BC4583
+D3EAC07ACF021E1A1A8147622504DB14815D3949DAB92965B93D83A33B707886
+AD7413EFA566CE7C35FCEFEF96D43C8D0EBE749F04E957B650389E88FC4F590C
+B61A30A8A569E0520D31EB74711A095CEF302F6899E68309283837BE2A698502
+83CD3594459F7A
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMSY9
+%!PS-AdobeFont-1.0: CMSY9 003.002
+%%Title: CMSY9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMSY9 known{/CMSY9 findfont dup/UniqueID known{dup
+/UniqueID get 5096650 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMSY9 def
+/FontBBox {-29 -958 1146 777 }readonly def
+/UniqueID 5096650 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY9.) readonly def
+/FullName (CMSY9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 3 /asteriskmath put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0
+7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81
+DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91
+511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6
+1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD
+028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86
+1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A580F0834F28818EBF
+F29D3B2C7C9AFD969BA6D3B7429E222AF78F6DE00CE2C8008A5966422936DC5A
+DE549B458EB41026E123FE75E703E046F665B7DC78298A145548DEF8D579E008
+39279A5208EAF898A357DF3FD9CE4450811F20B454D86B2947BEBB11EABFC62B
+187B12458E022CDBAA6EDF4A89D79300F635D8CD973E35FA8D9B1240B3D30D72
+4F30444BDF0B51ABA15A181A3196A6CDF9CD1D38D64C83E745A767446641991E
+23EAE067609DC2E84B44D923CC98407812813D5AEF0EA21E560B31BD77D735BD
+E35EAA564A570DD3294C703E16BB9F251D54407269C8B23DEAD063018D6EB748
+4204A415AAC8384025FA922E7074FA7B8A6C31FD3761E7B2737D4D9C9992B7B6
+DBD0CFDBD87D42E1A451FC5C7EFAAEC65D10D278470DDF42DFABC836CF15D042
+6900E0DCDD36E7153BA186B8358E74F91A1D43D62EB0B821C0E97FE63F1586D0
+98F01E8F6B6F2A435343A25CDD80D3AEB42DC8E5AE02F8837B84EE5EB508B02B
+6980D2349984FE1A0D3ED12355D556BA483CA078B7921FB336EDAFC22AE05C1C
+5614F5025B890009272DA8C838B81913C872A54F7E932237FB1BC2CE5D64CD04
+2D320C8E2E610E9EE36EAC7C28C833F8A14048E751B61D0CEB342CBAAB34D104
+311B421B8CE4D903D2E2518BA8B734E2637E2CA55426C4A87EEBCE637F8D71F1
+54626C52083262A5A9A3B49142948BC1AC0B7698811AE81FC3D3B1C14E6C274E
+CFD6C480514F3649D7725A0A14C82C9D537B1C5A9ADC816340B8B4E484AF55AA
+905EA936A83FE2BE788D084469008F407447E0077417096333F163CE94CD3098
+4B9712EE23120829AE2695EA63975492DB2615214B11C87ED0ADB776ED4BA0B1
+40D09D1A617D4F57EE1A9B05C8D5F42AECB9C6AE67757DE6307B1A9C467123DA
+773239976AB0EA052B23F263031ACABEC9EEC7A43ACD0DC2D7AD66664FB0D937
+6A0F463A173E8B90B2596DD323D2350435D9D31B638112D70492F44769FC0C6B
+40A291FE78AA598CAFC19E5AD195BE7264F0EC29305D36C7AB8F2A733797D75D
+94C8F7AAFC49C13C108F514745A394F460294C6F3F44162BBFA878F773A5115F
+062E934253B786DA2B9A6E8E843E06B97075BE99F21B330D6684998C5C340B72
+09D69B655097354CB682D42120ABF5109E5522ABEC94D05E7211DACE8737A1A9
+0BD3EC16F48798E67C7C85560D79366504BBFE5F7F5EC1B05B9F68F98149A02E
+E53F321C213456D802C01871E9024F965258F71215F40EA71057C15E349F06A3
+A016BF1B7E44DC4766FC92EE500EBF7C47D36B1EA34981EE6FE38FF4903466A8
+C9020B91CFC731642003AAEB145EC0F13D6281B0838BB4236C220F6F467F7DCB
+C79BB9CD5B6A180DD2ED7F94DA6B5CB833E62E898BE832DF601BFBC8148F9430
+C8AC459F23EA2536E301C9DFD3FFBAF4D01E7853B60A69B5D012DCC0054C0BA2
+1293D3B4EEDF7C5C78118138544A60FB1A500F72BA39E63EF5D97D68369850E6
+9B6336DA577128DE68FEB71877360D97204B5F3C06E808BF95AA6D6013524BCC
+85CBA9FD2CFEF383645E7E960E7AD471A6A3B8B8C3A0A0B8464836499309D82F
+52004FCDB68997BAD9E4B5B881634FE1213283B6B19308BB67F2364F7ECD5534
+467EF07CBE71989FFCBC6224417C0710EB3EF2676B9DE846E7FFB1AA6608EC9A
+76C31724A19ABB2AD08CC102F5DE8E4E513F90A53F06D440A66B000CCAF6AD12
+6F4B161B56FA5FAED65A24FA183B84F4B45407AA69624068EE0E3E47BBE973CA
+C72137823F1D676131C8CD5070092CD73FC2A93E0480310E21CFB14C031206AB
+411694AFE7B639ACF35C28705A115E98BC69C66F6C58E9E79902453798D76267
+29B780AFB6B895B34CBEA51530E8300569EE4D500527BA294282FED81F730A46
+6ED19AA5AD45852739882216EE937FC45D75116BBDBA6FF4B4423B398E383CCD
+A7D705B8BA85076133E823300C3EFC9EB9399575F5F6BBF868265304B299AD77
+B6B4EEA04C83E163E8CE2BFACA65F9DAAE3AD2B0F8DA1F986E6A12DDB2AFACD2
+217E37B093F46FF3E20E587A9490401C2833F5844763FE2C528E151214E8CA95
+018E1D8D47C9EB5FB4F0EA2A6D064680DEFD2C5489298F83B58EA7FA8CB019E0
+671028C59C3E007DD86CD247889ECFA6AD6DA2433B02180DCE6ECF9E495D0976
+D063A61B007233DED5E3F351D790F26D4011582735A69F37E7CCBB0AF254B925
+B378522B748BD9BF152E2187DEA12BB168C42AD8D67D18567393B35DB2AD8403
+5A7093EB59FC276525B8796FE81944F7F03349BB077110E182A61754ADECECD8
+A5255DBADB523F3DC251A7D97F17DC76281CC632FAEB382A972D60A15FDDA57E
+2F42AA338D889B47F6A3C1FADAFA8D11D63EF8D0C8C0FCE61FBD8AD34EB8DB3B
+722BD86CE5B1268F704ACE82A39466DC2D96C9849B9422567FA5E728B17FAF61
+59A77E9B3289DB807DF54D076139E3DFE176C3131FA4540C1542AE5AD6200FCD
+B92D5DAA77DD4D3022049B6EA2A037FE96E0CEBB1608C663F1373246FA74D70A
+BAE7BD37F3AC23E003204FA8270B4514DE1FDC5401B69CBC98A67A5CAB5505F2
+87C242B6ECC86E88EEF44B9C79DA5F88CFADAE8B4CF437A7CBD5E0C01A9BC479
+E92EA48C808820C567E74D62ED7597FCEC53DE9A0B3EBB9A3FB50AEACAB82BF9
+2AA56D029357AAE016582592972ED01C0ADE565E87607F17BCF4983E3321F606
+ED664B9516D404B277C2C1B0F873D469D64A9744D9C1897125FD471E71BE060B
+A3A617DC8D812E184664BD83EC74EEB5197611380F2D859E1A61A14404493D04
+B5537C04541E557CB5039905F37E72B762EBD2321633E12C38C409338AD5AAD3
+1A507BB2B8F5235F0614D0CEC2BE44CAD504C9B2CD3E45437A493A33B9BF8A1C
+3FE66B1E673449A54E8E3C3470688E94EE4404C888583F7C96B43A592D586D25
+8AC1F206EE5FBF3AFF7EDF9BA91EEC6BABD573D455E0AD6802E7E23A662D4F12
+FDDA00EA054CD331DF86C099C4BE8AB4EAF5D8EC1BFEFCF50302BE61E6FF26D8
+1E88C544570E8D6F7D875466C70AA91D6CCD4DF4BBA34FC67191D1692D3FB76A
+66F114152956A5E38345E7495BEB1A389B7D0A59624ABA784F77C1BF7728E556
+F9D97D71858D61624C22C6914A3A995BD75922A2C37EF2CA91F923A4561CD3D5
+2DCEACD9C3A65A9FAFFFA4822E79D6D89D6366DA6362DB16FF061840582DA35D
+E4EE8308040C2DA5F298944EED470D6E4E1FF58DFDDA96C20C85E2DF2652E12B
+2EFB8F890D301E8CE777678FA786E552A62A60DFC369AF4BDC069F5457FC86F5
+1FB1A38A2222EEE86FE1AC9A8227663AE33217C1F381115CCD04D2F381A27E97
+36D356DC64615AD63E1952B37AD4F967317D76A6DEF039CE8446AA634086BFB7
+7B0B34F595B61ACEB346F51ED10ADDB7B852B5B2BCFE416D0435A7CAA4C9D9A6
+152D9AD938F39E9756AC752F1604D884992BAD768C720C45479F5AD8E53A4832
+1B44D6109DE4460A662DA6081465E2BE02ACBEB52259E046767DA24E1416FF44
+D5AA1D303CC4249510D703CC6CD0FD7DDB078A91089FD86ACE1721F875F019B9
+82D7C5B2530567F2306F47DE90EADDCD12AA1C693B1982827DC36A74C86474B7
+0A8A2E084CA403AF654E2F8488806B943E38ABF544ECD45FECDC441DD970B180
+FF3FFF1A50D5E22216B240A527F95DA1E43770A3867F225DD2A8AF01A965E06E
+A063997C4CDC0B16B52F9B9C8B0DBA94F88F26A7A01E596DCF8F33DA3DA5B02D
+2ACF771F25A1372F521A80B93DB0337886FCAC0A2E8FAE0D7E1E0C31EB43AE3D
+B4C2020F322A9857A9EADFA7782CA70DE7421B9A83DE1873EED8D096701370B7
+7EC33B9C104E9CC16DF8C80ED24D1F91677E355DF037621ABBB75E09ACDBEB82
+30F1AFB82FAEC4D9E2DA93303F72C1078679EDDA35ABF2AB38DFF091AEB273CC
+5A7B29C0164977160CA75F62BC20474C7C1F127AE7E4DE865FBCEF852698AB80
+B61340CAB6F86017FEF570104E46B6FB3320E78D387CC58DF1C4FAD8570C0126
+B6F54AB5BCD47904A9255366AC9C88576456D3CF605822269CC65979EC3CC740
+AE3D09257BA3AC7A364A7F5EECA3E658AA20B53423553C416D98FD8100D80A30
+A1B19F029B7473070D7C60CDE51BBEEFD2B45B1C82F4FE32A5BB6BB5BC32BBB8
+F600ABE893B83B806A5435AE2B40E5CEA9068C6ABBCE73C9B3533520439F28F5
+E171DB1DD90B2EC04A1F36767B2B97D4EC0FBF217D4E80ADA5383BADCD7E066F
+5F4B23738A14F19AC7D765119AAC9AB6CD0A8AD4EAF8955CB9F5BDB0156CACFF
+236D24E8A12AEBA549FAA9D7053D10AB7094B5D9B86FC7375E245EA8D7FC64B9
+859A1A37C006E0449AA8DB8B89730348C71C7E014A2EF8D871AAA856407C33C9
+392720173DA60850938D0537564455C3957631AC8F8C0B3B29BF6163828796E6
+0944C3000B990715188203B32BC4E3FCDF173A4A9C78753AB7D76BB9A4C2DA4E
+3EC638753D6FF6356EBB07D0A9E8D3F50EA5451FB6C836B9E5EBB8F1331C8CA0
+B0CD271AF316502CBE87F652B5ACCD43176AAA32C6530C69E77E3C85DA496F3C
+06980ACA739DECB5D986622AD81F204579218660EA791774C2D11878DE23F858
+BBC4ABC7EBA01B7FEBB32BC914FEA8E5720731FD43F8A5CC53954D13455827EE
+9C7BADAE8322E77EE7413D6C86E6D378FF8044F50F529E765A1CAC29E8B1D91E
+CD40F70F2D4890E0FD04502933212D5AB176DB143831958605C1667B8841E770
+CB4D513DF0C3182C23CA653A7A714B2A8DE29D6B203F5A9481E0CF3FF073FC6F
+476B0B205136DA43650A940035A970584DD7D06B7CDA8E960186158B75FE3917
+9B1D0FFE45EE1606C875DF635B80F5A9E5B67A6ED748F52A53A710A45AC20BCF
+FC96755E685A3B0712D5E09D860986C61C631A8D2A505C57D57C1D4AE78C552C
+DC5C9EE15B82A4C3020331B78FDEFDE53974C391F375E8118EB7B2D23DFA3F15
+389043EB6F33842C82B896073760197B13D3DAC172D77779DF517AE31BAC43BF
+5BD6F75B59AAA59C7EB81B776FADB720282DC06BBC9C33AF5AC0BC59F6A0044E
+3898A4B5868EF32BC4F980DD863E8EDF6DE3E753A7B3E39F8E8BCB3D3BF14EDE
+3395E73BD07440FCE88FB28A96878E823C1E5519650F2054EC2CF733EB8AEB0D
+510E5659A3179C3FA8E31EED621BE0EA648D76C370C3CBD8043BE206F28699D7
+5871DA483AA5D3580CD55902C85DB9EF5CF5D3191738FE64DB42410F5AB8ACFC
+CE07E524BECA5633B082F4793002A4A7215AD1BA31159A30D72AC60EDD0B2BAF
+73C9934C85C5372B47BCD3ECEE463CADC05CE8352EC1399ABE2465AA53E5965E
+79400336B1F5D1401EE2DA5807F9701D1086DE505F6AD4E64DD4F3E5E90CD64D
+FDD25E6FA03B679597CFB8C5C1F03641CEB7B9B40787E70BC6B063621382E3D5
+1287365426E44A2EA208C26155CDF782F404CA7B3C6D379103EF4A51CA3F1343
+22B04A0B55CE5A7633175838B9E50480E9B80446CD3B541362E7A10BB3C58A42
+88C0FF580B4A0296073F5B6505E4FCCA5D4BA2F7E8D59BB04EC9ED4E664BC2BB
+8754777594DB26DA0985663D321CCD13FB261BE8A771470DDDA783493E452A87
+D0AD01AFF8EDCB7BB159F1408FBCC52F126C46234CE6BEF241B49472102598D6
+91FF2DCBA2CD0E6658A61DB3591EA02E4DF202954B655C5A3C34B14CB60CF9C9
+2A6683AB282DFD79B33FF3A6AA524582F174F11A5568159083496B242ACD2770
+0ACE8473D363AC11250E5DCDCD3CB2281B71FCEB8AAC1367D0714796AF3BF01E
+80BD4B05A0A45E6CFA6C672850B9DF113F5EB15923ED885A0E4488D4914B62A2
+FAFB6A63F8AF0CF0DA498E1BA68C4150B6E59CBA80BD17026FA09920006D2075
+BC6F1010D0A10648A20D8ABF8137BFCD6A5DB3606F6B3CA51E8A4645D32E5966
+6DFF7537F65DA4268A86BCA5791C21F5FA9F4C2F1F6C1AFC4D4BADFA63609C4F
+5F5158608E6FFD9C5BF00646C3AAB983DDA5E37A9C2EA81796B161A06201FB6F
+8EACE87008EE7A008BFBA69AAC04D73A8C0447FADA0249D8861ED405537E23E7
+BE68C4349FD64A14E3A53D6C6484E704BE4AD5FA0269F56D3B752A070D9872FD
+A5CEE543B413F13CC4CFABCE885BA4533EA0969FDADC14DE6846B330552CFD60
+A75BC8C9DDA76102E48DB6B81975A1F3FBE182CEF410841CC6164AFA0CE51FD6
+8E8E6F0971277052E21126909B5EE51508306B886E945C11DFFE1C91BD0D79E4
+554CC7D6A774C9B98610A1E49C3326D62F157CA9D89B56699F32DBB9D49C716D
+CBDEC052133F8E18E8F3D7A59008398AF3E4E1192CFFE4D0B7D2ECC8DE2ABC1D
+4DF7F2EA5EC0DD756CB2FF9F95FF10E506463D3037BABD221C08506FA603DE1C
+DC45A5998921C4023E501DBA494C1F41C0955A761AC3D5B13A88EC4F0BF40756
+BAE8645EA76027B8AF74726521DC129B9AED4BAE67A511EA56EE9D0D8D30C7F6
+FA8BB890375A263A0BC4E9CBBBB8F8F8613A43B10E964F8CBD6BAA2B0BAA70C4
+4CFAF6EBF4882B610AE13689823D37B046FD26DA85BD96B896CBDAB6662573D0
+2CB87D45A86A016146513441BF7A748F1E9C2AC7172460EA628BFB22F9797905
+F6DF6749F13C7F234A2CE4829D41E0F53EF3C5F52165297AAC4B5AF4747A9F53
+60370B4C0110DBB42C25308F489A856B6664371FC2126BAF4710790021255653
+CACDE1B9ED6AF5C696C3D8BEA4698DD9045B3004A5C4C03EA994A5445C9D4EB9
+865266850047E28F2D82A08617E9283FE637CFAE4F7F261CC2D616A8C746EF23
+7360553A6B434201944C04B1522533C61F615A20BA3678AF8D4BAD1FB548D82C
+72D41699FB96EF40ABBABDEE633F05B4445BFC4E6E661DCBC8EC473BD2BBAF7F
+75F7FC86CC7B1F3A2343EDEDF6B5F7E98A0BC4443E21611F4D807FE7F597A37A
+A4DAF8A8E6D04FEFB320E0E25C61E156A72A3E4A69EDA04B0E3B72B69FC19E63
+AA33A682663A8F37F4FFC1533CCA2A80DAA675DD723A7E13D9DAE3BB0F5F3E07
+99BAB9B9BCFB29B73FC76EFA02F4F632690651DAAEC2B3688B636F0FCB156047
+F8EF7239716BE5D3DB2FD1DAEEC11DC2D65CFBEDC1C950CA737A04FCCCA509C4
+7E47664E160322366F70CCC641B9B49192AB839E0AC609AB2FDD3783095293C3
+11C56740FB50D23AE9FEAF66DB13F35367B562F15161AA270EE44713881B2387
+7889FD10198AD4D750390811714DAE7A8DC6F5770224E93408F8CCD4F8712A9B
+3C583C983D98CCA7FF9DDDEF8AFA292781B1D7089336CA631413EA0728353E8B
+3650EDED7ABB6E5DB5B85014A3A9C4C76EBB664A5B3E0F3CB2ECFBB6294F5C4F
+69EA3AC8C071B122B129A28E04FE989DA9670EB6246806A516517DDBC52DC001
+4C027D51EF1F98506F21E63D57FEF267B913F1ED4770D892239222F3A9035C35
+FFA38D1AF3ED9A8C02235D7422695D30A2F801389DADF34CDC489EEB38089B6B
+026D884EE1C24FE5785C383B988FFFEB5459A1644CA44D353503AE117E87F956
+393DEF6C47D4E1C5B1A33835C9B8E1B98809DFEE43C4D6DBEF1C2B1ADE4B8F13
+3B5D224C25927433D5738B0FE019CB88B1F373E4AC2BDB5BD86887FCFC50FA1F
+3E01CC550BE5FA0703E1B89486C67E8A16C560DBC051028078BEF85B349D3058
+55D633040BF5853FE9E50A671CA0A088959B2AACA1B614DBDBD906FBCB6A6B13
+7ED6C5BF448F92E9EB110ECAEADA36CADF4B6D79703CA2EA9BBCC810A6E3532F
+63C155FB86CBF6A6049D730B4729C613BD759AF3742399C6B118C1D2B38FBC4A
+22154122B3E325ACA78A9D418FB443FB334F67F8BD2D33A8491FB2E85BA2BB40
+F538F5DCA031BB3A7E6FB3A4739D0E8B81CA2C85963E65D86552C771BEA7D233
+62F1811CA91DF9091D9A45D022D215152A2D63B0547C3A80EF52AEF1B3E5196D
+D8E54FEF4CD779A9026A17CF3DFD14A0B45A64A15211E85A77D3C62424906B6F
+BF2F8DA73DDE063FA68FCEFB994C12316791CDC24C08557175275FB1A0F5D09F
+F6248BF9DD6AF1897E337230837D8190D2E06CD1BF023F1C37C1821012E5CE9E
+955185656FE232F3F2E0551699BBC31A4C9259C38E292209750511EF02B9C53C
+5C549FBA73083447A151841AD245D7F545AADACF01EB9C336764F674273E74F3
+25ADCFB1879526F9E87AC1AFD391AA66C9ACB0E2AFA717F915E39719AB399D6C
+A43CE2DE9B9944B07B96C57FBBB4821D1E5AEC2F5C366A3A2CE0552422F243C7
+A1A78CAF7F20C97094011E5C1167D75674E3A7618BC9
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMR9
+%!PS-AdobeFont-1.0: CMR9 003.002
+%%Title: CMR9
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR9.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup
+/UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR9 def
+/FontBBox {-39 -250 1036 750 }readonly def
+/UniqueID 5000792 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR9.) readonly def
+/FullName (CMR9) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 43 /plus put
+dup 44 /comma put
+dup 47 /slash put
+dup 58 /colon put
+dup 61 /equal put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340
+15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E
+ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4
+B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029
+85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C
+DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955
+F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D
+2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5
+B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7
+78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7
+E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3
+41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277
+B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072
+55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA
+700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9
+8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A
+F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4
+FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4
+3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15
+B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2
+AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013
+461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC
+CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85
+CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C
+4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F
+291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223
+D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181
+C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115
+D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9
+9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405
+2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380
+A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB
+2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E
+2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6
+AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577
+9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB
+B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67
+0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D
+9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B
+42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0
+C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35
+623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6
+B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4
+E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97
+CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D
+07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7
+53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350
+EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9
+52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88
+F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC
+D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3
+81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D
+B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6
+B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A
+31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF
+E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293
+846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733
+46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E
+44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08
+A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A
+BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5
+1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4
+D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344
+6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A
+E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E
+24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E
+75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D
+EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51
+C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0
+5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034
+099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281
+7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE
+53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84
+7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F
+7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C
+D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933
+CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD
+866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B
+B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826
+ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B
+B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64
+FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B
+40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643
+D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8
+2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787
+39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2
+1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4
+F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9
+253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B
+14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085
+6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E
+E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B
+9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E
+EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339
+FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F
+289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3
+A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5
+5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46
+5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652
+152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE
+67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3
+BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59
+3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88
+713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF
+2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5
+D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143
+6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB
+A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9
+F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95
+26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A
+C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970
+350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700
+70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5
+F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95
+F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8
+9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2
+DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473
+F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D
+064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF
+1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325
+A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E
+E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF
+01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C
+40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C
+72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645
+24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1
+EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775
+D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311
+83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483
+5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448
+1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69
+AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC
+4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3
+7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9
+65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063
+B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6
+FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6
+4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490
+8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6
+1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3
+10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B
+C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4
+8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A
+C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0
+7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F
+852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C
+3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997
+648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD
+855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE
+1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C
+1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0
+B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7
+D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99
+24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C
+552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733
+6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0
+800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8
+6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659
+E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4
+5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2
+00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F
+E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4
+82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7
+6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3
+128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D
+744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507
+84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF
+AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86
+5D239CDECAAD9AE5D95377E0D3F61C2AB7EC99ED28D2B4A7B6004A566B43CECF
+7E35419EBC2A47CC76393F4778DA801EA75B4C1FC38062AA77CC4EF0E6CB0C81
+9A797C01F89BB58A957D3DAE33E4256B1F5A7D66C8989C512DA066D6DC771548
+F2DA3B490834E7B4CECD9293A5DD581A3171DB1C41F348377A602A2DDB80C0CD
+7B960942967BF3983FCE91203F8C465362CA8E91B3C759943797C24CC83176CE
+2D044CC07FCD6CF9DD7FCE413A0B2CF777529685866C7855509CD57489F07108
+D995887AEA9D20B3CDA77BCA95B6F655020E2964AD82AD77382DFF4903C68680
+2E49EDA9528B7D8F8724EADAB1EA2DE9F4DFDF29B22F885988C306058ED73421
+F9D738DBD7B92C3D31DE5E0367B7006F757508FCB5D653DAD14A8108292723E9
+740CEBBBBE4A72103663FE29397D8ADC9634CDB5E5E32533B70D1E617E255A4A
+7A43966ED1B4286A4364A8CE71574F2DEA72E061762B22C960240AB5E7A530B8
+D23B99D098F7160C4C3C275A1F76EFF27D853689A023B80251004C69E46C9C22
+0B8A6645E492931996E6DEFAD9D535B58A149AA49FE620EF6A1B044111D83197
+1C4BA33E9FD206A7B97E69443C94B33B7844AA6061EF7555A6B9B15BFD37418C
+A33E352E0FBA35589BACDEAAFEC6E0F31862296F17D9EB26257FCB0D067F0588
+09C206D19C54BC03C10FA55CD7B401C131720FEE80C43A6B22A55ECD147F2055
+02DC5F70DFAFCBAB5071834CAA36373049E0C4CD7EE0923124EC9A710933E118
+6842FC059A2C0FC15DA8D53F4D28708ACC998C1BB5ED9DCCCB619FD2BA50D5E5
+E0F5F3286ACB978C2D1FFABB11F5F0538FFCCF90E134950A8F3D2E4302902AF7
+00B476FB615944761BC794506C12A0B51A442934B04F84AB4DF31358F02158D9
+60EF313B8D619B84DDD846122B67110D021C4CACA9679D32EA86DB1731F1F124
+0F7D680F9C62DA46B729E72BE779016D016E6AA4E5D4105B86087CB86242CFA3
+BFBE458C94738FF7C14C6E4766C83F8A0527C394CF4D5EE8FC885B778F6C6AD9
+D8DB87CDBC9C9BEF4E5FFCD005D425DE96A8A5AAF64E2121789AF58B009803A8
+05642E2625292CC9230BF283B61032C12D2DA0F85893CCA9C6D1A853C2E2A875
+E9EC703210DD4892714D2AE78B868B197240198D74C4C19267AD441581D72472
+C8728D338E9C887703C0447EBCFC4012AC9CE863CE8B738FD4706208A6BE4182
+8C3BF27D8311D19ADBF7C3D25F6F1858CDCF4C505F5F5AC69F3E71E5A53D544F
+7F4FE29CE4952D5E50B1AB34F96DB9F031C1FA5A35FAF9EFA97C5FA81702C048
+38B81829312A1ACDCD9116F12C5F8A59DAB86C67AA5689FD6F9BF654A7E9312D
+4239A8B4665516EE38062D4EA75BF5215CEBE5601617D8E22E83001C4D5E4E2E
+387A8007FD16D58B30A0916B4B3E0F2B45DFA048B8353CD3CCA2787A829639B3
+10EF00AA637D4B38DCE45C2E16EC461023463869E3095E39908FD92CA214DC6B
+1CFB81E83839BFCDB01F6F03F43950B9F6CDEB8680B8C0CDC25C60E8A1698D9B
+46DA95093D064B0E691715B78200078FFFD8C304B7155AF77A7D63DD47BD4F4E
+7EFCD307E6E96F17DE324F9355E572BC235BD1ADF3332EF93988DC0499AC0473
+07444395130A7C2581232BB2200367B4FB6CF0E2D69132E9C35DCDFE4ED78F81
+AE8E214A189C6177D8FD219F53CA0447FBB0C3A3A15E5C8F434D4ED80233C231
+C2041381A4FD65FB576024A490154BE61DD82B73F3E3550E5775484605832808
+8B31873B49471AEA298C69F042F7A5179B58A801CE412068C3DE2065A7728169
+93E48A801C5AC17A9E613DF61C2FFA892D362C124A77F539E2E428878A529813
+8DA9507B8BB432244D447D33D55EB573D88410978E90DB944622D1993D75065D
+DEDD4D44221A147CBEC1D6C20C095B5A11851F57267142DCC4079C915A4D0180
+7FDC883E15A7769AA8A46B6A7C759B64D7CFBDD25F22AA737849877DB73087CD
+ACE34651547823DA7503D50E7C2E9457F7FAAF8A22C28319F79216C6D454A864
+898EE9F832A85FFFA53A6D2A30DB96AB7BDD560A8D4E29B7FAAA43317C507CDB
+27EA8A1472D4E8D917E62C98DFB04D1DDFE5B179D57D905123FC237706C3D318
+9DD6BC057EDBDBD24AB803DADEE0BB3803EDB2678C3E34B413BCA041F2853E03
+7B509120874B037752E5D7775A903B9F3E4757D174B8B458FB9125F3305C70A4
+3C83492866437C912B903B90B4334CE10B90375E30039AF0913586E73BB775A4
+3D527131A99F996092D2FD4E32A6781878DDAA09F33283C9C740EF3F351A300D
+DF9A1BBFE76439468B61912EA28591130F6548193347AB77051B3C13700CC596
+4CEC9FCEB3693961E4E442969C0A2154A00906DCA341C0F02A8AD7BE4F55B542
+204D4BEA6BDAA142DEF905AD58F61BE4497EE92C466BA5EA684BDAB3FC832D3C
+9823AA6ED81630196A7C1691C056F43FCAC009B251E23B0768420CD09D58F92E
+2B0D676E5C6640841E213A311789007DD810A649B80FE0359DDB6B1210267B2F
+D82067ABCB4C4984ECCC0E59E053ABC985695FB60E5CD25275DC02C093E4224F
+71E728788955550D36D0CA508E53A40778F4E31061CE26C07150DD39544E687B
+D51CB9559E3A5CA2CEB21A64E83F773DF6ED36B0391894037005E9194285BD40
+233459B44CEC25B8CAA9F0FA0F9AF5A1E173349FE78F7B3DC946BAF2A5489CD2
+072ECA6D4592A9D5A63A70545263C85068C6EB0DA7ECA832F07FCE8A0CCF73F3
+3E33A7DF2B6FDB882853BFEB23F531FEFC64B25A7D6ABDA98B9E3ACA3CE53B43
+2AC47B0FA58AE1DF55807469417622AD063B6988C695D332579C96D321F56326
+47533B68E54221681DEA4AF84D20519518D5E8B421BCE5D388093E7F75A018A1
+337F04049C314F6AA80D5245E316A41C877509B65DB973AE097F2AAA074ADECF
+284F2B96DD9C720FB73025FBA7A872D7C977A144002CD79F8CF2E6DB3CD7AA96
+2BE64DFE3F15245609B7A66DA02F1F18F023CDE0DCFC8BC43A4270EEA0E0365D
+EC322BE972C8EF9E21ABA70E91A35ACED986A1BF9098C5A91640F95771E3A61F
+D6ACBE0F0FED9EBA6545141F2F920EF46CEE3D0E48BE0E7C88ABB4292AEB8AAB
+E9C1B2DA0BED3CA5DDD3B2C2DB4048422B10A18CEA2DD239C2D5487DDBDC27DC
+657F444E4B51708535ACB3766EC047D79501301DE3C774F0502851E7609291DD
+2380107433ACDA739028E175F9C85743039D06752804FE5CE08A498E5D6F5AC0
+9F82CBB097667BF36F0BD4E22DDD432FB2D60BA1D70C7DDABE98B213EAFA306A
+76AFB9371CFD1645B9A15F2CF2AF8573EF2B9E087E51C2732C22438906F81111
+7DD6E7522669BA05AE11D1D72CB888651BED97374D2D4CAA987246C72FD03E04
+6237B73EEB32E8F1905D88E0ECE46BC31CF5CC2A4DBB0819A2131437FBE7C3F7
+0320FE8ADA3A2404070D07BD043ECD734B55ADA98330C372DE394B27894D42BA
+C57F4906956AD22FA5B185A948F4BA32D256DE7410D603A8673B9A852DF8DA5D
+E2FDAD782EB2E44D1054B010B881C985C67C26242C895A34BDEC644CDD50362F
+89F0AD1AFB4AF47B3FC0E5CC5D3EFD3D126030550DFA5615A35253D968BE0E2C
+3215DBA93A834D6AE0B8377BD9FD9674D8AB40AD7237830B2FD2737CC81E8234
+F0CA9A29D7C327B50DD365BF7AA7B4EFDA131A36CEC6FFD37407D8779D60CE4B
+C5876A6A95E74F07602F6B330FEEE7E82811A71851428B4C8605771400F43FE5
+37A080A9CE27700D5AEE3FF44992FDAC717A7488FA155EE6A84DE09D8AED4E0C
+9F09981AEDB17678D8D11FB10DC168A7BCB05519BD0C6BB4114580E181D88826
+24120D4F08F407F0862742CC2A9FB526044C07AADBEAF7266B562AF97D058646
+EC15D981D976EDF6AC61F0939DCDDDE2A616C4AFEBCCA3638B40E1FDB00CD12E
+2D2EEBDDCC52E19C8792FBC6E4D2D053D5108DB40F5DCD9DFB71F7CBB1B518D0
+7CEEAFFF68BBA888FC2DE34C0C3BFCB36482DF85E9BBFD9AFBB4E78451EDD408
+54E908E25FE39A7F77162A5680BA59942F5C4FD1890F85BD162ABC7EC20B0612
+BB816E5271EFF28381ABE27ED5A834DFF8F7FC1AAF9822F058544B228FC15084
+1E7419FC606835BFF0C0B449F2D10CE88A0460DC59E646B218F6E4037BFDA770
+ED718E7F9C17124CD1C3AB680ABF99F1ED4FAF5E814C25DAA5E6CBFF993C4F7F
+46C54E38616EB98DFF435A133D1821CE8450530EDEC11079BB3A1D6FE79A7D45
+D1FB86B0919C52666D57819DA93CCE709EC08FFBC954E8DE4C8483CED881B0DC
+56C5A01BFC0D27FE03E5B2858245AFDF91B6FFEFF11169CD287062427C9CF52D
+AA412B18047452E001C96B0F8B7E7A5919718DC36FCA7666A213E50208C387A4
+9F1D38FD0AA81E15807A3184562711B8A4069EF7448DB0C4683BB74848B5A739
+82DD7AD6B418D33D1CDA60558F65241D54605E41FAAE2E752EDE6CAB91B881FF
+841CFABDAED408CE4D67236D42E37236C8D0D2AC9173DB74562E2A56331C62BD
+B9C55C5EC09476EF6155B69BFBFC98FF0B146192D9F9B0E673DCCDD5548ECE9E
+B65CB532A4A3D681E69F69C1AC8DAC7A8B5FBF467B862729B909943DD2DB3CE1
+131421549DDD63F3993CA837B903A32BDACB283C1048FBBDDA118FCF6B432A6C
+41752F034B12D4E1652E70D45D9D7860BFAB6B731A14C73315A79CD0EB729EC8
+A2DF4BA3A0B5BFDFEC4A61C8CFFEED12D1158C2EA5F4B2682A96376698302F55
+E35651C826A5FA6197F313BE66DE757B829E25C28AEBBD3109EFA11310DE9FEB
+A5717D883DA5D184BABAE86119B0C9094E1D33D5BA9F0DAF57CF096ADFFA9D20
+8C70FFE7DFE573ED13D6B98AD93E394B7CD202BDC385B7CFAB19FD69A6BA1A13
+EC46653CD4AEB4F4003CFC4EF99AC2503FD2172F48435C8DEC654F6629890D4F
+6D9EF53AD00572E1A019392F4A70181942074E6AFB7FDEDED1B9C258DD4C5FE8
+8FC3B0C115EBFD4E3CE1B2CC8755FE68958664FD1D7A17601AA9A60DBF14ADBA
+634E498F5475229258F4EEF331D817883B2C7917768536D6B60E0E8FDDE7DF05
+1483F6849AE131F30627CA1AD1FFC6096C4EA7552C1DE57C67741182CD4A1C2B
+54E3471A2FF62FBF67EE14C551104ECBFEF08EA24ED436614AB5DA04E83A5EF1
+6D3888DB18C9DA510ABBF8C6BF75E9D447D331320BF2D8806170B79A996F7722
+2B50FFEDDCFD6949E97A26BFC40728A60E76F530CA22E489A65E7F7B98613084
+CE7D07B1CCA6AC3AC6E2499E9DD428D6C4B332118985D8126FE987CB2A71CF57
+21CBA24721E4DFB125B033678938F3707DB6A8AF90A124D62FEB98199C20C667
+EDBB2CAB7F14CF21388EF71AE90D3B376E4F7EF37DBDF49FAD41EB7EDE3672CE
+757B3864E91B874249D8154FACA256B78D95765FF584C49519CDE8066A658859
+6473DC3FC6CB47C4F6A2A07E315FDC6DDFE2ECE6B21D9D24EE5A0A6B43C499A2
+47BCAFCA934E397A7B1DF5B53042A408224B2CBC38AF2901410B26C7C51A7B19
+24E337A00F469180B35AEB649DD26DA0E18F915804707451D1A99733ABA514A3
+D37EDE6025F3A4ED28B7B7A47687D4075205A50637680B965087FF6D9D1905A9
+D943284A9134AF02C3C438687B60BAE8700F0D3A1D936A36E33A15AAAE8588A8
+49942F14BC5E90EB3000E2B3BADC127841940B19C65A4508AF110F4335448017
+D383412D58D38B00165C5D9351E054A80BB46E77ADFABEC0709F68F3157FCBC2
+96953811A7F353B3C6B929791A6549124A32E9EE8B8616BAD04F672BE44DB73F
+70D5EF1372AAF484F91D762E04C5A9FB2BCB007BF22722016FAC81EE72FBE889
+7C1C3AF2451D20A26FFDBA49A43B9186957650245CD7D9A413B8BFB29F72DD86
+E25BA751DAF99B006EF9A46A0379188245FE8B50FFE61E5EC8FA96E04390BDEA
+5ED9C3D076B840504AA7858DD3DBAD2B70B9995571F5ABBE9EA3E40C669B1847
+62E3D0E6CF21C9A3DA1093D6BE7CBB9F0D8C92489DB9B20C6B75C24D8B8C653C
+5E62256782B93356F08B27EB8586E5ADBC6025F90ADD6EFCB812AF503664A042
+27F93C0FF987F1C444AF9881D268EA80CBE411AF686C97E48CC8B6D1FEB2D6C4
+C42C1617E7DB9A6124A2C37961ED4B4FE681F8CA2C557198B5171715648BE111
+A5D8ADA475BDEDA2F5EEDE47DFB7154B894F7D5C124E0B20C229FD47528DB0A2
+22462B86C25ECDFD692793295765C0BC346518217BA476C78C8EC1004464434B
+1C3C2D68213B17343BA18840609B35269AD6D56DDBA8504AC4D89F19103581FA
+96B7631F137E0F14316B8DD01E05E2C549254F0D29AEE9BF2DF4BF211D47543E
+4F0191F6FD397D7C904C66BE3DFCDA351D1B8959C6170B8A3021C1E7B1597B68
+2BEA29BE171C2BA88E155F0DA58454D9A2FE3B246DF686EC13FF6F37E4DF1EEE
+031089FA0D214E7A3CD1834C336947AC871C01179AA273CD28D596C463690995
+DE86D033886D01D721F86A4ADD5CCF5A225B5739847598F648C9D568685C812E
+489159ACCA2F1E61FB3EEFE3F74F63833EB2F09CDC15E517E4EE7E4F874EEAF6
+BADBE15184C5B0C3152F8A56BD869D97676B43EA2017C15D67A19E186ED2B6DF
+15254FD9D5D68E03E74900C32A17CE08442151D39AA6FA2F68E970C1ED51A71A
+99B03B117881D8CA8FEC05E8609C73392A06B802D11225C0A020DDC424A35497
+305411D6A74C311DC83376B18D783A6D01CCBE34E75F8760062895B3EA6E1DB6
+2745A2E1B47A2D8902E8D132F166C8B3435E308C426F5D1C8CF33E16118BEAAD
+5941E401AAF37720E0C98C98DC42EB96569E06EA5CB80A8BC59CCB9E4730EC44
+781F5F8B6F605A649CDC8FB56AB25F8E8063956C4633C67EEA1D9B150015DEA5
+CA923C1F387254444416A30AA95F334835F4E4BBDAE627F433FC96009FF014D9
+74A39D112AF6FC9B80A54943714AC9A054E83070B1792E797DED3EFE0AA0CB2D
+7E6EF433C0F08A05B4C0468BDB2F2AFEC3AEC9074478FC618DC2999740145404
+5F0AD05EBE907D4012B612D7C13D5C7F66FFFB64456AD4DA98498FA778504A51
+EB94C5DF74DB56E00963513DCF19699AA3EBA9CF8D0D140C42C3F2F7B0576BD5
+CE3A77871354BBAF8B14C2054B46DA0CE3F2D624DFD179A270B1CD7A78E0397C
+DDDE5046F0EFDD5013868926593B81FDE02CD1943B8BF20FA40AEC34D130E012
+79A201CDC9D9ACB1F6261591E4DFF68E58495745DC007ADCAB813F3AB739623E
+05ECC86D066C93C3538DCBA994360E0337BF9D3F1C894F31CD444E81B1365E38
+CDE4791997920A07B439C22B57F3AAB72E249AB2DC31E714943FBDC759D32583
+F3C9DCD069EA3AD40DC9CA8A1EEC088F8DCE080429BAE48DCE550DC8245E653E
+0791FA3C4E697A5E1626AA8BD67666D804382F54CF2E20B54CB0D07D3944F784
+B73842DC26792D5AFF585041426684A24600820ACAF8B0EAD7F2A1CEEEBB605F
+7E20FD65E8321A8450E0D4857D9E52A9CDE723D0BA17A1D0EF165830CEFCB28E
+91D813D24054578E961A120E293BA4F3A0A1A93BAE828D3411D6135282CB63E6
+01407734C51F3570CEBAAC711C4BF970F6EBB210C9533390E793ECFA423468DC
+09E61069256BE6C897559FCBB95A92E59BA552B8ACBBDB921CEA99002B00AF57
+B16C56122947BC41B60012296A766EDF8DF7446A88702AFF7016052F85D4E60A
+07AFA2BC9C2B2DDC0BEC53D3959E1498B210447ED03D21F60E54F2A68ACD78B3
+7F13F6012B974D2061E747B15BE77FEC69D306AB95F326ACA2496A26D208E9FA
+BD022FEEFC5E54EE84B6EE04787D66A9BF4ACB9CB9FBDFD267F35AF57BC0D8D5
+867994778B79C001B5F81BD56E79B68E0535AEF774CF056B3CBA00707B75147B
+D7F2C6FAE549FF4F92996F2430F7FA9645C52C385B39E9EB917DB2E6AF3AAD6E
+40B03EA2D57539AF4AA1E0A16D165833AD3E93C62E2DB162958E1EB9AB42D89C
+DFF5350DBD667411ED687B13C5D07D40D0BF87FECB6766ED221BCF87D9CF29D7
+725A45C056B6EC063860686292B71F01B9C2E0D931874C62A276FA796612C135
+AA13DC2FE03824DFD64853F18D75A7C2508F5DF80E26FE717BB7CE7DE15BDEC2
+BBDF788EFB5A56FB87425B66CF75DA4C30CD8F88AB3E035A6D1E0321559F67C0
+F4BF752E892F7B1589C37C9BD4312BC1B19F042EAC2CA2842B813B1106094259
+E9840BBAB03AC8D849F204039303B8532B7DD52A7D8F9AB4FA15AC7C9E2DFC8D
+90E953ECEC61C70837DA7843767E98498B0D9D9917BEA48C6E9A01E370FAE0DD
+FC1AB64C24863B82F34956F3A5DA3F85E5288AA0F0782B9CFC3CD681A42B64A8
+416AF3B9503CB76A82D77A46F721C57FC32CBBB9D5BE478DAE3E05CF8055E11E
+CA0DCF9C56E2AF3F22F6336CEC8BA9F0DF685F51371399FD8BAB818C38BF0583
+1C11C024F1A50B910825E72CC8C0A37E8D33B57A90F4C7534E76008B858C203B
+1ED0978D4948221C6CC33C21EF0D3A100D8ACC7EC6B113DBAE564E5BAF20B31C
+3DE34EEE148FD2E4C36DE9325AF41CC386B280F0FD52068A21B1E8434A601480
+FB8C82DB6D268B4C57CC51D4AE5FF81BF5A5C8F7ADA4F9BE50EFE73942ABC2F9
+46B4E9EFB95AD9225B840B4F0232DFCB2EF7753D37AD7341985F44855ED2B020
+562152856FAFF1C3D9C8D7591A0E14E4E1186E6DEB85155FEA7CC716399FEE8E
+150DC3E7587FC5F8BD49BDF67FE87DF000646180C3FC28F9479C9AF07ADA9E44
+C8790A6883C50D2F432C310DD4475998F8BABA64702048D485BA9F2A5F6643E5
+FC85F92B31F6F853DD71EA5D87781BF4CDF23E2763F059593175B2677075FB4B
+0D74AC51617A3C3971C10626E83283763F105B1EC862F31176D98B996722A871
+9307A392B7003563A33F571D8622E90D1F07041BAE0D80E92EA95DF0CD239CC3
+C5F4826B7D1146CDD7B5AF8A15D6877982EB05D923E727A34AB1B54CA6C94DD9
+E2210531FB874D34D0B82D79D3C1F611E4974EE74A10345F8876815A89A4A8C2
+46D4AA42EE20C18EEDBB756D02D1AD7BE37405518BCE3F5A75DAB44E4B67C7FF
+3A6126D843862AAAD5641C4C3FF234254162E15EBA780B2D9EF9F03EDDB3F303
+7F1AC40C0145776F0B8DBC55CC514F6CD0A644C20E00ED5F5A1BC8BD47FA647F
+7B66B3B04A74D6DC6FDECD09AB15D993E664C70EB9D107295DE7BDE0C020F597
+A25FC15FE28883C8490BE8DA57CA4C345A6E9B3A7C835C94033DEE0D3A4E0B5B
+FE68958664FD1D7A09998FB162A104EE1F96E54E9ADB4C5341C7358E7757DBF9
+82625DF70C3753B011F0982C556585D21EE73B7944998D8C4957B861D90024DB
+DE9AAD4F36F113392494A8DF23788BBFA342679E52A8F34CF57ABA9EEF5423D3
+2437D9AB85C52CC88E36116C42149BA0B2B6460A283F05A2C9B7017BFB4C9035
+519D7432008080C78C427E2AE87999539C6E7794DEC29B43EB97FB1681B4D582
+342DD67404BB59B8EFB5F969A60C488598EB8D17B57530DD64934CF7B14505F6
+57F0DF75E5430C251F4564E690E26CBCDBCCD0945FB0FF2C51F06E51B7F0AFD3
+6ADD9CF78E05E2F0444D2485988F203B1DD62D0A04E30A5198436A861CE43491
+36E84FF2D57363D90BE73C86952A561D1E2C3E0A5A035A990B3FE7132EAD9F43
+A957EC36C349635639C03F643550A245EC4D9C9E25453FB3D4C9009B386ED634
+A819E64A78C0A09B310CF82985755F78A1EB3A59415795C64056616873A08351
+131E99E415CF957142D18C85F83F147CB945C84CB5C6B220A34E86B8C6B1A5F3
+A15161413A79A43291E06BA0DCEDF46E9C879C7E0F9AE8BE178811F7CB7E58D3
+37DA678002CF6A7A7CD72DA8FB7EC0AA8DCF23EEEBAB129F9F268B3700995B3E
+12182A7ED2BB1651C4F227658D0B4905C3E67E0D74FFE2BF401A16B8D2CBFADB
+B576E016A5BCA7AEA476FCF8DDE7082CF7965ABF7B2388327A47E618DE646B50
+7D2A262616C634F405E90DE9ED16350D1F191FC6F0FE5C2416CEBB78C816B983
+25804045A0B207487E9930549389031A62214AD4724892ABAD8F9141E2203890
+CEAACB401B88BE44E0B06F5CB51AA6F83B60E891141980674A5F593174A2A57C
+E7709271D3A333E9DAEEC9F5F9E35CF70BB45864830F8FBCEC4CB0D67680E1DF
+5354BCD7D6BAD5F53F2A6F5F9C5B0EDFEAA887262809EA2E7966190BF42B3B9E
+CCAC6DA782BEDEEF2109C8A1BF8388FA7ECF353B5AA9EC514CA639199C258A69
+DDC9DE0EA431AD34331174F52E2DBE8986AD657B4159D8ABD894280D6D88329D
+48CD531E38029170BB3F3FB318BD5558F69C9F1878FB96C20F9C9381AEC52D03
+2B6984370953FD73BF956C0D5A611867405AB092B7BE337697A6FDDC4DDBF2E9
+FC98CC6D1B73473B1BC4147E0ADBB9D85E650DA8C4DCB38FBE5D93C861786C6D
+13D38F7DA962CA37D2CDBF9B5570DEDB960E5C5CA5697F80010BBDFF93240929
+938A4608ED1E1D77EF62BFB2952447DACB0EED0AAB6FEC1B5D6CEBD514FB8DD0
+B937B3A8D7491F37C18D4BB0C7F14A3A74DC640D1F402BA9A819F74E49184871
+52AA5D33C4B99944479FE87F8D073FED6DA3839696EFB9C05144B3D8DF524C6F
+2689B11C33420FAA9AC7E2157B7185D1CF4A3E097D3643B9B77DCB7C0621EB40
+F7865B954E6CDC8D911015CAB627C89A17B1B51827377ACA21AF9B660103EA17
+9FE03818236364093D6FD1F0176FAABEB36467EE1381BBCCA56B9AF641264AD2
+ED0653454362F6BDC0571FE67622C9851415DD6FE1BACCD4FDC367AC5E6F608F
+D048C6B3A5F9A518DFF230FD73DF8AC6673E18389CB48A847822E42E32060CAD
+0F9C9B9ACBA5A2543D9494057376F1A30120EA60725186438FC352B263D01DBB
+81AF1D16B0995CA4A9C387B979674433606C6B57895134AA25751C6EE6C90FDE
+6BD98BBAD44E689EB2A65D7FE38CF84745F9502A43E6E23896A851344E2E554B
+6A60A380782C5B4CF84C083F7E321347E42C8D5C9121325BC8AB37E7DD3E6BCE
+E71B8C858490459D9049BB7E74969D9F04997D213B15DB49296A63F00437558F
+22A2488A1BB0AF00F4F4BE2D42032AD854F47CDE767E5E53E2B6ED30C7C45DA1
+3CD0DE1D4F84C85F095595061E219B18B03F9902BB36C55385A565F31F8A01AE
+AAE631ED21D431A462F8082B128493A483D46BEA870C7C8BF4A99D1C66F310DD
+8A541C30AE77B92236BBDC2065813B449752C01EA5FCCC5D8EF6301C22D48495
+D1A667E5C8F71DD5C45AF9CB8A63F75E7F0C809A34F3333D5E8404613BBCC381
+F65EF3B0B4104F30189FFA1D36B7DFBE0B56F6470BF1B7BCEE4F2B99663BD45F
+B09ACC6417D3FE592534C12953A367EF977A045F39EDC773A5F9D5433B50BA6F
+2A7CB7C98F131854A417FCA6A50C22CDE6A25C26018DA2BA75E758257777D7E1
+A450B9BDB7EFFD4297C70F4AE1D7E610C2CBBF21E0C3B3AD4A4BD0125598231C
+E0923D1EC5DC6B98CA27F6E96B698E9C63CA0DF647729947C4CF1DE47A78BE2A
+547BE03AA35AA58E74283794C4F36433094AC1B0EAF5805ADC04E1B884A635A7
+3EC6EB67F9C5F8C69C1120E291374E2091FB597AD621F8B20CBA4191698B410F
+793A0ECD76EEE0171B9F4B63C29D28F9408745D16A9793A2F25D68BF19F754C4
+6CAB074AC18E62D22CFCCBBEB321372E69CD86D9C321124DF001B5FE4AA3CB8A
+FC51EB5814BFB548B5E3A34016FFDAAE3C9129D0044E8D75385268D174D3B58B
+D2655E6A432FF70060519E6AF9C6D669F8ADF964BC5979C576627EC41B068EC7
+C5E168654EF1FFDF878B37ADC1ED65D861B1FA0CB3E0AA80A0A96FE3F464A77B
+7A05B8D3E3FFDE1C8E7526FB5F8C4F2F0DB3A4B1289DEE50F88490257419570C
+A7DF13B8FAB1ACD3D904595035121AB75FC18A885D94AD3E6A5FB4AF3D20E631
+70942F2FB0F549F4561559B6433C66C15E730C444FAB2D01DCB0435351238E9D
+5A0550D3D053945CD0413B48A137ED141CB6CE1330E5AEFBFACF87862CC7F523
+53156F7B86AE980F1EBB4A3F42CCC543FA61677545E2CE5A1C206E49E321CCE5
+F48E2332CFC176659A0AA0D8643316834594422EF6FD47D370310BDA01FD4F82
+18660096FA97C7BF3ADFDCEFC959FA1167E287EF5546174724F8F61152DDA21F
+16EE922DAB2AB4FDAA1240417C01321C43102849B55741F15E3CF73B6F889BEE
+68A7D74B8BC71EAEEE8E3C0083428651B55565805D47273D0461727392F6E43D
+F6CFA2594E84F2FA3887CA1E84A2C91CF4F4852B71DC935A3BEA51CD801F0489
+97B326EB9876B2B027
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMR5
+%!PS-AdobeFont-1.0: CMR5 003.002
+%%Title: CMR5
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR5.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR5 known{/CMR5 findfont dup/UniqueID known{dup
+/UniqueID get 5000788 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR5 def
+/FontBBox {-10 -250 1304 750 }readonly def
+/UniqueID 5000788 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR5.) readonly def
+/FullName (CMR5) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE26BF1F487876AD1
+16184ABCA7446A2352AB37C36E9C9BB67CEE105C612D36566FB459D6ACFB1DC3
+7A59448A06EBA21F8824266BDD0ACF9E356251A897A920C39F1AB236EE06C039
+8C4C0AE55FCED464E19AFAF548D454FCF73F6087102630AEA03E622AF2596870
+1353925801642BBDC11F09963F4ADF037671B73D48CD9C209DB4D5BE7F4CB381
+94887E8365D25C45D1F87EFFAE360104ABD3235E4D2F4BA163408448E814D49A
+3E7C171B8F1275D49937C3255326069007B302844EBF2BC1990DDFF1A34C2770
+A262ACCE874DA1E0002188D6A713C79D5E9226178EED27D6F4E4DC24ED2669B2
+3873F42A48E5C1365AAFC83FAD8B849E5D7E52BFBB01B281005A9EBEB4EA2F35
+B691489305BCFE5516DEFBA092F66ABCA2D739A9277AC69F74F786045E63B0F8
+66D545B12B0581AEB579D5E1E2A412DB8F66276E05F131EC3B9F543E11F40FBA
+8CC47071DB04A5D38A707C9F825527521CA1FC412FB54DBD72E912BA4EC8F747
+306A65040671237C8FE84AB6D6157D96EDE13B3A8FBF7140F1A9DA55B666953B
+C7FA638353F278D07066AB8DDF0DFFC832F7025DF1AF9F894D52E9FA95EBBEF5
+9D6B97768FEC26E845B87C6ACF5395C75B894B5A1F50B248BA33943C5AD6CC2A
+8D9AC65C08B3206E7F5E5913CD0D54C9FF741A4D92B628F85E43F52082397891
+66E6F922E0BFA2E45F0072217011D4B8EB40893F151E4E2E92ECE5862C467D4E
+3833311B08340AE1C0C692095AFB739E9B9A4F56BFA0F0B2AB8455A7470C22C2
+0C2EC285026195CB73EE2A713ABBDE4945AFEB92630BF852DD4845FB4C9A8C8A
+0C8C971F29440B4A786108D0DA1AEFDBE03568B6B2F3953B4D07A5B7D6FF564F
+6CC0D8C08CA459D556154A45133BD7AF70C7D8F474DE66E64FA112D776478A83
+B282EA4E941CE2FD6D8F7B68D129CE0093AAF7C1D345C3D65BE74EE9391C9B89
+2D4D31764F1BA81CB12CE46D15A6BF941C9F0EACB4A2DECC8F2F6B85FFF490D4
+ED7BB6C7CDED10F03F68282B2ED20809F95840A904020C98299E17C46243D9EF
+05B5B8173BB2E8CBAB3AA9B8207A9EFE6366C91A7674DBCD9FAF12A2EF4B5117
+5687F3DF1244F5439ECD8AB0587F492E990DD7B516C664AFAB76CE71084FDD70
+E7F5A38BD46926615659488D3548C5066C06E443016DD40275CFF3105573117E
+369C8C34E48BEE832D93F0ADA7674FC6F5A64183DB2B70FF166E02E044B7063A
+41D2F396A9158A26D3953F12982ACD1D7593F474DB98ECFD00EAF57FAAF17C7E
+C1E4775B37FCBCD6DB1B5BC6209162E57E21A6AF427043562D9854B430A0BAED
+20D31A9AC334C87875E53E0B956D33111955459DCD98D54E1BCC61BA58CDB41E
+03009979C0A541FA9F69B55D3F3750515E5F268A7B55254B8A44CA732F2B9242
+18F34C029665B31EB68331B0147607645983340D15E322E3D0532E6376D40FA2
+1041F7988EB9F56D83946757786737D8BB4A996EA7933E79BE61B4EA1115AA4C
+286B7AAFE80AB7C619329AD5FA772A6279FE85FA6B623138FAE1C6AE3FA45AB0
+95D8020D2EE2979E8A87D7E7C5DA2E6B701FEB4923F401F892D83A4928807152
+96CB664018AF24E829E582FA8B4F0E07387BAC53530AB3AADF74404EB2F311E6
+C6A70F960FA962E52A30CCC6E15097F9B7BF011626DAD38EDF78745B60C0818B
+34663683577D897B1B6AEB240F3A2AA29F1F1800FE0A5C205B35C6A6438259FF
+CCEC942AD2D7C3CFE01F956B795C0349DD5380D0140D3BB54FD99EEE5171DAF5
+4FA360A740589A1F8AB4FBC275CC06FF89A8350F4982F87E747501A74B7C81A0
+0F40FBA9D2875022DC3D417FD623D89FB6A0C0F1B930ACC2117C6CE94AAE5844
+0B5C9DAD579B7DDB73F2B26B05E1AAE30AF69937722E8360987AC0BDBE305B5B
+DDBEF5A6C03BE1743C518E6B7B58A85AC961B8755BF37688E37DE0632BBE06E0
+53FAFAFBE52EAF276365A0484A1A682C9B9486CDCFBFBC4F4A1D6BF71378F014
+56DDF9B15A5AE0276827ACBD9AB04D685F52A62BD3DA33BDC2A262B756B58C26
+4F3B552841B81CA60C951F400551166C72B8D357D8122685FE97D14AC22AB6FD
+2EE4CC429D580AD7B8D12A9C601FEE5D25C98BCBCF96C87FCFBF28419BEEFFA8
+7A4FC7B6E5FD377EBD5E743C3FDBB7554A1FB9663B648B15C4119CA952A8263B
+278E5845AB929942E1A0FC4CC413F36134884EAF3704865C1478D6988880EB54
+C5C5C1BDD7CB0548342B9C7B6F94DD6341C5744A9A3C4A866F620BB70575EABD
+AAA42E3B6E23AA029080B299294AF2E9388520367E964A3A66A84628D75F1BEB
+C7A58C92EF7335F30BD0A26D072A986635318E0473CE3CD5B4F1BBFF6E781938
+EE4E3C11AC27A1BE0C3B55586A4565E4B967ED2EE4674121A46DA1C32C5D278A
+44BEB43CCA246B730D337918AAA394728814C726DA4F9C40AC6EE877365976EE
+A53276A818CF25E995CAA34039339C55DDDE74B3C11742786C1E9FA5C432EAC4
+E184F35560EA31D687D005843B02F9252C2A16F9E4C31C18D0D45B7D5F63D589
+3C1FE3D33C912B9CD79DBCCF9FD8223FDC18D55762F0DB2DB241625B91DB17F6
+206120D6300D317E82F3DDE6D2D0825547C08BE7E6FF8FB54D4DFEF2F4E475F7
+F3838B4ADBE49F8C41409D85085DB5A030858AAEEA5AB9CD2D1172C8D0EE31AE
+507D8048E123AEAB05979C872ADBA4833D36626166BBB2A2CEF2F3E641DB429C
+AB15C97D7180E8E6AC0D871E20678516ABAA4D616B51C132F41E5661858B8C2C
+ECEE4A65A2B0FF310DFB531B213196D2E2AB015963246F44E22E603E741BBFF0
+16DBFC284906983A8C15278A36F5379F46C152304DADC8D90C313961E5F58180
+EEEC5A15131E5C48AD27F80B77EB0370482D528735FBA3E6C0548BB66CC222F7
+CCE87194F565B9EF7F32E656E6964501CE32462FFA6B87087EBAF45D454CFBA9
+ACA808C4397F3852158F1C0AE44772253ABEF6D278F726A03A9CBC4330EC80D0
+117F9131C5974445B81093C1D6E093C669CD285D1BFE864D53E5F140D40BE4CC
+2689C42C50C4137DE564374B2130609785D8F519E0083DD24A44DE24A68E4071
+4A2122AB8AB9649660D1C96DC58F37F88623528078BFDA3BA3085D527ED4CAF6
+25BA663A61AEC4938CA78C49623FE0EED33DA2D08CC78F86A807E791BC9CFCFE
+8FBFA55EC2259B64C31F6EBC45D2DF9B47EE09AA54011D40F55B6F12F49F2266
+EDDB09D44C521EC9568CA7E62283C483A436417B65B4FCBC7EA32AC6EB4E7B30
+080816F29F06D6B09E5506D3149C5D758BA85D820357D4955B0C1FFB383E10DA
+4D61774D3B23C84A339C7348ECA6078080FF8B436B2261091DBBDC02583E366A
+622ED9F95D2A85BDBA48DCE8BE45628A4ADFD5A48869800D9B54F530F43A8F53
+F765F5D5C44A9399FC1B9CEFA343966118DD11CB102423D46BA0F096795AF0D1
+BA33F089AD80A104DE7FDF8A6E7D935E6713963FE3C57CC673BCDD423DF3DCE0
+C57EADCA2AE4DBB30166C2CF1F7113DF96A27D4BBB23ABECC5A4795F1290F4F5
+5293B5870F892C9A32C776AAD06D78D0514F047373879CFC5AF9D624DCE5BC8F
+7CEA5055064050AAB2F24A1C792B2609FFDADC6AB8D0F31A12403CF3436A1E1E
+E24BA5F92587925C4D6795A3FB163245FBF054BB1B0FF01FD63DBF7C192D0F31
+33A17E7764699B669A3ACCF7C36849EEDA395E7F55174023A79904A766F21D58
+3DDB7B4C2808DE7FFB8717658084E70DBE046A13BBF1F9BB97B3AB527D68DE8E
+924DE65486C3B883CD65A95901B0DE57821CB6C6AE37644E02F5CB0163617113
+C91D2C649A0BA10736F3709BD504F22DA8831A09BD0B2D6790A498F2FBC2F642
+7845796E606ECAB2356238AAF40323D71B236CBD1E3E43BD5443F304D52F3CC0
+28DB5D33A732695AA09C0449C53C656704D820217AC035DF45F59AE445946481
+E5BFBE5D4EC0A42B5662FBEB9FF6ECFFB5E8517312F56C91A01824E401E7203E
+258C3BA073C1B2532B8312F5AE29E37F5EA71C52F171593B1370D4ED5D7341CD
+567390ED5B75D612D5873BAC518587525A591164E8D36D2BD89F792BD9EE6ACE
+99FB72B23CB2445F12B8A6A0876EE711166C9E34897D370174C17A2495D58B4D
+3DA19DBB1AF2E09C72FA42AA3D8047D05AC4F6A27F3EBF32ADD2AD2FF26EAE05
+A9AB34C9287EE00E8EC29C6603036D365AE08E00D1C7C410EA2551696954EC92
+92080C8FA5C9E67698BD7B895C82ED29391E015F83E0DA145384E223319CBA74
+19494F070649E03CE9FF905619C6CB40F562DA49C1EDD2CA221DD7D3DAFA8279
+AB50DE1C059CB8D5C9FA8137DA711B9D30F236526AA389B2F79F3D5BA6ED9534
+8852BF4448DC1B72E361A6A2B94CF865BC9C3401D995529E2A36DE755EE001FE
+C67B184AE8241D08AF88D626BD2D8AA12EE791AC4253D4761A21917C7F2F5AEC
+795CD14B33F59DD7080C7654DEFFFA669F50FB1AC8C0F2E60201673A78D03DFD
+DE0CB142F0F616C4051772BDB837CB4CE87A0C8D61E0FC7F90517EA0F5F6B1B4
+D57143CC0AE7CA9521C1536962867D6318DF1C9CE6476CEB9ADB21655D379B26
+7A0EAEC2D28430C14D38764C493BA4C06EF4BE6780131F2FEC066C4866E0B258
+51C48BEF77011A0B5763CB3D69A50BDD50C2D7EFBBF18BF42544B1AC196377FB
+4826BACB3C16DB805D38C34F9E92AA9AB5F9A9B317D8BF32AF8A758017269914
+DE3B748625D319E571187E1BFED9CCBE11ABC18C0C6123D24D2C7303DE998847
+0F6F644748ED225135CC3B957EDE8567AF3EE47F5E942EA9293F7BF74260D1D5
+A6F5E56705E12C8379DED158E66DF54349F0504EF584C6D05C44CDD8B720809E
+3DC36FF60BF55FDF1CA8C968E68346CF43C568E0B3175CB7D55343DE21CF9730
+C9DF918360036E4204CD024A67E764D3CC7677E5B229C1B909ECD1B9042134BB
+DD8E47FDBF63F212D401A797EF60011F52EAAFB88E3E70E007BF19826E40FE4A
+73B57D52FAB33A737B1341381EB2ED307E0B83B45D6911E04BE623DA82DD6BDB
+2DA096827E6A498A8D503668E45926525789D43D1BD5B896B487C0CE04FC9DAA
+CD9078D0C8A0639E27F0DCD82C552A7FABA42BFFEAD66CEBBD4D2E4B4A1B40A7
+B6FD119D37FA26C14C29A70E2EDB3253A1AAAC2650009CA3B97B430B1A05F2C6
+F2120C8981683D0976BC42FE98AB2D33014B983CE1E2F1E1AC4A524249C3CF13
+4B36652F96FCBD3660ACFC2F9778B729AFE2CE1BCF473DC5A846FCC3ACBE455E
+2C37853F5204085ABF3BEE50C28D99312A078CE2F6F4C1D2D3017F0E5BB5B614
+102BE45CAF8108407EA970111B5A97CA8C7A64C70D52D28D2EDCD27879B1003A
+6D168CD054E87C063744CDE097887CDF268D89180AF8BB4F170804AE5DA779B2
+1941775FC32FA189038D6050EC0E400BBED364E0CCD8DA571E902DAD812988E2
+4BF761F472EBEB411388FEB6F901777D090400F695D823C758882CC008D889E1
+02678FF81B252C33C89E3B04157C889D4F0F86D432F0B3DD7811BCF01C2FC041
+0D4B1DD9CB6F2433F9B34E7E8ED8BB1FA4F9F7CEB5354A8305C372C2EDEAFE5B
+4AE23CEF34AC457961B15CEA084E31B3741CF2EC317DF484736EDD688737C380
+6D868BDC02D1E63A52D21C8E7C1FD1BD8717612FC247293CC91E0EEA08D5F805
+70217761CFCA0F9C13996DE0F045F28DB67378221722416236E4DC00194E9C45
+A3839F4BB53E226919C2CD13A44E4F67334454DB7E133B2D308925CC2E275293
+F81AFEC4DCF49230F22EFA19F48CAB7E09FA727CC2E11E5A5CCF57307506D5E7
+6DD1D26BFD3DF97E73C2DC019B0A75B9D6386469ACF1A00A5AAB55F99BA1DE49
+9883DC4FB0E8AD9421B105E050519976705F7BC889FB3B6C2921D2E198FEA294
+E192DB3738EBEBF6485075728A0E16ABD53A25BB0795A21B65AFB6ABD7EAA3F7
+1DAE1BA012651B4BA0ABE02F3CCCEB9E92979F17A3338A376C57A1F13E3C90C7
+9DE8ADE421329A57369CCC2BA622840B79C0DF098EA42B810C596DE85F51EB9E
+C8F6FAA598C73F359FD7CB1D337E3B083833389846A99C87885A7537D35772DC
+A7EE51E8EEECF4E4F38AA04C3F4C447080386A41F1461599739D73C58CD02D65
+0899177F7D707AE793B4C915C590AFD6E6810700BC0C3D14B67E03129A4215E4
+953B88C7A9FF1AF4B6DA293E1DF2EF5667D408AD3F2DFDBA46EF95A1D8E1CA29
+FBFA01A4B965D1101CA6C0C2BF4670E94776753FF52C2751AE41872EBE3DC66D
+EE58BFD3BF8F543802C7614F64E7A9CC4474DAB5F4C59F8085FD523C91F0FCE2
+0CAEE1B9613064F9C9CE9556C841563A43660E0E71EE761F0448C41589AD0312
+958167F62FB166655800150F9E81A558949071F01BB11C9ACFB2ACA4F332D2AC
+598AD5ABD3D5EB17AFA97456C0DE4D3D872750F548C357FF34919A3EDCFF9658
+F3DBF53BB3D0A204E84702DF6FCF5022E753CA92323ABEDC81071ED44C306A7B
+C10D15F905672783BFCDF28D97EE156E293046C09595159C735A266ADAACB887
+7026C404951C27B88CC3EC1A6F15F016D55AE6B5DD739914DBD6861098977064
+762AE2867697967117DD7E3CDFC24D046F1D83856D49224191CBAE95C2E7B9DA
+4DC5ACB06B9F637312C1378941EF6B9D966E84DA69E66C43EDC0564D4A9B201E
+5CCD830900AC4D4EEDBBA4AD14ACBADA20179AE138CF35D6F830801D7F9D1F3A
+B48B6C2EA3B77E7EE42DC0A26C7FDA6EB64DF4136FC3AE0FADAB84CD30392E44
+49DD3F7DFAB77AC2E3A8D16C9BC002AA17A9C1E9166A21648AE2AD7F9DB250DD
+2F3F480844C93059796E89238B0DD470329C2AEC9F178B83D421063BCC18CC35
+2C562DAE86EBE6529D19066FAB70C8E73B260C71924B0B3DD652AE37DC2ADCD7
+A3E3E1936FDD259A3F32D669B6CD82D73436212D6CCBE436578139AE07BA8C5F
+07A8D2158C8F21007FC0B96E2B3588466A6FAB4F70363E994AC4FDC2CAB3A478
+9C98DE079DF219648A6219EC7040A8FA91BE9D9451BEA89906677866F50B6FAB
+E8FC00E826B115CD65FAF738492A919CCB657186BA12260C2816C44A632285CC
+25CA1D797DB0D901EECA675FFA1182AD6D48A8A96402D07A288CCC02F8A7CE0A
+39084DA379C5FD08743060851BD02A3C9CC298FFA0AEAC5F5E1928C46A6EBB42
+7D2AF9D32BD0117A8CD7B453C66FF39163092568B5A26F210900D466EA5CE01F
+14BC1F57BB0D3186BEE9BA1A5648887CAC06E23057199A31781C4C37B1A07C32
+B8AE8A40F5C481C8D2854AE5C2C3C746C4A2B48189A373A438F512642A55F2B2
+3CCD2D5A06A1859B50C1C3352B1B5B56E652F00EE79060842A33A8CBD002E777
+3CF6C051A6D5F02E35480569E9D00493C494F9FB977E665AAE4468E6DBBCC950
+33876A21B75095CF391E09E814D7A03EAA19BA0D7A560610CC36EC3A9CA39CD1
+4A359FBC14B07975379B68949C9FC2DFAF037C56C13802A7F66C809549EF2FC5
+25EF3F517F06F90EEDFA6F8A3E5F1F3531A5415F3191B8FA7B0F28950A20A1E0
+6E354480D09729E3A2D6796DB81825DADFA4580FDC7813B7989B18020C3AB1A2
+87E948890C25563CB26A068ABABD94F3D42213218F2ACBB2F5B317311474B222
+BE1844548554B37C97284940D5B7AF9E4CBD884D4994A76CC1ABF8E6AB0676A4
+0A8130F05B0ABAC088FE4F9FB536924A55451C8772B29087B8E5E649DA3B449B
+4A055214DF69D0218549440B3665E4D20C5A8660B3E0C3ABBA3426E7820E1A94
+5D273A6AC95BFBF247F695F4D7E3C2BF9FB7C5D7D1E4913953B9595C37A9C774
+3BC37749D7EDF4B3979F4DF8F5D0225B9237410F39AA49791D3E9DD2C1C33B75
+F7D79CF6A2B421E9704D68013F510E1408F0C243E58A3B01F2AB6488D1C43C1D
+11CC206EE00A0189A780A11816C1490A3D43DA1891DC61E55CCD6C1BBDE82871
+27E7848799A526BDC965C7382E650485A05341E9BA6769B4DE062EDE099928E8
+B5A7A5748A7A1AA6707FB743625A9C2EF7AEE00D188F914C8032C9FD72F110EA
+A18B8CF1F442FF1D2941ACF480E012A46BC423CF80B8B27F71AEEF12A3837683
+B835F569BF799016A0F0DED29BDDDF42FF4B0C6E9DD685DE6FF0865E46F55D8A
+2FC8EC23D31F281092AEBB07C9002ED1D7516AC8CC5881CC0B75443DF6DF9AE7
+0C373DFB29294713B2D142119D8097A35EC6EE55B0765351A47A433634F8AA99
+AC77CDFD58E5B4949F68A3B3AE8CEBC1461957D757E82FF2EDDD15631AB33EF7
+93175D3F26FE229E828E09BA0E09AD83060426A04CC0D66C4A5F68FF07ADCDC2
+DD0D86454F8722AA4DBBF313AD9711DCC07FD0FD78829201FCB6E8F101E3FDB5
+604ED8B8468235741A6001E63A13DC1019804DCE8FB3E8F1275C19515045149D
+757890701A6EB0262C1E616C9BBB2E223EF07EB47A4A767280CF6AA71F21F158
+C945B51897394DCCF42E5DB57A3FC6D68B9933A9AB17A11C83CA0EE1FB3F4549
+7A7AC43B07267C8BA09F3AB2A52C6E91D236554B0C0E25E50F6CED6BA46EE12F
+935E4E19DBC6411493EE29335EF6C3FA87AB5E70C028DDA186055C308A2DE1A9
+1193B3E15B11D1E155513349471BEFFDB5C5071BA393A1EBDDBAE2B346E522B0
+1B2812B4696369361C43EF9A2FCFCD37D32EAD713C35A1B358A0BE920F435B9B
+0D53D5573F96FC2EB63BFF0EF59B177319B02EF472054B64BC918D7B61C87250
+EE1DE8ED8C365BCAA589B9FB870CF3431D4898BE3A5BD9ADFDBF9CB20B285954
+FB18AFFC8D4C4C3CE1C15236386F2BCDB0A89BE18ECC88A189395448FB8FE090
+37DE2E03530D14C1C5A498DE640F91A4C092858AAE8ECABFD3CA48388486423B
+EAAE8AA6AD668286443BFF680A4E5475C2AE27FC0842F10EC321DEF74B3C9383
+0C1728E7D5014E53D83416658D4D039987A654231BC50937B2C71318A9671AD2
+DB628C3C99D0EB41AE2E505CBD33BBA5FDAC7439DEE3FB3422118CA5ED5023EA
+58BF1D47260AEF9EFBCC3122E42650DC69F3D8D8B575093A6F6D6F93E171C3DF
+0C82FF4ED3B1E592FB326B8EFBFA5201E80F474D2F7A68287E3C109A0B8A064A
+CDDB2330DC068B5DD69F8E7BB6FE8E647AD3A05938BB75DF93C0B3B03D76EB68
+E0DE1AC5F4A31BC2E23C3CF721D6CD0BBC3030DBD0DBB1BCEA5E136D1522E73F
+2AE7CEA2D566F8B32CA888276FD69F5FD361308A71A4B0F4E2CBFC723277F36C
+28C982FC82EF3ED04F5FEBFBF9C2D76370E9149E10626778ED2352CD8E7E0E5E
+42E27B2E31C542B1F9C172C21F2BE5932C87A6393F9AA755DFC805B5C13E94A0
+64805D8CC48F76E412EADEE158450E74F60E3BDB8D95455A765702996968BDC8
+F013A657DD6D85400CAA4CDF9BBFC714E431DFB0E59DF43AF9816A0042528EDA
+29C32D43009DE33DF99DF19C1569CBEE990A0E2FAB94AE647AF6173C690E6F78
+76C5B3019B0127DC37DB2EF1C85ED74F782F2825C52006905D8D6E27BF77DAB0
+4CEA0158482DAE525B9A2CB2686B664EAB54C75F41B90240E89C00BB1712A05D
+62743A38E63AFCE7240FBBF3F08983EC757651E74D28BCEE36894A4B234777F6
+E2800ED2D740CA1880327EE6F1609F9CA0C617F2782DFC7C6C03F1D99A94FBBF
+2D2D672026CE044164348BD7E4F73251514B6D9543CC6FA7E236F23CCE4DCEEC
+2A373F4134FB9E2A51EFAD456C431F08F6A4336955BDAB85F8704AE7769A2F64
+6E6F27EA470E2726C4A660BDB14C8712D5A68AF1380CEAA495737037C393B2AF
+07072B4247BB7D012B7AD60091E78D77917B881A4749B9BFEA05F16B9285D48D
+C5E38F9EADC31F697F308E11D32448F5AAF124B540D3E5778774B8F09D4506FC
+9C78EFEEA457048B2510C1F46F28B9EF8FCA0052ECBFFEB938830A1A5EF4703B
+CD1C445DE17A044634ADC6317AAB5D81A7700E90BA2ABCAECE474A22664106C7
+5711C23E9CC8C600879797C785292D5FA15E294C42865B1FDD59A207C388BC27
+8EE14E1F453BA173016D90843A1CE334E917A3BFA7431F09665BE57C0FBE0C97
+0BC8969FDA31EED683C479B92143B88BF6A27F3B18B12E8F1CE2B4249DB7433F
+1A0B6F7367BCDE34903049F49B4C1F2891DC381F1ABAA5795053A027E2B115FF
+644520CBC66565ADACBBE849218A0EEB6F3D7C788D1E4970BA3120C219BCB162
+596CFCC2D590689276DA9AA8847F8195B412A1584280BAF8F8CADCD2B0AFA695
+76A3190C601B5038E6E29AA502A290938D3C410E7D78919014C1160E7ED51DD4
+AE48E760A719DE1F19F45AD907A5355FD7F82E44300B095C1FEC3DEC920A0897
+79235EA5A815CB73EF76C3920EA385CFBAD1C1D4EE7EBF0F0D4105F7D1C837C6
+E407E1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMMI10
+%!PS-AdobeFont-1.0: CMMI10 003.002
+%%Title: CMMI10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup
+/UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMMI10 def
+/FontBBox {-32 -250 1048 750 }readonly def
+/UniqueID 5087385 def
+/PaintType 0 def
+/FontInfo 10 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI10.) readonly def
+/FullName (CMMI10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle -14.04 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+/ascent 750 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 65 /A put
+dup 66 /B put
+dup 116 /t put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5
+45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4
+7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7
+72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E
+BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89
+974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674
+11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2
+1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C
+7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B
+0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085
+EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37
+404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133
+78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF
+A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE
+88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4
+C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC
+BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88
+98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760
+E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44
+143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3
+981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490
+88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285
+4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683
+FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F
+347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F
+FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB
+C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04
+B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733
+F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA
+29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66
+36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12
+048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0
+80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C
+9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B
+75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E
+4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC
+74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B
+D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355
+E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097
+EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D
+543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883
+710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6
+EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F
+7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93
+03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2
+01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89
+500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F
+F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208
+AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE
+1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915
+85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C
+4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1
+6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F
+55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18
+085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02
+BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951
+2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D
+CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E
+BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E
+D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1
+991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125
+6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754
+E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80
+E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1
+B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3
+4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65
+1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB
+B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7
+8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA
+FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6
+AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E
+BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051
+E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD
+38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3
+7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751
+2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27
+DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D
+22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6
+8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB
+44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90
+D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A
+42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF
+C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E
+0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE
+66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6
+E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1
+6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E
+1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10
+B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B
+897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E
+EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40
+A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3
+F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA
+A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126
+2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6
+51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3
+598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F
+87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE
+178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6
+4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78
+7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6
+AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6
+3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379
+337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547
+C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5
+DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA
+7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD
+6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC
+98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355
+821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4
+C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886
+7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6
+B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16
+A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325
+23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF
+C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3
+969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10
+3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B
+9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725
+1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239
+B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966
+95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7
+FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE
+44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986
+FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4
+E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA
+633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D
+6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F
+FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD
+375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2
+6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7
+EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C
+E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D
+F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156
+DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891
+D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538
+D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4
+9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B
+9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6
+B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0
+D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF
+8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93
+FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26
+B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F
+00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50
+909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49
+5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF
+7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA
+BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0
+C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1
+BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37
+BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D
+4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075
+94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1
+F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9
+E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA
+92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0
+63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A
+CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271
+B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9
+5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E
+86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0
+AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180
+3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC
+35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD
+155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580
+AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255
+E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F
+226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496
+9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B
+8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B
+919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE
+A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7
+9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0
+523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7
+88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D
+2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF
+AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66
+B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D91051800EE6C54285
+AB0594D87D05EB4CB44FFC094DA0072AE7D4BF2F4F9BB812FED256B937BC2574
+8C529F97AB9F7573A7DA91C001C437B23150DA01C03E4CACAB427DD7211C9070
+1ACF54080038B140B00FB365AA8C9495C1B5C576AC4F1A55BFA54597A84440F1
+3F39413B40BB0B743F87AD352E94BFA3A18BC8AA52ABF8D351F6F7044A96B7AC
+C1D815AC3A808E338F70EFE7C0CAF994480C5BF869D6B24B6FBE125E6439F472
+0826AA3E76F008D5D669445106D3A7D78D01CFA914C330B7FC7C093265F4BE73
+E15132DE29A2A03C7DB2AB1A687DC4587EA7C3D9ED5922BFCB4A12A7D2E4A64A
+B134663F3901C83ADF4315E4EBFC07494951AB255D4DD62A4E362CB66048652B
+C7293E120ECEFEBBE8D5E7DF65FA9D6405C5BAF117045FD66CD5F84123DCE690
+009583FB1C9B6EB5D7DA81F9AC860BBAD25C7A6AE515A51D137F64E5DFDE09C5
+8246408CEE15C9C83736D80E83906326A59DBB3094D257F06847615FD223BB8C
+1F176CCC1A19697916F8F3441593D01C7987C43DA790BFCC319B869506467E53
+F9519E56A5D9CF639ACF509BA4E64390B2B797C5CE8F066E9CC477E2F1D776BE
+FCC86161C6E2A233B48D92B6588FA24EC844254D57A5CE0B95860ACA6E78A265
+2B2310DBDDC405D9AC3914C0B6ED559EC57A03993AB3BC8910F240E0131B0B97
+6B3060111A5239A5F91E0E0AE46A887C53B1B7D2203BA85E03C36593C8EA9C91
+4633C623548F0C54A577D7187BF31EDE23A7048147FCF61596848E8B68C9D2A5
+DEAC75FEE48BD9EB8A5D7422A4A8D09B17F9963207D4C4D9CF0B2F13043329A4
+1A88FE3EEAEEBA939A20E03251AE8670242174FA4D7942AD1C96F8FA143AEA88
+7E5C22BC050F710E168C8EEA56E73F61B528298F7BB188E5770C63C44FF019F9
+C26611AB209424DC392BC14C10ACEFEBBFD886B3C3E900F49425D476CEA1675F
+A81D077D675448A2BCC9651FBD9D68FB494A49CBBEDF6726CFAFD2FF7C91C8D3
+E2F68B0ED3350D126C1585E87EEE42C1
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMR10
+%!PS-AdobeFont-1.0: CMR10 003.002
+%%Title: CMR10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup
+/UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR10 def
+/FontBBox {-40 -250 1009 750 }readonly def
+/UniqueID 5000793 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def
+/FullName (CMR10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 1 /Delta put
+dup 11 /ff put
+dup 12 /fi put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 53 /five put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 72 /H put
+dup 73 /I put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8
+569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079
+24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A
+2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944
+8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E
+3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26
+D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24
+D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B
+03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685
+767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A
+8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B
+DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E
+94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004
+22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7
+72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C
+8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491
+344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A
+64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B
+07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC
+1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8
+78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51
+CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120
+7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782
+BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462
+4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A
+5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D
+EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE
+EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622
+4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE
+0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5
+C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904
+314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E
+DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029
+EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13
+DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E
+DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084
+7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91
+1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155
+69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE
+EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5
+7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67
+CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D
+38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3
+22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C
+0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1
+BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D
+4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F
+3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD
+B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE
+15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9
+849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3
+FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84
+4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76
+1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798
+84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF
+7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122
+CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA
+4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B
+3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394
+F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D
+F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140
+DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7
+D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886
+56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4
+8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53
+59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED
+49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86
+87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B
+8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60
+C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342
+D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64
+D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1
+F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178
+0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B
+5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448
+229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC
+17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4
+01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616
+F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662
+3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0
+689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20
+4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F
+A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03
+DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D
+364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F
+7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F
+26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1
+43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD
+8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7
+C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08
+94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5
+C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1
+B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56
+4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5
+7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01
+204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE
+B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56
+7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6
+279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB
+E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346
+CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A
+65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78
+BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285
+6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7
+B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3
+63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89
+4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A
+A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6
+67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C
+DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A
+5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9
+C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C
+9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D
+B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51
+963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0
+D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB
+B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B
+72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE
+B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358
+8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB
+3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0
+668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152
+ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5
+69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118
+C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754
+3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13
+407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01
+11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF
+2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87
+4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40
+2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF
+9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889
+CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8
+DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973
+0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362
+5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7
+9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A
+EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2
+09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A
+2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2
+AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420
+324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786
+486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A
+EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660
+52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5
+9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3
+4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D
+B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7
+BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14
+6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0
+B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359
+16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED
+E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6
+546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED
+6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507
+559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B
+C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A
+ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354
+04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B
+7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A
+8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B
+A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02
+94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB
+C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC
+41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654
+7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5
+18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76
+9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD
+E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947
+5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F
+4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F
+E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF
+9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9
+89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87
+7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3
+AAAEC15ED0F43F9A1290E91C463895BD12E8A831DAD661EF23CB9AD2C26CFB26
+71B72D15270CD8CB1D59CA2D9DE884C96BB923B1EC8208BD7DCEAB0FC2293629
+2AA1F72C6B470701C381E335C2364CFCEBACDD20CA36182CA7E70AFF5B14B02B
+75CBD0738E35DAD8E60CB3DA4DDED557FF9ED386DA52D10615E700751C842FBC
+85D89C0E713F556814E051C6CEFE7E83C2F379B88A801DDA565BE73013DD56D9
+44D97798564787AE6D5A6A9FB777EEB850C7481B4A353EB9279731512C9B95D3
+2ACA3A0D44585E55AFD968135F6492A9381FA2D126CF50373AB7D47B509AE6F5
+C4B100BE8334ABE2268DAFB7983BF339540A8D8280F3576CDCD4F21408AA7D95
+D50A7C1599E62D4FCAB001D5F9DA84FA530B88F2FE36B36F9968B5CF9FDBFA11
+DCA0E08D087C4C5F4D744BFBA60FC22E964CE10AF512C228F4CFC3DB21E38CFE
+AC11748F9B23F33426BC4AE3F026AA8178364703A31FFB8A31AB6328AA3B891E
+A9410A536479A9A0378B1CE62E0205B073A9C3F004DB440C37234EC8C030E18A
+42C47DD0FA1EE3521C98714EC451AB5E544183431A9C5254CA9A7F73A55B8B5D
+A98941739E254A5DD0C519CDB28B2F4B9E4850788B0B46E26020DA98EE4E7AA3
+9B55089D13329ACB496C86999B89ACF2099533DE1756F0248149468CC0F2C45A
+CA7E24A4C93B99FB57A66912299D28DC5EA30C0D4DB0F6CDF4F8F910454D37E2
+35E519763C2B61D2B1E6C3DE314A739F6DDBB748D0C6443D23FDFB6D6B162BE3
+95DFA7EADEF780AF4D3EACFF2C28AB8FD4530E353E5270D5FA6599BA4CEECD08
+BED2831AD39F1E8794319569D09632A4CD65FE1A20DE8FB18109D0F8B7EAE4F5
+4715EACD45673984D60AF1EE8E6C93C4F789008648C1F96FA1F8B338EE47E2A2
+2305B46D033B7C7A3E634072E1CE2711938D605AAC075BB8E678C339F7B42198
+3E61AE2035C3829B1CEC2E9FBCD62C20CB0AE0607EE97E5A017628A9A8A5208E
+BECACFDB8813888A023B8731F38AC5186F78CE942D14E03FC5B06D07494973F5
+249B89DF0C0C2A31A235CFC12C3E168EE1B0AEBB2ABAC2B90A514D97941B1255
+3D8AE43A964D2311F07753D0CE4ED2AD6198A473F1FB4186349B1F747F1354E7
+0E1ED37284DDD65E8228EF2322AB847F88919FCAF407C96C3AA0B2F20F09BD34
+4F8BE97024C48C184E2BC435FD6DD4F4CD5AC15EB1D8221E77F487E056BB3613
+2D39A44712CFDAB3A48D28BB363416C0958CB46FF3CF8129557405078D2E6F37
+ACD579854CD11DE48DF9E249F0DFCD212314A379EBFF13321BA7E3A23C00271B
+B84AC9AAC072FF6D5AFDC5A833E61CE4EDB9B83A04BA1F3E668B0082724961CD
+D8AB05CEAD315137CFB392DD377563ADEE563B6D5E8E7BC1E2A438F282B7B653
+D90E146B6AAA318E165C8353C9CC1F0922D3E84E0DA49A3260BA0E094D1165BB
+B5C2ABBB9EC9A9A8219C766F306D428F727B80673D6BA889F6D82E2C73A74BD8
+2F64ADEEA97372432EDBEAF5D266821DDA755FBB722CD4DEA4F2B5820F17BC8E
+DB58C0B02510FE815C9A30BECFB8BC982FEEB1185193FFDB7227078141416B91
+533637D5D087D56DB4254E5379AB49F9FD280C199C8DAB48DF8D5750623F8E77
+6ABCD46FD5E647C80EA70AA5311FB05079878AD49127A054DD75488BD6D2A0BE
+196363DCEFD2F3B25180F0945C4EE82559C1B464393D1001A05D4C79BF703F77
+3E575A74386DEBBA701384136291D57736A4454923D4B4B28F24BC26C64B46A3
+4862DDE3812AA8D9484F3FAA913DB115D972C8D5378FAB471F45929552F74320
+9DA616F6D521685AC50CBE35950A393F4F1720D22F0D21D7A45755BD6513F9A2
+0E3806483F487AF22A6B0215CB11BBCCA54D8487B1D3D9276F69065F6EEB0F8F
+901CCEED16EEC792AD0EBC2F0BB7769B6D998204C99B2005FA7E0F0117CCDAE0
+2E951DE42DD440390BC968E16B9336CEA9F9C6F148D5C3719F90217B8FADECBE
+CF8BC8AC81A2FAB38A815B713EA00A29D9EFFE4BF545BCA920BCAD87F68AFC45
+96DA515B4EBE13E39444A593861AEE88240C4AC5FDA2D59CF003E72BA7FF0222
+D687F99019E538089FAC20BFBBFCAFCE719ACF38D66A5299662FACB41BCE06A5
+256DB1C454FC544AEEB012BB9A3C72580F3FF43496EFE74E4BDA4EADFD10F89B
+C7E6F774AD9EBF63D76FC529C43E469000FBF31BAE9C688A45A28DA35C1497A1
+36E67DDE6F4780183FB7321C0093A2A3499285BA10801801D55698E3D6EC6D50
+B01A74B138D609ECEA4AEE4703A93D90BF4AF4C3A1FF1DA06BDE636D759321E8
+523BC287BAFD86D13BE6F446D724AD72319A4A262BD23386EA6B4C6C53AEBAB9
+AD1B1418E6D3D3DC32A37C5BD00D5BF14044E2AB8FA9FBAC553F4AA95C346579
+219FE870D53EC343C11BD0390EA4275285DAF560741AFB1E9DBC4ABAC323E272
+25852FB359FD0522121339522DD24979B3BB5F6672FC5B49AA4D0AC7248E97E9
+7B29F3D69A45C03AB82EBC1FD47A55CE8609929C00B48C2CF4EB5230E2F32006
+6CB6F41C2E2CF52A7B0429744AEFF3D3322E08222E9408B1FA32BB7BB54CE2DC
+59D76C425D57DFCA7FAFF1EA78D05D633DB2737F8613A7FFCAFD88680F72EF2B
+21E98B15C2992A6DF7260588FB22FB4D5E3D1751ACBD31015997C3503C9C4908
+EAC701B65D302E732CED15226CD5C35BDCA728EC0011B6E29D32992B27DEFC8A
+FBF4EE5E7A2C923970206AB78A21FEF96D905502029BC59A0668350916EB9A99
+B7DF7107BE1387318242CC0DE847ABED5968D4B6B6F9EB6D0C02C1133B22D936
+3B2D4125EA3FA457A2B02689B1A9E22A42E1C757C98A09BFDB84FC24FE010556
+40CB01C408ABF94C6914A674BE9F467DDDFB220D402F3CAFC7DD736BB0C48796
+24730008587C61372851EE7FE6EB503074DF9C6FABA7F3DC5B20BC6151A45507
+7D64B52CDF9006CC92CCC69CB3CA3D4D9B6643CB386FD496925494C15C81277C
+2AE4F8837473C372E70836543566B290236E2F8BEE99050BC97070C3CD422153
+9F3C13CB01810AA9DF91D39D8D40759EE9B33E5A95BF44358BC1641C2726CF72
+65E20ABB5A6D4B238A6166D3847EDFC04B7B823C551E85E777B848DA6C008961
+1F624A3929B96714C7B1D4F806FCCB55BDDAED579E0B7970CA866CA6C94ADB79
+EEE098DAA8119E98E988C55028AB604224E142F3A04DAEAC504B120472AC822B
+3514234ABF29E9E2AA578EACF315224BA3623251A4673D424112ED9EC73CFE7C
+C6BA1C0D31756164B01CC0E87D147B3183A523B7EB1860659F1DC297E993E45B
+C33ED9222E78D4D94E7C7AB1D63393DB4A3A5DDE69EF15F8BC0B2FE169E293E9
+4C3D2680F0616E7357557C23BD6D51199946DCAD6C3F8A80A011745AD3130115
+A51AF81239C819A7DEC61F4410BE7699FF13B8B4B1BC085676EADB90FCF67AC4
+226DBAABF13ADFB27DAD531806B56AB328435C9964DACB24FAD4C757A5A7E53B
+3220E91DBEA044A84C2AAA0193882DBE2E991F50800BDC90F76C805E57CC867A
+E2471C93412D18DFAFE1FC66BCAC27E5B54B127C275F428997E2A731A4FE0604
+E0F0C548E655D710716E4EDCCBE08BB0362A4CAA8668E7DAEFA22723DA0ADC91
+D3B58EA64970B315DBE2328B3A709D1D7B5F95BC2C766DE506779BB93959E3E3
+D4156C9152AC6A41618B71D6A0C183E57E6099B9E4192536830D919E4F06CEBE
+A869A5C6AF84702EC0C46471AE7319E6B08DE774D0BD7BA0D86ED213EBB15891
+D7EF5A4665BCFDE041B70D3A55268CCB8943ED567AB90AC1EEB328E08ADF8973
+5A59A4A4B48ABF4B835D3F3739C40CB139A939FAD1168739C869EF5110AE18E4
+5B9355C38DD96302802475DE20209322746B509CE37B9FCF24BCFF0173194D15
+97F6625C6B6FCA7E508EDDF5D46BB882E42FA9CE3E278DEB88005929B7A62008
+538DC6D1FF1B131DFF3B8B5D7D9F71DAD3322D0A4BD69EB1A4F3B4EB5FCAFAD5
+EFEE1980413950EE4337ADCCE3606B1AB98B58B7F1590AC87ED892F1A55E037E
+E44B174C4CB8D575C1F39F6FA8BB6EC25644F40559F62815F524DC97030DF6AF
+91FBA571EED8BD7ECF78297F6A6629763042352E8F8F33100175495997E8C635
+1216772E74FAFF8B836207D31A15B8592CFDE203F297DC6A68F66F22483DF461
+11F79AA00DB9FD264B51D997DA5811CD4DE695CF892AF4BFEE6C45D4B46C6326
+BE2E10D7644E73C747004ECD6E129C444C8E35662FD718865FEEFC8A46F5BCC2
+BA12C4D91D12A59FD8BC7A0FFCD765CDC64A4922496D357B6200B54E82DECF2E
+912DBEE2294419D3D9D6EAA12A16B1DFBD84B729A1FBD6B89612F97F99C428A6
+E1332E60BBC6171D3650A2BF2C5EB3344E9524A2AE82D38AB4F653A529152F8B
+7A5077E96854439260BCC53B76CB0BD7CDB81FFC74F80509F8CE940E14ADB7B5
+75F72734DB97A902EA48642402E18A496735B080A7ACB0384F688775B1D75CB5
+AFC0E64B3224C822AA7852AF4BBEB926AB1E167F3BE0D0C89A4738A980226B27
+A9DB6D1674A7E8B647AB00E39116CD60C43AFFF9432D0542CDD35EFE9C61A09C
+C65DF2912677C1668D127A59D1C0D4666161713B4D6113F83DD077F503F6EEE2
+6134A93DF9E02D1A7B1672D0449856982A38729AE07925D660DD5F6490B0DBED
+F6DEF122A2B6A4D212989B5E802767FF148D36C2E4A715CF7EBCC052108956B0
+5EF99400844B90EDD4385C10D6E65A0FB08BDF2EBB0F4E34F49B717A0BFA4D9B
+86187CAFE215FA3027DA6ECD7076AD7BD616D44A6F0CDFACD45D835DF3A10A53
+6732E90A1714BDF5FBF90FAE5981060C4032023FE068AFB75C7F6B88B072AB93
+02E63FF17FBE400CA5B695D13DBE6D67838656FF711EEE3573A9A01036B02EBF
+14536BAA8B1CF5219BFC3320E6C729E7B558B9778790D87ABF84D9DCF8930489
+048FF74AD0FE7E0CCD1952C8F4713BCDA0586100AED5526732DBEF54B66B1B04
+4C75457282DB8372897B224C063491D71D5B112DF196222D0C72AE259AD57C33
+7E76452C585355EDD20DF56EE7AE883F9B4658F0E24261EAEDA2A7F8CB0F01BA
+C2FAF771B86EBAFEDF6B1E612304797B288C2B4B5FAC726604C98B91EB326641
+C43B65A70066EDB930A1FAFF47C2DE9142F14981F6DD9D8D92D6575A38E48307
+A46489E12417CFE57B8D924D7AA7983A42DE3D5B6E9330468841030C1A01B41D
+F9CB0D2B3CDFBCFFEF10F7616F6C3FED6EED20313CC462704BC885856C1F1C61
+FA2B95931EF090086F8FB09BBCB596CB830DC7B1BB6CA3A4B97D4CEC4DA5D2B5
+B79BCD8BD7BEC962ACD975530D87BA66824F3D7973D9D944A4F9D035F4276660
+EC04F7C528A47D2ACD5F3114DBF94B7C2BA7542C40771F149F70D5F2CC116E19
+E35E3DA89340525AEF9E0002A34F05013A5AE5642350E9BC31923ACE057116BF
+3869B95A31C19C08FCCBD80C5CE06A82E3EAFEE18B22BE8FCF419CA2C5216991
+881FF9E9AF41CEAADC15F36B963996C52FE433C864F2F52646910358B012CC09
+E54DA3E8619C64AFB7C468E76A57BB0E9017999D00EDDA39023EE7527B45AFAC
+AC104D4D3C17F63D803941BDCBE3A7A3F96483AF5E41259688648560D837FB67
+D3FB05519D2604B8FDE43C32D2701FF2CEA50BF6BB467B03A053264066E667B1
+70D07F10935BB689D51D56B6D3BA6CC548CC7EEEB7D41898EC55AC7BD61DAB70
+BC45D2499F12CC9AC898982D54D151B32B64A78049F098655BF4F50A5F90D507
+02F925BD028A66C5BAEBE1ED7B1D884A73238C0178F4B87B292CF28839ED80FB
+1C59D0E6C2C53A96A46DCC07C2564147D03E20925133E57963C8BE208493FCF1
+8D98775709654567C54050D78D9362C7F1FBBF165BE7A4AB514A18FDC494E872
+B59615AD74A78193282AA27D6C4C23DF79874EDFFD68A8C2EB2DB2F24C8A72BB
+959857A979CA92038D080CD0D42CE05DA6E24BF66108194CE3DB83DFA942EDBB
+AFFFA4F17BFC3A0449059BF9984E5C5A3F422DDAEEFDBEB868C298D5359D881F
+7AFCCFDE97471FD89A705D11C7239ABACCA29BB1E63E85A670858DB644F9B0D0
+DF0399D01023025684A5D03BAAAF0C4D70185C1D60C5B23DCFED548AC64C713B
+4F215A318345CCE23C0B9739E1BDD5648EDE46D7D107A63C2B70CF9BA703F3F5
+6DBC01F99BA66C33588FAE981C8BBA71A6CC9446E7F729A911BEAAA948E7B1A7
+C48AB7886911E36E1256629BB3B4EBFB0A42C4172DAFCB1018D11EB8A7E42926
+5F472DECC38673FAA20A3BA305F55EA162BF553273B0BFED0558C68DC1144082
+D551878AE8B118419FE294EA9D6B8B941358BEE83DFDED305B9662BF26040043
+55D2159C10408F868DF41407564888E19426BA0A693BFCF6ADC00096D8CAD69A
+AFCE51048FB9B8D3ED5928E6E5FCA3C6AD820A300F699128BFDD90EEE3D1BDDF
+6FF0860B18627B7EDD63F57F453775A0C5EF353D91FFB8DCA1214D6BE8BBB596
+E7F27BFF00378504B1AF0D55DB1B327392697347E2E5CDDCB063B7639FD8F45D
+D23E2BBCBCF89D1DE70FF562DB50ED37B0A14D18948530BC953289269D0F34F6
+9AF7FCA4C79DFA69F550B9ADA0475105DFD856A1130DFA034C9270BD7B45C535
+E000B9A1A03CAB65375C0DAA035BA4CC7D10C08C2116320272AE766B4CA8DE3C
+3A9A948B71571973C743713CBB7281DA1A2061A3C79C808F3C69C6AE04D3D15D
+BE6A031F4D8A46FB4D79A77356D8F964325CCE6E407594DBEB5C5469D69EC9B1
+3995A71E4DF75823E48D6F2A25236993A837D7B7F0111727B42A17BD5DBB8D87
+C28ECB1757CF9E86364B4269E936F59B77D3D9062F6ED7BAE0AC1D892925F58A
+DB4C65638F68417CBE71EC778B495D564E966371A8DB5CE00416882AFAC189F7
+EEE4BB1106C9B9B07A630732660EDE6954AF4A5BF6EDC1DC4B923C5CF88FDFED
+751B3E2F47B265EC4F5C871229B8B992390840210A4691804644CA593C5FCB96
+3B963E05E79739FDE2F1A222474EA02C5F7D2D51E6F89199BF4F71E1F6111E2A
+4100D5276BF97751DDB8ED45EAFC3E254A8C803B6CDB852E9379B049175EA9CF
+BEB74E0D28875A4342BB059D3C047E499A22D5CD8AB3655CB4926819C880C833
+44A3C5F07CED78C13F581C321EF43B7DAAD1A9A34DE171D74388C045949FF5D8
+5A433DC0E10FFD3A799FD496E50836745EF1EE82E222C219EFDAA9D4B2D21D87
+65BCA58271B0F5E468697617C2C31DDE8B5CBE124A22DC79A39108025A80F55B
+9E860D23EC99B088B8407664A5A56762C1B815F2E83BD721B2C26106E179A253
+44F876AB8B23A257F18D58203A1359EC701476956DEA1460E958F6BA36A0C695
+53614F2F8E9317F4F4B5A9A60ED6DB8D32B33E57AD91301F22E6617F599493F0
+04CF5B7D5D7AC5974F83AE997AD452035AF5138240F68E2A1D5C1A7DE1ACD273
+A3DC7A149CFF0491CB897FBA6F06BC75C63C532808CB0D98FC87B837A6481018
+2720816B7A0F4DC47DB967FD26BF120E64BD15CF379C7554EAB630105D856992
+BCC07C412D55DF5953C5CB89176B6F7DEAD88FA6AAE03C7EC255DE1F98A5110B
+3A1E667D47EC79C8F266F083DB07DEAC72AF97D3DB3CE1D82B801616C62B7EA4
+D3D02021C7172DA0C2DCDD069F67C229C5810DD7A5AD2411DE3EB9901042DED8
+76C442770540F478500F9A89527BB5C997C6032DC8F01EA356480C1982515A5A
+E62D97B13282C3B88ED4BE2CA28BC2757DC772419B8F0E6171F4D8144F7AD5B1
+AB8536D21A71D827E33F2E9176A33884DD3DFD4E058CA818D172250F8DCACEA1
+613C23E5E879A41FADBE74D173D2754EC93637FE7990E82F53CFBAC16CCBE648
+10DCF577E43480A2C64C582368FA17A7192D0B7563D3E69FBCCCFC431888FBF8
+1839A7B2B857B3C75F1834D6FA0F291C14F20759909C8ACA10C1B19EECC3D2FB
+87566C2928604E793AA0F7EDBA696026BF8EFDA62EDE675F5A8C1DB2D4D28A2C
+9CF86181258C56B70723DC04DF150F7329FBA23C472B21912504CA679C463C7E
+AF92C3FB6A598630E23A2290C0642E48A633993489DEDA06CCE3DD6D264291B8
+675C6D1873EDC934D071540990FD535B0EF48AB2950606DCCF4C66E07FF0AB3D
+46223ACF6DBCF06F35D56DE1259F9ACB0F1E8DB1D2867369F823153AA8A9519C
+2D38BF169954B06D42735AC9D60B6979FFBADE981B0A3E0A9EC019969D75F770
+23E073F539C1C8C7EE28E6289A99979960990634415C03E3503149049189C27B
+BC644B00A04824F8A355D3FFF42493B0CB7FEAFC9B08945AD66D36B93E1C49BD
+DDE0016A5546BE068A813899F3AAC6D5B2945D5B03300D10A32264E250518C5C
+12DE8C7922A935E99B6ED58DE0DB78415B8786C26537F82399CB561C07A42DA4
+6959F8470C6848949E33FCE90CFC4072A3BD1325E9C73C87D2067E6B848C54A5
+C8A0D1E63CA240A918260A7A50F3CCD0783E2D2BF3FB60F87576413436B7209B
+1E0995798E596727BF9A785A226A68907E8808CC9261FEDDB011FE86A71F9352
+D6E89BF69A371E26A502F1CF25E3215AC00CC478063810F9B082A0BCF6C6CBC4
+9D3AD459393D072D3CF42A3632DEDF264B369F13AF8A277C5B079085FFED3087
+536D781FB33B007DDDAAAC0F74BBD2504FAA0FCEC286EED64121E642DC6E6E19
+D9770CEE54E444B421C721F8CBDFEA454238221293AFA0FEAD5CE7BAAB37BB55
+B234D38486BEBD9F84713C92306754C40290FC6BD7E678A365B73C458AD12AF5
+A294AD0D403026AB622A64A7FFC2327DCBFBE2BF37E16EFBE80F466CA6744DD7
+BB8C2C495D951DFA0481140A91B7A9D8CB697874B3B7F36086FD097C455D6133
+C8A009FCDBE11CCF67D2A597AD37EC1A1E63764FA6C39095321CD090C0D77A99
+D4B6523D9D15AB7B71F0CA84D804D0C0ACBBD4A76A7B24FF57E93536A0E29775
+C6DA29DCB11A22AF70B177F3EEA8931CB80EC9C6FE5C576CD1645E253330B724
+114F45465AF9AAB6D23A80A8E4240CDAC0720974BF83B7DBB2B3FB9EC0651C7C
+35C9F04E22D43B6C89B9B72196EEB8544349C508C05DAB9BC2750B2F8A00E54A
+9F79C3D9908974D52A7425245748677B4C8278B9C1A3F5DEBF1228DC8E0340CD
+2AF63642D0AE2BBF8903156D1FC582D20B81A6A5B71C8435286FC245EB93D743
+8633E840C65C517E5EEF4B11B6CBD01926B9ED977DE3310CF70BBED766E2B2BB
+6B6CFA66C86972A22930B3C7350789D3463A4E4A5DC561156BFCB0083986BEA0
+DBFF234554015B5ABF89F554AD8CD928F7DEFE3BF7524C1DF61BEC93996D9450
+506EE29845F13F6D1A93DAD791FC22D2B2E55D5BA13B49E770EAC573A1892ADE
+24A81120553C85468C8D7E628CA278CD66DDE95F1A2E66CDE511169EFD96EBCC
+9EEF12C078200C593A0C759F220E54F4267E8DD7830C000B09D61DC70E7DEBFF
+3424FB118C19D70CD14024B4E3DC1B04F2DF797368DD1F06EF542920E31A58F4
+9D1F7C85FD40CFCEEA310588FF916C9B8D8682FE341AA64AE58BB61D7F1C2C24
+3439B438B4F466485DE39761024AED81D83C9C2C66A27931345A7EDF4FCF3EC9
+9EBFEB38AA65760728DAF245A313A7493F9331EC49D5F6837ED2E3FA059CCE00
+ACB54EC91EB2AFB2727ECE49B512388D1CF765AC14E7CC0A0861553A27A248BD
+D8941C1745168A6B8BDDCB7E84A54C9DF3E0DB894906DB4A4BD688E3C85749F2
+35F4ED2F4D83424B6D61A9F8F1A51F63E39E649E6D2707BDDEC59A84DDE5D5FF
+995D4EEB87B8121E7288CAB5F0DA3BD32063B81443B4BF200C769331A470EEAF
+81725C53CEF640093FE2ECD59CE9DF3DFA8C070B8E9435E0E37FB33157AF486D
+1B02811D684D63DA74ED0DDFDBD1DA654DC97754339B043EDC8B0C83F41B8A9C
+1364A78BEF8C4D25D8904DD89F5CF52272509C3F767E8007131DBDD8E6BC5DDF
+4118182B1B1024CB17679C6732AFEB3865456D4FCBF90BDD481C874EB27F4F6A
+D6696DB5DADCB2E3143D958C65819C2CF0353CCAA6927EE0E154DD741FDEBD09
+3531B61D7EBF5065325DCB61480DACB0CFFC26E2EDCEA1E15291C5B2AA93A3C3
+53B2B267A84CA9E82B593AD63F595F30CFE3F4490544D68FC75418EF55CA7111
+8128D3B24425C40E6943DE484B4F9D3EFC7C1ADDE7192AE0A536547CA24E807E
+4EA5F06B9EC442AE60E658F55ED179B30CBA54D4BEF411687934F07C43CD2EFD
+44C05C85BAD0B72E8EDEA7CB6B12A3F5DE259C8D91FB803BA527AE4C19E3C535
+3AC4B96ED05F319B48030D36BB2E439B51159A7C2B8DB3D664AF1D1AE18981E4
+1B78D7545FE4A41492065E6479FEF5AA8D5FECEAC8EE8800878CDCF32626E1A5
+58B29CD81EF05C12C8416B0ADBD9DC3997EDAF747DF9C706DC2818641F7F968F
+AABCB54FEFB997C7824DF4E0D43DC129F15E71FE84E8209072D55F4CC233ADBD
+8CE637C18599F9541D47FC6B60D2239DB82249E0A1BB3AE61CBC7B4C57C90382
+CADBA85FA26DEF6EAFB5C2EA6AD2D9A8932099283CC4AF2090239B0BAFD526C3
+E6FE8248735CC3563539F23B6F8D2DD1DBC280B11628AEA76F9641CA7E75D170
+D8663890574298F4C26B78E119EA9BCAF2B7228235A24606EC2AB2F1210E5A0D
+712E617802976F2B3AF584A8D4B27241D03BEDA2E33D015497F2CBDE7C4515EC
+C252F794BFB9545949A3905D5FAC10DA5097B0DBC6BFF35E62981694B6AAB8A2
+8AA67B66831FEA8D134CEC0A4A90FCCEDD0D3C324692458DADA8A10830CE8B7F
+F94E5C95DFB1F90D427BBE53BE3D69137FE6632B608B6C700E2F58F8F5C5DAB8
+3DC2C4C3B3999C569E7621FA3D67F55F3991DBE0A03AB80098D7B3281D1880B8
+69413B467C6749E663A4C1DC677195501C03923299058B164A1C5B1946CBC8C4
+0E0876FB037523813D7ADC806266E25A164621ABD388BCE6C3DB3B8451E91C80
+3AED08A44FE10E7385BA9BB9CBAA84A14F743D2BA4F4C55F0D66E2D0D1F45484
+332BDAC0F36761CC80B06F0991FB7C55365650399ACEEAEFA159139B514178C8
+3B32A00BD85D1E883E82AF71DBF3139692C83206DF689DCC6FC63807AF3D5672
+5DBB8714A9CDD1301242752C4960ACA5DDB1C2C62016FC936039825691329B59
+C1A809ECDD422E71BB105526B279EC3465138E09BA51815BD2EE2FBE2452C1F5
+87C24BDBB4862DB295672C2B1D6E01380529DBC27BC9C19EB5D333BC617A9A80
+5C1D1A7B76C904195285F1CAA337465D18D02F121AC23750D213BD8CE2E20E6F
+2F0CDEABCC2D7EF4B8D96415AC6F383E70E3C75FFDDDD54F8AE2CD8F8F5AED00
+8B07F463C46C209742C2A79B237170DC35DD6A945A66260B8A5BE95D05B07932
+55D2A8C704C86533DE3FC80F5937E156B7079DB2A43E60D11DD6451F873E0107
+81CFDDDEA6433C5AD47D0B5A3445CCB9E5E193D5F7857D2B73ED20F8C5681EC1
+DD384F7D4D5649F4A52A0488D0DC62856C190439A0CD836E6965F4D1412B6A61
+74DE1D71A74F38734217A642D815FC8853519009B29AC3C8117E46E7A71F301C
+595F621AC7F85E15E748F1211D335EB17A028AA1A4C7AB87CC709929F6CCECE3
+4F3AC0AEBE4D95DDE46A8E7C65054D44800143FF1F622D7C72D2B0B3EBA4B117
+B2D8B7D96D976847B9EC5749A5DE25A8D4B6291F994F3EAD622939DA850B404C
+6924B35FE15C7B90CCEE6949B1330367CF1068C6E73BF85CDCAD577FA52E99BD
+F71B42048FF13DFECA7723D99C90EC625F58CED1FEFE0B82543F2B8FD0AEF091
+34CE56AC65E543C4AF4268BB55FB3DD416A2F979FEE2CCFAE4A556630F48A633
+00706BB9F2120780454FAD7208E57933921F735456AD76E01E1F56B596560366
+789F5CA922DA16E3C4BFA078899BB1D782A6D22F3554DB40DF512CDA0BDF916E
+8502B443FF420507B2814046F5F2B92F90FA4FE342D94C967339CCDC7BC3EF24
+9B492BAD6E403E2A72D1BDD1C3F5321A173C66E05554ECE3BFA2A5DA40B44081
+2730368C46CB858956D088932E8952413EE3C1C3982BF921F2038C8939F90F52
+F609024A03D6E67186FA42757EF1A7F0694A7FAC1C46085A1B33093CE75F5E1E
+FB4513488A3A8E079721DCE9B941A23E1964640182294DBC99A082CF9743FEC5
+285B9F7AA9FF1584E9AD9691C4F5A36EBE9E050415C225F2EB4E1977A733A138
+8259C0D1256B2657B75D30F6B7663874E25ED83C7F1E6AAA668E8428AA0F9C75
+7C9F613C6A14605600671E2D212BE1A547B548839B96FBB45DD85E50B3510329
+21A00A2E9A69825BC5B8E90283026D7AEDF225D41C423F40F4D58DF78956F412
+BE5EF20731E6AB3D6D5AC74DD4EE98910A8835F2172956450475ED60267234DA
+32EBF730B7D76FC91C9BAD677F398086029030FFBD33BFEF9547F1D5365D4862
+5B09D7B0D33BE0EDFDB3E340B9C9947F8323A5B39A9C43E62650AB5753B99EAF
+A48489816684DA93E9787C91479A2C6A3FF48D9DCF53EC8731D471C62033BDA5
+BCD5C9C33978F348EEFBEC6B5B581DDA969ABC9B9C8DACDF4E451FC9A3EA8B2B
+447E2BA19D209EDF21514511DAC62439F7ED04E3186FBB8B044D27E2DF4119F5
+8DDDF351314E1F8D63383B2003BFA68B9AF624E0F42D8376F399D384C23CEF8B
+A07A35D7618BCCBE8C84A3AFDFB21B4D81ACFD18E7BD28143A6401E15B6B0728
+BA14142B925D1AF5D75B4D548B94EFE40D66B60BF0E74948B99B5621ED79F66E
+4D4DBD278BC9839CFACE19848D38A1985614797E65C0DF4B3A1A69A96280031A
+7E9A4CE15C1F1BEDC1A41A1C246B63C4A69F4BD4DDE1F3C036CF14836B5B3B27
+8A9942CF5CEE5EF323D432160E7B0763AD9DFD1F8A3B45CFEDD7285EDBF3C5FA
+B44C31150BD8E45F1A66A9A2FFDD2EE04ABA445FF958E4CA092A792AECF773E4
+209D5F09BA681B5DC4A9D54FD5E5F53D12D9A07D57775A71640027EADC67D260
+8F0AA7853F2FD98CA498F3B348F3A7DD9171D2ECB8337F8434E235E6A0B0BA7F
+E04A57E5F16E2A5FD23A405DD4B4FD9CA723907EE98852B4D59C2F802E6F5A8F
+70292578D122C58D2C8B7EB292D0E4EC4D18C111F66B34B3E49D26F918C00681
+68976E0F82A9D1150D0F6A1A93E7E84D79770AED54D4A1B0DB57ED5F667E1C0F
+125293EB846D6F43D51FD84E7ADAE3825715F3D32C929A9193D1A7C90EE85886
+F7D9896E15441E113E6185F760496D01A848D9A1177DF8408AA2722C9638B0A0
+601FBD6E8C1E624836B21004CFBEA31A0FFBFA439451A39F990E04CE52430E50
+263857D358FC8AD303E24F3DE4865500A1177D0CBBB4E2B629F2D673AD07C00A
+C56A5AB1C0A1D3EADB60AB14EF130C9A88D17812A024E443C869240DF77C349C
+D7B8573AD5EBAA056C933B87EE2D9AB45DE987E9D3507D569EE3BF778C8913F3
+6905CE0E84DCF91F8165FBF084D00F2DB40A74B8D08B3B74C9E81D017B7FDE96
+3F1A9473DDF625EBEA97D119FE9BBC440A9DE41FBADCD9AB815E48998469C435
+7D96F419563A768912DD4CD392AE95B5AF6E4EFCE9FE93041BD4162383804F84
+5017F3DD0C9DB750AEEB3910FE7E1846A9AD728E08ABAF392C47CB1B0492E842
+7137E021AB63CF670B8B9B264FB7BAA86D12DF5F361E6CD2F55E9A1F834F7ECD
+1659445A2238C67282CB2FBA162F4994A47851244A2F148680E53D98905F73A4
+90C5CBE688D092EA920FD5CE1B5C445288723EEDB913BB95DB4BF225D8249422
+CB63B1CE765E1B459C77B2D1B9AB274588A943C6013AE93A54D514611784608E
+F3AE62A8468415BA4F703BF15B37B182F8195C4F7A2FDDB94826A06B3BC6BC82
+167FDF76FABCCC3747D2902DF4898B2DA477858EC32AFF6C9A36572B08B8D00F
+BD473C2EC3E879A46A2B057530CED221CED40C9D5084D24C600CB2CD99CC7587
+D2B9A99A4188A121C3F378EF9C5B529D06789FCB2E4B0FB1948C3C68FD967AE4
+A34D820F7F9FE16D37B71657038AA12D40B50B09434010493D930F052FB290B0
+0B33824A18F6E77813FCAB1B505B6E49AA54E77E856EA358DBF9775622CC43E5
+8DFB35CEC1D1A4F44C60A2B15003BA1C18590A9C8CA184C076FF5D5A5DD7F6F8
+7ACB4CC83E740BB2906EE9CB35843014BF9A46FD652A96F3C595AFA8C6573682
+705B7487CD1AE71A3D330C02B136BA8CC1D4B16165113250C9CB1F69976B4BD5
+E8057AAB30E6D2616E0DBD3BFE4C854A45ABCA20243E454E0D52242F4DBC8FCA
+9CC723D396CB1AEEF1B681440593B0DCF61F8C0F7EF9A6AA6F63CF218929EE02
+FF2B1A301304C7925EA582B4167728A13197BEBE618E477A9093359A111C08E0
+ECB83EACF03B40C08EA0CC49F161F031AF37A0560937B8E0E1D5A8FAED821BB6
+539EE7165CFC7D0D6EE6721F4F331D5483A27786ABE5556CD6AD6F6BF77BCFF7
+FCAEA5E8EBCD89D82BBF6DF8CA230B56DB10DB4E3388756878FE04AE3CAF1C96
+C2779A37173C41AA84CE0F333C14C96CC17E78AAE4FD28AB650C6B20EC71A024
+946B074E4068CED7F1EC599DF40B441DA5989945F1FA99363B7B9BC8BBEB6E1E
+C46CE48E57325DF88D0CACF61D5319E1CA99895BA3CE298C8B3C9E9AD9AD31EF
+6B897B665AC96282378A19C6A57130F4F91AED8B0551F82523325988589F5BB9
+874CC2EA6C32929FEC0692889B51FD7E7DD76ED5ACC2C5A2C81C7F0D01025B6A
+86210B63D4F70EF8BAA7447C014C4785B40D36A7BBD7C6090DF08504F0771C5B
+3B65497E4EE4A7FAB437C0C1AEB63E3026E9D054BF09DAF2F99C8B4230A3D5D0
+B8A68E71E9BF8642A12783F61BC8E5D6BA7D449BC88716A840640A79F6B56BF3
+4AA01386290BD6F8A4DE4306E26B66C18D1439D002B5DD2FFFD98E311BF3DB0D
+88F8EB109143E008E3501C4ABCD01D57A0D01C29C2B885F72604CCF5198C0C73
+0A75F9C151052EB1657D40138732A316ACAC5E087517466988CFE17DC46C2A12
+DB2FCEB0B303AEAE86184CC0E4DBBE9A472CC71EBF823034E3C35E2FB30839E7
+5AC16B6AE877311578300B5AE51FE7E9EDC5EEEC94768283956A2BDD27141E21
+20093C7B4B03EF0292705D1F4BBC2BC0A8F0FD53378FA1BF233D30DBD58F7F3C
+A0B79101797617BE2323074A5B11C8F4EB2452CE364192C8469518CC2819EF94
+6F80ADB78B65104F21A52CF43717185F4CA6A05DADE31F83511F92B5426F32EA
+FBDC779DB46834049A79D0D29AE77B164EAC8E0617272F1D0B48CFA1625817BE
+5CE2BE8E2A513B43E5A049B37788CBE3B9AC7F5B8651B267CC199306C254C427
+3B7CB9E419DCC51220461D7EFDAD160775BC84B72ECDC0C8188CC3C3845C62E3
+0B7B744FE5A5ABAB18B5D8D5BF23133106971634024EBABF46727365E906E64F
+8E3366D4D840956B79E3BBD06A257383CEE6C6C9F8166FC3033F948822195D3B
+B1D53E31CCFD577EE1B56D3D4F04B51D880033FFFC78E7F8480FDFA277E6994C
+1002079223E8B0E012335AEF71DD0219FCF1148411910419B4B05F7451732BF4
+263729EB9BB22244F8361224BAE95410FAE1147A534C46D2765B15B101398B17
+9880CF201D82195217E0D0F43795986792F9B20B84D2741EA4E67D0FD1D62076
+100324537251DD37308311F87CB353E1F53E3DF181D03178FF414C9F8C066BAB
+E747C680928D137F110FE6F88F4C2F374CB665818030B06FB08AC22B3970CB0F
+27376D20CC38B22161A84C0BCDE816718F9524E37E006F15FEE31D6CC6B63FC3
+47592F27E22C12A222BDAAD06B63E1FCC376EAC577188EBF424ED6C6289C9957
+E358D707BD3591558B9B47CBF004B3369B048501FE15A6D99CF0E669EF33A69F
+3BC7CF27E99C1D59D5FF9B7288F2FF237BF693661FDA102A21F4BCC72D8099CF
+4F00F7FC98305DFBBEDCF618258F812D43E4AE4F38A338EDF1923DCB773E12D5
+66927F29AB246C3A60A4022EF0E2DF9ACC58D9BCDC26F9AF5D069CD2E1F5E90C
+89979540232C88B529BC47428E9B370B7D106EF1AFBE1A71DE555FAB58A98B80
+FB7F7412F02814288DB983E3954198C31B78214126D2BA5C34EA22A2C2203989
+EF8B1F6B3E2E3015BD32BB0B23E405A599B70F97FF5E6FEB02184375CFCE2208
+2580AB12470EED8B4492C16A921DDC8D9B0260F7F1AADD213B6E02CBAE5ADF02
+37CD4E035FA3A1EEB052D554EA255DD5D87AB719973DC666511C1A3AFF4C57B0
+BABFE75EB93002B2E6C327C1A3FD6645B69A060C2658450056B055F2843D3104
+43D72BEF1E9D2A5376EAEB6D04A6D1F187F18F7105C2B18AF4575B8F23448044
+9B98070D1DB7363E7B6415EE9D687A0A593430A1478E8DAB5DE64D2AB8DF6E30
+5741C00D231A209DCB175805DF4D817B850E320F249E8D61E9ADB048B926BB87
+C84FD9198E7012B4EF92C5203F4E226DA4C80A8D69671FA3A90E5D7D39721D69
+F091B0A70E7FE348681CF88CE44202C67ECD2C24D2E1B1367C873B4321A50075
+94B59587DD6FF8CE35B6E08AA90141303E04A046B9924AE7C021887CB58C13BA
+ED5DFD81278733E87F5744C2782E93EC5B32F7F20FF5DF2B89F4E598C28D1366
+1F60C0E8C0047B87556145B934617CA5CC30860E5BECBB4A20EC85EAF95AB599
+CE70A5161B4C854F653CB2EEA7A979C69AF35F7E9C5423DAACA22D1A062744EC
+B6DE41F69BFBED18B816F850268CF29BB64D24CC69449064E5698C233E5EEDE2
+1E262F93CAEC5B2B1B554E154C5348C014E4FC4B4D27542B510E57B1224C0D3B
+1E76C20776DDFA42422D511A4D5BAB383BB80683DC37FAD4A7C6D8BE237817B2
+5ADB46CE8D79AACFFEEAB632C8921333E7FAB08618929850337A3DED9A277509
+DCF7544851F60DE5C3B236BC33881048E7F2839C266DD798A5B8B336C5E3A1BD
+9D40233FF6A87688D1916A5EC2B147429046FEAB7CE0D8FC1EC3F4CD773F8BC1
+AB43EE40DB0EB2DA052D4B23DE906C129679CF49BACF48808ACDAC8F4F33ADDE
+753496A9FB3043B4088EFCB4E2C8A0B1B95E6E495A769832073CEBCEB82CA55B
+9D7F8B32F199542FF5F2FEAE4AB45BADB81F304CE9B03F519A2200D38C99D5DA
+27EF3D4427EB2BC5A79CED6912D93335AA83180E82187082675F916F6840F5DA
+E083868CDD3838504BD03B80ED8D0B9E983DA488445C57B20713A5E05A981B99
+8CA3240CB7324D97978125018C2182C7A752D8041293B36EFD57FE90AD45EAC4
+2884DBFCC73B9B591C57E2CE19099FCDA7A9B700075FD15984BA0A9296AA600C
+4DED19E2BDDBDE7197800CE98FDC40FE2E90112727910356DF2B481AACEE1F4B
+2626FC11520210BEE6F16EA2989D99B89D51515D5EDF9F344F7D997702598A2F
+08BFE4CB96163CFF4E9ABA3CE6FA5410528AB2633A0F06E6BC056A371714ECB3
+5E6FDAE2919E6A53B90499E20DD10E57BB496FA41B0A4B1D4400D8BAA00FF97F
+0845B229DC4A31C161F82A5953C7D8EB27F9167425308D08C80EE7311C603869
+74DF194B31CFB0B7F7FF2A25C5A269A470E6F53CFB86D1A8606D1B1A5A81A15A
+D064AD6E9AF4095CB368492B1B5B5FF9F02C7A473C01DE4273AC1E4C3283AB56
+F517D801B78EB9E949296730CD4D451B1DA77E48C269CD7E4BC5B9F53A24601C
+03B9A00FBA893BB49B6CCC4BA3E840807A73BD9A6FB689223BCE099F0D617F92
+3CB3004F925A47B43EC769B07507E1F0C709E171F41ECE70626B5AA03C6197C9
+861097D442355C0D732E680348C720A85A9A719A5B93BB44C367B2B52459A433
+67A58BDCF879A0F1BDF74AF42F4C0110A674AE2E5982B37691C56266AFCBF983
+698681114BBCE4A68F7E3C39CB09280E3A23A8F1BA0D622074427B98D700DC4F
+C726747F9E42F7C8719C512C4FBFB108E9D22B7A4BCA67CBCD94A1CE42181365
+890408B3CD02954D1D42A6B945EFC38BFA6E18F677A08ABB69F6931A41F633D7
+0382CB8C12CCF63E46C998C6E6E426B4CB022AA155D33C9591727F498AB1BDC2
+EA8159A3D437B879A0287AD59538391AB73A34CF7A72E9208AB72820912C097F
+37744DE1F4CCD506C3E0D79C6EE070AEF8F554F172F834C38264964DD75810AB
+4AA28A2F67DB6F2933495F77641E2A5007AAC9C84338BCEED53A449781D4A0D7
+2917D3EA7F6A5CE40EC25412853CBC0557ACEAB32146DE6D5AB35AC40951F8B7
+F6422BC2889B0161DB26F483CD45F2A0764F29646A7E44EF9D3F00C94FF1FC9C
+63CBE87AD63A2E8A9FEE2A046AE3FFAE57FE6ADD8BBF25EA6CC61E057240545B
+36904C780EC39F09E338A24CEE4DE7CA74989BDC5097DD192917A844C03C155F
+C006EFC3AD0071FC4CAE667A6B1D72E26BC2BB5726FCAC9F0FD412A12BE0D341
+39142FE5A1E33D4460659C1DCB404742D1A02D921C5117DBEAF5A3AE1BE84466
+CE97F5309615E6593304F0FCAF1B8EFF3675618E65D91BF570E99DF50F0AD94D
+02913A3B0373189AD3160ED8F92F636B372DDBEE44AA952C3107BAB80D0F880D
+DFF9AE51CCA0B86BA0DB2A3A306FE1527B3A72A6494CA000E173D60F789D43EB
+C3D0B77A8BD6B10B8DAAF84CA80F24711F47143C6D8379692254E9890B2EA514
+98BB3983F8AF8EC94EF7531A4C6F96376B6F8A22873BC7D66BEC02178C3B43C5
+79E093BEEE3BC8144E928FE709A2543A8177E4B48062961DD4A9CE69807125F1
+DC4303C993EFD9289927369846B4FB19A6B5A6F9477D9F9A83171F91B2411191
+ABE480E424FF49F193A40F4B915CF51F962C8BFF22368FD49156584EE0D1B6C7
+0B1BF6EDB49F2E8E13192CBF0DAA043DD3313E4F38992C30D6D7428D6D74FAA0
+0B33AA271E716682A74F8AC772EAD14FA41A856420B1679F52ADCF2064CF34DF
+4C3E73B94D82695150A3F1B6ABD718CECF80769B7BC0DC203BFCA58988E0F2FD
+BA7CE13BAF577726704682521B1E383BD9DEBB32C9D6BC
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMBX10
+%!PS-AdobeFont-1.0: CMBX10 003.002
+%%Title: CMBX10
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX10.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup
+/UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMBX10 def
+/FontBBox {-56 -250 1164 750 }readonly def
+/UniqueID 5000768 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX10.) readonly def
+/FullName (CMBX10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Bold) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 39 /quoteright put
+dup 45 /hyphen put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 67 /C put
+dup 69 /E put
+dup 73 /I put
+dup 77 /M put
+dup 79 /O put
+dup 80 /P put
+dup 84 /T put
+dup 86 /V put
+dup 97 /a put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB
+B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A
+6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6
+39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8
+407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4
+F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF
+285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33
+DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185
+53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108
+74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D
+ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2
+2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89
+8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D
+718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61
+C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B
+03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2
+767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09
+FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377
+547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A
+3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62
+57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10
+9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84
+1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4
+822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB
+1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B
+28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A
+B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893
+9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B
+80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7
+D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356
+582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89
+4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB
+323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D
+CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC
+2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717
+0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C
+E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1
+9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F
+9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237
+E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814
+9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF
+A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45
+8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96
+BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921
+5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928
+6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711
+86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990
+0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713
+6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05
+64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377
+879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B
+63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE
+2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667
+9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317
+47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F
+F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387
+9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F
+C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB
+6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2
+BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238
+4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751
+125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E
+37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6
+EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E
+7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD
+A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986
+410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E
+8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0
+064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9
+28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B
+3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759
+8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5
+E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08
+EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4
+A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0
+0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9
+24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373
+73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7
+213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501
+3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6
+B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82
+FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E
+E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9
+42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE
+4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B
+8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10
+CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D
+13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D
+52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493
+FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3
+760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5
+5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D
+C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58
+0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6
+E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974
+A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED
+16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C
+25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8
+B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B
+45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E
+C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE
+4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06
+05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A
+D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00
+63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B
+35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC
+DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75
+BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40
+70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F
+BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71
+169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A
+BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3
+EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441
+FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC
+6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9
+05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C
+EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30
+69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D
+813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70
+EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552
+19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340
+1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024
+D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D
+8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6
+17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24
+96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8
+14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668
+4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635
+5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE
+027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215
+A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96
+BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551
+66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD
+92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F
+93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613
+83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963
+093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6
+30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C
+1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9
+DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E
+D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE
+6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F
+9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183
+BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8
+5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB
+6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133
+BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548
+DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A
+5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2
+913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E
+243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609
+51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A
+A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4
+C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239
+E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945
+942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589
+3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348
+A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D
+BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060
+6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB
+926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9
+E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D
+08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26
+8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E
+42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88
+C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0
+BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3
+6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D
+DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1
+E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9
+CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B
+22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665
+C2A63A837E4CAB38F8DF37DBAB5DC80C0C3FA72C8A70DC76B5B36B2EEADDCE74
+23CF794B66E4DD3B35BF99893789063BF7B01D5F186B2FDE518B2CF2EDE51F81
+38244BC64548AC3433A80B86D6A0CA26D77F403C06D65B7394BF1FC7D06D37A5
+E70ACD844E3367DE4DB71312CBB85ADD21D5A1F99BB8427F252D90ABB66D7154
+EA5AF4A165DF6415A0880AE784071E6B3E2101F0B663DE14DB1ABF8B7CE0E6D9
+D24F9CDD9F80028D37C9CB4067A28D41E879AEFECDA71F649EB3C250BFF809D8
+1E427E3BF24E85C75F080D93E0314883988B3A4A2B72A1B4A3D2189AB6ECFFBB
+C58151AF05AE335200711ED945E18B4BBCE24A8A162BD9BB26137253BA8B5819
+41E759A7CA7CBA129BAAD438E87189F2F6AE7C86F4EA099DEB23705A500332A7
+4F141D8778EAF3910486B2EA25AAD16B60DD804D0E5BAB0FEBB77BC95EDED08D
+B8941E040D99E8F44E70FF842306ACCF65C0AC9673859DB9C3A724238BFD85F8
+8B0CC9508AFAB7292EBD17DB0F2BFA908F5E9FE55BD80D0E09A13A99D6D78365
+36BA7593CE5543247D66D8891E5DEC2B7C87192EFDA892E8AC1E9B559A64768B
+17FECFA7C2E70A4086F25183DAA9D885540C694EAA2ABE187EEF62A17CC2296C
+57AD719113AE401187A9F5D23D838B188770F00B6A73B4239EF3267C021CA4C0
+E99CA59B8A4F3CA3CD71A95070A9FEC8F6C2F063E2E581E003C70964DC3C79E0
+CF0C3E2920CDC5716B66919637B2739D42973FA53DAF7D7C5FA2A0EBCC7E875A
+641694AAFFBAFD9547DFB6E9206C1608ABD57E5A6E99FCCD4E9D867A7520BCBA
+4025246D8BE271D65F3C028D630522F6FCA9A699810E882DF30569D86C3FA13E
+9E9E4534AC2F079A5A8A18DA316992058FC36C23CC8E7F505F0AC9317680A390
+69AA1EBF87F75FD4FACE6AB8A46C5A7A31F4D968DA51131DF5557EF42876F76E
+B35EAA4DFC8050FA52A314D696EF93DD9F32C5BB3CAFFB9ED72DD8062C5CE625
+B39CD927968771EDC9EF952A81E23ADECDE18E7E0EB34D1BEF48C8FC4FA189D8
+A962AE59456EC1E503C44AD20286FD9F694015EA9361C2B4BAAC06004DFA929F
+48743EC18678FA414D2F33B16A28C4A677F8F125ED64D56A52BB620D29153A1A
+52CA65303AB42698B389B6445A99DE978B0D81E4BAA92E8B121A1E195EF7E298
+1B87B73D560A8E6EE0BEE3408D38C8E6AC7D6796803D40FDEB5242D54E605897
+FA745CAF433B514B6B26741DC8FF8BCA6575A33B49AF35102458658AE5491814
+54004F18A348FDA4446E35C019B5DEAAEC77FC488E0908556D21F5AA813B81FF
+F08BD037A869FFC184A3C6A182563FA8F8F6A0A210405C9B5CDB9A9685ABF365
+71E020B318F484B7F7490003F8E55F97CE7F539FB78027C7FCD0FFAB2AEC01F5
+A90522F5C2F842EF5F146D57D0287D62D1A34793E173D032F0BBAFC92869148D
+BAC1EA48921CE9E2CD6ABA43C9907083957E4A59BB4D268C8E961A6E25E7A787
+826AB7EC4D3E70B197770BCE78D444761D6282DB2147CDBF809154FA74BF9463
+A0416A6905FA6172F75BC78658ED5FD65C7158D89312F847267D1DEE658B4D57
+8911CAAEFB47379F12B92296DDDFB2A0D87AA2DC263932375D549BEFC3F66667
+85B281C06087C7308074735AA91AB56B724D32850236BB28D5F84CBA02BDDA25
+17EF14CEA9515D6E911192A077AAAA1F1DD32BDF60BA549ACA5B1F1372A09CAD
+43C32178BBF9B9BEA9DEC224D079037EC5139AE5F97CC2F1C92A52AA0F04763D
+FEC79B83C098F51CBB7F767070CDB4A46621EE521C51873A91A8C256CC17087E
+43475627CE5C40467BC2BC27C6E44CEC46B305D67E5C253CDB908754242EC4D7
+73257F86CFDA4AEF92A3CF4739577994BC571915B179217D1DD03A2C48326A47
+FCD6200A4C19885DB1F37A43352667CAD3C09C6F60374421A494F529AF028161
+BC9A8CA61A5985F7D9A1C07CCAFD3C85932525DED921561818551B6F7D1EF658
+B844532245117DF5BF0C4F6527B2A51C29749149378B11957EF771E24ABDD919
+72554FFA8DFF625BDBAA3675FD2C37E50005C12B4224CEF380FE489886299E42
+519862E78DCDA3D406E10BE17B3EAE56D3031836F460466663E50151F3A24044
+236E38660AFD1DB39874F7445C269D67C83EA6B9F5B5E575D063C9B1DACF797B
+0DC6BD9F53847C39E2BF0A9AE90D02095D2C8E78789EFEA3EB89296F84745B24
+22B17C3E0C809F3C0B4AC5E62D094D0B4149A5E09D42F5337EB9B93CBF9D2963
+1EE65765BFB64BE2D09031C3FFDF9614D8554C6DB13DB37436368B0530DA3B93
+5CB151A188D28F5A8F45B9139BA10199331C31186C3D98DE7A07E83AE1A3320C
+39726A99C3F1DE84BE59026BCD278CA322575D75103851939F8F9C31AD6E679B
+24C73E424480138614EBA261D18BB1A26E4C270CBACACE343E2368691757289F
+CCF2367D65EDC491E4E80660FD6B3F1F7EB4705D5E99A4AF27C222D8C8E5BA36
+DC4496F0D41D71CB00570762B36781B22CC48FD041F0FCBB6A8F931D012BC2CD
+5FDBB8A31694ABE315FCEE9A30E74FF83EC3D0E7F6B07801011314951D5152C0
+011FE0BB045D4466D7232F07F13A18F600ED854804617D2B99DCCBEF191FECD8
+83B762EF29ECBB0063A02755CEDFA01A8BDE3627D0103B2525F231ACE6934EB8
+5BCD9248277C0A9CD1BD0F94149F9001999ADFE0A913FC4510F91EE330C7EDEB
+33925E65B20FD93FD000A191647F364BDDD7DC55C9AF101CDED67042D64FF362
+4B53DB291BB2F675496CAFDC4A9828B04B090643FEAAB5CDCC83BEF62559528E
+2D2E81E7111A7668EB5E839836B4A4981D696152858C5823B019059FE0567AE5
+1615DA495F297961C32B0717FF56403A6B0096EB9C096FC5533C18F611188FC7
+C90121007C42B0B210AC325619E672CDB27D6B56D0EAA0AC9B4C2FEDD3E39F71
+1F63E15A82F4D4AC55BFB53EBC94F73B5E091A7C7480ABD73CBB882068CCE35A
+CDB256188C88BD1E7273E1A42F36C0C6E0FB68F94CE6E96048D4B94E0C5EF66E
+5F42DC645A7305BFAE6EB80D78012A56A9D074B7F7C5BCDA55509B71B3D17576
+5EADB9D42A196547251D3B77D0F5CF325A1AFA17A22C6068F59745747E016410
+8EC36BDB46E5704EA4E95BC91194E2A4F9745955A44CB7F50E79B62C4F6DE1CE
+0D6638060EB6A2AE26891B0C4679B0963199F7769E0A6E389AD0B2A5D10CD4C4
+1A40097EF75F4F3BC57AC9F910524EEE46F1B317CCC436409CB5E8DC99566DC6
+44E14C37A54C9C67BFB08AACFF099AB0A5D202D39DFA12A63254DC9278CED276
+F9C116B9907A0B9A72CEEB9F45A50EDE54CAF610F9F7B71C6B7065C161E914CB
+2EF2222342FB06C89732B1BEAE7110F34FB1EAC6B0EA56507C3D9D66F00F1543
+98B6A901C9E97141734243FC102BEC3FEE1BD0941BEB6025C566824C8AE99CCF
+9D2FF21BE9FF389A43D30D89F810438F538299CA38D513B2485A51EE0A069D40
+93F2F2A1B0D13FDD1CF58525415898E69357C97640CD53FE20D8CCC07F8584C2
+7880FFF4F3344B49F43BD6430B46D2E98F8BF699DDC103ECD73E998305123ED1
+8A857631071A878E9608CBB20F27CC07542FA10B17E7950AC9DC95D489270E29
+AAC175E5D5FF939FD3F8ABECD195754DF53D4C24CD31A73F96377CB12FD38496
+FC59B106975D84FECF37431DFDAF370FBCCC96D9A80B6758CDCF24391436A0E2
+32A1832DABAF0B7E2F8DF34E7D218A728FE85299F5429FB4B394C07CCC67785F
+454A6C71AB9C64ABF57AEF7A27AEA084C7B4B7F32D719476160818CE0E10C1AA
+ECCA0EF754132289AB694BD3601D43D761715CC3E26038ABA13E02DD0979456F
+506D06C55F6A9D038F96606BC4428620002BD39B22CB906B16D39EC1D76A68C9
+7424A23332B68AEE779AE3F195298156099882868E1513C20690B9D5D15B9323
+167C32E266FFE81743B78B0AE4FD6F70746DF3CFB31395CCC1BAC758C228849E
+E7748FD5561FDDA8A6E03C1F4B4AB76D0D904C35B807D1FD226F553BB49A698E
+3D7E490A805CDA4E83FB5A7E5BAA527885CA4B47FF923A6619272CDA56D3ADBC
+389501FE2AF68196DA073ABD04A4865106103DD8917B0CE61DCEE8933779FA6C
+ECC0DED65B360F4E68117698EE98E8410253973FFAC4EF14CBEC8DDD3BAB8EBF
+2D29FC40091780B9A2421E6BA451599AB5A8906EA14ABFA36144F947D013B42C
+C27AAC2689D7E01FA314066EDF7F7F823B30B599F165F3464108A59C74D1A610
+13E98FCAE18E5C63EB39E95C497C6ABEA3E5D01032A1BED178BE68EC2416A686
+D4988393669A06A4020C33B51D21909A22092904E5ACC96D2A76A51339C4ED51
+58D45EB79058841D9821D7F995E341AC1B9A693C9A2C8AE88C21D134D35089ED
+E24C5455B85855DBBDF217512BE3728C0061B417B36E90E6018EABA856815DF1
+BF6D9C344B9B4D54747CD1F058B381F0E1EF5748F9EA19B8D3861763B030C88F
+02E7032C75BAE3FD7A442634202615559D501C758E24139C8D13754490FDC23B
+46BDC309E1DB5AC1338C12F6CD9FB2B42225C01F3F75E4201C0CC911A2610D75
+27E548B0E42CBC8D9CAFFA4BC15B304CCDE9BE853423B3B5E2D7A1053B1409E5
+86DF50FD9E9BD1CD0D45640B9AB22814B9D4991516F324AF4E4C749078AF162D
+6B0EA60C4B7F5E6261357BFA5FBBD078D03F159DA19F525099CCA71565A18B72
+D5C6C800E2A3E114D792EDB2431CD49397BD92BD1986E4E094FB3C42C10FCD6B
+9ACDD37FE28960ED7103702AEF74979880C7FD57F19CB221B911AC8187F56E64
+4DC90E9ED9FA3EBA3BA58211A25143E875A673D05A1525501B6C402A399631D9
+F81B863FFC46516336781A97DAD629A3A573FED59C35E6AE86DB58D398C778B3
+ED22A19E54C6F1216D5DC8C638B9307377DCE22807C0212266E0659D1B26BC5A
+AD4DAFB7F7638E6231A1A78BCDC189D943B43AE9F132B24F4F84D7C3722DF94A
+AC215BE167083176AA056C2A6B44D3CED301D87A4399093C4A72C722031E8D53
+7CD62EE7B84CD9F6AE46697D13A674EC0D193E16B620253E21E513D80981A64E
+F9DD1D55BBBA1B3BFFF5BC7C5B2F66C892AF3EADE52CDADA79C2AABD479B7B63
+5BD5F4DAA925FB8DF7F7935B854EB8EAE50B55711C720F0D4DEB671C9C3D16FB
+7BF22B225CA5ED18E9AC4C8C743120B99ABABAC26956FB1D2EC58322D09406D1
+6E6B98DC3FE61686CD3487E102A55E1159F241515A42CF9624C5EF04AFF8F42D
+1633D072B3F4AD583579CCA4DCDA40755696B3BC3C6188A3072AFC09ACD72E50
+EEC1D63861336FFC2D66DA36AF1B8B4E78BF687BE9A8943963B1934538E5693D
+39132A62240BB9C44373B1572512D8D86891CE4BEB94E99213AD402082916946
+E1512356907F1BEF2AC9DC74946F0E004FA5A401FD1FDC8A51E4EAE92893DCF9
+4FA9524A5CFA8FD64D2A5161E8D7C422ED9B52ABF1B481090518AA55833E4585
+7E07613B1C04ECDE867D4F0A2E06C993202C210EC6DE48640BC1F8177ADF5197
+A2D401EE71275E32A253C07062E507711E015CA1115B6074E6C029242F6E5C5D
+086AD366B8C188286DF8AF5D17CDC9520AECEE8D65E2008E532FC27847AA806A
+5379A709AB5B9ACF4DDB2210CEEBB9C6A7137FD9477DB7E65DF91663F8D93AC1
+3473BB74804E83755AADF758A8492C7B9C40397CFEBAA31D108D53DD13130909
+18E56864C879742CC59CBA526AF0DD37CDA870CD250F86FA4E346F1DD124ABC9
+7329039ACE0D04210CFD23519EDBC9D01ACF5AADB51C830D8DC1100F6B6D2B7B
+06C9A4653B89C8C249841E3B589E2D96960AF9C492957F725DEF3D47CD47B224
+6E706C9A82B8BFF5DB206157D936C2FB0818DAA4AD54EE00719101D2126916C8
+E3DCACF5F07A89F50805033C7E26D4A1D59D22D68D5996DE2DBCF476693DD6C1
+5DAA6C419861EF3C5687B2EDC6E90DB45A98696ED6BBB78BC61551EC590F47B6
+DA711E73F6CF45F3B8EB9A78B5567F469C91477E593146A4A42318F87B3D1E2D
+2039D7FE4FBCD388D3727AAD56F2208D7957D2FA0999BC6F2AA5093AE682D5AD
+25186727C1171C23B1CE7FDE0BD497E7091E0D279B7854E27CCA5C5C167BDDF7
+2461AA138A0B7820AFB3191F4694A231E4439465AB7CCB15F5BCBE95CADD932C
+919B8B2E18AFFC57474742111711958532F7B94E8DB8EFF0D7445140E584811A
+038F2C97D0ED6C2ADA9405DE55AF0CDBD27C0DA99902A69518F66E77E63B53EA
+C281EEF14315CF0F3F7272DC4FC5AFD771B7002F9B933A206505AC714BE23425
+65F55902A05D0DD9F14994DA85F68BAFC88AC87C4AE71E98A10B32114F609535
+5C2CE037B41900972105BE0965F614AA7DA89AEC00568CF5E4D4F653EF5DA866
+F0AB59E891CC2AB7FABBF3702D797733682B73A949D4DB69655D6616488E3CA5
+C5BA68D5DAD78579DDD31F1A33599603428F3C83FCE5641F16D739BD6A5E52B0
+7A1D5F2E89AEB18FB3428DA5F7E1B6FDC03F46164CB974EBDBE5E5AB9205B439
+3E04540C0D687DD3228D8E9970EC9DF7178C6DD10199BC7812EDF462D4AF0BC8
+7C557739F936CB6A463E287E620B707918BE15120BE7962F43EB2B6E6191A69F
+CC52DDD7762DE78D81B5E60E51599B4CE378BFE4498F5C75588FE73D4815A612
+318059A2531A22321FB2D06684F065610E98AD1ABF505DF77427B960426350F3
+4D8D343237618F05E2ABC8A5B9EE8131708D4D7A24BF76476F1D8C208B3DD5F9
+246DA6FC502FA711964CFB148987206A42047AE638AE76268EBC3B5721EC5E14
+22793D99D9BF0D378FA59727CFDE08B5B19A6E9BD6479B8E36D70881BF80E584
+298AC1F2F3C578BC1B886C070642C7D01DDEE6803F1AE5243486BF6C0375DF29
+C4C9F17D8B5E002F03A17FEC06E2EAA27C460BE57D3FA24E8B359E0F5E173422
+B25470DFC1539E744426CCA288397BA413335530813D88936742D0FA96A6F4FA
+400553CA1A73D9FB6D21F9F5ECD193D8FF09C542894920A0D5FA48E4562D918D
+783C5FF1C3FA3EEBD1CDC3AD926DE284F2354B5BF2FAED4B004D5C79B40A1865
+4AB8522BCEB0956ADAE148E02CC7B4304DD5EED5345652F0BA2C126595908C63
+7FC059F77B4B029DBA91DEADB4733E16D06A95271E2949D0072C286FFAE2A9E1
+865E86034290C276621A7FD6330BC47093DD1721BB50B1F5A094575441B3D983
+78E9DA0FE4EFD60C4487B6572ECBFFBC40CD0808A09D375A682B9949BB136C27
+82EA1A60CA803BB3FA1D38B027945A2C030C37F3C9FC61330B589DAFE4C44BA1
+BD8F6BD94EB4FAB2C37C313982E73AEBED0DF4313E3CC11F51B8A1FCF8F42CA4
+1EB4520040D77C735F2289C088412DD1EB379E7FFC7573DE5B88FABEA62ACC74
+81CCEF70B9517FB48EE8C887F300852D8E7D465CFFB1CE2133F6A7C25CC63E73
+1F84FF7F88486268AC658E07956A9D988E04C2AE822B42A07EFD121F2173F6FB
+96634E2F0F912CE25BD7691BA35F480BF5CCC59C2413C183883D12D01722F7AB
+070676C4F274882FEF4E2071D9880052A91A8A90619691ABEAA92F9531A9E801
+20E653DE5E4FAD36244379EE0A558B269C5F53BF378516A771EECF36A603040D
+3C8C75DB02438A6AA377D32DC952D33C4348426454016CBC6216396DB24BBD4A
+66B3BA46C6D839CB886C076D95AC72DC569F046DD39D70C5F08AA115134A4CEC
+466F4330F28DA8E7C56F7839D96BFC00873EF148913DF4A2FDE70B818B7E80CC
+7E3A0823AF16710DB3B5C48F6CFA11855B75EAFAB3DF435F26C7ADB71D3139F3
+A94D8C644ED6BDD571CF34D4C33DBDD54098E7CB934355D5C82AE8507FBEBE9B
+5837C6F8536D05C965854ED70D4010C5DAACB0A708A2E161450FB8E0A95507D9
+C72D5395476D00F88891E3AEE59DD18727B8C0421B7238352E2779A525311ED3
+9E03015FE74E2D02AC8ACD9C0280F68CA38459D922A4FEA0357631E809834A66
+41FA4437D4A761BF50FFA7033D603B10024C5A7738EF119CBA35E86E7469F6C0
+FBC9E66B73415FCED064F0B1E22DAEF6E8A525C7CCA398E0A80A74D63BF6098F
+F35AC00D90859540A9CECB7924E780BD65BC6F2E51F48CD10A0C5A4EC3E0212F
+DB84505BA93AD381625971144E73D7F4B184FB263F902E5530FDEF6F9BCC6987
+24FEFBAEB70F1430418FC12744123F2946E987E72EA1AE2E944AD0586083C6EC
+C15D65CCCE06E4F9217021C70CFD09E963840EB6C7E2FA490BA3982E14BB051A
+6F112E2092C9481ED011550966ED2AB11F10CB6549FC203EA6C492E307FCD60C
+18776E02632CB636FB9862DCB34F1F1008C5E79FB848D9BC85761DD95383542C
+951C96E7E41D75AF15D47B4BD826001D7A7D12480E6775303BFB68301BC7C81C
+F0F398707A8424F2DFD11C47106FC8665BC4957AA7AE6F81EDB36652EA49556A
+CE8D7F8AEF58EC309E31CA690D24FDA7B21F3D0A07BA5E17237529317370F17B
+FB6D0AB20153D30950BB708E641A21E64DABB3A6AD46C86F69A222FD590516B3
+29E92D065A1C7F857649F2D5E0C6EA6D54DC13F2D27A918A7FB494CAFFF8D21E
+C09FE278853674F7B4780C09D25B65A9BC7BF4A93B3BA204230D0D5D9C611203
+3CFDC2E60C8AF9AB52798B1F3A2A2B8161F68568E59F56EADD01F5E4C49BC654
+AE32093B761E6F9F93FC142CEC894ADDBECF9FE90C79F3881E4DB087B5AE3350
+3FBAE4BA333D71EB0128744C9F2BCD2540BEAD09CC8083DA716F5E6202FC62C9
+0AC28AA69D8AAFA10D49D67315A372B7801F72C8B7DDE14CDD786C2AA9D512CC
+271E86A3E8504D4C162E5FE6A9C6EF5F32B2A899F11D5F7D6EAE25B18AA97961
+5ACB0C5948CEA0BE4F291D8D47BF8B69CD72673C7B0E38E6E78E84782C71DF9F
+82C2A0C583B6C9C39FF42091A8E2678CB26CAE060528B35D60F0DD92AEAA8F63
+CB984B42D7230B22C3A08869F490BA4672B3649E14779EAC35C338A15EE08802
+61F7FA96A01F5A914C1F16D696566F2AC2744F3CB7C5FD0390170373A6C2D724
+89C4539FDA029F4AB0C7ACE6CE8B700FD401981870182AE54989A057DB04B850
+243836EC98ED116782D6DC6CE128778FC2EB45CF598138FA489E8E7FB000AE87
+B65CD6E428AE73484C240B8BC124ED9FFA5133A0EA05425A3BCDE725DA5DC5B8
+829427DF2A28CA6B58D258BB79139497C4898BECFC516B2EF14773F3694B5DD6
+07439971716D307C15D0AC06C118F934EE74F2D8BF184BFAE50C7A1D481712CB
+439941AA501A0B0359282B4EEF4E2377BF766474098BD06D52DB3AAE55706D78
+36B23CB3E5761B78EB562700805CD0A99980C983BD405DF05DF62093536D23CC
+963CA457DE63B6AD4AF88D2C575FB26A2B7D23EA4B8130021F4853A95019CC86
+4D8A1519C88EA2FA97CD902E9CB374AA827799D99B76F212C8D2CE02B5C69D81
+141BFB5BAA47C0D63F75FD47E07184EA32000F66EABC1E2EC49D30BC20164220
+6044F470CC85A22CD468A8722C12D77D014F0FB75CBC5E128824EF4E116D5EF7
+E44BD31398A03AB649C5CB0BF5F22C30A064EE8059B2E04905EE90A156A25660
+2FA89C11B206CA8FEEBB4DB987D9C7FE6D690421A9A3AAD5F2CA0396CC2504DA
+718A0A843F9802242F0363BD8FA336708BAC930D4754168D9C500861E21FABF2
+6A32D8FA320C19808DE278B39CF7EC4CC1EC1A1C48317D94CCDCA6BB899C0F0B
+DBAB8A2709784091169553C070314488AF0AF8C3E0EA4B2D1E9138B7FA5A879F
+1F30C7FBE3BDBA298F193D326A0BD47E88DECD47D7DE506061EDFDA091E6A125
+BDFAE5AE15C354BAF239D820DE6363946BCC0D38E5C98DD7C71CF435FE7301B5
+05D9165AC609B5D4EFEB314E1122A21205C546FBF27E6B4CD575E79EE3948D18
+016A873666DE01A7354B74EB71E77A3877BEDB5795B76B5FB9B195C63950D76E
+3A62049A051A4C5505A49CE7160BBD6920EAC2C31468AF9FFF77EA5D25B68252
+7388EB85CFAC0D6EE38531423CA3EB8A37BB12A686B7D82F57B30A7771D4BB74
+17ED5E7BAEE59ECC7F7D8E7FE0DF0358F278BF87ABC1C8D62206E8697E92DAFE
+4E834805088F7997C25DF7F5AF50EA5749595026F61958F4AED595BC134B09B8
+4250F889B39F1BF52C4D2EEB4937E04B4612794271AAB6046E4762289E71C26B
+075D8C61B35311CCED54942930451D5AB6C0C905E3DE9ABC378B4006357EF205
+0DD060655A6F6BEC9FF11698B1ECFD3E2A92DF20CD4053161464BAACB3105E4C
+8421CEB45029F036E4221503ABD8343FCB80ED1727313A9427DCB5BF64AEDFBF
+BC6B2A5EE00BD6CA3349337BF2CC1AA6601AB378D3D65CCAA541D8525524E9FF
+61C3C8C52FA060155E244F2E2134AD203347EC296F591228F399788F0ECE4390
+580677D26D6C7A197657827D09E626EEDF
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMR12
+%!PS-AdobeFont-1.0: CMR12 003.002
+%%Title: CMR12
+%Version: 003.002
+%%CreationDate: Mon Jul 13 16:17:00 2009
+%%Creator: David M. Jones
+%Copyright: Copyright (c) 1997, 2009 American Mathematical Society
+%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR12.
+% This Font Software is licensed under the SIL Open Font License, Version 1.1.
+% This license is in the accompanying file OFL.txt, and is also
+% available with a FAQ at: http://scripts.sil.org/OFL.
+%%EndComments
+FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup
+/UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+11 dict begin
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def
+/FontName /CMR12 def
+/FontBBox {-34 -251 988 750 }readonly def
+/UniqueID 5000794 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+/version (003.002) readonly def
+/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR12.) readonly def
+/FullName (CMR12) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -100 def
+/UnderlineThickness 50 def
+end readonly def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 46 /period put
+dup 48 /zero put
+dup 50 /two put
+dup 51 /three put
+dup 53 /five put
+dup 54 /six put
+dup 56 /eight put
+dup 64 /at put
+dup 77 /M put
+dup 83 /S put
+dup 97 /a put
+dup 100 /d put
+dup 101 /e put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 119 /w put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA
+0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93
+51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71
+7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551
+E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078
+0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273
+C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651
+F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224
+FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B
+8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0
+B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A
+966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E
+CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4
+2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E
+56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295
+EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277
+E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973
+5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F
+847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000
+72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6
+3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2
+57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB
+B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7
+547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88
+F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535
+47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444
+24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7
+64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204
+49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7
+FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD
+F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A
+DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97
+CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1
+7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5
+459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918
+1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1
+6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846
+67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5
+71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED
+C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345
+2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E
+3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF
+CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801
+F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8
+16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542
+29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327
+0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02
+A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E
+DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346
+39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254
+28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56
+FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9
+D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8
+116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F
+59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74
+482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45
+4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A
+323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17
+C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB
+5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179
+46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1
+E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C
+C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3
+4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C
+BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32
+5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735
+9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117
+52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B
+E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2
+655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC
+F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42
+FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442
+87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107
+5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6
+6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366
+B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03
+3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A
+A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34
+343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046
+BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D
+775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5
+8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0
+7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5
+E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584
+397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65
+7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689
+37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257
+2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E
+37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817
+DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F
+89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08
+90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1
+EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7
+FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C
+5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B
+8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665
+54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6
+4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8
+86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B
+08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E
+D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B
+B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54
+6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC
+3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1
+DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C
+A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98
+DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E
+748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A
+C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879
+0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA
+1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D
+6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422
+E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6
+F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76
+FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016
+E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D
+903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B
+6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21
+2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66
+139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4
+0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9
+E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1
+2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6
+585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8
+D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E
+51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E
+B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3
+A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E
+512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5
+F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D
+E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5
+1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB
+F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407
+1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF
+BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55
+BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578
+43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E
+AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A
+2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51
+D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65
+8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991
+9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8
+BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925
+969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A
+3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A
+845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31
+E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D
+6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407
+E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93
+3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733
+52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6
+F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F
+95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149
+AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8
+39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4
+8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3
+957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07
+55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F
+53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C
+D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106
+CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E
+CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46
+BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1
+B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5
+218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521
+3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86
+31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9
+7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195
+196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9
+1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341
+ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563
+82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651
+E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D
+F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A
+BAD50D9C98DD94332DB4C7155F8A52013F9ECB7CCE3CFB3E667C57B022A0A753
+A45E41A9D8229D5198031ABA3DAAC142AEA5FAB6694A6433629E15AE45A67FDA
+34DE10D995ABCAF45FBB3B6B73E80D05F4C51F8C29D4B0F67C8A86432A6C5E86
+F0126AB25A5CA2875B48C61CB8112A4CF9AA08F8B0157396CF63CBECDB8867CC
+AC10F060630C9BFBAD84B1FF01C814878F0C177F552BDC9BB181B14581C6E968
+DAAAB2896FCFB745795C4D2C87CC15BAA041EF80C5BDC12EC1F5786BB41A5A21
+073EE0BC436B346E014DB4099EDC67BC432E470A4B779FD556341061CA3F2BE8
+EFA332637AEC878C2BB189CA3267B2BE5B8178E6B7889A33771F86276E6F0B8E
+8E93B816AC7005575762EF4DE45E2794B7322F9B6D8E634FB8FF250D638EB502
+818321B3C46DB51B8EC6C2EF1D05C716519A3BD6B12A67239898F8A011F53AC4
+19F4E3663628DA175F5FD423BAB4B9AEA5E36886BB3D1507B2D26624227E54D7
+E8456B12EBB9A0C7E18107426D693A0708AEEA83D3DD20FF35ABD9C7E023B0D0
+CC7727383F95515CF385EE0C87B81ADA5653057E7C9DDA91A992EAE056707765
+11AE3AA17700149B3ECBE70154990E27453479C0B75B95960422DE14202936D8
+AEA1C1932D9BDC16DD0C8D17FEFD4595F3ADC0A29093EFB2FC93013CC906D645
+0A92D3AB7B44DF27AF170DD95BC4313C4B889C3C6DC66F185C9665740D6CB0A6
+05285A5F549A1FCAB2C0CD6EFC9AABF698AC43FDC0E662C17E411D434E121646
+791BD06FA52397855235E60AC1AD1E9CF71A77D1498B88E2F154A8E213C7154C
+37F8B2D7F6740E72A8B7E7ADBD9CC2F9E422A4317184C04F73CC7B5CCB421F36
+894F812816E810B341430B91BF247DE9728D3784EFD94796F412AC4A3AC30042
+814C0C50628755C52721D61EA6AB5E20B4FFBCB10D7D4609AA7ECAFC21527F67
+D0E8DBD739C8EBC26A0AA3CBF8BF1B05DCF9CA84764213E9972070E062E2D7BD
+14A4902189240443C566075A7370571A2774F941F399E09D4ED56A731104A829
+93D85E1BE850D2722139E3F98AF4B2694E4767D9D2DB355BAE409277B3A18EC9
+A8569A7C78110EF35EB9696FE2102D00D2E87F3A8D3ECF9DFF6E424B1E1198FE
+ACBFDAC0A0395E63B7DEDBE275C451A1C2CBACD22D35AEEBA5519C4E91846E29
+FE9C12DAE61DC3A3E17CD15363D8508CA550505B119C1E2B43423F7ABB65A374
+EAFE4B6288991FC553A3FCF5C0C9C91B8926AFCADA776ED070356F38C188D5D8
+4E23EDB39E8B65AD694F38E146612C95895CFD9EE2D4FB9C9A5BC2D88227C9CD
+BF13C59238F68A43E5F8F1952D52F4E0EFE3B4AB78F149CAAF2920783277FEFF
+EABE8CED8F9A93315A9A175F5F9E74BB41A8EA8225F91735E156F26ED6CA66BD
+A9D6E60EC91D907AB5B59F53DE1FE46A11AB96D27636752752B6854572286751
+8B12BA5B230FA16C98047FA131D3ECE6D772574B2B5CECFE1F4D4EED51EF27F6
+6466E9AF9A2068545DC63237CFE8DEABE2DA1EA2EA87ACAE3AD91BAA5EF414EF
+D5CAF41C012FF95AB69315C415D947C7879A133420562935350AC8C2C2A3DC63
+4C0FE7A4C57A207E935CF4233C26ABB697F340387D1D604A0835FB4CBF8A41E0
+C0D7B639026EEA7FCE3E4F28C1ECEDBF608CAD497B8BDDCBBE9BC9064E39A675
+95CAA79669CA996BFF5631DD2DEE138D88A3D60DB4AE166DA5168616B6A5B8C5
+F5DC25FBCD0B0406D54AA80A58170808ED7445CB5A46BECC904898CAEA0B8D5D
+4AFFEB2B12F2A6A1FE6868F0B4A0BD45835C7B714A2F611998C3C23BB49F49BA
+F228260042591A9C5BFE85A6EECB392CE32B0B69DACA06C3E613E093228678E7
+748E3D9B10981E161ACBEC4C4C0235F15B5AB8BA82C8F3F287601B091FE4C08F
+BFB11581EB8A3315FB5D5586BB8F04FEE08CD16E21571627A29B5704138D1998
+FBF3C1C4948F597DC8551027C482E016A3653AF2868986879132E2A71FFFE072
+DE70685AC345765CE143F30D0B2511792600DD6EC8E9AA6EA325D6F3B2A0E5B3
+532FC6C4C98253C23248A7455A84CC05FED811EE8935C296FDD95DEF8B2D573E
+3623A6C73C9E23845F2A8321D7116BBC85A3358408D03B06D909717F17F6F3DD
+C71AC370F90D79B5C4E91A426177060C26D8422097A439E8E338B2C562272DB9
+0B9599CE008B9FE0BE8D558B3A8EDC2AEF32B4D1D47F1814432203CCA2FD01D6
+87122AC24EC757FC81E9D8C8DD3F788FE9B83810E42B208E09CC26DD87D7F540
+2A6978B8FC25DAAF783A1B814B1A998151897819B439FB8BE2B72DBD1208CF7E
+771EA4D76E7057AB8AE30CC62B22FFBD7FC50499009C7BB7CB5FE51D7EF7C6E5
+8B54E649D6F406BDA064438F02C2116E4D236BBA40CEAA12C630B53BD28E9C60
+A547D890B562EB17D9EFB9A909A294AD3B0AD9C6C4112ECAAF77B3DF2DCEA5B4
+969A151095B53961AECD99492389BE1222DD643D9D18899CB3A81CA2234EB1AD
+2A7925727CF2A1047C572C1B4E567A3F680E1B1DC632B6DD88651DCD344575AE
+9CBFE4AF4D69374A40ACD3D36D260375D45F0E762A4CB018E4B71DB9D04999BC
+F4A56F533D7B539413732924D0C4540C2B51EE2A2CF4040998C9BD1879D9C558
+02014FA270C7D12A07865619B56AB0F6752DC6A34A1DA76F977B1483D999B5FA
+F2FD3A7891487FFDE697224704343531BEF2F122528E8169C35527BABD3445D1
+CAD3A08458497E93F1EDAF9F1929F6008EEBE7A7AAEA3B7328AA5D310BE1DF92
+DCE66D5449D291BA5E7D65FB18BC9164E7BC9FE1319D929BE1F7E0C2C9B27011
+9ABEA3775B2C7B270FCE4D57F00461BCE0603727F4FEB7B78A5DCB5DB1FCF327
+228F78D1049379939DE49F79DCA8523F762A189CCDDB44925C8B7E7AAB95C9D4
+910249AFC59FB832562C172014BDC16834AF002591B4BD2ECE402307146F721B
+14074901EF885C51681CD446BF8043EB00D7AC64B077C8FB4A289200307492DB
+1EFED25B1E6B7E72EC59D9B877FDC201D0F9D528C842CB3846EECDD0072D513D
+6F8BA6C87EDC066E1262ACCDB1F6F3DF085BDA1C8BC43B6CCB54B15B3C205630
+E5544FD3942100E72C9CA4FAB218DF9E44292BFBF94B94D0F34351AF06FD3485
+5D6813FC18D0A5BEB7F43C2574616CBEAE066148AEF4D309CCA18D3B59D108A0
+320866C50EFB8BF32369C12BF7E1D7D74D3AF77D8FC1C4FDA0B30CEDF78F44FC
+CB4BC57B9ED6CE8AEC4955633634CAFEBF008D57E875B41E655B45E224F4FADF
+F6173A986062585D2A0FFA0F2AFD4CB084E63DFA86C152F4C7190030A1490F53
+C864909B6F56EDF20616E9BEA819EB8F42657D15F19333DC3FD2E1D24D979020
+AB2D8E268B010DA87255961B9E634EB959640E9DC5A6E883332E179458B33C22
+A7CD098273F555A1519B8666A7F9EADCBC068F23855D07844F050AD60698074D
+860D049C6962E5F557ADC719C0239DA295C8031E0C5F9C162A1415DC25F4A619
+E18D4FD03CDB2A48B23E09757C1A0A10249089A0C5CC0AFA6278309E5635B410
+316F60C5E7FE7A3A2BD3882B5E360EA38025D0C756C3D8FB4E2F79F70CB24B69
+56034038F83FBEF31C7CC0A44C14432DC16ED2B562F931BD3CD9313C8C804281
+D28A9A34D2DABF3D612E7900FE8BCA2AF1257B0F911A1E9C26B9A007E610E481
+3BD94873FBBF5881D3A29CC730D2C9E283AC12937CB1122DA5D9FDA0D76E8E9D
+1DFED79175E64910D1C29D15AC4D7B6A124353010F9652FB5B48B86C5F44B633
+DDFC55A275F634037491BADBBD6C85E61A2D683FD262A67F6EEE5D227F646413
+CD601E5A4B4202A65C1649B134829ABBA9ECB6AEDF058740C10726D58DABF599
+7E7F438794ED0024E7296236E865869DD7C13E8B09E4B4247ED46AB072DDB116
+390FF0176D2567BFF0E75AE8FD27D411E6A17883D353EBEB0C68D7A129AFE0E2
+463AB8485AEB821A47671E93C39C897EABC0B4759DA48DB6C34FB8EFCC436659
+13AC50541C2BCD08DDE94C161D8ED624BEE6E34CF54E40EF6C056B920EF191CA
+6C78CDC10DFF9CB7040D6249D32EF49AB2EE5CBABEEF43BA8D292B838A552A34
+346E2E1E1F8B65A2D507DA690D87974A8E03AD26F496358A30B06C6BC9F8598A
+80CD2C5448F4F7BF66A98C7BCE0CFAB723C13724E34B913D4D4F1488C39AAE61
+04ACBD5AFAE6CBADDF985A2DE4FFF0BE0E30CF155F3C006227CA0AA42168D990
+62D27B8CF9749415E916F17C9EF27304CF8C670B3CE25D3003FCE4B25835011D
+2FD32BC52224000F408D96D8E732BB1EB03C2C5E85A60550C8A5C607350F4CFF
+694DD450DFAC5CEEB7499386A693B31CE398180C435C0C0091813A41321FB977
+0669F04613318B31E44A5C119933561A19DA5175C89C38EE47412F5646BC6486
+5B830FEC4C6A78C6ACF11EAAA96919D63462A3F736DAA993B7113466F586F163
+DF47287837E7F527AF5C3F5077D9944331A4AA99AC8B08E263CD8B005ACC4303
+F8D884C681BEEA6D8D5D7561675390E57DCAA79CA639F6E7F1302FBA3CC34116
+1B35A5A80928967008D58625F31C7C36F5730080867B6DC971AD089BE5771BC0
+CCD56467EC10AC6A1600B4C6021F837204C131B4DEF0404309CC6E86F88B6177
+E23E503A0A6D3B9E04FFC57E8E568817068A8F6AC41C890D0E98FD06C706A20C
+34D5891564DCF527790DF4D4C17088DDC2BD8EC1D4A97045157E51185F873874
+0D9EBAFBA3D8371EE77F4833D30912C1B0D156B55C90F7E3D45D005FEB7F14B6
+2B4943C4A0C3C85E2CCD3D3E6BC0CDBA3C5CE3C3D8F26C5D8D926B6553A9A424
+1B3797D594AF3F01ED63279EBEECBFC66162D44EE1014F5B6E720C8726E31C4F
+EB9DADE07BDD7D3DA40921BE80C33519FD76FA76A6BFAA1227815484BA6E80A7
+2C031DC86DA2647C01A7D5779E38A14927E5EE019B74C6EB755A1D0495E2BB58
+7E88B6F4588FC77908AEBAF58674CAEC024F380A2B3B2DDAA81F8F02C709FD74
+6ED063FFD9B486DDB97FC78D9CE0C7F3F6F631B618EB199C6ED66A435DDDFDDD
+72EEEA69D3AEEF339CD9500AE7284D52B4DFBB63F873ECDC2389E270C0A7CA40
+5A7DD0AF9199AE8E933290EE190E2AA6662DD1CBC188021844E4549414568890
+55600E307D604E74FFA0A7D8A71E64424C17BA4E677C86A1BD4089B2A2D6DA05
+440681508D8506B22FD2E7357992820A5179DC2262E3A1BE57351D43A7F68ED4
+9B288C98F8C5D4DC0326AFDDFDCB761B43F590F712C5AC3A1DAA4D9F853BF412
+2305AFCDFE47A487AD090E8B909B741795676EAC2E7B3E04DB9AEF0C7B87CB68
+1A76A7E66EB521ED1019A9BE8B29281677246356FA3820D28AC1220C66CE7AEA
+2164F6169633F78630FF6E9B7D25F0B94A0E7906FE649318CC063C5F37481AA3
+18B1A127600C82F3CBFA80868BE035A716CEAFD7A042AC32CE3250508C554C3F
+19C8B6178ABE2C9AF6BDB06BF47737D2060928477756E0566CCED2317B7718F8
+566CF35850264FF0854805296C03C10C7A10DA69FE97FECB11067450D8AE380C
+F770AF0E7B10F72782D43C80106AD9C1564DE1FECA4D8CE7905DC060214D0D1C
+BA73FAD2D060AA19B4E64E0049F7F6A0F4AE44539E5E839DAEA57793FA49E17D
+1D2515ABD70E422CFC57CB34E84621B1631158C6CACFA33E6D1A3EF6EFEDCAA2
+D1D69383A9A5D800DAD5379304D34691BFC130248C1FDD1B4EDDCEE10D6BF1AC
+05D4BD9E4E2F60AAD2862CC8AAFDA2763BA4AE19A12465814FA6FF2FE8B0DFF8
+AB434F3A4EEA45C1AEB51495FA9E8A78794684C82DC8F823CCD092B5DB811475
+9299593B58D1B2BE3BC41A500C1EC1E485AA9E503D6CC113EC7D372F05100221
+07883C88549B39E5D54A107215C3681A9FD70D2EA9BE5D322075BCD1CEB3F100
+3FDD9DAA7CF75522FF083B54F0913F0A3176FE2813AAEBA2076BCC1742A7FCA0
+AFAA487C13F6396D4CDE217FEA90D0204AEE120070CA8B8EB56A14DEE9B9B6FF
+01F6DB6222086C76337883DB763A811FE05698F9CBB2C2ECBD514EE7E65E66C1
+498173FFEC3D8B1BB891FDA0
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+TeXDict begin 40258437 52099151 1000 600 600 (report.dvi)
+@start /Fa 138[62 44 44 46 1[62 56 62 93 31 2[31 62 56
+34 51 62 2[54 8[85 3[78 62 2[77 84 1[106 3[42 88 5[80
+85 13[56 56 56 2[31 4[44 44 31 39[{}33 99.6264 /CMBX12
+rf /Fb 147[21 10[42 97[{}2 83.022 /CMTI10 rf /Fc 252[38
+3[{}1 74.7198 /CMSY9 rf /Fd 134[41 2[41 43 30 30 30 1[43
+38 43 64 21 2[21 43 38 23 34 43 34 43 38 8[58 1[58 58
+55 1[57 1[52 60 58 70 48 5[50 52 59 55 1[58 3[60 2[21
+10[38 2[21 60 1[30 30 40[{}42 74.7198 /CMR9 rf /Fe 198[28
+28 28 28 28 28 28 28 28 28 48[{}10 41.511 /CMR5 rf /Ff
+139[30 49[63 62 65[{}3 83.022 /CMMI10 rf /Fg 134[44 44
+60 44 46 32 33 33 44 46 42 46 69 23 44 1[23 46 42 25
+37 46 37 46 42 8[62 85 62 62 60 46 61 1[57 65 62 76 3[30
+62 2[57 63 60 59 62 5[23 23 4[42 1[42 42 42 2[23 28 23
+2[32 32 23 26[46 48 9[69 1[{}57 83.022 /CMR10 rf /Fh
+136[69 50 53 37 38 39 1[53 48 53 80 27 2[27 53 1[29 44
+53 42 1[46 10[72 1[66 3[65 72 1[91 3[36 3[63 1[69 14[48
+48 48 48 3[32 5[27 39[{}32 83.022 /CMBX10 rf /Fi 136[97
+71 75 52 53 55 1[75 67 75 112 37 2[37 75 1[41 61 75 60
+75 65 10[102 1[94 3[92 101 1[128 3[50 3[88 1[97 1[102
+12[67 67 67 67 3[45 5[37 39[{}34 119.552 /CMBX12 rf /Fj
+136[70 1[54 38 38 38 2[49 54 81 7[43 54 2[49 13[54 5[89
+12[76 7[49 1[49 49 1[49 49 1[49 1[27 46[{}21 99.6264
+/CMR12 rf /Fk 134[85 3[90 63 1[66 2[81 90 134 45 2[45
+90 2[74 90 2[78 13[90 4[126 153 10[115 122 19[54 45[{}19
+143.462 /CMBX12 rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%BeginPaperSize: Letter
+/setpagedevice where
+{ pop << /PageSize [612 792] >> setpagedevice }
+{ /letter where { pop letter } if }
+ifelse
+%%EndPaperSize
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 0 0 a
+SDict begin [/Producer (dvips + Distiller)/Title ()/Subject ()/Creator
+(LaTeX with hyperref package)/Author ()/Keywords () /DOCINFO pdfmark
+end
+ 0 0 a 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a -18 -363
+a
+SDict begin H.S end
+ -18 -363 a Black Black -18 -363 a
+SDict begin H.R end
+ -18 -363 a -18 -363
+a
+SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end
+ -18 -363 a Black Black -9 -47 a
+SDict begin [/Count -0/Dest (section.1) cvn/Title (Introduction) /OUT
+pdfmark end
+ -9 -47 a -9 -47 a
+SDict begin [/Count -0/Dest (section.2) cvn/Title (Euler's Method - Overview)
+/OUT pdfmark end
+ -9
+-47 a -9 -47 a
+SDict begin [/Count -3/Dest (section.3) cvn/Title (Multi Threaded Version)
+/OUT pdfmark end
+ -9 -47 a -9 -47 a
+SDict begin [/Count -0/Dest (subsection.3.1) cvn/Title (POSIX Threads \(pthreads\))
+/OUT pdfmark end
+ -9 -47 a -9 -47 a
+SDict begin [/Count -0/Dest (subsection.3.2) cvn/Title (OpenMP) /OUT
+pdfmark end
+ -9
+-47 a -9 -47 a
+SDict begin [/Count -0/Dest (subsection.3.3) cvn/Title (Barne's Hut Algorithm for OpenMP)
+/OUT pdfmark end
+ -9 -47 a -9 -47 a
+SDict begin [/Count -0/Dest (section.4) cvn/Title (Performance Comparison)
+/OUT pdfmark end
+ -9 -47 a -9 -47 a
+SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark
+end
+ -9
+-47 a -9 -47 a
+SDict begin [ {Catalog}<<>> /PUT pdfmark end
+ -9 -47 a -9 -47 a
+SDict begin H.S end
+ -9 -47 a -9 -47 a
+SDict begin 12 H.A end
+ -9
+-47 a -9 -47 a
+SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end
+ -9 -47 a Black Black 644 385 a Fk(A)54
+b(Multithreaded)d(N-Bo)t(dy)j(Sim)l(ulation)1706 685
+y Fj(Sam)33 b(Mo)s(ore)1306 801 y(20503628@studen)m(t.u)m(w)m(a.edu.au)
+-9 1194 y Fi(Con)l(ten)l(ts)-9 1277 y
+SDict begin H.S end
+ -9 1277 a -9 1277
+a
+SDict begin 12 H.A end
+ -9 1277 a -9 1277 a
+SDict begin [/View [/XYZ H.V]/Dest (section*.1) cvn /DEST pdfmark end
+ -9 1277 a -9 1437 a
+SDict begin H.S end
+ -9 1437 a Fh(1)76
+b(In)m(tro)s(duction)641 1437 y
+SDict begin 12 H.L end
+ 641 1437 a 641 1437 a
+SDict begin [/Subtype /Link/Dest (section.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+
+641 1437 a 3221 w Fh(2)-9 1679 y
+SDict begin H.S end
+ -9 1679 a Fh(2)g(Euler's)30
+b(Metho)s(d)h(-)h(Ov)m(erview)1252 1679 y
+SDict begin 12 H.L end
+ 1252 1679 a
+1252 1679 a
+SDict begin [/Subtype /Link/Dest (section.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 1252 1679 a 2610 w Fh(2)-9 1922 y
+SDict begin H.S end
+ -9 1922
+a Fh(3)76 b(Multi)31 b(Threaded)h(V)-8 b(ersion)1124
+1922 y
+SDict begin 12 H.L end
+ 1124 1922 a 1124 1922 a
+SDict begin [/Subtype /Link/Dest (section.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 1124 1922 a 2738 w Fh(3)115
+2081 y
+SDict begin H.S end
+ 115 2081 a Fg(3.1)84 b(POSIX)27 b(Threads)g(\(pthreads\))1296
+2081 y
+SDict begin 12 H.L end
+ 1296 2081 a 1296 2081 a
+SDict begin [/Subtype /Link/Dest (subsection.3.1) cvn/H /I/Border [0
+0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 1296 2081 a 71 w Fg(.)42
+b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
+(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
+h(.)p Black 153 w(3)p Black 115 2241 a
+SDict begin H.S end
+ 115 2241 a Fg(3.2)84
+b(Op)r(enMP)635 2241 y
+SDict begin 12 H.L end
+ 635 2241 a 635 2241 a
+SDict begin [/Subtype /Link/Dest (subsection.3.2) cvn/H /I/Border [0
+0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 635 2241
+a 22 w Fg(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
+g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
+(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)p
+Black 153 w(3)p Black 115 2400 a
+SDict begin H.S end
+ 115 2400 a Fg(3.3)84
+b(Barne's)26 b(Hut)j(Algorithm)e(for)g(Op)r(enMP)1629
+2400 y
+SDict begin 12 H.L end
+ 1629 2400 a 1629 2400 a
+SDict begin [/Subtype /Link/Dest (subsection.3.3) cvn/H /I/Border [0
+0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end
+ 1629 2400 a 61 w Fg(.)42
+b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
+(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)p
+Black 153 w(3)p Black -9 2642 a
+SDict begin H.S end
+ -9 2642 a Fh(4)76 b(P)m(erformance)33
+b(Comparison)1175 2642 y
+SDict begin 12 H.L end
+ 1175 2642 a 1175 2642 a
+SDict begin [/Subtype /Link/Dest (section.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color
+[1 0 0] H.B /ANN pdfmark end
+ 1175
+2642 a 2687 w Fh(3)p Black 1929 5385 a Fg(1)p Black eop
+end
+%%Page: 2 2
+TeXDict begin 2 1 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a -18 -363 a
+SDict begin H.S end
+ -18 -363
+a Black Black -18 -363 a
+SDict begin H.R end
+ -18 -363 a -18 -363 a
+SDict begin [/View [/XYZ H.V]/Dest (page.2) cvn /DEST pdfmark end
+ -18 -363
+a Black -9 -252 3919 4 v Black -9 36 a Fi(Abstract)-9
+118 y
+SDict begin H.S end
+ -9 118 a -9 118 a
+SDict begin 12 H.A end
+ -9 118 a -9 118 a
+SDict begin [/View [/XYZ H.V]/Dest (section*.2) cvn /DEST pdfmark end
+ -9 118 a 159
+x Fg(W)-7 b(e)26 b(ha)n(v)n(e)g(implemen)n(ted)h(a)f(Newtonian)g(gra)n
+(vit)n(y)f(sim)n(ulation)h(for)g(N-Bo)r(dies)g(using)g(Euler's)f(metho)
+r(d.)37 b(P)n(arallelism)25 b(using)-9 377 y(threads)g(has)g(b)r(een)i
+(implemen)n(ted)f(in)g(sep)r(erate)g(v)n(ersions)e(of)i(the)g(program)e
+(using)h(POSIX)h(Threads)f(and)h(Op)r(enMP)-7 b(.)25
+b(The)-9 477 y(p)r(erformance)c(of)h(the)h(di\013eren)n(t)g(implemen)n
+(tations)f(ha)n(v)n(e)g(b)r(een)g(compared)g(for)g(di\013eren)n(t)g(n)n
+(um)n(b)r(ers)g(of)h(threads)f(on)g(a)g(range)-9 576
+y(of)j(arc)n(hitectures)g(including:)36 b(In)n(tel)26
+b(i5;)g(In)n(tel)h(Core)d(Duo;)j(In)n(tel)f(P)n(en)n(tium)g(IV;)g(In)n
+(tel)g(P)n(en)n(tium;)h(and)e(ICRAR's)i(Plieade's)-9
+676 y(cluster)g(at)g(UW)-9 b(A.)29 b(All)f(implemen)n(tations)f(ha)n(v)
+n(e)g(b)r(een)h(programmed)d(in)j(C.)-9 817 y
+SDict begin H.S end
+ -9 817
+a -9 817 a
+SDict begin 12 H.A end
+ -9 817 a -9 817 a
+SDict begin [/View [/XYZ H.V]/Dest (section.1) cvn /DEST pdfmark end
+ -9 817 a 193 x Fi(1)134
+b(In)l(tro)t(duction)-9 1252 y Fg(An)29 b(N-Bo)r(dy)f(sim)n(ulation's)g
+(purp)r(ose)g(is)g(to)h(solv)n(e)e(for)h(the)h(p)r(ositions)f(and)h(v)n
+(elo)r(cities)f(of)g(an)h(arbitrary)d(n)n(um)n(b)r(er)j(of)f(in)n(ter-)
+-9 1352 y(acting)h(b)r(o)r(dies)h(using)f(n)n(umerical)g(metho)r(ds.)44
+b(The)29 b(n)n(um)n(b)r(er)h(of)g(b)r(o)r(dies)g(that)g(can)f(b)r(e)h
+(sim)n(ulated)g(is)f(limited)i(b)n(y)e(the)h(real)-9
+1451 y(time)e(a)n(v)-5 b(ailable,)26 b(as)h(w)n(ell)g(as)g(the)h
+(desired)f(amoun)n(t)-9 1611 y(Complex)g(systems)f(in)n(v)n(olving)g
+(large)g(n)n(um)n(b)r(ers)h(of)g(b)r(o)r(dies,)h(in)n(teracting)e(o)n
+(v)n(er)g(long)h(p)r(erio)r(ds)g(of)g(time,)h(are)e(often)i(of)f(more)
+-9 1710 y(in)n(terest)21 b(than)h(simpler)f(systems.)35
+b(Because)20 b(of)i(this,)h(there)f(is)g(considerable)e(motiv)-5
+b(ation)22 b(to)f(impro)n(v)n(e)g(the)h(sp)r(eed)g(\(amoun)n(t)-9
+1810 y(of)e(time)i(sim)n(ulated)f(o)n(v)n(er)e(real)h(time)h
+(required\))g(of)f(N-Bo)r(dy)h(sim)n(ulations.)34 b(This)21
+b(rep)r(ort)f(fo)r(cuses)h(on)f(reducing)h(the)g(running)-9
+1909 y(sp)r(eed)27 b(of)h(an)f(N-Bo)r(dy)g(sim)n(ulation)g(b)n(y)h(in)n
+(tro)r(ducing)f(parallelism)f(using)h(threads.)-9 2051
+y
+SDict begin H.S end
+ -9 2051 a -9 2051 a
+SDict begin 12 H.A end
+ -9 2051 a -9 2051 a
+SDict begin [/View [/XYZ H.V]/Dest (section.2) cvn /DEST pdfmark end
+ -9 2051 a 193
+x Fi(2)134 b(Euler's)46 b(Metho)t(d)f(-)f(Ov)l(erview)-9
+2485 y Fg(A)27 b(template)g(single)g(threaded)f(program)f(w)n(as)h
+(already)g(pro)n(vided)g(for)g(this)i(assignmen)n(t)e(b)n(y)g(UW)-9
+b(A.)28 b(Some)f(mo)r(di\014cations)-9 2585 y(w)n(ere)21
+b(made)g(in)i(order)d(to)i(simplify)h(the)f(pro)r(cess)f(of)h(in)n(tro)
+r(ducing)f(threading)h(to)g(the)g(program,)f(and)h(in)g(one)g(case)f
+(to)h(correct)-9 2685 y(an)27 b(error)e(in)j(the)g(program.)-9
+2844 y(Euler's)g(metho)r(d)i(\(\014rst)g(order)e(\014nite)j
+(di\013erences\))e(has)g(b)r(een)h(used)g(for)f(this)h(sim)n(ulation.)
+43 b(This)29 b(metho)r(d)h(appro)n(ximates)-9 2944 y(a)25
+b(con)n(tin)n(uous)g(time)h(in)n(terv)-5 b(al)25 b(b)n(y)h(a)f(series)g
+(of)h(steps)g(of)g(length)g(\001)p Ff(t)p Fg(,)g(during)f(whic)n(h)h(b)
+r(o)r(dies)g(undergo)f(motion)h(at)f(constan)n(t)-9 3043
+y(v)n(elo)r(cit)n(y)-7 b(.)-9 3203 y(The)27 b(algorithm)g(in)h
+(pseudo-co)r(de)e(is:)-9 3269 y
+SDict begin H.S end
+ -9 3269 a -9 3269 a
+SDict begin 12 H.A end
+ -9
+3269 a -9 3269 a
+SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-1) cvn /DEST pdfmark
+end
+ -9 3269 a 0.95 0.95 0.95 TeXcolorrgb
+Black 0.95 0.95 0.95 TeXcolorrgb -9 3371 3919 92 v Black
+0.95 0.95 0.95 TeXcolorrgb Black -9 3344 a
+SDict begin H.S end
+ -9 3344 a
+-9 3344 a
+SDict begin 11 H.A end
+ -9 3344 a -9 3344 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.1) cvn /DEST pdfmark
+end
+ -9 3344 a -70 w Fe(1)35
+b Fd(F)-7 b(O)g(R)45 b(e)7 b(a)g(c)g(h)60 b(t)7 b(i)g(m)g(e)66
+b(i)12 b(n)g(t)g(e)g(r)g(v)g(a)g(l)70 b(o)10 b(f)67 b(d)9
+b(u)g(r)g(a)g(t)g(i)g(o)g(n)63 b(d)7 b(t)44 b(L)-7 b(O)g(O)g(P)p
+0.95 0.95 0.95 TeXcolorrgb Black 0.95 0.95 0.95 TeXcolorrgb
+-9 3463 3919 92 v Black 0.95 0.95 0.95 TeXcolorrgb Black
+-9 3435 a
+SDict begin H.S end
+ -9 3435 a -9 3435 a
+SDict begin 11 H.A end
+ -9 3435 a -9 3435 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.2) cvn /DEST pdfmark
+end
+ -9
+3435 a -70 w Fe(2)403 b Fd(F)-7 b(O)g(R)45 b(e)7 b(a)g(c)g(h)58
+b(b)t(o)t(d)t(y)44 b(A)p 0 0 0.75 TeXcolorrgb 44 w(/)5
+b(/)p Black 0 0 0.75 TeXcolorrgb Black 0 0 0.75 TeXcolorrgb
+59 w(c)h(a)g(n)p Black 0 0 0.75 TeXcolorrgb Black 0 0 0.75
+TeXcolorrgb 56 w(b)f(e)p Black 0 0 0.75 TeXcolorrgb Black
+0 0 0.75 TeXcolorrgb 60 w(m)k(u)g(l)g(t)g(i)g(t)g(h)g(r)g(e)g(a)g(d)g
+(e)g(d)p Black 0.95 0.95 0.95 TeXcolorrgb Black 0.95 0.95 0.95
+TeXcolorrgb -9 3554 3919 92 v Black 0.95 0.95 0.95 TeXcolorrgb
+Black -9 3527 a
+SDict begin H.S end
+ -9 3527 a -9 3527 a
+SDict begin 11 H.A end
+ -9 3527 a -9 3527
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.3) cvn /DEST pdfmark
+end
+ -9 3527 a -70 w Fe(3)769 b Fd(C)-10 b(O)g(M)g(P)g(U)g(T)g(E)44
+b(t)8 b(h)g(e)65 b(f)12 b(o)g(r)g(c)g(e)68 b(a)10 b(c)g(t)g(i)g(n)g(g)
+62 b(o)t(n)44 b(A)p 0.95 0.95 0.95 TeXcolorrgb Black
+0.95 0.95 0.95 TeXcolorrgb -9 3645 3919 92 v Black 0.95 0.95 0.95
+TeXcolorrgb Black -9 3618 a
+SDict begin H.S end
+ -9 3618 a -9 3618 a
+SDict begin 11 H.A end
+ -9 3618
+a -9 3618 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.4) cvn /DEST pdfmark
+end
+ -9 3618 a -70 w Fe(4)401 b Fd(D)-9 b(O)g(N)g(E)p
+0.95 0.95 0.95 TeXcolorrgb Black 0.95 0.95 0.95 TeXcolorrgb
+-9 3737 3919 92 v Black 0.95 0.95 0.95 TeXcolorrgb Black
+-9 3709 a
+SDict begin H.S end
+ -9 3709 a -9 3709 a
+SDict begin 11 H.A end
+ -9 3709 a -9 3709 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.5) cvn /DEST pdfmark
+end
+ -9
+3709 a -70 w Fe(5)p 0.95 0.95 0.95 TeXcolorrgb Black
+0.95 0.95 0.95 TeXcolorrgb -9 3828 3919 92 v Black 0.95 0.95 0.95
+TeXcolorrgb Black -9 3800 a
+SDict begin H.S end
+ -9 3800 a -9 3800 a
+SDict begin 11 H.A end
+ -9 3800
+a -9 3800 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.6) cvn /DEST pdfmark
+end
+ -9 3800 a -70 w Fe(6)403 b Fd(F)-7 b(O)g(R)45
+b(e)7 b(a)g(c)g(h)58 b(b)t(o)t(d)t(y)44 b(A)p 0 0 0.75
+TeXcolorrgb 44 w(/)5 b(/)p Black 0 0 0.75 TeXcolorrgb
+Black 0 0 0.75 TeXcolorrgb 59 w(c)h(a)g(n)p Black 0 0 0.75
+TeXcolorrgb Black 0 0 0.75 TeXcolorrgb 56 w(b)f(e)p Black
+0 0 0.75 TeXcolorrgb Black 0 0 0.75 TeXcolorrgb 60 w(m)k(u)g(l)g(t)g(i)
+g(t)g(h)g(r)g(e)g(a)g(d)g(e)g(d)p Black 0.95 0.95 0.95
+TeXcolorrgb Black 0.95 0.95 0.95 TeXcolorrgb -9 3919
+3919 92 v Black 0.95 0.95 0.95 TeXcolorrgb Black -9 3892
+a
+SDict begin H.S end
+ -9 3892 a -9 3892 a
+SDict begin 11 H.A end
+ -9 3892 a -9 3892 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.7) cvn /DEST pdfmark
+end
+ -9 3892 a -70
+w Fe(7)769 b Fd(C)-10 b(O)g(M)g(P)g(U)g(T)g(E)44 b(t)8
+b(h)g(e)66 b(v)12 b(e)g(l)g(o)g(c)g(i)g(t)g(y)69 b(o)10
+b(f)51 b(A)d(a)8 b(s)20 b(:)p 0.95 0.95 0.95 TeXcolorrgb
+Black 0.95 0.95 0.95 TeXcolorrgb -9 4011 3919 92 v Black
+0.95 0.95 0.95 TeXcolorrgb Black -9 3983 a
+SDict begin H.S end
+ -9 3983 a
+-9 3983 a
+SDict begin 11 H.A end
+ -9 3983 a -9 3983 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.8) cvn /DEST pdfmark
+end
+ -9 3983 a -70 w Fe(8)1188
+b Fd(V)31 b(+)-9 b(=)44 b(\()6 b(F)48 b(/)41 b(m)o(\))58
+b Fc(\003)f Fd(d)7 b(t)p 0 0 0.75 TeXcolorrgb 57 w(/)e(/)p
+Black 0 0 0.75 TeXcolorrgb Black 0 0 0.75 TeXcolorrgb
+43 w(m)p Black 0 0 0.75 TeXcolorrgb Black 0 0 0.75 TeXcolorrgb
+51 w(i)14 b(s)p Black 0 0 0.75 TeXcolorrgb Black 0 0 0.75
+TeXcolorrgb 63 w(m)t(a)t(s)t(s)p Black 0 0 0.75 TeXcolorrgb
+Black 0 0 0.75 TeXcolorrgb 63 w(o)c(f)p Black 0 0 0.75
+TeXcolorrgb Black 0 0 0.75 TeXcolorrgb 53 w(A)p Black
+0 0 0.75 TeXcolorrgb 4 w(,)p Black 0 0 0.75 TeXcolorrgb
+Black 0 0 0.75 TeXcolorrgb 57 w(F)p Black 0 0 0.75 TeXcolorrgb
+Black 0 0 0.75 TeXcolorrgb 58 w(i)k(s)p Black 0 0 0.75
+TeXcolorrgb Black 0 0 0.75 TeXcolorrgb 72 w(f)e(o)g(r)g(c)g(e)p
+Black 0 0 0.75 TeXcolorrgb Black 0 0 0.75 TeXcolorrgb
+61 w(o)t(n)p Black 0 0 0.75 TeXcolorrgb Black 0 0 0.75
+TeXcolorrgb 43 w(A)p Black 0.95 0.95 0.95 TeXcolorrgb
+Black 0.95 0.95 0.95 TeXcolorrgb -9 4102 3919 92 v Black
+0.95 0.95 0.95 TeXcolorrgb Black -9 4074 a
+SDict begin H.S end
+ -9 4074 a
+-9 4074 a
+SDict begin 11 H.A end
+ -9 4074 a -9 4074 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.9) cvn /DEST pdfmark
+end
+ -9 4074 a -70 w Fe(9)769
+b Fd(C)-10 b(O)g(M)g(P)g(U)g(T)g(E)44 b(t)8 b(h)g(e)65
+b(p)12 b(o)g(s)g(i)g(t)g(i)g(o)g(n)66 b(o)10 b(f)51 b(A)d(a)8
+b(s)20 b(:)p 0.95 0.95 0.95 TeXcolorrgb Black 0.95 0.95 0.95
+TeXcolorrgb -9 4193 3919 92 v Black 0.95 0.95 0.95 TeXcolorrgb
+Black -9 4166 a
+SDict begin H.S end
+ -9 4166 a -9 4166 a
+SDict begin 11 H.A end
+ -9 4166 a -9 4166
+a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.10) cvn /DEST pdfmark
+end
+ -9 4166 a -98 w Fe(10)1188 b Fd(X)31 b(+)-9 b(=)30
+b(V)44 b Fc(\003)57 b Fd(d)7 b(t)p 0.95 0.95 0.95 TeXcolorrgb
+Black 0.95 0.95 0.95 TeXcolorrgb -9 4284 3919 92 v Black
+0.95 0.95 0.95 TeXcolorrgb Black -9 4257 a
+SDict begin H.S end
+ -9 4257 a
+-9 4257 a
+SDict begin 11 H.A end
+ -9 4257 a -9 4257 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.11) cvn /DEST pdfmark
+end
+ -9 4257 a -98 w Fe(11)401
+b Fd(D)-9 b(O)g(N)g(E)p 0.95 0.95 0.95 TeXcolorrgb Black
+0.95 0.95 0.95 TeXcolorrgb -9 4376 3919 92 v Black 0.95 0.95 0.95
+TeXcolorrgb Black -9 4348 a
+SDict begin H.S end
+ -9 4348 a -9 4348 a
+SDict begin 11 H.A end
+ -9 4348
+a -9 4348 a
+SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.12) cvn /DEST pdfmark
+end
+ -9 4348 a -98 w Fe(12)33 b Fd(D)-9 b(O)g(N)g(E)p
+Black Black -9 4558 a Fg(This)29 b(metho)r(d)h(can)f(b)r(e)g
+(parallelised)f(b)n(y)h(dividing)h(the)f(lo)r(ops)g(indicated)g(b)r(et)
+n(w)n(een)h(a)f(n)n(um)n(b)r(er)g(of)g(concurren)n(tly)f(running)-9
+4657 y(threads.)42 b(It)30 b(ma)n(y)f(seem)g(that)h(the)g(t)n(w)n(o)f
+(lo)r(ops)g(could)h(b)r(e)g(com)n(bined)f(in)n(to)h(a)f(single)g(lo)r
+(op.)43 b(Ho)n(w)n(ev)n(er,)28 b(in)i(the)g(case)f(where)-9
+4757 y(b)r(o)r(dies)c(are)g(in)n(teracting,)g(the)h(force)f(on)h(an)n
+(y)f(giv)n(en)g(b)r(o)r(dy)h(will)g(dep)r(end)g(up)r(on)g(the)g(p)r
+(ositions)f(of)h(other)f(b)r(o)r(dies.)37 b(Consider)-9
+4857 y(a)31 b(case)f(in)n(v)n(olving)g(t)n(w)n(o)h(b)r(o)r(dies)h
+Ff(A)f Fg(and)h Ff(B)j Fg(in)n(teracting)c(in)h(a)f(single)g(time)h
+(step.)48 b(If)32 b(the)g(force)f(on)g Ff(A)h Fg(is)f(computed,)i(and)
+-9 4956 y Ff(A)p Fg('s)25 b(p)r(osition)g(is)g(up)r(dated)h(b)r(efore)e
+(the)i(force)e(on)h Ff(B)k Fg(is)d(computed,)f(then)h(the)g(force)e
+(exp)r(erienced)h(b)n(y)g Ff(B)k Fg(will)c(not)g(b)r(e)h(equal)-9
+5056 y(and)h(opp)r(osite)g(to)h(that)g(exp)r(erienced)f(b)n(y)g
+Ff(A)h Fg(-)f(v)n(oilating)g(Newton's)g(third)h(la)n(w.)p
+Black 1929 5385 a(2)p Black eop end
+%%Page: 3 3
+TeXDict begin 3 2 bop 0 0 a
+SDict begin /product where{pop product(Distiller)search{pop pop pop
+version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
+closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
+grestore}if}{pop}ifelse}{pop}ifelse}if end
+ 0 0 a -18 -363 a
+SDict begin H.S end
+ -18 -363
+a Black Black -18 -363 a
+SDict begin H.R end
+ -18 -363 a -18 -363 a
+SDict begin [/View [/XYZ H.V]/Dest (page.3) cvn /DEST pdfmark end
+ -18 -363
+a Black -9 -252 3919 4 v Black -9 36 a Fg(The)29 b(template)h(program)d
+(pro)n(vided)i(b)n(y)g(UW)-9 b(A)30 b(mak)n(es)f(the)g(mistak)n(e)g(of)
+h(placing)e(force)h(and)g(p)r(osition)h(up)r(dates)f(for)g(eac)n(h)-9
+135 y(b)r(o)r(dy)c(in)g(the)h(same)e(lo)r(op.)36 b(This)25
+b(can)g(b)r(e)g(simply)g(\014xed)g(b)n(y)g(mo)n(ving)f(the)i(p)r
+(osition)f(up)r(dates)g(to)g(a)f(sep)r(erate)h(lo)r(op)g(executed)-9
+235 y(after)35 b(the)i(\014rst.)62 b(In)36 b(the)g(m)n(ultithreaded)g
+(programs,)g(more)f(complexit)n(y)h(is)g(required)f(to)h(ensure)f(that)
+i Fb(al)t(l)45 b Fg(forces)36 b(are)-9 335 y(up)r(dated)28
+b(b)r(efore)f(p)r(ositions)g(of)h(b)r(o)r(dies)f(are)g(altered.)-9
+476 y
+SDict begin H.S end
+ -9 476 a -9 476 a
+SDict begin 12 H.A end
+ -9 476 a -9 476 a
+SDict begin [/View [/XYZ H.V]/Dest (section.3) cvn /DEST pdfmark end
+ -9 476 a 193
+x Fi(3)134 b(Multi)45 b(Threaded)g(V)-11 b(ersion)-9
+751 y
+SDict begin H.S end
+ -9 751 a -9 751 a
+SDict begin 12 H.A end
+ -9 751 a -9 751 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.1) cvn /DEST pdfmark
+end
+ -9 751 a 176
+x Fa(3.1)112 b(POSIX)37 b(Threads)h(\(pthreads\))-9 1006
+y
+SDict begin H.S end
+ -9 1006 a -9 1006 a
+SDict begin 12 H.A end
+ -9 1006 a -9 1006 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.2) cvn /DEST pdfmark
+end
+ -9 1006 a 151
+x Fa(3.2)112 b(Op)s(enMP)-9 1230 y
+SDict begin H.S end
+ -9 1230 a -9 1230
+a
+SDict begin 12 H.A end
+ -9 1230 a -9 1230 a
+SDict begin [/View [/XYZ H.V]/Dest (subsection.3.3) cvn /DEST pdfmark
+end
+ -9 1230 a 157 x Fa(3.3)g(Barne's)38
+b(Hut)f(Algorithm)g(for)h(Op)s(enMP)-9 1460 y
+SDict begin H.S end
+ -9 1460
+a -9 1460 a
+SDict begin 12 H.A end
+ -9 1460 a -9 1460 a
+SDict begin [/View [/XYZ H.V]/Dest (section.4) cvn /DEST pdfmark end
+ -9 1460 a 189 x Fi(4)134
+b(P)l(erformance)46 b(Comparison)p Black 1929 5385 a
+Fg(3)p Black eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/course/semester2/pprog/assignment1/report/report.tex b/course/semester2/pprog/assignment1/report/report.tex
new file mode 100644 (file)
index 0000000..d9d4e3d
--- /dev/null
@@ -0,0 +1,315 @@
+\documentclass[10pt]{article}
+\usepackage{graphicx}
+\usepackage{caption}
+\usepackage{amsmath} % needed for math align
+\usepackage{bm} % needed for maths bold face
+ \usepackage{graphicx}    % needed for including graphics e.g. EPS, PS
+\usepackage{fancyhdr}  % needed for header
+%\usepackage{epstopdf} % Needed for eps graphics
+\usepackage{hyperref}
+\usepackage{lscape}
+
+ \topmargin -1.5cm        % read Lamport p.163
+ \oddsidemargin -0.04cm   % read Lamport p.163
+ \evensidemargin -0.04cm  % same as oddsidemargin but for left-hand pages
+ \textwidth 16.59cm
+ \textheight 21.94cm 
+ %\pagestyle{empty}       % Uncomment if don't want page numbers
+ \parskip 7.2pt           % sets spacing between paragraphs
+ %\renewcommand{\baselinestretch}{1.5}         % Uncomment for 1.5 spacing between lines
+ \parindent 0pt                  % sets leading space for paragraphs
+
+
+\newcommand{\vect}[1]{\boldsymbol{#1}} % Draw a vector
+\newcommand{\divg}[1]{\nabla \cdot #1} % divergence
+\newcommand{\curl}[1]{\nabla \times #1} % curl
+\newcommand{\grad}[1]{\nabla #1} %gradient
+\newcommand{\pd}[3][ ]{\frac{\partial^{#1} #2}{\partial #3^{#1}}} %partial derivative
+\newcommand{\der}[3][ ]{\frac{d^{#1} #2}{d #3^{#1}}} %full derivative
+\newcommand{\phasor}[1]{\tilde{#1}} % make a phasor
+\newcommand{\laplacian}[1]{\nabla^2 {#1}} % The laplacian operator
+
+\usepackage{color}
+\usepackage{listings}
+
+\definecolor{darkgray}{rgb}{0.95,0.95,0.95}
+\definecolor{darkred}{rgb}{0.75,0,0}
+\definecolor{darkblue}{rgb}{0,0,0.75}
+\definecolor{pink}{rgb}{1,0.5,0.5}
+\lstset{language=Java}
+\lstset{backgroundcolor=\color{darkgray}}
+\lstset{numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt}
+\lstset{keywordstyle=\color{darkred}\bfseries}
+\lstset{commentstyle=\color{darkblue}}
+%\lstset{stringsyle=\color{red}}
+\lstset{showstringspaces=false}
+\lstset{basicstyle=\small}
+
+
+\begin{document}
+
+\pagestyle{fancy}
+\fancyhead{}
+\fancyfoot{}
+
+\fancyhead[LO, L]{}
+\fancyfoot[CO, C]{\thepage}
+
+\title{\bf A Multithreaded N-Body Simulation}
+\author{Sam Moore\\[email protected]}
+\date{}
+\maketitle
+
+\tableofcontents
+
+
+
+\pagebreak
+
+\section{Introduction}
+
+An N-Body simulation's purpose is to solve for the positions and velocities of an arbitrary number of interacting bodies using numerical methods.
+
+Complex systems involving large numbers of bodies, interacting over long periods of time, are often of interest. Hence there is considerable motivation to improve the speed (amount of time simulated over real time required) of N-Body simulations.
+This report focuses on increasing the speed of an N-Body simulation by introducing parallelism using threads. 
+
+The bodies in this simulation interact according to Newtonian laws of gravity. The force acting on a body $A$ due to body $B$ is given by:
+\begin{align*}
+       \vect{F_{AB}} &= G \frac{m_A m_B}{\left| \vect{r_B} - \vect{r_A} \right|^3} \left(\vect{r_B} - \vect{r_A}\right)
+\end{align*}
+Where $m_A$ and $m_B$ are the masses of the two bodies; $\vect{r_A}$ and $\vect{r_B}$ are the position vectors of the bodies, and $G$ is the universal gravitational constant.
+
+A template single threaded program was already provided by UWA. Some modifications were made in order to simplify the process of introducing threading to the program, and in one case to correct an error in the program.
+
+\section{Euler's Method}
+
+Euler's method has been used. A continuous time interval is approximated by a series of steps of length $\Delta t$, during which each body undergoes motion with constant acceleration.
+
+The algorithm in pseudo-code is:
+
+
+\begin{lstlisting}
+FOR each time interval of duration dt LOOP
+       FOR each body A // can be multithreaded
+               COMPUTE the force acting on A due to all other bodies B
+       DONE
+
+       FOR each body A // can be multithreaded
+               COMPUTE the velocity of A as:
+                        V += (Force on A / mass of A) * dt
+               COMPUTE the position of A as:
+                        X += V * dt
+       DONE
+DONE
+\end{lstlisting}
+
+
+The pseudo-code is misleading; it may appear that the two loops could be combined into a single loop. However, in the case where bodies are interacting, the force on any given body will depend upon the positions of other bodies. Consider two bodies $A$ and $B$ interacting within a single time step. If the force on $A$ is computed, and $A$'s position is updated before the force on $B$ is computed, then the force experienced by $B$ will not be equal and opposite to that experienced by $A$ - violating Newton's third law. 
+
+The template program provided by UWA places force and position updates for each body in the same loop. This can be fixed by moving the position updates to a separate loop. In the multithreaded implementation, it is also important to ensure that \emph{all} forces are computed before any positions are changed, and vice versa before force computations may continue.
+
+
+
+\section{Parallelisation}
+
+The original algorithm can be parallelised by dividing each of the two loops indicated between a number of concurrently running threads. 
+Forces may be updated for separate bodies simultaneously with no risk of conflict, since the force of one body is independent of all others. Similarly, positions may be updated simultaneously. However, as discussed above, force and position updates must be done separately.
+
+The most effective way of parallelising the computations is as follows (not showing graphics related code):
+
+\begin{lstlisting}
+CREATE n threads
+FOR each thread T assign a subset of bodies
+
+FOR each thread T
+       FOR each time interval of duration dt LOOP
+               FOR each body A in T's subset
+                       COMPUTE the force acting on A due to all other bodies
+               DONE
+               
+               BARRIER Wait for all threads to finish computing forces
+
+               FOR each body A in T's subset
+                       COMPUTE the position of A
+               DONE
+
+               BARRIER Wait for all threads to finish computing positions
+
+       DONE
+DONE
+\end{lstlisting}
+
+This algorithm avoids the cost of repeated thread creation and deletion; threads are only created once.
+The barriers between force and position updates ensure that forces and positions are never updated at the same time in separate threads.
+
+\subsection{Graphics}
+
+The template program provides graphics using OpenGL and freeglut. In the multithreaded implementations, the graphics can be run in the main thread independent of computations with no effect on the final output of the simulation. However, the following problems may arise if the graphics thread is not synchronised with position updates:
+
+\begin{enumerate}
+\item If a body's position is being altered whilst the graphics thread is drawing that body, the body may be drawn partway through the update of the three position coordinates. This will cause the body to be drawn displaced from its actual position by a small amount.
+
+\item Because position updates are finished in any order, with the barriers correctly implemented, the display may show some bodies remain stationary whilst the thread responsible for those bodies waits for other threads to reach the barrier.
+\end{enumerate}
+
+To avoid these problems, the graphics thread must not commence drawing if position updates are in progress. Similarly, position updates must not commence whilst the graphics thread is still in the process of drawing.
+\pagebreak
+
+
+\section{POSIX Threads (pthreads)}
+
+\subsection{Barriers}
+
+Because \verb/pthread_barrier/ is unavailable on many UNIX systems, it was necessary to implement a barrier.
+
+The barrier functions as follows:
+\begin{enumerate}
+       \item Initialised as ``inactive'' and with the total number of participating threads specified
+       \item When a thread calls \verb/Barrier_Join/ the barrier becomes ``active'' (if it wasn't already)
+       \item Each thread entering the barrier by calling \verb/Barrier_Join/ increments a counter.
+       \item Threads calling \verb/Barrier_Join/ must sleep using \verb/pthread_cond_wait/ until the counter reaches the total number of participating threads
+       \item The final thread to enter the barrier awakens the sleeping threads using \verb/pthread_cond_broadcast/, and sets the barrier as ``inactive''.
+\end{enumerate}
+
+The concept of ``inactive'' and ``active'' barriers was useful for synchronising the graphics thread with the position computations.
+The function \verb/Barrier_Wait/ allows a thread to pass the barrier if it is inactive, but forces the thread to wait if the barrier is active. The calling thread does not affect the barrier's counter of finished threads.
+
+The function \verb/Barrier_Enter/ can be called in a thread to set the barrier as ``active'', and then continue to perform tasks \emph{before} joining the barrier. ie: The barrier may be considered ``active'' by calls to \verb/Barrier_Wait/ before any threads have called \verb/Barrier_Join/.
+
+By calling \verb/Barrier_Enter/ in the position threads before the position updates begin, and \verb/Barrier_Wait/ in the graphics thread before the drawing begins, the graphics thread cannot commence drawing whilst positions are being updated.
+Similarly, calling \verb/Barrier_Enter/ in the graphics thread before drawing, and \verb/Barrier_Wait/ in all position threads, ensures that the position updates cannot be started whilst drawing is in progress.
+
+To avoid deadlocks, three separate barriers have been used; one for each of the force, position and drawing updates.
+
+\subsection{Division of Labour}
+
+In the pthread implementation, some mechanism is needed to divide the bodies between threads.
+This has been done by creating a data structure to describe an array of bodies, with the length of the array. Division of the array into subsections can be accomplished in the C programming language using pointer arithmetic.
+
+A global array of these data structures (\verb/System/) is constructed before thread creation, with each \verb/System/ containing a subsection of the original bodies array. Each thread is passed a pointer to one of the \verb/System/s through \verb/pthread_create/
+
+Some helper functions have been implemented to perform tasks for a given \verb/System/ of bodies, and these are called where needed in the threads.
+
+\subsection{Single Threaded Section}
+One disadvantage of having all computation threads continually running is that it is difficult to execute serial code in only \emph{one} thread. For example, a periodic printing of performance metrics and the updating of the number of steps computed must both be performed at the end of every time step by only one thread. To assist in executing serial code in one thread out of a ``team'', a function has been added to the \verb/Barrier/ implementation; \verb/Barrier_JoinCall/ will cause the last thread entering the barrier to execute a specified function containing serial code. This takes advantage of the fact that serial code can often occur immediately after a barrier.
+
+\section{OpenMP}
+
+The implementation in OpenMP is significantly simpler than pthreads. OpenMP automatically divides labour for threads encountering \verb/omp for/, which eliminates the need for constructing the \verb/System/ array. OpenMP also incorporates implicit barriers after most code sections. The use of \verb/omp single/ directives greatly simplifies the assignment of serial code to one thread in a team.
+
+Because OpenMP does not offer as much low level control over threads, the integration of graphics with the simulation differs. Specifically, because OpenMP does not have a barrier structure (instead using \verb/omp barrier/ directives), all threads involved in a barrier must occur within the same \verb/omp parallel/ section.
+
+Instead of creating a separate thread to run graphics, the OpenMP solution uses an \verb/omp master/ directive to perform graphics related code within the main computation loop. This occurs after the position computation barrier, and is followed by an explicit \verb/omp barrier/. It is important that the graphics related functions be run in the main thread; using \verb/omp single/ will often result in unusual behaviour, such as flickering of the display or the display not being drawn at all.
+
+
+\section{Barnes Hut Algorithm}
+
+The Barnes Hut algorithm approximates a distant group of bodies by the group's centre of mass. This is done by the construction of a tree representing regions of space containing groups of bodies. Nodes at each level of the tree represent a volume obtained by dividing the volume of the parent. The force on a body can be approximated by a depth first search on the tree, stopping at nodes for which the centre of mass is ``distant'' to the body, otherwise continuing to the nodes children until nodes containing only one body are reached.
+
+Figure \ref{cubes.png} shows a graphical representation of the Barnes Hut algorithm. In this image, only Nodes (depicted as cubes representing the space within the node) containing exactly one body are shown.
+
+It is possible to parallelise the recursive algorithms used in constructing the tree and calculating forces. However, we have only implemented a serial version of the tree. Despite this, the calculation of forces can still be parallelised external to the tree.
+
+{\bf I have reached the page limit...} but I have lots of graphs to talk about still. Feel free to stop reading here. 
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/cubes.png}
+       \captionof{figure}{Barnes Hut - One body per cube}
+       \label{cubes.png}
+\end{center}
+
+\subsection{Errors}
+
+Figure \ref{error_graph.png} shows the mean ``error'' between the Barnes Hut Algorithm and more exact brute force algorithm. This error is calculated by summing the absolute difference of each body's position components, and averaging over all position components. Note the logarithmic y axis. The error increases roughly linearly. There is little change in error for different values of $\theta$ between $0$ and $10$.
+
+Note: The same error analysis script confirmed that the multithreaded versions of the brute force algorithm gave the same outputs.
+
+\subsection{Performance for different $\theta$ values}
+
+Figure \ref{efficiency.png} shows the time taken for the (single threaded) Barnes Hut Algorithm to run a specified number of steps, for different values of $\theta$. The brute force algorithm is shown for comparison; for $\theta < 1$, the brute force algorithm is generally faster.
+Taking into account both figures \ref{efficiency.png} and \ref{error_graph.png}, it would appear that $\theta = 10$ is a good balance between accuracy and speed, for this particular field of bodies.
+
+\begin{landscape}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/error_graph.png}
+       \captionof{figure}{Barnes Hut mean error} \label{error_graph.png}
+\end{center}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/efficiency.png}
+       \captionof{figure}{Barnes Hut single threaded performance} \label{efficiency.png}
+\end{center}
+
+\end{landscape}
+
+\pagebreak
+
+\section{Performance Analysis}
+
+\subsection{Time vs Steps}
+
+Figure \ref{time_vs_steps.png} shows the time taken to compute a varying number of steps for different programs. The field provided with 500 bodies was used.
+
+Several things can be noted from this graph:
+\begin{itemize}
+       \item With $\theta = 10$, the Barnes Hut algorithm is significantly faster than brute force algorithms
+       \item Altering the number of threads has a significant effect on the brute force algorithm performance, but little effect on the Barnes Hut algorithm performance. This is because the vast majority of the Barnes Hut algorithm has not yet been multithreaded.
+       \item The optimum number of threads is equal to the number of cores available on the host machine (Intel Core i5).
+               (Pleiades was not available at the time of testing).
+       \item The pthreads and openmp implementations perform with similar speeds
+       \item The single threaded, brute force algorithms perform the worst
+\end{itemize}
+
+The time taken to run varies with CPU load due to other processes, and so these results should be considered as qualitative.
+Measurement of CPU cycles (as opposed to real time) is not a suitable metric, since on many UNIX systems, this measurement includes cycles run by all threads in a process. 
+
+\subsection{Time to compute vs Number of Bodies}
+
+Figure \ref{time_vs_n.png} shows the time taken to compute 1000 steps against the number of bodies in the initial field. The brute force algorithms appear $O(n^2)$. Barnes Hut appears to be $O(n log(n))$. The fastest algorithm is Barnes Hut with $\theta = 10$.
+
+This experiment revealed (and was limited by) a flaw in (my implementation of) the Barnes Hut algorithm. When the body fields are randomly generated, the result is usually unbound orbits. As the size of the volume occupied by bodies is increasing, the algorithm must continually resize the root node of the tree, and then all children nodes, and ultimately create additional child nodes to contain single particles. Although the implementation attempts to minimise allocations of memory, it was found that for large numbers of bodies the program often became unresponsive. This may be due to the more closely approaching bodies experiencing extremely large forces, and moving away from the centre of the universe at high velocities.
+.
+
+\pagebreak
+\begin{landscape}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/performance_time_vs_steps.png}
+       \captionof{figure}{Implementation Performance}
+       \label{time_vs_steps.png}
+\end{center}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/time_vs_n.png}
+       \captionof{figure}{Efficiency vs $n$} \label{time_vs_n.png}
+\end{center}
+\end{landscape}
+
+\subsection{Analysis with Callgrind}
+
+The tool \emph{callgrind} (part of \emph{valgrind}) can be used to generate information on the performance of a program, and to identify expensive lines of code or the cost of different function calls. Figure \ref{kcachegrind.png} shows a screenshot of \emph{kcachegrind}, a graphical tool to display the results obtained by callgrind. The program analysed is the Barnes Hut N-Body simulator, running for 10 steps, without graphics enabled.
+
+A larger copy of the image is attached with this report, file name ``nbody-bh/kcachegrind.png''. Several things are clear from this display:
+\begin{enumerate}
+       \item The most expensive computations are due to the force computation function \verb/Node_Forces/. Close to 93\% of the program's time is spent in this function.
+
+       \item Although there are only 500 bodies, the force calculation algorithm was called 15200000 times. This is significantly greater than the approximate 2500000 force computations for the brute force algorithm. 
+
+       For this particular initial field and choice of value for $\theta$ ($0.5$), the single threaded Barnes Hut algorithm performed worse than the single threaded brute force algorithm. As shown in Figure \ref{time_vs_n.png} however, the Barnes Hut algorithm performs extremely well for larger numbers of bodies. The ``better'' algorithm to use is determined by the problem.
+
+       \item Most of the cost of a force calculation is due to two calculations (distance calculation and the actual force update)
+               The calls to \verb/sqrt/, a normally expensive function have a much lower total cost, but are called the same number of times.
+               The extra cost of the two calculations might be due to the costs of following the pointers (the code has not been optimised),  
+
+       \item The \verb/for/ loops, which were used after replacing the original 9 body variables (x, y, z, Vx, ..., Fx, ...) with three arrays, to condense the code, have a small but significant cost associated with them.
+\end{enumerate}
+
+\begin{landscape}
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/kcachegrind.png}
+       \captionof{figure}{Kcachegrind reveals why my program is slow} \label{kcachegrind.png}
+\end{center}
+\end{landscape}
+
+\end{document}
+
diff --git a/course/semester2/pprog/assignment1/report/report.tex~ b/course/semester2/pprog/assignment1/report/report.tex~
new file mode 100644 (file)
index 0000000..d9d4e3d
--- /dev/null
@@ -0,0 +1,315 @@
+\documentclass[10pt]{article}
+\usepackage{graphicx}
+\usepackage{caption}
+\usepackage{amsmath} % needed for math align
+\usepackage{bm} % needed for maths bold face
+ \usepackage{graphicx}    % needed for including graphics e.g. EPS, PS
+\usepackage{fancyhdr}  % needed for header
+%\usepackage{epstopdf} % Needed for eps graphics
+\usepackage{hyperref}
+\usepackage{lscape}
+
+ \topmargin -1.5cm        % read Lamport p.163
+ \oddsidemargin -0.04cm   % read Lamport p.163
+ \evensidemargin -0.04cm  % same as oddsidemargin but for left-hand pages
+ \textwidth 16.59cm
+ \textheight 21.94cm 
+ %\pagestyle{empty}       % Uncomment if don't want page numbers
+ \parskip 7.2pt           % sets spacing between paragraphs
+ %\renewcommand{\baselinestretch}{1.5}         % Uncomment for 1.5 spacing between lines
+ \parindent 0pt                  % sets leading space for paragraphs
+
+
+\newcommand{\vect}[1]{\boldsymbol{#1}} % Draw a vector
+\newcommand{\divg}[1]{\nabla \cdot #1} % divergence
+\newcommand{\curl}[1]{\nabla \times #1} % curl
+\newcommand{\grad}[1]{\nabla #1} %gradient
+\newcommand{\pd}[3][ ]{\frac{\partial^{#1} #2}{\partial #3^{#1}}} %partial derivative
+\newcommand{\der}[3][ ]{\frac{d^{#1} #2}{d #3^{#1}}} %full derivative
+\newcommand{\phasor}[1]{\tilde{#1}} % make a phasor
+\newcommand{\laplacian}[1]{\nabla^2 {#1}} % The laplacian operator
+
+\usepackage{color}
+\usepackage{listings}
+
+\definecolor{darkgray}{rgb}{0.95,0.95,0.95}
+\definecolor{darkred}{rgb}{0.75,0,0}
+\definecolor{darkblue}{rgb}{0,0,0.75}
+\definecolor{pink}{rgb}{1,0.5,0.5}
+\lstset{language=Java}
+\lstset{backgroundcolor=\color{darkgray}}
+\lstset{numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt}
+\lstset{keywordstyle=\color{darkred}\bfseries}
+\lstset{commentstyle=\color{darkblue}}
+%\lstset{stringsyle=\color{red}}
+\lstset{showstringspaces=false}
+\lstset{basicstyle=\small}
+
+
+\begin{document}
+
+\pagestyle{fancy}
+\fancyhead{}
+\fancyfoot{}
+
+\fancyhead[LO, L]{}
+\fancyfoot[CO, C]{\thepage}
+
+\title{\bf A Multithreaded N-Body Simulation}
+\author{Sam Moore\\[email protected]}
+\date{}
+\maketitle
+
+\tableofcontents
+
+
+
+\pagebreak
+
+\section{Introduction}
+
+An N-Body simulation's purpose is to solve for the positions and velocities of an arbitrary number of interacting bodies using numerical methods.
+
+Complex systems involving large numbers of bodies, interacting over long periods of time, are often of interest. Hence there is considerable motivation to improve the speed (amount of time simulated over real time required) of N-Body simulations.
+This report focuses on increasing the speed of an N-Body simulation by introducing parallelism using threads. 
+
+The bodies in this simulation interact according to Newtonian laws of gravity. The force acting on a body $A$ due to body $B$ is given by:
+\begin{align*}
+       \vect{F_{AB}} &= G \frac{m_A m_B}{\left| \vect{r_B} - \vect{r_A} \right|^3} \left(\vect{r_B} - \vect{r_A}\right)
+\end{align*}
+Where $m_A$ and $m_B$ are the masses of the two bodies; $\vect{r_A}$ and $\vect{r_B}$ are the position vectors of the bodies, and $G$ is the universal gravitational constant.
+
+A template single threaded program was already provided by UWA. Some modifications were made in order to simplify the process of introducing threading to the program, and in one case to correct an error in the program.
+
+\section{Euler's Method}
+
+Euler's method has been used. A continuous time interval is approximated by a series of steps of length $\Delta t$, during which each body undergoes motion with constant acceleration.
+
+The algorithm in pseudo-code is:
+
+
+\begin{lstlisting}
+FOR each time interval of duration dt LOOP
+       FOR each body A // can be multithreaded
+               COMPUTE the force acting on A due to all other bodies B
+       DONE
+
+       FOR each body A // can be multithreaded
+               COMPUTE the velocity of A as:
+                        V += (Force on A / mass of A) * dt
+               COMPUTE the position of A as:
+                        X += V * dt
+       DONE
+DONE
+\end{lstlisting}
+
+
+The pseudo-code is misleading; it may appear that the two loops could be combined into a single loop. However, in the case where bodies are interacting, the force on any given body will depend upon the positions of other bodies. Consider two bodies $A$ and $B$ interacting within a single time step. If the force on $A$ is computed, and $A$'s position is updated before the force on $B$ is computed, then the force experienced by $B$ will not be equal and opposite to that experienced by $A$ - violating Newton's third law. 
+
+The template program provided by UWA places force and position updates for each body in the same loop. This can be fixed by moving the position updates to a separate loop. In the multithreaded implementation, it is also important to ensure that \emph{all} forces are computed before any positions are changed, and vice versa before force computations may continue.
+
+
+
+\section{Parallelisation}
+
+The original algorithm can be parallelised by dividing each of the two loops indicated between a number of concurrently running threads. 
+Forces may be updated for separate bodies simultaneously with no risk of conflict, since the force of one body is independent of all others. Similarly, positions may be updated simultaneously. However, as discussed above, force and position updates must be done separately.
+
+The most effective way of parallelising the computations is as follows (not showing graphics related code):
+
+\begin{lstlisting}
+CREATE n threads
+FOR each thread T assign a subset of bodies
+
+FOR each thread T
+       FOR each time interval of duration dt LOOP
+               FOR each body A in T's subset
+                       COMPUTE the force acting on A due to all other bodies
+               DONE
+               
+               BARRIER Wait for all threads to finish computing forces
+
+               FOR each body A in T's subset
+                       COMPUTE the position of A
+               DONE
+
+               BARRIER Wait for all threads to finish computing positions
+
+       DONE
+DONE
+\end{lstlisting}
+
+This algorithm avoids the cost of repeated thread creation and deletion; threads are only created once.
+The barriers between force and position updates ensure that forces and positions are never updated at the same time in separate threads.
+
+\subsection{Graphics}
+
+The template program provides graphics using OpenGL and freeglut. In the multithreaded implementations, the graphics can be run in the main thread independent of computations with no effect on the final output of the simulation. However, the following problems may arise if the graphics thread is not synchronised with position updates:
+
+\begin{enumerate}
+\item If a body's position is being altered whilst the graphics thread is drawing that body, the body may be drawn partway through the update of the three position coordinates. This will cause the body to be drawn displaced from its actual position by a small amount.
+
+\item Because position updates are finished in any order, with the barriers correctly implemented, the display may show some bodies remain stationary whilst the thread responsible for those bodies waits for other threads to reach the barrier.
+\end{enumerate}
+
+To avoid these problems, the graphics thread must not commence drawing if position updates are in progress. Similarly, position updates must not commence whilst the graphics thread is still in the process of drawing.
+\pagebreak
+
+
+\section{POSIX Threads (pthreads)}
+
+\subsection{Barriers}
+
+Because \verb/pthread_barrier/ is unavailable on many UNIX systems, it was necessary to implement a barrier.
+
+The barrier functions as follows:
+\begin{enumerate}
+       \item Initialised as ``inactive'' and with the total number of participating threads specified
+       \item When a thread calls \verb/Barrier_Join/ the barrier becomes ``active'' (if it wasn't already)
+       \item Each thread entering the barrier by calling \verb/Barrier_Join/ increments a counter.
+       \item Threads calling \verb/Barrier_Join/ must sleep using \verb/pthread_cond_wait/ until the counter reaches the total number of participating threads
+       \item The final thread to enter the barrier awakens the sleeping threads using \verb/pthread_cond_broadcast/, and sets the barrier as ``inactive''.
+\end{enumerate}
+
+The concept of ``inactive'' and ``active'' barriers was useful for synchronising the graphics thread with the position computations.
+The function \verb/Barrier_Wait/ allows a thread to pass the barrier if it is inactive, but forces the thread to wait if the barrier is active. The calling thread does not affect the barrier's counter of finished threads.
+
+The function \verb/Barrier_Enter/ can be called in a thread to set the barrier as ``active'', and then continue to perform tasks \emph{before} joining the barrier. ie: The barrier may be considered ``active'' by calls to \verb/Barrier_Wait/ before any threads have called \verb/Barrier_Join/.
+
+By calling \verb/Barrier_Enter/ in the position threads before the position updates begin, and \verb/Barrier_Wait/ in the graphics thread before the drawing begins, the graphics thread cannot commence drawing whilst positions are being updated.
+Similarly, calling \verb/Barrier_Enter/ in the graphics thread before drawing, and \verb/Barrier_Wait/ in all position threads, ensures that the position updates cannot be started whilst drawing is in progress.
+
+To avoid deadlocks, three separate barriers have been used; one for each of the force, position and drawing updates.
+
+\subsection{Division of Labour}
+
+In the pthread implementation, some mechanism is needed to divide the bodies between threads.
+This has been done by creating a data structure to describe an array of bodies, with the length of the array. Division of the array into subsections can be accomplished in the C programming language using pointer arithmetic.
+
+A global array of these data structures (\verb/System/) is constructed before thread creation, with each \verb/System/ containing a subsection of the original bodies array. Each thread is passed a pointer to one of the \verb/System/s through \verb/pthread_create/
+
+Some helper functions have been implemented to perform tasks for a given \verb/System/ of bodies, and these are called where needed in the threads.
+
+\subsection{Single Threaded Section}
+One disadvantage of having all computation threads continually running is that it is difficult to execute serial code in only \emph{one} thread. For example, a periodic printing of performance metrics and the updating of the number of steps computed must both be performed at the end of every time step by only one thread. To assist in executing serial code in one thread out of a ``team'', a function has been added to the \verb/Barrier/ implementation; \verb/Barrier_JoinCall/ will cause the last thread entering the barrier to execute a specified function containing serial code. This takes advantage of the fact that serial code can often occur immediately after a barrier.
+
+\section{OpenMP}
+
+The implementation in OpenMP is significantly simpler than pthreads. OpenMP automatically divides labour for threads encountering \verb/omp for/, which eliminates the need for constructing the \verb/System/ array. OpenMP also incorporates implicit barriers after most code sections. The use of \verb/omp single/ directives greatly simplifies the assignment of serial code to one thread in a team.
+
+Because OpenMP does not offer as much low level control over threads, the integration of graphics with the simulation differs. Specifically, because OpenMP does not have a barrier structure (instead using \verb/omp barrier/ directives), all threads involved in a barrier must occur within the same \verb/omp parallel/ section.
+
+Instead of creating a separate thread to run graphics, the OpenMP solution uses an \verb/omp master/ directive to perform graphics related code within the main computation loop. This occurs after the position computation barrier, and is followed by an explicit \verb/omp barrier/. It is important that the graphics related functions be run in the main thread; using \verb/omp single/ will often result in unusual behaviour, such as flickering of the display or the display not being drawn at all.
+
+
+\section{Barnes Hut Algorithm}
+
+The Barnes Hut algorithm approximates a distant group of bodies by the group's centre of mass. This is done by the construction of a tree representing regions of space containing groups of bodies. Nodes at each level of the tree represent a volume obtained by dividing the volume of the parent. The force on a body can be approximated by a depth first search on the tree, stopping at nodes for which the centre of mass is ``distant'' to the body, otherwise continuing to the nodes children until nodes containing only one body are reached.
+
+Figure \ref{cubes.png} shows a graphical representation of the Barnes Hut algorithm. In this image, only Nodes (depicted as cubes representing the space within the node) containing exactly one body are shown.
+
+It is possible to parallelise the recursive algorithms used in constructing the tree and calculating forces. However, we have only implemented a serial version of the tree. Despite this, the calculation of forces can still be parallelised external to the tree.
+
+{\bf I have reached the page limit...} but I have lots of graphs to talk about still. Feel free to stop reading here. 
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/cubes.png}
+       \captionof{figure}{Barnes Hut - One body per cube}
+       \label{cubes.png}
+\end{center}
+
+\subsection{Errors}
+
+Figure \ref{error_graph.png} shows the mean ``error'' between the Barnes Hut Algorithm and more exact brute force algorithm. This error is calculated by summing the absolute difference of each body's position components, and averaging over all position components. Note the logarithmic y axis. The error increases roughly linearly. There is little change in error for different values of $\theta$ between $0$ and $10$.
+
+Note: The same error analysis script confirmed that the multithreaded versions of the brute force algorithm gave the same outputs.
+
+\subsection{Performance for different $\theta$ values}
+
+Figure \ref{efficiency.png} shows the time taken for the (single threaded) Barnes Hut Algorithm to run a specified number of steps, for different values of $\theta$. The brute force algorithm is shown for comparison; for $\theta < 1$, the brute force algorithm is generally faster.
+Taking into account both figures \ref{efficiency.png} and \ref{error_graph.png}, it would appear that $\theta = 10$ is a good balance between accuracy and speed, for this particular field of bodies.
+
+\begin{landscape}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/error_graph.png}
+       \captionof{figure}{Barnes Hut mean error} \label{error_graph.png}
+\end{center}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/efficiency.png}
+       \captionof{figure}{Barnes Hut single threaded performance} \label{efficiency.png}
+\end{center}
+
+\end{landscape}
+
+\pagebreak
+
+\section{Performance Analysis}
+
+\subsection{Time vs Steps}
+
+Figure \ref{time_vs_steps.png} shows the time taken to compute a varying number of steps for different programs. The field provided with 500 bodies was used.
+
+Several things can be noted from this graph:
+\begin{itemize}
+       \item With $\theta = 10$, the Barnes Hut algorithm is significantly faster than brute force algorithms
+       \item Altering the number of threads has a significant effect on the brute force algorithm performance, but little effect on the Barnes Hut algorithm performance. This is because the vast majority of the Barnes Hut algorithm has not yet been multithreaded.
+       \item The optimum number of threads is equal to the number of cores available on the host machine (Intel Core i5).
+               (Pleiades was not available at the time of testing).
+       \item The pthreads and openmp implementations perform with similar speeds
+       \item The single threaded, brute force algorithms perform the worst
+\end{itemize}
+
+The time taken to run varies with CPU load due to other processes, and so these results should be considered as qualitative.
+Measurement of CPU cycles (as opposed to real time) is not a suitable metric, since on many UNIX systems, this measurement includes cycles run by all threads in a process. 
+
+\subsection{Time to compute vs Number of Bodies}
+
+Figure \ref{time_vs_n.png} shows the time taken to compute 1000 steps against the number of bodies in the initial field. The brute force algorithms appear $O(n^2)$. Barnes Hut appears to be $O(n log(n))$. The fastest algorithm is Barnes Hut with $\theta = 10$.
+
+This experiment revealed (and was limited by) a flaw in (my implementation of) the Barnes Hut algorithm. When the body fields are randomly generated, the result is usually unbound orbits. As the size of the volume occupied by bodies is increasing, the algorithm must continually resize the root node of the tree, and then all children nodes, and ultimately create additional child nodes to contain single particles. Although the implementation attempts to minimise allocations of memory, it was found that for large numbers of bodies the program often became unresponsive. This may be due to the more closely approaching bodies experiencing extremely large forces, and moving away from the centre of the universe at high velocities.
+.
+
+\pagebreak
+\begin{landscape}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/performance_time_vs_steps.png}
+       \captionof{figure}{Implementation Performance}
+       \label{time_vs_steps.png}
+\end{center}
+
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/time_vs_n.png}
+       \captionof{figure}{Efficiency vs $n$} \label{time_vs_n.png}
+\end{center}
+\end{landscape}
+
+\subsection{Analysis with Callgrind}
+
+The tool \emph{callgrind} (part of \emph{valgrind}) can be used to generate information on the performance of a program, and to identify expensive lines of code or the cost of different function calls. Figure \ref{kcachegrind.png} shows a screenshot of \emph{kcachegrind}, a graphical tool to display the results obtained by callgrind. The program analysed is the Barnes Hut N-Body simulator, running for 10 steps, without graphics enabled.
+
+A larger copy of the image is attached with this report, file name ``nbody-bh/kcachegrind.png''. Several things are clear from this display:
+\begin{enumerate}
+       \item The most expensive computations are due to the force computation function \verb/Node_Forces/. Close to 93\% of the program's time is spent in this function.
+
+       \item Although there are only 500 bodies, the force calculation algorithm was called 15200000 times. This is significantly greater than the approximate 2500000 force computations for the brute force algorithm. 
+
+       For this particular initial field and choice of value for $\theta$ ($0.5$), the single threaded Barnes Hut algorithm performed worse than the single threaded brute force algorithm. As shown in Figure \ref{time_vs_n.png} however, the Barnes Hut algorithm performs extremely well for larger numbers of bodies. The ``better'' algorithm to use is determined by the problem.
+
+       \item Most of the cost of a force calculation is due to two calculations (distance calculation and the actual force update)
+               The calls to \verb/sqrt/, a normally expensive function have a much lower total cost, but are called the same number of times.
+               The extra cost of the two calculations might be due to the costs of following the pointers (the code has not been optimised),  
+
+       \item The \verb/for/ loops, which were used after replacing the original 9 body variables (x, y, z, Vx, ..., Fx, ...) with three arrays, to condense the code, have a small but significant cost associated with them.
+\end{enumerate}
+
+\begin{landscape}
+\begin{center}
+       \includegraphics[scale=0.50]{/home/sam/Documents/University/honours/course/semester2/pprog/assignment1/nbody-bh/kcachegrind.png}
+       \captionof{figure}{Kcachegrind reveals why my program is slow} \label{kcachegrind.png}
+\end{center}
+\end{landscape}
+
+\end{document}
+
diff --git a/course/semester2/pprog/assignment1/report/report.toc b/course/semester2/pprog/assignment1/report/report.toc
new file mode 100644 (file)
index 0000000..3e3504c
--- /dev/null
@@ -0,0 +1,16 @@
+\contentsline {section}{\numberline {1}Introduction}{2}{section.1}
+\contentsline {section}{\numberline {2}Euler's Method}{2}{section.2}
+\contentsline {section}{\numberline {3}Parallelisation}{3}{section.3}
+\contentsline {subsection}{\numberline {3.1}Graphics}{3}{subsection.3.1}
+\contentsline {section}{\numberline {4}POSIX Threads (pthreads)}{4}{section.4}
+\contentsline {subsection}{\numberline {4.1}Barriers}{4}{subsection.4.1}
+\contentsline {subsection}{\numberline {4.2}Division of Labour}{4}{subsection.4.2}
+\contentsline {subsection}{\numberline {4.3}Single Threaded Section}{5}{subsection.4.3}
+\contentsline {section}{\numberline {5}OpenMP}{5}{section.5}
+\contentsline {section}{\numberline {6}Barnes Hut Algorithm}{5}{section.6}
+\contentsline {subsection}{\numberline {6.1}Errors}{6}{subsection.6.1}
+\contentsline {subsection}{\numberline {6.2}Performance for different $\theta $ values}{6}{subsection.6.2}
+\contentsline {section}{\numberline {7}Performance Analysis}{9}{section.7}
+\contentsline {subsection}{\numberline {7.1}Time vs Steps}{9}{subsection.7.1}
+\contentsline {subsection}{\numberline {7.2}Time to compute vs Number of Bodies}{9}{subsection.7.2}
+\contentsline {subsection}{\numberline {7.3}Analysis with Callgrind}{12}{subsection.7.3}
diff --git a/course/semester2/pprog/assignment1/single-thread/10.dat b/course/semester2/pprog/assignment1/single-thread/10.dat
new file mode 100644 (file)
index 0000000..9fb5d02
--- /dev/null
@@ -0,0 +1,501 @@
+500
+100000000000.000000 0.000006 -0.000003 -0.000000 0.000023 -0.000010 -0.000001 4700831.239685 -2086053.773013 -171155.009379
+10000000.000000 -6.599969 73.038186 0.001497 0.800113 0.076095 0.002989 2248.583133 -12332.457043 -220.931358
+10000000.000000 -22.799757 -40.114656 0.201514 0.400882 -0.228749 0.003052 17659.732582 24934.291830 1153.553500
+10000000.000000 -26.599779 40.269673 -0.298997 0.800800 0.538809 0.002010 15898.585891 -23885.154696 208.560567
+10000000.000000 -59.799964 99.121143 -0.599499 0.400133 0.242173 0.001005 2649.202841 -5034.111069 102.014398
+10000000.000000 -11.597153 -10.477569 -0.899283 0.810296 -0.951101 0.001787 202575.616144 181564.179616 15732.577420
+10000000.000000 67.299972 92.783818 -0.499494 0.599897 -0.432451 0.001023 -2083.843877 -3888.375700 451.878316
+10000000.000000 -93.699891 -29.199990 0.800497 0.600389 -56.399946 0.000990 7228.404339 1904.975890 -155.919806
+10000000.000000 24.399588 -29.679525 0.201993 0.798500 0.641723 0.003975 -30179.153722 34286.907883 -497.650847
+10000000.000000 -0.700003 77.003730 -0.799495 0.599987 0.007190 0.001018 -273.720636 -12040.440980 361.950482
+10000000.000000 -34.899918 65.053695 0.301999 0.200297 0.107143 0.003997 5938.786886 -10992.697733 -65.367567
+10000000.000000 15.099614 -28.947513 -0.697980 0.198594 0.106221 0.004074 -28220.635759 55430.676161 1475.112231
+10000000.000000 51.199961 -87.884000 0.500493 0.399860 0.232149 0.000974 -2781.724871 6616.789061 -543.298671
+10000000.000000 -15.899784 38.041607 -0.097923 0.200785 0.082398 0.005101 15647.456770 -36275.759786 42231.361678
+10000000.000000 37.399942 -76.807674 0.400499 0.799790 0.384845 0.000997 -4227.657079 8570.385568 -57.242744
+10000000.000000 -44.699780 35.385538 -0.199000 0.600798 0.770787 0.002000 15877.903257 -12928.441531 -9.840074
+10000000.000000 -59.699959 94.191421 0.500498 0.600151 0.382728 0.000992 3003.485184 -5020.277669 -158.599608
+10000000.000000 6.199924 -41.970922 0.200498 0.399724 0.058984 0.000991 -5590.856699 36816.233883 -180.329253
+10000000.000000 95.299943 -70.598550 0.001000 0.599794 0.802966 0.002000 -4124.387981 2981.031611 0.120893
+10000000.000000 16.199814 -39.919538 0.501493 0.399323 0.161681 0.002973 -13623.127183 33574.196652 -529.556684
+10000000.000000 -94.899928 -54.175888 0.900499 0.200262 -0.351714 0.000996 5249.162701 2774.275340 -75.555264
+10000000.000000 23.098843 12.822437 0.801952 0.195789 -0.356168 0.003826 -84367.577172 -46142.145988 -3470.213506
+10000000.000000 66.399831 24.984543 0.300498 0.799385 -2.031031 0.000992 -12267.395622 -5188.650903 -179.074478
+10000000.000000 -49.799723 -23.434654 -0.497997 0.401005 -0.869098 0.004012 20061.933020 9398.392010 231.306240
+10000000.000000 -46.599978 -96.195743 0.301500 0.800080 -0.391338 0.003000 1655.216009 6587.957946 18.259859
+10000000.000000 -34.599598 25.559641 -0.199024 0.801456 1.118697 0.001915 28800.398934 -25833.404813 -1440.865895
+10000000.000000 -43.899624 18.244290 -0.198498 0.201366 0.488325 0.003006 27272.145514 -11386.592747 123.899897
+10000000.000000 -68.799902 -53.260300 0.500499 0.400356 -0.520474 0.000995 7113.917673 5628.055017 -90.723751
+10000000.000000 -7.899967 -61.012870 0.500498 0.200121 -0.025340 0.000992 2397.300675 17799.393496 -165.297220
+10000000.000000 -66.799935 -74.181006 -0.599499 0.400235 -0.361891 0.001002 4702.043726 5438.270770 37.478818
+10000000.000000 94.299927 -54.487230 -0.697999 0.599735 1.025610 0.004004 -5304.817520 3093.273610 71.376020
+10000000.000000 -79.899918 55.145408 0.301498 0.200298 0.290740 0.002994 5896.217159 -3418.781042 -113.839988
+10000000.000000 -48.899846 44.111209 -0.797995 0.200561 0.222163 0.004018 11177.273389 -11334.420523 366.282908
+10000000.000000 -2.599917 31.037753 -0.899464 0.800294 0.073942 0.001129 5471.005880 -69514.302833 2534.745847
+10000000.000000 -28.799882 54.107188 -0.699496 0.400428 0.214017 0.001013 8532.717735 -15984.928785 267.049599
+10000000.000000 0.100001 -63.999776 0.800496 0.200004 0.000816 0.000987 70.497325 16328.710298 -256.652900
+10000000.000000 76.299913 -53.577716 -0.399499 0.599683 0.844670 0.001003 -6354.424480 4518.709982 66.245366
+10000000.000000 -77.799853 -10.733318 -0.298999 0.400534 -3.466611 0.002003 10649.413415 1152.680997 66.247077
+10000000.000000 73.099824 3.539988 0.300499 0.199358 -2.920038 0.000997 -12871.725568 -553.968891 -72.513318
+10000000.000000 0.100022 -69.999807 0.601499 0.200078 0.000701 0.002996 1415.549814 14017.266897 -84.995773
+10000000.000000 57.299937 77.780681 -0.697992 0.599772 -0.438781 0.004028 -4570.688203 -6370.264315 581.518115
+10000000.000000 -18.699684 -33.172185 0.001000 0.601146 -0.343480 0.001999 22749.831731 39594.276953 -12.037599
+10000000.000000 31.299965 -88.895404 0.700499 0.599871 0.209360 0.000996 -2586.073914 7408.624398 -88.360849
+10000000.000000 54.099716 -14.639919 0.000500 0.198966 0.720294 0.001001 -20714.148787 5814.189569 27.055643
+10000000.000000 7.282079 -1.100964 -0.496736 0.535512 -4.200667 0.008517 -1231023.614038 151040.963801 84449.571946
+10000000.000000 93.399927 53.311070 -0.699499 0.799735 -1.377925 0.001004 -5304.407722 -2921.122391 76.512589
+10000000.000000 63.199817 -16.258790 -0.897979 0.399344 1.482481 0.004081 -12611.431621 2999.962175 1799.356072
+10000000.000000 -94.699948 -73.390367 -0.797999 0.600190 -0.780662 0.004005 3802.368002 3194.958662 104.860226
+10000000.000000 6.199625 23.948545 -0.299480 0.398630 -0.105289 0.001072 -27793.242311 -105658.603724 1444.162237
+10000000.000000 -49.699939 -80.187410 0.001500 0.600222 -0.374673 0.003000 4437.503375 6544.766604 -1.870337
+10000000.000000 3.199975 49.987629 0.002000 0.399909 -0.025349 0.004001 -1868.334302 -26959.695958 23.287778
+10000000.000000 49.299866 -48.699869 0.000501 0.599511 0.600476 0.001002 -9821.347431 9488.407485 40.535777
+10000000.000000 -39.899852 -50.079823 0.901995 0.200536 -0.159354 0.003983 10711.023527 12921.065414 -340.323255
+10000000.000000 -29.899946 76.039343 0.400499 0.200195 0.078471 0.000996 3895.152300 -9516.035307 -77.290782
+10000000.000000 64.099966 -97.934632 0.000500 0.199874 0.130836 0.001000 -2529.052462 4499.138252 -3.209923
+10000000.000000 5.099278 17.969698 -0.899362 0.197367 -0.064732 0.001503 -53141.522932 -183430.220957 10087.563543
+10000000.000000 -11.599995 -88.054429 0.800492 0.800019 -0.108667 0.000970 375.178109 8487.264343 -605.689333
+10000000.000000 -56.699959 90.189930 0.000500 0.600148 0.379744 0.001000 2951.538396 -5132.880767 -1.233564
+10000000.000000 60.099740 0.999992 -0.699496 0.199056 -4.000025 0.001015 -18879.852166 -251.396833 294.458368
+10000000.000000 -98.899940 -71.139399 -0.399000 0.200217 -0.278738 0.002001 4314.544829 2720.677602 13.281312
+10000000.000000 48.099634 14.679892 -0.499494 0.198669 -0.640391 0.001021 -26686.163873 -7773.885109 429.961972
+10000000.000000 39.099413 -4.219926 -0.299495 0.197866 1.560262 0.001018 -42729.502191 4774.634641 345.896591
+10000000.000000 4.099993 97.995815 0.001000 0.199974 -0.008540 0.002000 -521.348426 -7541.513521 -4.117434
+10000000.000000 -51.899968 -98.052961 0.100498 0.200116 -0.105757 0.000994 2312.007863 7297.111252 -117.304973
+10000000.000000 -27.699903 -61.137509 0.001498 0.600352 -0.274698 0.002994 7017.943110 14263.111757 -115.458842
+10000000.000000 27.198994 -10.508692 -0.398985 0.396338 0.983259 0.002055 -73472.974475 28232.447694 1094.853177
+10000000.000000 -94.599907 42.904723 -0.599485 0.800348 1.809383 0.001047 7648.277230 -2771.212104 649.489790
+10000000.000000 -96.899912 6.233329 0.800490 0.200318 6.466653 0.000965 6313.658966 -299.850816 -692.626239
+10000000.000000 10.093414 -4.796757 0.101933 0.176013 0.411721 0.003755 -482123.397919 230275.069217 -4953.842411
+10000000.000000 -64.799851 36.361028 0.501998 0.400542 0.721920 0.003994 10842.511337 -6096.232682 -123.380630
+10000000.000000 76.399940 75.599966 0.700498 0.799781 -0.800123 0.000991 -4398.290738 -2451.545261 -170.044064
+10000000.000000 10.397187 10.633336 0.800276 0.789713 -0.738226 0.000184 -209223.389179 -215588.647328 -16314.193016
+10000000.000000 -66.699812 19.116613 0.501998 0.600686 2.233138 0.003993 13683.552418 -3835.335554 -149.744435
+10000000.000000 -33.899782 40.084747 0.001500 0.200793 0.169081 0.003000 15826.726708 -18401.324765 6.162348
+10000000.000000 -47.799631 11.872641 0.400496 0.401343 1.745135 0.000985 26972.673547 -6707.455399 -376.249595
+10000000.000000 45.199588 14.399871 0.001993 0.398499 -1.200468 0.003976 -30124.744282 -9271.632727 -493.969832
+10000000.000000 -46.599971 -93.202084 0.900494 0.800107 -0.404058 0.000978 2140.009361 4889.208529 -420.705129
+10000000.000000 -24.899913 -58.042889 0.000998 0.200317 -0.085426 0.001993 6334.651715 15644.416419 -137.318636
+10000000.000000 46.399834 42.571934 -0.599497 0.799396 -0.856391 0.001011 -12129.979062 -11484.181080 214.876203
+10000000.000000 47.199895 -58.840547 -0.497999 0.399617 0.319122 0.004005 -7674.392700 9542.760011 105.154487
+10000000.000000 89.099906 -33.738198 -0.899498 0.199658 0.523665 0.001009 -6904.387005 2784.709240 199.363419
+10000000.000000 -60.699791 -19.963098 0.302000 0.600757 -1.926095 0.004000 15030.871877 4519.036372 11.166455
+10000000.000000 -3.599988 -79.020102 -0.099501 0.800043 -0.039955 0.000998 844.143131 11014.254059 -36.578223
+10000000.000000 21.198141 5.299486 0.300473 0.393234 -1.401834 0.000900 -135762.028392 -34586.370066 -1983.579235
+10000000.000000 -53.799725 17.635206 -0.898995 0.401001 1.270268 0.002020 19989.532981 -6476.856204 401.960717
+10000000.000000 -78.599859 17.974972 -0.198499 0.800512 3.949896 0.003002 10192.644185 -2140.909769 52.207154
+10000000.000000 -2.799987 61.009588 -0.599497 0.400046 0.018769 0.001011 894.717639 -18067.006667 221.570566
+10000000.000000 55.299961 -93.824395 0.100999 0.599859 0.351329 0.001997 -2821.457926 5291.157969 -61.598862
+10000000.000000 32.099999 90.964763 0.201494 0.199998 -0.070598 0.002978 -81.869061 -5595.114931 -396.688291
+10000000.000000 39.299974 98.881731 -0.498999 0.599905 -0.236679 0.002005 -1922.210256 -6281.497748 98.733223
+10000000.000000 -85.899919 50.171962 -0.298501 0.200296 0.343860 0.002997 5893.613745 -2833.037972 -63.777078
+10000000.000000 -10.599984 92.047719 -0.899492 0.800059 0.095262 0.001029 1164.204342 -7839.190051 595.069300
+10000000.000000 -35.899890 -57.062981 -0.798496 0.200399 -0.125673 0.003015 7968.613987 12869.295920 292.152293
+10000000.000000 -75.899965 91.083455 0.100497 0.200124 0.166808 0.000989 2403.952132 -4582.859346 -270.115448
+10000000.000000 90.099932 63.859327 -0.399000 0.199754 -0.281423 0.002001 -4928.062848 -3452.448611 22.566063
+10000000.000000 79.099881 36.786431 -0.099001 0.199568 -0.427227 0.001995 -8632.038003 -3998.568672 -89.553596
+10000000.000000 32.199878 -53.881283 -0.699496 0.399556 0.237759 0.001013 -8895.190004 14428.655784 260.517790
+10000000.000000 19.399974 -76.901135 0.601000 0.799906 0.197999 0.001999 -1913.009871 12023.439037 -15.844732
+10000000.000000 59.399960 89.737704 0.801498 0.799854 -0.524713 0.002992 -2910.927014 -5387.184522 -164.525518
+10000000.000000 -49.899970 -95.052556 -0.099497 0.200108 -0.104988 0.001012 2084.470081 5515.120581 232.570609
+10000000.000000 57.399789 -27.185612 -0.299499 0.799233 1.628944 0.001004 -15366.952172 7357.700025 89.512714
+10000000.000000 -2.799994 75.007827 0.001991 0.400021 0.015370 0.003966 413.825343 -12673.429357 -700.057235
+10000000.000000 -62.599951 89.283082 -0.497999 0.800180 0.566058 0.004005 3589.608524 -4682.508523 93.034863
+10000000.000000 63.099882 51.878775 0.600498 0.199570 -0.242565 0.000992 -8617.535347 -5131.940239 -165.327981
+10000000.000000 50.099822 -40.877906 -0.597997 0.199353 0.244421 0.004011 -12920.006240 10367.091750 216.113194
+10000000.000000 -27.599851 -48.233083 -0.298498 0.800542 -0.465756 0.003007 10758.316930 18233.238516 146.839348
+10000000.000000 -18.899163 20.094130 0.900458 0.203043 0.186833 0.000849 60698.762289 -63472.269439 -3020.885072
+10000000.000000 13.299815 37.896829 0.400493 0.599326 -0.207225 0.000976 -13631.152040 -39202.342470 -477.686797
+10000000.000000 80.299951 -95.749944 0.001498 0.599823 0.500204 0.002992 -3565.342265 4050.930530 -159.813075
+10000000.000000 -51.799744 24.433214 0.001500 0.400931 0.866231 0.002999 18554.654095 -8788.786089 -26.488265
+10000000.000000 98.399921 44.128857 0.901499 0.799714 -1.742340 0.002995 -5720.696069 -2333.808404 -89.337462
+10000000.000000 -89.899909 -43.209259 0.500499 0.200331 -0.418448 0.000995 6601.820260 3163.955141 -98.456357
+10000000.000000 51.199863 -50.799864 0.301997 0.399502 0.400493 0.003991 -9948.766263 9858.842076 -188.856724
+10000000.000000 98.199908 -36.470238 0.800498 0.399666 1.059575 0.000993 -6698.602145 2328.420664 -141.689902
+10000000.000000 -59.799848 -40.299903 0.601495 0.400551 -0.599648 0.002983 11018.402126 7047.821826 -335.418120
+10000000.000000 69.099832 22.699940 -0.299499 0.199387 -0.600217 0.001004 -12377.235765 -4213.072990 99.241873
+10000000.000000 78.099964 -93.916978 -0.599497 0.199871 0.166117 0.001010 -2578.380591 3217.628059 207.005755
+10000000.000000 -43.599940 76.231475 0.202000 0.800219 0.462781 0.003998 4361.878645 -7559.335495 -36.024730
+10000000.000000 19.399953 70.892791 -0.298499 0.799827 -0.214692 0.003003 -3486.541465 -12128.846549 56.350221
+10000000.000000 54.399940 80.733239 -0.797993 0.799782 -0.533677 0.004025 -4359.547733 -6853.415528 480.837981
+10000000.000000 79.299917 -60.611428 -0.297994 0.599699 0.777223 0.004023 -6021.749288 3479.917649 453.346492
+10000000.000000 80.199931 82.807195 -0.597982 0.399749 -0.385666 0.004064 -4962.764910 -2531.903175 1183.034116
+10000000.000000 39.099862 -50.923349 -0.597997 0.199499 0.153598 0.004009 -10036.221502 13125.643995 184.292844
+10000000.000000 -26.899990 -81.033235 0.600482 0.200036 -0.066311 0.000934 719.876205 7120.542004 -1312.404661
+10000000.000000 72.399945 97.706066 -0.699492 0.799800 -0.587960 0.001030 -3966.545435 -4111.333995 550.753912
+10000000.000000 -89.899880 -12.749983 -0.199499 0.200440 -1.499939 0.001006 9099.671931 1198.985443 119.713919
+10000000.000000 -20.599542 28.299382 0.000997 0.801659 0.597749 0.001990 32788.077510 -45214.544423 -195.160109
+10000000.000000 94.199906 -31.412469 -0.698997 0.399657 1.175113 0.002009 -6921.158805 2296.627006 201.809407
+10000000.000000 -82.699914 53.469761 0.100499 0.600314 0.939441 0.000997 6355.812891 -3599.584494 -40.424381
+10000000.000000 0.400002 19.997707 -0.899387 0.799984 -0.008340 0.001413 -1794.765856 -166808.212980 8326.247248
+10000000.000000 70.199961 98.858516 0.801490 0.399857 -0.283082 0.002965 -2897.507972 -5058.354755 -648.080810
+10000000.000000 0.099997 -39.999433 -0.497989 0.199989 0.002061 0.004039 -284.821255 41209.195394 786.662315
+10000000.000000 -77.899922 61.127793 0.800493 0.200284 0.255463 0.000975 5673.516657 -5505.017052 -504.022233
+10000000.000000 70.399896 50.450909 -0.899498 0.799621 -1.098298 0.001008 -7585.311769 -5154.335593 156.853226
+10000000.000000 -71.699848 -25.863945 0.000500 0.600553 -1.727799 0.001000 11033.374126 4069.245863 3.928071
+10000000.000000 69.399944 93.706323 0.200494 0.799797 -0.587451 0.000980 -4057.640464 -4323.183081 -397.059124
+10000000.000000 19.399956 -61.877203 0.500478 0.799838 0.245951 0.000916 -3334.113029 15876.475786 -1875.269517
+10000000.000000 22.099977 92.976238 -0.198500 0.199916 -0.047698 0.003001 -1681.443291 -7721.280031 23.186051
+10000000.000000 23.299767 -38.822685 0.300496 0.599150 0.355270 0.000986 -17092.119439 28424.780420 -282.047320
+10000000.000000 -70.899920 55.129023 0.900996 0.200291 0.257934 0.001984 5821.795505 -4961.274174 -319.176194
+10000000.000000 12.099900 46.974088 0.101499 0.199634 -0.052447 0.002997 -7349.965166 -27652.020259 -59.822992
+10000000.000000 -35.799332 -8.028435 -0.599489 0.402428 -2.056637 0.001041 48422.927209 10704.239838 826.373902
+10000000.000000 -39.899880 -57.070015 -0.498498 0.200436 -0.139768 0.003006 8717.798628 11663.080719 118.151875
+10000000.000000 94.199915 -37.505224 0.501499 0.399689 0.989616 0.002996 -6256.519882 2849.664418 -81.969452
+10000000.000000 62.399840 35.311050 0.300971 0.799417 -1.378002 0.001902 -11795.632654 -4645.879378 -1528.238137
+10000000.000000 19.099552 -27.931482 -0.198996 0.198371 0.138116 0.002014 -32650.117430 47999.077589 279.829038
+10000000.000000 72.099814 -6.199997 0.801497 0.199314 -14.399972 0.002991 -13370.346807 1456.373381 -170.035621
+10000000.000000 0.100001 -91.999886 0.301999 0.200005 0.000416 0.003998 93.060218 8321.546399 -39.736449
+10000000.000000 21.398713 -12.353073 -0.099494 0.795308 1.295097 0.001022 -94562.508869 54510.457722 429.116523
+10000000.000000 56.199896 53.792496 -0.399499 0.399621 -0.415165 0.001004 -7575.137800 -6985.364242 85.934688
+10000000.000000 -96.599933 60.646616 -0.098498 0.800243 1.293151 0.003006 4857.435747 -3579.951954 86.681246
+10000000.000000 77.399951 -83.633281 0.002000 0.799821 0.733522 0.004000 -3582.473626 3778.539390 -5.644491
+10000000.000000 9.399969 -63.943529 -0.198999 0.799888 0.113304 0.002004 -2275.030359 16071.311219 84.389629
+10000000.000000 83.099922 58.859270 -0.299500 0.199715 -0.281546 0.001000 -5712.207482 -3800.353218 -5.713152
+10000000.000000 -52.899944 -96.055143 0.101496 0.200202 -0.110180 0.002987 4028.710906 4725.705745 -265.139143
+10000000.000000 20.099973 86.976894 -0.198000 0.199902 -0.046403 0.004001 -1976.717913 -8528.263247 23.267667
+10000000.000000 51.099850 44.886530 0.400997 0.199456 -0.227164 0.001988 -10901.869326 -9934.572454 -233.174998
+10000000.000000 -25.599816 -44.236063 -0.898490 0.800668 -0.471634 0.003035 13262.265338 21925.630792 707.712045
+10000000.000000 48.399663 -15.870478 0.800491 0.798775 2.259220 0.000967 -24534.839571 7721.270637 -642.046535
+10000000.000000 68.299974 -98.793881 0.900471 0.599906 0.412333 0.000892 -1897.772775 4130.751979 -2328.032330
+10000000.000000 19.299768 36.845465 -0.798484 0.599154 -0.309857 0.003057 -17043.355182 -34908.931529 1128.027188
+10000000.000000 20.099923 -60.967018 -0.799476 0.199721 0.066281 0.001091 -5570.490119 14039.599378 2024.075751
+10000000.000000 78.299932 -62.628497 0.601993 0.599754 0.743126 0.003976 -4938.986905 5374.407955 -480.915043
+10000000.000000 -18.699967 77.073881 0.300499 0.600121 0.147525 0.000995 2403.503543 -10548.525343 -101.820366
+10000000.000000 -70.899810 5.774993 -0.199500 0.200689 3.549974 0.001002 13800.031854 -585.988054 28.001234
+10000000.000000 68.099808 9.319975 0.000499 0.199302 -1.360088 0.000997 -13930.910035 -1669.393710 -64.229998
+10000000.000000 -78.899871 -27.292546 -0.297999 0.200467 -0.585017 0.004003 9308.829234 3369.359740 62.797853
+10000000.000000 -82.599951 -84.395188 -0.598499 0.800180 -0.790295 0.003002 3584.714728 3621.077142 44.055946
+10000000.000000 -85.799883 -24.716632 0.400499 0.400423 -1.433205 0.000996 8399.008368 2597.889070 -90.306163
+10000000.000000 10.093415 4.796758 -0.199368 0.176019 -0.411717 0.001478 -481905.374809 -230106.362047 9565.683756
+10000000.000000 6.099982 59.989733 0.300493 0.199935 -0.020970 0.000974 -1302.875993 -19371.707794 -507.996846
+10000000.000000 -84.899953 84.101137 0.000500 0.200171 0.202187 0.000999 3398.338035 -3888.574033 -27.054852
+10000000.000000 99.199905 -27.292835 0.701998 0.399653 1.414365 0.003993 -7003.455424 1554.505330 -140.511333
+10000000.000000 -77.599948 89.350518 -0.499497 0.800190 0.700965 0.001012 3868.254741 -3095.498911 285.338835
+10000000.000000 21.098806 13.849198 -0.597958 0.195656 -0.302912 0.004153 -87070.025338 -57966.094680 3047.329382
+10000000.000000 1.099985 -43.997246 0.800488 0.199944 0.006296 0.000956 -1181.986052 35034.828530 -887.003000
+10000000.000000 20.199397 -23.832609 -0.799474 0.397805 0.335964 0.001093 -44094.980104 52483.092558 1862.184854
+10000000.000000 14.399984 -98.943335 0.302000 0.799942 0.113491 0.003999 -1163.917975 7201.859224 -19.449020
+10000000.000000 21.299717 35.824548 -0.199502 0.598969 -0.351642 0.000994 -20750.501025 -32762.934414 -123.377817
+10000000.000000 -87.899904 -38.231541 -0.099000 0.200349 -0.463020 0.002001 6951.361694 2790.605873 26.590326
+10000000.000000 -91.899946 75.122622 -0.299499 0.200196 0.245172 0.001004 3889.046903 -3227.964309 96.623410
+10000000.000000 -46.599760 32.587345 -0.799494 0.800871 1.174437 0.001021 17357.411858 -11327.843574 431.789048
+10000000.000000 -53.599821 -37.583672 -0.098001 0.800650 -1.167163 0.003995 12978.677973 8038.287422 -146.239266
+10000000.000000 -15.899784 38.041607 0.299921 0.200785 0.082398 -0.001110 15646.872579 -36271.646854 -42419.496804
+10000000.000000 24.199925 -62.923616 -0.199498 0.399726 0.153085 0.001008 -5494.475173 14068.236824 173.374005
+10000000.000000 36.099342 7.549859 0.101998 0.197608 -0.900511 0.003992 -47849.949075 -9994.753417 -163.473885
+10000000.000000 12.099815 -36.966990 -0.499490 0.199327 0.066965 0.001036 -13520.120697 41983.539168 711.103889
+10000000.000000 -7.599878 -39.081483 0.900485 0.800441 -0.162034 0.000946 8650.292183 41443.041913 -1075.501115
+10000000.000000 -14.899272 22.067103 0.000503 0.202647 0.132440 0.001010 52809.201547 -78587.840833 214.920960
+10000000.000000 25.099975 -93.973304 -0.199499 0.199908 0.053557 0.001002 -1842.423389 7308.683610 36.360732
+10000000.000000 -33.799954 -81.083846 -0.799496 0.400166 -0.167519 0.001014 3317.467885 7646.714193 273.442465
+10000000.000000 -50.799824 42.242727 -0.498499 0.400641 0.485242 0.003003 12836.404147 -9439.740694 55.667805
+10000000.000000 -21.899819 -41.053266 0.901970 0.200655 -0.105886 0.003889 12992.830465 28727.384582 -2341.239621
+10000000.000000 55.299923 63.742084 -0.297998 0.599718 -0.516002 0.004008 -5649.878041 -7547.472196 174.958411
+10000000.000000 -54.899946 81.067818 -0.399499 0.200195 0.135500 0.001003 3888.224503 -6041.772020 65.828693
+10000000.000000 -63.699739 -22.872645 0.302034 0.600943 -1.745130 0.004126 18247.733897 7862.411439 2455.766025
+10000000.000000 -87.599908 39.902529 0.300999 0.800336 1.805001 0.001996 6724.705515 -2559.554483 -88.394429
+10000000.000000 17.099972 -81.979131 -0.897996 0.199897 0.041963 0.004015 -2077.925223 9993.859630 311.165882
+10000000.000000 -9.898438 15.064318 -0.198968 0.205671 0.124788 0.002116 112924.445575 -171256.989766 2315.520955
+10000000.000000 -7.899992 -99.007981 0.300500 0.200028 -0.015798 0.000999 562.966808 7291.101746 -26.428900
+10000000.000000 -1.599988 -53.014764 0.600996 0.800042 -0.028986 0.001985 771.207171 24054.590039 -308.412217
+10000000.000000 -2.799890 -29.019618 0.201992 0.400395 -0.037481 0.003972 7659.153127 77984.389345 -553.895026
+10000000.000000 -25.799896 -55.094319 0.201996 0.400379 -0.188267 0.003985 7541.705049 16475.661526 -291.437912
+10000000.000000 -85.899948 79.108815 0.001500 0.200188 0.217555 0.002998 3773.196544 -3326.160335 -32.087260
+10000000.000000 -26.899977 -98.027457 -0.699499 0.200082 -0.054760 0.001004 1638.577029 6845.306919 80.964082
+10000000.000000 63.099945 82.924028 -0.199500 0.199798 -0.152055 0.001002 -4036.766001 -4951.060834 30.683961
+10000000.000000 -41.899873 53.079085 0.001000 0.200463 0.157907 0.002000 9253.868471 -11695.264683 -0.005052
+10000000.000000 -9.599954 58.068703 0.300498 0.800168 0.136975 0.000994 3297.973842 -19134.360220 -128.844157
+10000000.000000 62.099899 53.885081 0.600497 0.199633 -0.230009 0.000990 -7364.948750 -7572.391733 -194.522196
+10000000.000000 -76.799929 58.265457 0.000502 0.400257 0.530814 0.001008 5131.033262 -4414.247852 170.178238
+10000000.000000 62.199847 36.664743 -0.698470 0.399444 -0.670709 0.003101 -11019.040034 -8519.089594 1594.404141
+10000000.000000 -57.799859 -43.269654 -0.099499 0.400514 -0.539120 0.001005 10263.667250 8313.526287 101.205160
+10000000.000000 17.099390 23.928229 -0.899447 0.197787 -0.145059 0.001188 -44025.477790 -66816.580161 3401.995730
+10000000.000000 51.099715 -21.768066 -0.497995 0.198965 0.464058 0.004018 -20712.057649 8373.635909 364.294305
+10000000.000000 31.299514 22.595284 0.400492 0.598228 -0.810030 0.000971 -35611.653823 -26490.521683 -569.051585
+10000000.000000 -58.699918 -65.272217 -0.699499 0.600296 -0.544287 0.001004 5914.992464 6572.476157 85.459965
+10000000.000000 24.099946 -74.967848 0.901494 0.199805 0.064553 0.002978 -3925.695263 11041.860826 -427.444170
+10000000.000000 57.099906 60.906460 0.400496 0.199657 -0.187238 0.000986 -6865.501943 -7012.040693 -289.647248
+10000000.000000 86.199907 -42.599953 0.801998 0.399663 0.800172 0.003993 -6752.075469 3456.367347 -143.796592
+10000000.000000 -24.599924 63.158542 0.001000 0.800275 0.316776 0.002000 5466.874143 -13685.344175 -3.020520
+10000000.000000 -13.599972 -89.062798 -0.499492 0.800101 -0.125394 0.001029 2013.806151 8977.809770 574.189364
+10000000.000000 -7.899940 -49.015956 0.901491 0.200217 -0.031305 0.002969 4317.619325 26968.886680 -628.655727
+10000000.000000 85.299877 -16.583310 -0.898497 0.599550 2.833414 0.003010 -8982.854899 1382.220510 155.770672
+10000000.000000 -58.899937 74.079634 0.501991 0.200232 0.159109 0.003966 4768.059609 -7120.763211 -760.550941
+10000000.000000 15.298229 12.652332 0.200476 0.593540 -0.697791 0.000914 -130301.014979 -108296.158764 -1727.656607
+10000000.000000 47.399596 2.866617 -0.599494 0.798527 -6.266831 0.001021 -29640.278680 -2378.620513 439.625547
+10000000.000000 70.299828 15.764666 0.400993 0.599372 -2.470733 0.001977 -12639.822713 -2789.081395 -386.916764
+10000000.000000 98.099928 55.824961 -0.198000 0.199740 -0.350142 0.003999 -5200.932352 -2836.239573 -11.269697
+10000000.000000 -3.599989 73.021761 -0.898989 0.800038 0.043265 0.002042 699.771097 -11373.813549 862.175934
+10000000.000000 -30.799690 -33.187554 0.002000 0.401127 -0.374577 0.004000 22469.207781 23682.237796 -10.454280
+10000000.000000 71.199828 19.289951 -0.798994 0.399377 -1.420177 0.002021 -12440.598728 -3444.926388 384.156357
+10000000.000000 13.099933 55.976516 0.401497 0.199755 -0.047410 0.002990 -4910.754186 -19612.570475 -199.823082
+10000000.000000 49.199726 -24.607852 0.100498 0.399003 0.784538 0.000994 -19958.099285 10704.920982 -118.817167
+10000000.000000 -53.899690 6.399986 0.200498 0.201126 10.799932 0.000991 22339.001737 -2413.641586 -176.382822
+10000000.000000 -86.899946 -65.133816 -0.099482 0.200199 -0.267585 0.001065 4052.860277 2095.351651 1276.516335
+10000000.000000 -74.599954 -94.319102 0.401999 0.800166 -0.638126 0.003997 3341.428356 3395.327331 -67.594070
+10000000.000000 -22.599965 -77.119344 0.700998 0.800128 -0.238465 0.001992 2545.753315 9944.838524 -152.684302
+10000000.000000 -38.899935 -83.046877 0.000496 0.200234 -0.093572 0.000985 4570.393058 8121.663754 -253.870041
+10000000.000000 -11.799835 38.062605 0.101499 0.400597 0.124306 0.002995 11868.516833 -40227.849183 -101.722986
+10000000.000000 60.399949 -86.724071 0.100499 0.799814 0.551968 0.000998 -3712.047044 4867.650522 -44.387996
+10000000.000000 95.099903 18.499982 0.301499 0.199646 -1.000066 0.002998 -7071.637954 -1288.704602 -39.502772
+10000000.000000 93.099900 25.642278 -0.298999 0.199635 -0.715492 0.002002 -7292.378971 -2123.229637 41.251627
+10000000.000000 -60.799933 77.158357 0.200500 0.400242 0.316577 0.001000 4835.021949 -6121.620630 -10.477894
+10000000.000000 80.199912 50.686218 -0.299500 0.399678 -0.627657 0.001000 -6453.950528 -4102.246855 -0.631650
+10000000.000000 -64.899853 -39.166576 -0.699495 0.200535 -0.333005 0.001018 10684.647384 6564.689464 354.340262
+10000000.000000 -24.899538 -27.092099 -0.697987 0.201679 -0.183389 0.004049 33531.119839 35973.760861 973.145074
+10000000.000000 22.399884 -52.833699 -0.799492 0.799577 0.333033 0.001028 -8528.701949 19110.904359 553.493559
+10000000.000000 77.299843 -22.099987 0.101000 0.599441 -46.199934 0.002000 -10313.951262 2445.647793 -14.076645
+10000000.000000 49.099742 26.818370 -0.899494 0.199060 -0.363501 0.001022 -18829.307451 -10736.308240 445.311433
+10000000.000000 24.099266 -19.879403 -0.899471 0.197330 0.242170 0.001105 -53486.986375 43279.236678 2090.836704
+10000000.000000 64.399763 -16.577699 -0.298517 0.799127 2.844720 0.002936 -18000.108207 4823.905582 -1440.936156
+10000000.000000 -86.799879 14.338444 0.700999 0.400441 2.676860 0.001995 8802.071340 -1295.896334 -101.340879
+10000000.000000 62.099854 -39.844907 0.002000 0.199471 0.310339 0.003999 -10581.720786 6773.491933 -11.444618
+10000000.000000 20.098987 -16.881497 0.200487 0.196314 0.238402 0.000952 -73902.283755 61926.135329 -955.677454
+10000000.000000 -30.599885 -51.242885 0.100995 0.800421 -0.485358 0.001982 8525.038945 18203.526548 -340.068528
+10000000.000000 34.399539 22.408389 0.100499 0.798323 -1.183719 0.000998 -33686.821925 -21923.631513 -47.073299
+10000000.000000 45.099686 -22.804179 0.900988 0.198856 0.391918 0.001957 -22905.444340 12204.360457 -832.430030
+10000000.000000 92.099916 -45.799957 0.501999 0.199694 0.400156 0.003998 -6132.028473 3124.205026 -48.567262
+10000000.000000 -16.899981 95.017761 -0.399506 0.200069 0.035304 0.000980 1387.825474 -9747.710838 -423.108974
+10000000.000000 -55.799943 -97.115391 -0.899494 0.400206 -0.230663 0.001020 4137.905674 5308.924954 416.694609
+10000000.000000 -98.899904 20.494982 -0.799498 0.200349 0.989934 0.001007 6992.753862 -1393.865954 161.100457
+10000000.000000 -32.899967 -93.035386 0.801498 0.200119 -0.070610 0.002992 2387.609744 7160.131893 -153.740437
+10000000.000000 -29.699997 -86.104500 -0.899496 0.600007 -0.208748 0.001014 -7.590593 11293.711741 272.180883
+10000000.000000 -98.699903 16.121417 0.601498 0.600351 4.242816 0.002994 7011.126560 -800.231123 -151.589052
+10000000.000000 -74.799921 55.272673 -0.799493 0.400288 0.545255 0.001024 5757.184495 -4020.882030 488.948717
+10000000.000000 31.099902 -62.950617 0.901993 0.199642 0.099054 0.003974 -7151.748922 12833.997994 -515.007294
+10000000.000000 -81.899957 -96.085368 0.100500 0.200156 -0.170658 0.001000 3118.521572 3507.358051 -1.213424
+10000000.000000 20.199891 -50.921287 0.001497 0.399605 0.157886 0.002990 -7940.321236 20460.805199 -188.750011
+10000000.000000 15.099938 60.975179 0.300498 0.199776 -0.050018 0.000994 -4499.581928 -16756.523557 -124.683168
+10000000.000000 52.199957 78.868274 -0.199500 0.399842 -0.263585 0.000999 -3161.299271 -5899.903459 -15.648547
+10000000.000000 -86.699867 -11.262487 0.601493 0.600490 -6.524957 0.002972 9992.240940 508.304616 -693.654718
+10000000.000000 88.299876 6.066656 0.300499 0.599548 -5.866701 0.000998 -9029.105415 -535.287661 -44.500061
+10000000.000000 -78.900015 74.106708 -0.098041 0.199936 0.213357 0.003838 -1783.244087 -1781.842209 -4119.650844
+10000000.000000 -93.699932 56.503530 -0.597998 0.600248 1.006990 0.004009 4957.191958 -3077.518049 173.234846
+10000000.000000 57.299898 56.699895 -0.599496 0.599628 -0.600381 0.001015 -7467.601066 -7638.620006 288.661731
+10000000.000000 10.299967 65.954337 -0.798997 0.599879 -0.091668 0.002013 -2444.614129 -15185.150421 251.862647
+10000000.000000 -95.899905 24.399974 -0.798999 0.200344 0.799906 0.002005 6872.851941 -1893.322719 103.864765
+10000000.000000 71.399820 11.971401 -0.898494 0.799345 -4.057242 0.003022 -13161.156587 -1929.253037 409.473314
+10000000.000000 94.099903 -26.651829 -0.199500 0.199646 0.696379 0.001001 -7250.348565 1737.927748 62.085788
+10000000.000000 80.299852 6.333319 -0.297999 0.599463 -5.333382 0.004003 -10750.219505 -781.132106 63.334730
+10000000.000000 38.099948 80.952985 0.001501 0.199810 -0.094194 0.003002 -3800.327352 -7323.319080 40.130241
+10000000.000000 -73.899891 42.176130 0.002000 0.200398 0.352159 0.004000 7957.174173 -4448.153201 -2.175078
+10000000.000000 20.197777 1.666387 0.001001 0.391910 -2.667603 0.002002 -162014.441901 -13933.031167 26.750075
+10000000.000000 70.399878 -41.333261 -0.498999 0.799556 1.333597 0.002004 -8880.911792 5252.821653 83.817187
+10000000.000000 74.299950 89.753278 -0.598999 0.599819 -0.493534 0.002005 -3619.564028 -4008.419990 94.598009
+10000000.000000 55.199943 74.853256 0.500496 0.399792 -0.293615 0.000986 -4152.857453 -5632.163182 -276.273453
+10000000.000000 -36.799966 -83.089046 -0.598992 0.400124 -0.177912 0.002028 2523.068200 8035.258688 532.109480
+10000000.000000 -50.899651 -6.019964 0.700494 0.201268 -2.039865 0.000980 25350.541243 2840.379696 -391.237557
+10000000.000000 -95.899908 -31.309648 -0.597999 0.200336 -0.619248 0.004003 6797.662857 2301.907818 110.499364
+10000000.000000 57.299881 -52.677251 0.002000 0.599569 0.645673 0.004000 -8637.785707 7777.230118 -0.224571
+10000000.000000 -81.799938 -63.260274 -0.699491 0.400226 -0.520477 0.001031 4519.427389 3177.921504 623.409439
+10000000.000000 51.099721 21.768064 0.001999 0.198986 -0.464064 0.003997 -20298.949942 -8529.274189 -54.659545
+10000000.000000 -16.599795 -39.173904 -0.198499 0.800744 -0.347064 0.003002 14778.380934 33078.569905 5.869704
+10000000.000000 -82.799935 -65.255322 0.700991 0.400235 -0.510540 0.001968 4696.055465 4591.520312 -642.763988
+10000000.000000 79.099926 62.874542 -0.898498 0.199730 -0.251014 0.003006 -5406.780554 -4403.316146 113.260730
+10000000.000000 5.399942 43.954079 0.601992 0.799787 -0.092604 0.003971 -4401.668297 -33875.600369 -571.654680
+10000000.000000 -87.899910 52.169178 -0.798996 0.200327 0.338268 0.002015 6532.742717 -3887.552835 300.853536
+10000000.000000 -15.699865 45.106281 0.500995 0.600491 0.211932 0.001983 9733.989098 -28050.873997 -349.683994
+10000000.000000 5.399970 -53.962648 0.001500 0.799888 0.075218 0.003001 -2306.875131 22866.742776 21.600421
+10000000.000000 -38.799826 -45.173142 0.800996 0.400632 -0.345969 0.001984 12600.922162 13987.513062 -315.614149
+10000000.000000 91.099969 -97.907098 0.400498 0.199885 0.185876 0.000992 -2328.776451 3231.287952 -153.916271
+10000000.000000 33.299937 91.892264 0.001506 0.599770 -0.215676 0.003022 -4571.279687 -8917.364949 391.955114
+10000000.000000 -27.899943 -82.034006 0.000513 0.200206 -0.067781 0.001048 4123.987239 10222.687179 965.579274
+10000000.000000 84.299911 46.463781 -0.798499 0.599677 -1.072518 0.003004 -6433.875181 -3547.307536 87.371793
+10000000.000000 -73.599934 61.485173 -0.399497 0.800240 0.970225 0.001010 4828.960084 -5348.662275 192.495073
+10000000.000000 44.099846 -46.906221 -0.698497 0.199441 0.187825 0.003012 -11199.620499 11813.577991 248.870118
+10000000.000000 -35.899831 46.078046 0.701496 0.200616 0.155739 0.002984 12289.588352 -15674.912334 -312.509081
+10000000.000000 -80.799955 94.172287 -0.398500 0.400163 0.344486 0.003002 3252.498544 -3908.715987 36.123870
+10000000.000000 -16.799997 93.036475 -0.799495 0.400009 0.072814 0.001018 49.111682 -6065.152478 359.768587
+10000000.000000 80.199875 -25.384574 0.700498 0.399551 1.230919 0.000993 -8932.297924 2660.442877 -165.290812
+10000000.000000 38.399829 -44.662022 -0.499498 0.799377 0.676283 0.001009 -12513.857716 14493.940009 175.337746
+10000000.000000 -40.699935 -81.151759 0.501995 0.600239 -0.303366 0.003983 4805.226799 6703.830746 -364.896757
+10000000.000000 -62.599783 26.199897 0.000932 0.800771 50.399659 0.001836 14096.735490 -5414.151141 6.118627
+10000000.000000 -79.599869 74.432367 -0.598458 0.800485 0.864608 0.003166 10186.610963 -6510.631923 4185.471987
+10000000.000000 68.099923 65.896895 0.400999 0.199719 -0.206332 0.001996 -5625.612263 -5402.871932 -77.177590
+10000000.000000 -14.899844 -41.036126 -0.799487 0.200564 -0.071500 0.001048 11200.296707 33499.413858 984.263802
+10000000.000000 61.399930 -71.661031 -0.399499 0.799745 0.678070 0.001002 -5104.340520 5826.408680 41.579677
+10000000.000000 16.399975 82.922763 -0.298499 0.799909 -0.154684 0.003002 -1831.605693 -9328.083986 47.027071
+10000000.000000 -58.599934 72.327718 -0.198492 0.800239 0.655340 0.003030 4625.080697 -4216.479337 687.497981
+10000000.000000 43.099533 -8.522124 -0.397995 0.198301 0.955911 0.004018 -33983.202884 6933.028016 351.465536
+10000000.000000 83.399949 -84.609365 0.001500 0.799813 0.781348 0.003000 -3747.070344 3433.653738 -1.989506
+10000000.000000 33.399963 84.844602 0.500499 0.799867 -0.310967 0.000995 -2676.704158 -7576.068094 -102.504081
+10000000.000000 -62.899759 5.100046 -0.298942 0.200868 4.200085 0.002130 17065.369186 -1025.135611 77.618414
+10000000.000000 -88.899897 29.306864 0.900498 0.200375 0.613676 0.000994 7495.667209 -2347.738651 -129.991144
+10000000.000000 -10.700039 96.034261 -0.398967 0.599859 0.068335 0.002117 -2654.203313 -8313.924783 2134.497787
+10000000.000000 20.099945 -64.969023 0.200498 0.199799 0.062295 0.000994 -4013.813499 15128.616503 -109.676096
+10000000.000000 0.299987 -17.997177 -0.899358 0.599925 0.010265 0.001516 -3029.929994 205295.213283 10326.367237
+10000000.000000 58.099918 66.913338 -0.099000 0.199703 -0.173479 0.002001 -5938.254647 -6896.868600 16.044496
+10000000.000000 -28.799966 91.063635 0.000500 0.400122 0.127105 0.000999 2428.325191 -7364.548247 -11.395629
+10000000.000000 -38.699956 84.139184 0.300499 0.600161 0.278202 0.000997 3210.156861 -7390.234365 -50.367592
+10000000.000000 -19.799849 -45.088536 -0.898490 0.400547 -0.176494 0.003036 10881.198942 25701.049008 722.837002
+10000000.000000 -66.699928 -69.291234 -0.898499 0.600262 -0.582351 0.003005 5230.436569 5161.685654 107.618560
+10000000.000000 -4.899915 -37.012869 0.900482 0.200309 -0.024685 0.000936 6118.425070 46827.951781 -1281.775214
+10000000.000000 72.399916 59.519932 -0.899498 0.799694 -0.960248 0.001007 -6135.839254 -4935.073932 130.780079
+10000000.000000 -79.899907 58.137866 0.501496 0.200338 0.275627 0.002986 6725.907428 -4704.837788 -267.502658
+10000000.000000 45.199964 -94.905178 0.000500 0.399868 0.189782 0.001002 -2645.869022 6164.091091 31.292944
+10000000.000000 82.399861 -31.799985 0.500498 0.799510 -65.599920 0.000994 -8649.294577 3328.766531 -72.122144
+10000000.000000 5.400018 76.973834 -0.899493 0.800066 -0.052657 0.001025 1428.849468 -14820.795043 568.043062
+10000000.000000 -23.799928 -61.078483 -0.798993 0.400263 -0.156631 0.002024 5230.008941 14935.290321 484.278193
+10000000.000000 -12.899917 -51.025164 -0.799493 0.200302 -0.049794 0.001024 6025.206141 23730.960683 489.412204
+10000000.000000 -88.699961 99.269653 -0.399500 0.600141 0.539235 0.001001 2824.936497 -3188.724936 15.720149
+10000000.000000 -46.899960 93.050463 -0.797996 0.200147 0.100805 0.004013 2931.628866 -5421.258276 248.307640
+10000000.000000 53.099939 -86.939007 -0.899488 0.199779 0.122107 0.001042 -4443.912111 5370.269641 879.965304
+10000000.000000 31.199851 48.873237 -0.897995 0.399458 -0.253907 0.004017 -10866.905219 -16905.980260 340.288216
+10000000.000000 84.299917 -52.524476 0.801499 0.599698 0.951133 0.002995 -6053.179109 3799.304413 -105.383666
+10000000.000000 7.199962 57.975605 -0.498992 0.399860 -0.049210 0.002030 -2824.869648 -18696.466285 591.415518
+10000000.000000 29.399906 -59.806488 -0.699491 0.799657 0.387315 0.001031 -6903.163300 12974.484673 600.666661
+10000000.000000 -63.899848 -36.177703 0.100498 0.200552 -0.355284 0.000992 11024.289145 5453.658360 -162.339346
+10000000.000000 -58.899877 -49.120302 0.200499 0.200446 -0.240429 0.000997 8910.587599 7758.698230 -50.294346
+10000000.000000 42.299626 20.399822 -0.398988 0.598639 -1.200645 0.002042 -27337.543127 -12794.965115 768.646181
+10000000.000000 -0.899987 48.001682 0.201498 0.200047 0.002707 0.002993 912.059331 -29201.997764 -140.713383
+10000000.000000 2.099740 18.986967 0.701397 0.199048 -0.030164 0.002623 -19491.551008 -182070.122669 -7607.146642
+10000000.000000 8.399814 -32.902261 0.701482 0.799318 0.196736 0.002935 -13929.382746 55856.473568 -1310.708422
+10000000.000000 -9.593555 5.796586 -0.697544 0.823267 1.587315 0.005657 454839.053533 -269609.810653 32963.876009
+10000000.000000 7.198321 -13.896672 0.900284 0.393867 0.212089 0.000215 -124225.616056 241031.267264 -15706.686716
+10000000.000000 -47.899609 -13.369165 0.001500 0.201422 -0.738222 0.003000 28479.147792 4854.588900 1.938359
+10000000.000000 56.399776 25.138358 -0.199499 0.799184 -1.723450 0.001003 -16370.092404 -7336.608280 55.373866
+10000000.000000 -95.899896 41.234133 0.501484 0.200374 0.468241 0.002946 7250.597470 -1208.889688 -785.294861
+10000000.000000 7.299992 -91.977064 -0.198499 0.599972 0.046051 0.003005 -569.239873 7978.894006 97.278402
+10000000.000000 3.299449 16.944061 0.800347 0.597968 -0.116779 0.000442 -42366.698880 -217652.983396 -11201.933307
+10000000.000000 -87.799914 -66.266598 0.800981 0.400313 -0.533081 0.001932 6157.906463 5087.851378 -1327.797441
+10000000.000000 22.399639 -30.715604 0.000501 0.798683 0.569647 0.001002 -26558.085315 37939.599341 41.082234
+10000000.000000 -4.899937 42.011393 0.800989 0.200227 0.021950 0.001960 4491.069782 -37212.326635 -803.281798
+10000000.000000 -72.899964 -97.075197 0.201500 0.200130 -0.150294 0.003001 2578.022756 4481.116844 25.104485
+10000000.000000 17.399322 22.703518 -0.597996 0.797518 -0.594331 0.004020 -50484.501661 -61082.075135 761.303860
+10000000.000000 42.399960 96.826725 -0.099001 0.799854 -0.346678 0.001998 -2927.698881 -5722.585569 -38.830933
+10000000.000000 25.199941 -71.930406 -0.699494 0.399786 0.139433 0.001023 -4303.747777 10884.614841 458.064106
+10000000.000000 -81.899935 44.186347 -0.297991 0.200241 0.372669 0.004034 5031.129943 -1156.352096 633.332747
+10000000.000000 -22.699939 -64.107609 -0.798496 0.600222 -0.214887 0.003013 4415.952664 14761.626564 260.766572
+10000000.000000 27.399677 32.672336 -0.097999 0.798824 -0.655967 0.004004 -23665.111385 -28312.579111 79.966727
+10000000.000000 -29.699947 -76.118298 0.701997 0.600191 -0.236394 0.003990 3809.360185 8955.978764 -203.277042
+10000000.000000 15.099886 -46.967723 0.501741 0.199586 0.065147 0.003058 -8303.540300 26333.857051 -18817.075366
+10000000.000000 47.399803 -37.505105 -0.198999 0.799283 0.990047 0.002002 -14398.577401 11392.342205 38.752630
+10000000.000000 -45.799815 40.229836 0.100498 0.400672 0.459402 0.000993 13419.210689 -12013.614461 -132.095893
+10000000.000000 -68.899806 8.862473 -0.299499 0.200705 1.724901 0.001004 13986.938990 -2085.626357 83.063553
+10000000.000000 2.299973 -69.991236 0.700497 0.599904 0.017843 0.000987 -1830.269006 13991.669676 -241.421366
+10000000.000000 -4.598636 -14.138943 -0.498861 0.804897 -0.271459 0.002507 94265.374209 286291.184226 10123.503875
+10000000.000000 -89.599944 82.438976 -0.299499 0.800203 0.877873 0.001002 4074.829957 -3526.896993 49.104187
+10000000.000000 4.399814 26.939513 0.400980 0.799314 -0.122980 0.001926 -14307.408093 -89144.330062 -1480.885857
+10000000.000000 48.099602 -2.799968 0.500994 0.198554 2.400117 0.001977 -28709.211037 2420.639819 -659.798109
+10000000.000000 25.099889 53.953465 -0.297999 0.199596 -0.093460 0.004005 -8106.778342 -17335.852738 96.220323
+10000000.000000 70.099818 -2.249985 0.900496 0.199342 3.500041 0.000987 -13619.111252 248.842414 -248.661212
+10000000.000000 79.399861 18.419966 0.100999 0.799495 -3.160122 0.001998 -10129.079491 -2309.675339 -38.900433
+10000000.000000 2.278512 -3.809336 0.000997 0.520033 0.447266 0.001982 -1711692.063529 2912516.200449 -705.549207
+10000000.000000 1.299999 81.996196 -0.499499 0.599995 -0.007848 0.001004 -114.297977 -10615.190179 77.439097
+10000000.000000 68.199836 -26.496231 -0.398999 0.399403 1.007644 0.002004 -11900.390172 4696.075111 84.533234
+10000000.000000 -19.898552 12.165799 0.300978 0.205262 0.330171 0.001920 105001.508184 -63623.711288 -1594.182323
+10000000.000000 -66.899952 -88.076075 0.301500 0.200175 -0.152048 0.002999 3498.630900 4505.820772 -26.988301
+10000000.000000 -31.699819 -50.191810 0.000502 0.600656 -0.383306 0.001008 12962.296408 14053.522911 148.073826
+10000000.000000 -73.899844 -18.411074 0.001000 0.200567 -0.822087 0.002000 11302.356575 2724.896975 -1.189820
+10000000.000000 -18.699943 93.061193 -0.899495 0.600209 0.122228 0.001018 4264.041621 -7023.366973 383.613648
+10000000.000000 -97.899924 57.171896 0.800995 0.200278 0.343736 0.001983 5532.623410 -2528.679350 -310.400022
+10000000.000000 -51.799949 -93.111776 -0.098499 0.400186 -0.223467 0.003005 3700.562816 3754.628862 89.331082
+10000000.000000 -62.899866 -22.286302 0.801960 0.200493 -0.572524 0.003854 10508.370561 2810.362168 -2852.034666
+10000000.000000 -62.799773 11.259977 -0.297987 0.400824 2.519914 0.004042 16277.557511 -3075.471588 88.758975
+10000000.000000 7.299985 83.974863 0.501998 0.599946 -0.050497 0.003992 -1091.523224 -9933.994229 -158.121370
+10000000.000000 26.399684 -33.693714 -0.799488 0.798848 0.613231 0.001044 -23182.408475 29209.110355 884.663340
+10000000.000000 -68.899959 96.071815 0.301499 0.200149 0.143532 0.002998 2974.670814 -4365.701282 -38.816745
+10000000.000000 0.399995 -78.999847 -0.897996 0.799981 0.000556 0.004014 -400.045235 11111.901821 271.849153
+10000000.000000 -83.599908 -44.763586 -0.698998 0.800336 -1.527090 0.002006 6717.957773 3679.284753 113.858712
+10000000.000000 95.299956 -90.686777 0.801499 0.599841 0.626504 0.002996 -3175.086471 2596.879035 -74.766099
+10000000.000000 -22.899959 80.028617 -0.297999 0.200147 0.057015 0.004004 2937.303609 -9695.682554 76.649359
+10000000.000000 -92.899937 43.216233 -0.599497 0.200222 0.432393 0.001011 3970.764789 -3205.671821 216.918826
+10000000.000000 76.199881 34.565662 -0.799497 0.399568 -0.868761 0.001010 -8655.912886 -3760.248295 205.167441
+10000000.000000 -46.899667 -14.335572 0.000500 0.201209 -0.670910 0.001000 24095.704801 10460.043049 2.062004
+10000000.000000 43.299579 14.139837 -0.199513 0.598464 -1.720584 0.000951 -30980.669824 -11179.766286 -1049.230870
+10000000.000000 -11.699979 -80.044859 0.701498 0.600078 -0.089486 0.002993 1534.144834 10290.709284 -131.827109
+10000000.000000 6.099949 75.991983 -0.798001 0.199813 -0.016223 0.003994 -3878.770909 -8048.149685 -193.237771
+10000000.000000 9.099990 -95.990517 0.600498 0.199964 0.019142 0.000994 -724.670373 7843.925973 -125.905453
+10000000.000000 -57.899727 4.933317 -0.599495 0.200993 3.866606 0.001016 19897.738513 -1371.796250 315.673480
+10000000.000000 -26.899880 -52.051685 -0.398995 0.200434 -0.102981 0.002017 8637.422654 17343.779034 354.008750
+10000000.000000 51.199956 82.877014 0.900495 0.399841 -0.246128 0.000981 -3204.249921 -6885.224472 -371.195504
+10000000.000000 36.099895 -59.939837 0.400998 0.199618 0.120593 0.001993 -7649.614254 11860.410595 -141.660697
+10000000.000000 99.099899 18.478931 0.300500 0.199633 -1.042165 0.000999 -7333.833533 -1179.404489 -29.503887
+10000000.000000 46.199668 -19.539859 -0.897987 0.398791 0.920511 0.004047 -24236.032485 10101.188099 895.584370
+10000000.000000 76.399943 77.610180 0.602000 0.799793 -0.779765 0.003999 -4163.357443 -5553.647418 -13.433235
+10000000.000000 -78.899930 66.119633 -0.598498 0.200255 0.239162 0.003008 5103.812465 -4653.494280 152.905281
+10000000.000000 46.299765 -32.581652 0.001000 0.599146 0.836967 0.001999 -17119.855904 11985.691934 -20.196340
+10000000.000000 94.299954 -96.709240 -0.499497 0.599833 0.581583 0.001010 -3303.554211 2805.380415 192.870664
+10000000.000000 64.099952 87.927206 -0.298499 0.199824 -0.145696 0.003004 -3527.951431 -4815.874536 85.869921
+10000000.000000 56.099718 -11.533282 0.200498 0.198976 0.933518 0.000994 -20487.607325 3646.845155 -125.136479
+10000000.000000 -34.699578 24.437280 -0.599466 0.601537 0.874189 0.001120 30784.250422 -16814.117931 2156.552998
+10000000.000000 -32.599174 7.399892 -0.797980 0.802988 8.799550 0.004074 58633.086349 -12403.904692 1455.501836
+10000000.000000 -80.899873 23.352137 0.202000 0.200464 0.704212 0.003998 9293.063315 -2755.935476 -35.611018
+10000000.000000 -0.900006 93.000962 0.300498 0.199979 0.001739 0.000992 -446.877717 -8238.552313 -173.759977
+10000000.000000 56.099709 5.066635 0.400497 0.198940 -1.866779 0.000988 -21224.492468 -2108.464809 -231.263706
+10000000.000000 19.399706 -33.775937 0.201996 0.798929 0.448998 0.003984 -21632.578774 38666.472357 -318.222881
+10000000.000000 -42.899699 -27.159070 -0.397997 0.201095 -0.317830 0.004011 21879.231229 13816.299210 218.396127
+10000000.000000 84.199873 20.199969 0.002000 0.399537 -1.600113 0.004000 -9259.304524 -2224.535810 -1.021057
+10000000.000000 -28.799841 47.123146 0.000500 0.400577 0.245867 0.001000 11499.318306 -18857.629258 -2.764141
+10000000.000000 40.099428 2.999995 0.100998 0.197924 7.999954 0.001993 -41241.734841 -2608.972918 -141.298736
+10000000.000000 2.298635 10.938269 -0.498672 0.594930 -0.135202 0.003193 -107846.701824 -521094.909041 23845.948872
+10000000.000000 37.399951 85.827805 0.400499 0.799822 -0.344557 0.000997 -3576.533333 -7430.551258 -68.373180
+10000000.000000 -94.699951 -81.351809 0.800499 0.600178 -0.703547 0.000997 3549.019259 3145.888193 -65.799171
+10000000.000000 -3.699799 26.044852 0.000501 0.600723 0.087572 0.001002 13935.265075 -94787.419491 49.871955
+10000000.000000 59.199963 -96.878282 -0.799498 0.399865 0.243548 0.001008 -2691.931248 4987.585265 163.176286
+10000000.000000 -20.799950 71.058993 -0.199499 0.400180 0.117719 0.001003 3592.528906 -11822.556485 56.027717
+10000000.000000 49.399613 -0.900014 -0.698993 0.798593 -9.800036 0.002027 -28088.864970 14.389642 722.712822
+10000000.000000 59.199924 75.844663 0.600494 0.399725 -0.310795 0.000979 -5527.894178 -5354.446489 -444.412730
+10000000.000000 42.199587 13.399881 -0.898969 0.398499 -1.200432 0.002113 -29886.797019 -8550.686348 2336.582770
+10000000.000000 -30.599928 -85.145798 -0.898496 0.800264 -0.291460 0.003015 5395.396858 5908.778741 299.128257
+10000000.000000 53.099835 40.870608 -0.799496 0.199399 -0.258984 0.001015 -12042.953196 -8923.779671 290.372331
+10000000.000000 28.099924 -62.955369 0.700493 0.199724 0.089566 0.000977 -5541.798665 13518.808574 -453.803694
+10000000.000000 90.299893 -21.826063 -0.897997 0.599608 2.347912 0.004018 -7896.355330 701.222147 1244.006916
+10000000.000000 -73.899893 -46.160805 -0.099500 0.200387 -0.321503 0.001000 7733.436593 4722.567553 9.767562
+10000000.000000 79.099966 83.905883 0.400982 0.199876 -0.188348 0.001937 -2545.253143 -5014.124580 -1160.405949
+10000000.000000 -44.799553 9.999964 -0.798991 0.401610 17.999826 0.002032 31005.067759 -6020.495459 696.461896
+10000000.000000 50.299957 -84.823459 0.900495 0.599843 0.353199 0.000981 -3170.182519 5140.863017 -378.722432
+10000000.000000 -95.599939 73.525988 0.500999 0.800221 1.051913 0.001995 4452.023022 -2849.581372 -114.973423
+10000000.000000 -3.899847 29.012730 0.400477 0.200555 0.023719 0.000917 11005.097997 -77403.421489 -1624.640433
+10000000.000000 69.099940 -98.930244 -0.499473 0.199783 0.139611 0.001103 -4320.721817 4438.974295 2217.915852
+10000000.000000 20.199959 -74.946530 0.801995 0.399850 0.107163 0.003983 -2985.225727 9827.094480 -343.090066
+10000000.000000 44.299962 -89.853249 0.501499 0.599862 0.293639 0.002996 -2767.681152 6114.956605 -77.067736
+10000000.000000 -11.799941 96.024887 0.300464 0.400211 0.049591 0.000871 4067.722826 -8167.319456 -2375.716089
+10000000.000000 -2.599960 -43.027409 0.001501 0.800142 -0.054003 0.003004 2722.635196 36247.457803 94.009077
+10000000.000000 -96.699897 -17.818732 -0.898998 0.600376 -3.637436 0.002008 7405.544079 1240.469923 110.741904
+10000000.000000 48.199907 59.839877 -0.199500 0.399661 -0.320448 0.001002 -6801.163646 -8942.822127 34.672644
+10000000.000000 88.099907 44.804404 -0.899499 0.199662 -0.391258 0.001005 -6797.546676 -2931.861841 103.595011
+10000000.000000 -52.899838 -40.132365 -0.699495 0.200589 -0.264508 0.001020 11759.810001 9968.527887 435.364884
+10000000.000000 -84.599881 -11.666666 -0.199495 0.800425 -11.333322 0.001020 8233.522793 830.476325 495.645973
+10000000.000000 -45.599795 -37.497132 0.200999 0.800743 -0.993992 0.001996 14809.467174 12120.445391 -88.729063
+10000000.000000 -45.799968 96.095747 0.200497 0.400118 0.191353 0.000990 2348.403713 -6271.883217 -191.174963
+10000000.000000 -98.899885 6.299996 -0.297991 0.200416 6.599986 0.004033 8283.467828 -343.167368 646.565091
+10000000.000000 -20.699891 52.120880 0.500497 0.600397 0.241311 0.000989 7881.995674 -19960.048190 -228.619049
+10000000.000000 -8.799452 -23.076860 -0.198988 0.401985 -0.151424 0.002044 39311.239556 102111.449497 886.346470
+10000000.000000 -97.699936 -62.474156 0.402000 0.600233 -0.948252 0.003998 4658.578159 2716.577162 -30.823281
+10000000.000000 83.399941 85.613899 -0.297999 0.799786 -0.772292 0.004002 -4291.931837 -3949.134377 41.431567
+10000000.000000 67.199974 97.863200 0.201500 0.399907 -0.273707 0.003001 -1877.596275 -4749.558146 27.959426
+10000000.000000 1.399985 40.989700 -0.399493 0.799944 -0.021490 0.001025 -1295.660420 -39558.587565 497.823615
+10000000.000000 37.299969 -95.884287 0.200500 0.599888 0.231570 0.000999 -2243.264287 6395.281126 -11.679754
+10000000.000000 36.099447 14.759769 -0.099499 0.197988 -0.480838 0.001005 -40310.061042 -16654.211271 100.759673
+10000000.000000 -19.899482 26.076259 -0.398986 0.201882 0.151429 0.002052 37650.983669 -48420.114832 1030.915133
+10000000.000000 -82.799881 45.368814 0.001991 0.400427 0.737504 0.003968 8308.256893 -5517.716611 -601.533055
+10000000.000000 81.299901 -40.407266 -0.099499 0.599639 1.185551 0.001002 -7229.498633 3712.358794 49.478586
+10000000.000000 -60.599828 32.762410 0.002000 0.800626 1.524672 0.004001 12454.987601 -6681.520623 13.070674
+10000000.000000 -76.699913 -55.419938 -0.599499 0.600315 -0.839776 0.001004 6287.518912 4502.839958 82.494546
+10000000.000000 39.299917 -66.825235 -0.298499 0.599698 0.349754 0.003004 -6057.855390 9997.001758 76.525430
+10000000.000000 -85.599877 -19.023501 -0.297999 0.800447 -4.046956 0.004004 8916.907763 2088.858999 79.529809
+10000000.000000 -15.597260 -7.913035 0.000499 0.809919 -1.823941 0.000997 195684.077657 97509.135216 -63.619190
+10000000.000000 -43.899908 63.069712 0.201999 0.200334 0.139211 0.003998 6669.917944 -9449.138107 -37.291439
+10000000.000000 29.399960 80.856674 0.500499 0.799855 -0.286841 0.000996 -2920.803458 -8413.386978 -82.310276
+10000000.000000 -94.799920 50.379963 -0.899498 0.400291 0.759864 0.001007 5830.556123 -2745.223926 142.241417
+10000000.000000 -81.799869 -15.171404 -0.199499 0.400475 -2.342767 0.001002 9429.624758 1926.886119 45.133667
+10000000.000000 66.099952 -89.926607 -0.897998 0.199824 0.146885 0.004006 -3528.221599 4357.825046 119.736638
+10000000.000000 36.199573 -22.686687 -0.198498 0.398447 0.627064 0.003009 -31125.495796 19415.701664 173.930038
+10000000.000000 -4.699998 92.016191 -0.899496 0.600007 0.032198 0.001016 150.569728 -8209.742910 315.511631
+10000000.000000 31.099603 -27.888933 -0.399495 0.198557 0.222711 0.001019 -28920.226101 25589.775071 388.924597
+10000000.000000 -8.899993 90.009896 0.401993 0.200024 0.019621 0.003975 480.588211 -7542.450937 -512.841542
+10000000.000000 -16.699949 65.078263 0.001500 0.600186 0.156202 0.003000 3692.903030 -14429.586279 -5.216064
+10000000.000000 33.199711 33.805585 0.000500 0.398947 -0.389315 0.001000 -21126.109741 -21542.728558 -10.020990
+10000000.000000 20.099252 -20.903981 -0.898963 0.197279 0.193313 0.002133 -54532.715238 56604.953734 2657.414575
+10000000.000000 90.299881 -25.999992 0.800498 0.599575 -53.999959 0.000982 -7707.888960 2483.342226 -1273.976896
+10000000.000000 15.099886 -46.967723 -0.099244 0.199586 0.065147 0.001929 -8302.492415 26335.184902 18551.859012
+10000000.000000 -13.599035 19.293415 0.801941 0.803493 0.584655 0.003785 68903.309360 -97029.285455 -4315.925890
+10000000.000000 -44.899935 -76.059111 -0.098000 0.200234 -0.118061 0.004001 4680.561084 7208.550717 23.245825
+10000000.000000 -45.899949 83.055328 -0.298999 0.200185 0.110505 0.002002 3692.171838 -6769.176588 47.426987
+10000000.000000 12.399984 -81.941325 0.800497 0.799942 0.117576 0.000990 -1176.682293 10048.861319 -215.798123
+10000000.000000 12.096735 -8.864233 -0.598336 0.188110 0.275497 0.003596 -238726.541476 175453.462847 11916.083697
+10000000.000000 -60.599765 -14.033288 0.600997 0.800853 -4.066499 0.001990 16975.407435 3526.366355 -200.193771
+10000000.000000 42.199648 22.634571 0.700485 0.398718 -0.731201 0.000946 -25688.081002 -15151.417019 -1015.659064
diff --git a/course/semester2/pprog/assignment1/single-thread/10_100.dat b/course/semester2/pprog/assignment1/single-thread/10_100.dat
new file mode 100644 (file)
index 0000000..6bf8a13
--- /dev/null
@@ -0,0 +1,11 @@
+10
+100000000000.000000 -0.000023 -0.000026 -0.000002 -0.000008 -0.000010 -0.000001 -111472.039877 -217943.316789 -12937.927365
+10000000.000000 -2.998647 73.368040 0.014978 0.800483 0.070567 0.002991 645.698409 -12273.771731 -24.646775
+10000000.000000 -20.980838 -41.115364 0.214824 0.407474 -0.216223 0.002929 14257.862036 27904.219054 -145.976697
+10000000.000000 -22.980784 42.669420 -0.289778 0.807399 0.527785 0.002087 13506.162283 -25002.411298 169.978985
+10000000.000000 -57.996771 100.206717 -0.594967 0.401271 0.240280 0.001013 2499.529651 -4312.212549 25.609174
+10000000.000000 -7.771585 -14.553591 -0.875835 0.882563 -0.858970 0.008361 116021.360810 215399.812668 13008.020371
+10000000.000000 69.996192 90.833545 -0.494972 0.598481 -0.434295 0.001011 -3100.658450 -4022.969423 21.914842
+10000000.000000 -90.995393 -282.997471 0.804961 0.601204 -56.399128 0.000990 237.775964 731.919199 -2.103043
+10000000.000000 27.962519 -26.757150 0.219694 0.784829 0.656598 0.003877 -32169.413553 30859.486636 -252.970518
+10000000.000000 1.999854 77.024652 -0.794832 0.599904 0.002124 0.001067 -426.277275 -11340.755765 138.101026
diff --git a/course/semester2/pprog/assignment1/single-thread/10_1000.dat b/course/semester2/pprog/assignment1/single-thread/10_1000.dat
new file mode 100644 (file)
index 0000000..205fad6
--- /dev/null
@@ -0,0 +1,11 @@
+10
+100000000000.000000 -0.000236 -0.001572 -0.000078 0.000005 -0.000042 -0.000002 45153.541255 -5775.629646 129.901189
+10000000.000000 32.896068 75.410773 0.127990 0.790533 0.023094 0.001795 -4321.683197 -9000.075667 -92.748662
+10000000.000000 -1.649662 -47.896843 0.329446 0.441610 -0.084498 0.002125 1020.402374 29048.502113 -199.856918
+10000000.000000 13.955726 64.011506 -0.183108 0.821341 0.429350 0.002552 -3280.225400 -15190.044172 43.212593
+10000000.000000 -39.714500 110.570840 -0.546883 0.410616 0.220189 0.001122 1638.996844 -4552.996144 22.524366
+10000000.000000 32.338817 -41.485606 -0.056686 0.850816 -0.487863 0.020402 -14854.471620 19066.505002 26.574436
+10000000.000000 96.583303 70.921360 -0.447379 0.582696 -0.449710 0.001101 -3751.717623 -2754.110349 17.384928
+10000000.000000 -63.938729 -2820.944963 0.849472 0.601265 -56.398769 0.000989 0.190825 8.404012 -0.002534
+10000000.000000 60.060513 4.395539 0.371269 0.655162 0.703281 0.002984 -18378.800625 -1333.664458 -113.691045
+10000000.000000 28.833323 75.968009 -0.715034 0.591121 -0.047881 0.002686 -3226.232833 -9516.890691 166.701647
diff --git a/course/semester2/pprog/assignment1/single-thread/500_100.dat b/course/semester2/pprog/assignment1/single-thread/500_100.dat
new file mode 100644 (file)
index 0000000..9b08442
--- /dev/null
@@ -0,0 +1,501 @@
+500
+100000000000.000000 0.000835 -0.000249 -0.000015 0.000552 0.000056 -0.000004 34958493.779452 69352833.822326 108782.626150
+10000000.000000 -2.997244 73.368073 0.014717 0.801076 0.070613 0.002887 2105.729692 -11891.368382 -232.530770
+10000000.000000 -20.977772 -41.119463 0.218151 0.408634 -0.218184 0.004920 14706.185065 22342.722724 8915.688409
+10000000.000000 -22.980681 42.669397 -0.289740 0.807433 0.527770 0.002101 13546.071876 -24979.581963 193.864383
+10000000.000000 -57.996691 100.205717 -0.594855 0.401313 0.239875 0.001059 2668.601939 -5179.308010 122.081417
+10000000.000000 -7.771541 -14.553595 -0.875710 0.882580 -0.859004 0.008414 116116.869727 215115.328505 13115.639983
+10000000.000000 69.997180 90.833646 -0.494502 0.598831 -0.434297 0.001179 -2646.678695 -4231.466109 259.630108
+10000000.000000 -90.995227 -282.997279 0.804850 0.601246 -56.399063 0.000963 250.874946 769.814301 -2.231056
+10000000.000000 27.960799 -26.758039 0.219367 0.784202 0.656238 0.003747 -33074.395192 30079.385191 -530.956911
+10000000.000000 1.999554 77.023801 -0.794575 0.599799 0.001797 0.001161 -535.345462 -11961.328673 280.679103
+10000000.000000 -33.992580 65.524554 0.319915 0.202918 0.102178 0.003966 5742.497665 -11072.452426 -69.323784
+10000000.000000 15.963707 -28.413020 -0.678148 0.185441 0.131005 0.004732 -30265.603064 54755.437900 1459.885480
+10000000.000000 52.996655 -86.832546 0.504037 0.398717 0.235130 0.000524 -2347.119485 6595.452586 -1652.028973
+10000000.000000 -14.980601 38.375118 -0.025035 0.207588 0.065979 0.030158 14632.612370 -36699.330014 89827.992660
+10000000.000000 40.994542 -75.067178 0.404928 0.797805 0.388649 0.000971 -4584.750584 8334.059433 -57.914296
+10000000.000000 -41.980776 38.840200 -0.190405 0.607397 0.764529 0.001789 13098.103989 -15207.328441 -998.538895
+10000000.000000 -56.996303 95.908510 0.504778 0.601449 0.380436 0.000908 2822.908518 -5182.340848 -214.105702
+10000000.000000 7.992437 -41.667899 0.204768 0.396866 0.075487 0.000907 -7101.890468 36523.640579 -192.528241
+10000000.000000 97.994730 -66.982209 0.010003 0.597906 0.804270 0.002001 -4233.811599 2821.038874 0.172328
+10000000.000000 17.982267 -39.157857 0.514336 0.392834 0.176624 0.002738 -15185.828178 32851.857011 -517.577669
+10000000.000000 -93.993287 -55.755727 0.904899 0.202649 -0.350440 0.000961 5268.691306 2885.927700 -76.427776
+10000000.000000 23.892415 11.174495 0.815615 0.157096 -0.375599 0.002262 -87596.403292 -40318.687122 -3485.731729
+10000000.000000 69.985049 15.840624 0.304472 0.794024 -2.032702 0.000788 -12462.517867 -3586.599516 -47.192492
+10000000.000000 -47.974956 -27.335497 -0.479707 0.409838 -0.864561 0.004116 19193.101495 10722.897669 229.925726
+10000000.000000 -42.997690 -97.950008 0.315061 0.800958 -0.388365 0.003032 2094.756678 6636.880673 96.433910
+10000000.000000 -30.964870 30.567863 -0.191095 0.813569 1.107319 0.001701 24858.843460 -25578.290439 -21.658960
+10000000.000000 -42.966112 20.429709 -0.185005 0.213352 0.482935 0.003033 26046.430519 -12573.810154 234.739823
+10000000.000000 -66.991092 -55.596600 0.504885 0.403506 -0.517894 0.000954 6880.749015 5826.042381 -93.497534
+10000000.000000 -6.997076 -61.108673 0.504790 0.201130 -0.017326 0.000917 2090.585510 17823.189876 -168.333815
+10000000.000000 -64.994086 -75.803872 -0.594956 0.402338 -0.359393 0.001016 4653.832005 5667.065530 25.904745
+10000000.000000 96.993213 -49.868910 -0.679899 0.597299 1.026945 0.004040 -5486.401138 2856.868378 80.273395
+10000000.000000 -78.993432 56.450336 0.314769 0.202373 0.289414 0.002874 4407.515466 -1355.784566 -385.569044
+10000000.000000 -47.986373 45.098887 -0.779409 0.205169 0.216735 0.004299 8299.739637 -13181.816479 1258.387250
+10000000.000000 1.004244 31.299589 -0.891981 0.800966 0.042853 0.002157 -2309.043060 -68453.972139 2126.467775
+10000000.000000 -26.989424 55.053794 -0.694665 0.404136 0.206754 0.001132 7949.556954 -16334.804659 259.228082
+10000000.000000 1.000007 -63.979375 0.804678 0.199980 0.008172 0.000873 -176.920348 16364.633878 -251.285295
+10000000.000000 78.991972 -49.772180 -0.394874 0.596783 0.846628 0.001046 -6564.862338 4178.861602 65.534140
+10000000.000000 -75.986588 -26.331347 -0.289901 0.405250 -3.465691 0.002043 9604.280272 3051.213275 79.498384
+10000000.000000 73.983702 -9.599844 0.304917 0.193608 -2.919705 0.000950 -12231.772123 2017.157478 -239.790899
+10000000.000000 1.001258 -69.982311 0.614864 0.200387 0.007004 0.002941 260.813313 14000.497852 -139.639229
+10000000.000000 59.994200 75.799666 -0.679139 0.597694 -0.441638 0.004386 -4668.388407 -6356.322103 1110.713264
+10000000.000000 -15.972399 -34.676749 0.009981 0.610621 -0.325308 0.001991 19352.942160 41047.460971 -25.837156
+10000000.000000 33.996674 -87.945726 0.704891 0.598666 0.212677 0.000957 -2772.054713 7333.313495 -83.211995
+10000000.000000 54.973568 -11.393001 0.005011 0.189525 0.722655 0.001002 -20869.205174 4586.557792 1.731183
+10000000.000000 9.124100 -19.670388 -0.421907 0.364877 -4.074520 0.019314 -61118.568591 130927.086872 2872.141319
+10000000.000000 96.993189 47.107568 -0.694909 0.797272 -1.379147 0.001034 -5622.856604 -2552.302837 56.396823
+10000000.000000 64.981975 -9.583639 -0.878786 0.392564 1.484076 0.004352 -15658.595029 2382.789884 291.387747
+10000000.000000 -91.995144 -76.900058 -0.779834 0.601924 -0.779210 0.004059 3839.388586 3277.286599 88.137441
+10000000.000000 7.962254 23.367377 -0.293160 0.384334 -0.152321 0.001732 -35600.588170 -103474.461398 1474.311579
+10000000.000000 -46.994473 -81.866676 0.014997 0.602167 -0.371687 0.002999 4201.409456 6719.188355 -4.232530
+10000000.000000 4.997353 49.846037 0.020022 0.398873 -0.037431 0.004007 -2728.219760 -26740.514341 2.082040
+10000000.000000 51.987347 -45.988250 0.005049 0.594930 0.604626 0.001011 -9673.404829 10292.328974 -617.633500
+10000000.000000 -38.986576 -50.783608 0.919571 0.205291 -0.153486 0.003830 10429.366106 13167.025808 -343.937713
+10000000.000000 -28.995143 76.382711 0.404902 0.201906 0.074183 0.000961 3719.965394 -9529.789377 -77.960782
+10000000.000000 64.996717 -97.341205 0.004970 0.198673 0.132897 0.000982 -2806.900442 4648.485064 -70.671381
+10000000.000000 5.929554 17.490624 -0.881979 0.171175 -0.147376 0.006230 -63295.038926 -184717.598008 10805.250006
+10000000.000000 -7.999626 -88.534746 0.804241 0.800121 -0.104852 0.000701 78.230028 8461.658371 -590.187982
+10000000.000000 -53.996358 91.893494 0.004994 0.601426 0.377416 0.000996 2790.798580 -5203.558454 -19.867395
+10000000.000000 60.976651 -16.998707 -0.694631 0.190960 -3.999037 0.001145 -16518.981503 4006.892714 312.193917
+10000000.000000 -97.994610 -72.390866 -0.389969 0.202119 -0.277470 0.002014 4185.293628 2908.478643 40.745703
+10000000.000000 48.966196 11.790411 -0.494446 0.186627 -0.643725 0.001219 -26550.064620 -7049.951670 477.761887
+10000000.000000 39.946110 2.803450 -0.294564 0.178718 1.560707 0.001175 -41978.847898 -2430.775180 402.199023
+10000000.000000 4.999304 97.949659 0.009993 0.199714 -0.011937 0.001997 -634.908664 -7559.169036 -9.471556
+10000000.000000 -50.997197 -98.521416 0.104819 0.201077 -0.102484 0.000918 1943.865376 7260.122137 -237.063195
+10000000.000000 -24.991314 -62.358878 0.014830 0.603390 -0.268170 0.002925 6473.384390 14719.795501 -201.972620
+10000000.000000 28.906156 -6.059395 -0.388626 0.362623 0.993157 0.002541 -75488.159473 15768.021122 1063.169448
+10000000.000000 -90.990837 51.043142 -0.594548 0.803417 1.807832 0.001118 5963.106939 -2613.570489 45.125358
+10000000.000000 -95.992376 35.333039 0.803672 0.202540 6.467561 -0.001527 -12711.215354 -10979.732209 -182496.627159
+10000000.000000 10.370158 -2.736723 0.113347 -0.056170 0.496874 0.001266 -559506.299390 149019.678446 -6159.737366
+10000000.000000 -62.986333 39.603316 0.519831 0.405378 0.719100 0.003934 10491.614229 -6463.590333 -126.866157
+10000000.000000 79.994371 71.996904 0.704794 0.797751 -0.801226 0.000921 -4609.981343 -2451.478457 -146.823620
+10000000.000000 13.718209 7.118765 0.784823 0.684660 -0.816379 -0.006820 -246861.525105 -129216.760928 -14313.039020
+10000000.000000 -63.983093 29.161052 0.519817 0.606604 2.230943 0.003925 12623.398617 -5812.092979 -177.801342
+10000000.000000 -32.980203 40.826622 0.014998 0.207814 0.160709 0.002993 15332.359062 -18655.732771 -17.458549
+10000000.000000 -45.966690 19.717931 0.404602 0.413035 1.741430 0.000840 25131.759518 -10022.276218 -384.143040
+10000000.000000 46.961967 8.989093 0.019387 0.385037 -1.204061 0.003779 -28578.151380 -6550.168094 -100.796944
+10000000.000000 -42.997237 -95.015157 0.904522 0.801109 -0.401749 0.000823 2293.435308 5291.750948 -298.694099
+10000000.000000 -23.992005 -58.411033 0.009865 0.203172 -0.078210 0.001957 6416.098710 16479.919610 -25.948886
+10000000.000000 49.984420 38.706867 -0.594729 0.793757 -0.861262 0.001106 -12919.763376 -10118.424396 197.097305
+10000000.000000 48.990217 -57.394826 -0.479870 0.396100 0.323355 0.004051 -7947.384899 9295.430184 97.712747
+10000000.000000 89.991293 -31.379078 -0.894732 0.196527 0.524807 0.001100 -7089.525188 2476.095738 188.937332
+10000000.000000 -57.980253 -28.624473 0.320641 0.607983 -1.923424 0.004349 14087.805085 6266.769468 -42.777314
+10000000.000000 0.000906 -79.188614 -0.095046 0.800315 -0.034993 0.000982 363.592970 11029.910934 -36.992059
+10000000.000000 22.828838 -1.029654 0.302562 0.332808 -1.408044 0.000056 -127885.978206 5131.598696 -1740.340780
+10000000.000000 -51.975172 23.344135 -0.889106 0.409731 1.266948 0.002320 18760.142579 -8179.989364 432.130301
+10000000.000000 -74.987720 35.746569 -0.184910 0.804760 3.948449 0.003033 8907.888659 -3992.468166 38.441733
+10000000.000000 -0.999068 61.075534 -0.594715 0.400314 0.010627 0.001115 296.189061 -18120.872847 243.266032
+10000000.000000 57.996390 -92.238075 0.109917 0.598555 0.353659 0.001965 -2982.511419 5069.674358 -77.429273
+10000000.000000 32.999272 90.640399 0.214665 0.199555 -0.073634 0.002899 -1707.314260 -7177.155198 -72.365229
+10000000.000000 41.997463 97.810318 -0.489887 0.598967 -0.239460 0.002042 -2222.464432 -6095.851205 70.900151
+10000000.000000 -84.992643 51.716260 -0.285086 0.202896 0.342468 0.002967 5748.122245 -3432.348171 -29.470907
+10000000.000000 -6.998795 92.468091 -0.894153 0.800390 0.091582 0.001341 265.762406 -8196.296635 603.363933
+10000000.000000 -34.990016 -57.615308 -0.784634 0.203932 -0.119865 0.003144 7727.618376 12945.623008 283.151695
+10000000.000000 -74.997125 91.827963 0.101142 0.201730 0.164387 -0.001415 5936.592358 -1954.011552 -1786.683233
+10000000.000000 90.993757 62.589439 -0.389971 0.197521 -0.282945 0.002012 -4993.402315 -3321.621333 24.501401
+10000000.000000 79.989176 34.859892 -0.090099 0.195731 -0.428972 0.001965 -8441.805678 -3730.484537 -48.067665
+10000000.000000 33.988607 -52.796723 -0.694673 0.395445 0.244168 0.001129 -9351.672930 14058.678503 254.205382
+10000000.000000 22.997131 -75.997244 0.610073 0.798721 0.203731 0.002050 -3277.683791 12846.529829 206.228520
+10000000.000000 62.996426 87.370979 0.814710 0.798636 -0.527135 0.002844 -2235.495688 -5314.515882 -742.612780
+10000000.000000 -48.997818 -95.519134 -0.094771 0.200746 -0.102332 0.001078 784.455067 6584.475221 102.460786
+10000000.000000 60.980325 -19.848527 -0.294892 0.792155 1.631811 0.001040 -15859.982268 5881.191317 -2.937342
+10000000.000000 -0.999409 75.063627 0.019055 0.400254 0.009446 0.003626 552.222695 -13372.407872 -644.182710
+10000000.000000 -58.995495 91.825446 -0.479794 0.801778 0.563912 0.004078 3537.513939 -4733.624662 127.753868
+10000000.000000 63.989028 50.782039 0.604788 0.195628 -0.244834 0.000914 -8910.983948 -4940.629199 -194.371241
+10000000.000000 50.983767 -39.767531 -0.579739 0.193635 0.248991 0.004097 -12797.254193 9641.927949 186.717338
+10000000.000000 -23.987034 -50.310228 -0.284827 0.804948 -0.457479 0.003066 8725.253175 18726.544192 118.683792
+10000000.000000 -17.924327 20.868935 0.901178 0.229722 0.157629 -0.000516 58010.051277 -66410.013916 -3044.523884
+10000000.000000 15.981861 36.924556 0.404397 0.592567 -0.224613 0.000761 -16339.243440 -38018.874078 -476.725663
+10000000.000000 82.995505 -93.495119 0.014840 0.598228 0.501876 0.002945 -3441.441400 3476.489611 -58.873125
+10000000.000000 -49.976910 28.321787 0.014968 0.409060 0.861979 0.002985 17642.808017 -10120.911870 -52.366743
+10000000.000000 101.992751 36.286078 0.914894 0.797123 -1.743299 0.002959 -5786.869529 -1929.520704 -74.082343
+10000000.000000 -88.991718 -45.088980 0.504884 0.203282 -0.416981 0.000954 6585.156398 3434.215775 -86.588050
+10000000.000000 52.987449 -48.987618 0.319766 0.395032 0.404888 0.003908 -9928.826144 9866.195525 -235.597644
+10000000.000000 99.991547 -31.699925 0.804825 0.396650 1.060530 0.000932 -6730.644322 1975.868422 -132.621334
+10000000.000000 -57.986147 -42.990989 0.614579 0.405467 -0.596398 0.002834 10806.326274 7420.641230 -334.005133
+10000000.000000 69.983532 19.994568 -0.294561 0.193486 -0.602204 0.001181 -12407.617984 -4122.054277 132.589760
+10000000.000000 78.996676 -93.165998 -0.594576 0.198661 0.167664 0.001147 -2839.341501 3604.822104 110.727201
+10000000.000000 -39.994644 78.306172 0.219947 0.802069 0.459332 0.003972 3971.423946 -7718.089288 -41.294758
+10000000.000000 22.995400 69.914336 -0.284930 0.798125 -0.220099 0.003028 -4063.279001 -11893.000140 54.018980
+10000000.000000 57.994552 78.324786 -0.779456 0.797863 -0.536700 0.004203 -4134.467522 -6678.624488 356.571246
+10000000.000000 81.992334 -57.110429 -0.279432 0.596951 0.778744 0.004217 -6141.728543 3266.768678 391.798834
+10000000.000000 81.994027 81.068783 -0.578910 0.397696 -0.387000 0.004349 -4326.229391 -3252.863981 332.756219
+10000000.000000 39.987241 -50.218829 -0.579771 0.194922 0.159436 0.004089 -10297.617727 12835.263648 172.680255
+10000000.000000 -25.999125 -81.324373 0.603333 0.200340 -0.063120 0.000338 659.620867 7116.257288 -1330.217542
+10000000.000000 75.995155 95.056011 -0.694482 0.798115 -0.589824 0.001170 -3622.569072 -4154.384719 191.210098
+10000000.000000 -88.989024 -19.498647 -0.194909 0.204278 -1.499421 0.001026 8262.818991 1495.594581 19.640757
+10000000.000000 -16.961001 30.942136 0.009833 0.814821 0.576902 0.001950 25991.982053 -47145.470601 -31.287080
+10000000.000000 95.991287 -26.122201 -0.689741 0.396530 1.176124 0.002108 -7201.695353 2435.184281 288.508495
+10000000.000000 -79.991009 57.693568 0.105107 0.603829 0.937711 0.001104 8448.464302 -4702.217316 639.166491
+10000000.000000 3.987636 19.790239 -0.884087 0.792331 -0.082646 0.005360 -31788.155547 -161491.898566 8404.892137
+10000000.000000 71.996174 97.579603 0.814355 0.398447 -0.285273 0.002779 -3291.010727 -4713.111372 -294.625140
+10000000.000000 0.999304 -39.948092 -0.478986 0.199643 0.020532 0.004407 -1158.776204 40978.388607 848.795999
+10000000.000000 -76.992828 62.271660 0.804348 0.202847 0.252935 0.000735 5748.447284 -5691.556770 -573.839435
+10000000.000000 73.990377 45.503473 -0.894814 0.796176 -1.100499 0.001071 -7727.888131 -4631.688625 129.769334
+10000000.000000 -68.986228 -33.634551 0.005004 0.605412 -1.725763 0.001001 10579.492237 4914.411747 0.105633
+10000000.000000 72.994932 91.058486 0.204559 0.798013 -0.589324 0.000840 -3835.130623 -4051.432720 -240.316456
+10000000.000000 22.994267 -60.754283 0.502069 0.797421 0.252907 -0.000068 -6058.275968 14533.857149 -951.701129
+10000000.000000 22.997835 92.753697 -0.184972 0.199131 -0.051169 0.003011 -1801.547689 -7706.975517 20.024689
+10000000.000000 25.977814 -37.195324 0.304650 0.591052 0.367760 0.000863 -18846.275661 27056.001514 -266.967812
+10000000.000000 -69.992677 56.284655 0.909573 0.202890 0.255707 0.001825 5730.561081 -4925.810927 -382.795208
+10000000.000000 12.990502 46.709802 0.114925 0.196178 -0.064871 0.002971 -8007.181264 -27599.106750 -53.402818
+10000000.000000 -33.940735 -17.268460 -0.593977 0.422834 -2.049373 0.001397 41179.246746 20626.723049 736.255345
+10000000.000000 -38.989069 -57.686992 -0.484852 0.204308 -0.134493 0.003059 8489.603125 11786.650730 116.096314
+10000000.000000 95.992047 -33.049203 0.514899 0.396841 0.990803 0.002960 -6392.001942 2505.850822 -80.198792
+10000000.000000 65.984971 29.104708 0.308940 0.794022 -1.380367 0.001717 -12052.331761 -5149.053580 -131.544061
+10000000.000000 19.958222 -27.261109 -0.189644 0.183295 0.159530 0.002141 -34410.308639 47201.584018 282.991914
+10000000.000000 72.985836 -70.996230 0.814638 0.195215 -14.398120 0.002861 -4960.068777 4666.834801 -86.606474
+10000000.000000 1.000058 -91.989489 0.319951 0.200007 0.004165 0.003981 -85.007954 8341.363340 -37.496118
+10000000.000000 24.877768 -6.479017 -0.094477 0.751158 1.313207 0.001203 -97784.213484 25646.549736 359.301300
+10000000.000000 57.990480 51.917213 -0.394891 0.396242 -0.418242 0.001044 -7446.842057 -6744.167544 97.112043
+10000000.000000 -92.993899 66.462265 -0.084946 0.802403 1.291608 0.003012 4707.459919 -3401.211819 -6.159666
+10000000.000000 80.995293 -80.328410 0.020037 0.798133 0.735258 0.004011 -3747.033883 3692.317141 -0.889647
+10000000.000000 12.996882 -63.417262 -0.189897 0.798699 0.120499 0.002040 -2991.202056 15888.205393 74.413296
+10000000.000000 83.992756 57.588470 -0.295007 0.197123 -0.283225 0.000997 -5801.874161 -3672.618227 -5.005669
+10000000.000000 -51.994953 -96.546254 0.114615 0.201992 -0.108149 0.002834 3960.027200 4265.851517 -412.377601
+10000000.000000 20.997459 86.759301 -0.179974 0.198985 -0.050272 0.004010 -2058.130881 -8652.271540 15.677867
+10000000.000000 51.986184 43.854157 0.409703 0.194518 -0.231608 0.001883 -11025.733031 -9782.485510 -223.469787
+10000000.000000 -21.983898 -46.335588 -0.884102 0.806198 -0.461528 0.003354 11317.832535 22892.282366 688.472071
+10000000.000000 51.968954 -5.697773 0.803922 0.787714 2.261543 0.000594 -24112.289918 2596.272491 -509.614610
+10000000.000000 70.996796 -96.934902 0.901925 0.598531 0.413802 -0.000095 -3741.232510 3286.128620 -1024.661833
+10000000.000000 21.977626 35.415861 -0.783596 0.590911 -0.325239 0.003551 -19514.635669 -33398.122299 1068.067764
+10000000.000000 20.994017 -60.654378 -0.791892 0.197826 0.072718 0.002134 -4021.573698 15059.086539 1053.115159
+10000000.000000 80.993619 -59.279022 0.619374 0.597450 0.745475 0.003763 -5199.418433 5023.564379 -420.291263
+10000000.000000 -15.997072 77.726894 0.304878 0.601130 0.142747 0.000953 2086.170959 -10666.626921 -85.086846
+10000000.000000 -69.982250 21.748124 -0.194995 0.206888 3.548934 0.001003 12365.002932 -3595.005700 37.273273
+10000000.000000 68.982664 3.198118 0.005041 0.193139 -1.360622 0.001034 -13945.413349 -652.032618 22.515575
+10000000.000000 -77.988505 -29.921604 -0.279913 0.204521 -0.583461 0.004036 9133.884076 3793.472651 69.963377
+10000000.000000 -78.995526 -87.947780 -0.584942 0.801760 -0.788647 0.003023 3445.211296 3708.046933 48.511955
+10000000.000000 -83.989397 -31.162940 0.404869 0.404063 -1.431981 0.001020 8400.109745 2714.967341 -115.322913
+10000000.000000 10.370657 2.736738 -0.182870 -0.056006 -0.496873 0.005833 -559316.852704 -148954.531676 9932.567974
+10000000.000000 6.998257 59.875707 0.304430 0.199279 -0.029580 0.000792 -1644.445123 -18938.431175 -323.545499
+10000000.000000 -83.995952 85.007019 0.004942 0.201525 0.200486 0.000967 2653.815070 -3299.772547 -141.881176
+10000000.000000 100.991276 -20.926798 0.719834 0.396553 1.414949 0.003937 -6875.791434 1091.148592 -108.949630
+10000000.000000 -73.995011 92.503093 -0.491123 0.801368 0.699906 0.003422 177.681415 -5849.256879 1804.418759
+10000000.000000 21.888729 12.428666 -0.576192 0.155559 -0.327754 0.005497 -91150.413757 -52556.993271 2931.543319
+10000000.000000 1.997906 -43.932883 0.803716 0.198956 0.022220 0.000391 -3730.197881 36440.873213 -2443.417262
+10000000.000000 21.942982 -22.268031 -0.792669 0.377052 0.358925 0.001918 -48095.610941 49487.158352 1806.557002
+10000000.000000 17.998485 -98.425293 0.319972 0.799387 0.116707 0.003988 -1308.685903 7102.359715 -28.515133
+10000000.000000 23.973020 34.209197 -0.195145 0.589108 -0.366000 0.000945 -22988.837766 -30996.942633 -93.557466
+10000000.000000 -86.991188 -40.312160 -0.089961 0.203525 -0.461674 0.002023 7674.342882 3087.252237 185.672547
+10000000.000000 -90.995474 76.222725 -0.294715 0.201730 0.243873 0.001159 3673.911617 -2261.448361 420.550438
+10000000.000000 -42.978169 37.860482 -0.794312 0.808587 1.169245 0.001345 17161.324221 -11228.830451 1478.438011
+10000000.000000 -49.985372 -42.828165 -0.081419 0.805426 -1.163408 0.003359 10894.242277 10641.201316 -212.124233
+10000000.000000 -14.980601 38.375123 0.244788 0.207588 0.065981 -0.026258 14632.937757 -36699.661121 -90043.598237
+10000000.000000 25.992971 -62.220391 -0.194729 0.397191 0.159381 0.001124 -5767.819749 13954.527180 371.377591
+10000000.000000 36.939443 3.489274 0.119781 0.176011 -0.903775 0.003906 -47527.434764 -4656.770242 -271.110004
+10000000.000000 12.982543 -36.622726 -0.494100 0.192984 0.085821 0.001357 -14631.701915 41834.593430 713.595783
+10000000.000000 -3.990312 -39.767770 0.903638 0.803472 -0.143123 0.000459 4624.197805 42271.789090 -1103.263247
+10000000.000000 -13.934199 22.581953 0.005259 0.225807 0.096630 0.001093 50025.576600 -80671.429470 113.226645
+10000000.000000 25.997628 -93.724837 -0.194956 0.199048 0.056833 0.001017 -1982.507694 7254.469216 32.607703
+10000000.000000 -31.995859 -81.829779 -0.794647 0.401627 -0.164031 0.001142 3182.664174 7837.514480 300.983499
+10000000.000000 -48.983475 44.416821 -0.485048 0.406691 0.481158 0.002922 15099.345256 -8174.938640 -825.174398
+10000000.000000 -20.984112 -41.499134 0.915358 0.206308 -0.092133 0.001492 14267.203371 32137.465987 -10061.842816
+10000000.000000 57.992786 61.412057 -0.279611 0.597099 -0.519657 0.004238 -6385.497110 -9363.228501 1325.035071
+10000000.000000 -53.995139 81.671334 -0.394914 0.201920 0.132747 0.001035 3801.249229 -6190.653077 74.987297
+10000000.000000 -60.980405 -30.718269 0.321194 0.607397 -1.741989 0.004269 13600.920861 6465.722730 -52.774800
+10000000.000000 -83.991387 48.022307 0.309848 0.803463 1.803774 0.001923 7192.150439 -2948.013393 -291.544234
+10000000.000000 17.997217 -81.780106 -0.879535 0.198844 0.046440 0.004219 -2689.812641 9979.136831 778.227825
+10000000.000000 -8.860356 15.447331 -0.187110 0.254577 0.045496 0.003136 105173.271848 -182203.534613 2215.916741
+10000000.000000 -6.999312 -99.071594 0.304966 0.200266 -0.012509 0.000987 497.851473 7325.627574 -27.836528
+10000000.000000 2.000452 -53.120594 0.609610 0.800037 -0.018178 0.001845 -781.140016 23942.676788 -310.899298
+10000000.000000 -0.991960 -29.108269 0.219283 0.402741 -0.002272 0.003711 2821.698046 78491.743873 -607.214314
+10000000.000000 -23.990741 -55.924707 0.219631 0.403588 -0.180884 0.003852 6650.766731 16387.532434 -313.878080
+10000000.000000 -84.995203 80.084419 0.014963 0.201905 0.216058 0.002987 3815.464605 -3379.899521 -15.647666
+10000000.000000 -25.997957 -98.266858 -0.694898 0.200802 -0.051672 0.001041 1562.768735 6878.317162 81.866960
+10000000.000000 63.994874 82.234736 -0.194956 0.197963 -0.154267 0.001019 -4099.175068 -4869.657986 55.065409
+10000000.000000 -40.988457 53.777617 0.009980 0.204544 0.152599 0.001990 9001.697135 -11888.156947 -4.293666
+10000000.000000 -5.996210 58.665463 0.304832 0.801400 0.128345 0.000932 2202.922217 -19180.945173 -149.647123
+10000000.000000 62.990537 52.842378 0.604724 0.196202 -0.233358 0.000878 -7948.913045 -7315.031741 -353.564942
+10000000.000000 -74.993637 60.649492 0.005235 0.402481 0.528752 0.001098 4706.812459 -4798.725636 216.685542
+10000000.000000 63.985958 33.639021 -0.683859 0.394399 -0.673869 0.003315 -11446.914116 -6259.386541 191.387633
+10000000.000000 -55.987175 -45.687050 -0.094862 0.405039 -0.535293 0.001057 9816.912914 8686.169775 134.300520
+10000000.000000 17.943312 23.210076 -0.891324 0.177256 -0.173487 0.002361 -47283.808898 -61668.574529 2436.883951
+10000000.000000 51.972963 -19.671745 -0.479718 0.189127 0.467423 0.004140 -21698.458239 6154.647987 865.095972
+10000000.000000 33.954049 18.924517 0.404299 0.581554 -0.820955 0.000727 -38237.648306 -21959.201103 -522.652375
+10000000.000000 -55.992625 -67.714705 -0.694892 0.602895 -0.541280 0.001043 5629.649758 6785.778756 85.908625
+10000000.000000 24.994788 -74.666199 0.914472 0.197844 0.069414 0.002789 -5041.652851 10383.928267 -475.796248
+10000000.000000 57.991231 60.057257 0.404493 0.196519 -0.189978 0.000720 -6694.444372 -4588.592111 -1381.814775
+10000000.000000 87.991419 -38.995782 0.819814 0.396592 0.801648 0.003926 -6864.444196 3177.624749 -148.793822
+10000000.000000 -20.993353 64.569951 0.009995 0.802563 0.310572 0.001998 4705.531990 -13864.848114 -7.193327
+10000000.000000 -9.997567 -89.617873 -0.494280 0.800934 -0.121349 0.001284 1686.842503 8992.971289 560.439297
+10000000.000000 -6.994745 -49.129181 0.914205 0.202028 -0.019144 0.002685 3735.488043 27082.908896 -634.630197
+10000000.000000 87.988645 -3.831772 -0.884793 0.595498 2.833830 0.003083 -9036.414884 318.560400 117.682955
+10000000.000000 -57.993109 74.788774 0.518952 0.202789 0.156276 0.003641 5258.635669 -5453.863087 -265.865515
+10000000.000000 17.829373 9.411786 0.202828 0.531000 -0.739628 0.000145 -145113.814674 -77011.135395 -1661.831575
+10000000.000000 50.965453 -25.331123 -0.593709 0.787378 -6.264596 0.001627 -19018.350172 9651.073680 400.679871
+10000000.000000 72.983586 4.644041 0.409734 0.593394 -2.471601 0.001938 -13120.669432 -895.577051 -142.731402
+10000000.000000 98.993484 54.246427 -0.180013 0.197433 -0.351407 0.003996 -5063.268241 -2735.905712 -2.265340
+10000000.000000 0.000374 73.205041 -0.888816 0.800002 0.038259 0.002477 -839.170771 -11223.714362 894.041648
+10000000.000000 -28.972079 -34.848509 0.019983 0.410934 -0.363664 0.003992 21111.694013 24784.982237 -20.986194
+10000000.000000 72.984285 12.896113 -0.789586 0.393730 -1.421432 0.002183 -13279.514485 -1884.766833 878.438704
+10000000.000000 13.993675 55.743131 0.414742 0.197461 -0.056211 0.002896 -5281.888719 -19506.088099 -219.771967
+10000000.000000 50.974873 -21.066728 0.104489 0.390011 0.789168 0.000570 -19630.307656 9715.725393 -751.820967
+10000000.000000 -52.975785 54.992826 0.204453 0.208249 10.796496 0.000825 8256.882672 -8518.508591 -47.031909
+10000000.000000 -85.994413 -66.335793 -0.093700 0.202318 -0.266589 0.001433 5181.720132 2667.427557 420.082321
+10000000.000000 -70.995995 -97.188292 0.419724 0.801235 -0.637410 0.003791 -1350.496608 1528.596972 -926.380634
+10000000.000000 -18.996906 -78.182153 0.709812 0.801193 -0.233927 0.001926 2193.753393 10191.225699 -141.173515
+10000000.000000 -37.994850 -83.458891 0.005142 0.201934 -0.089280 0.001266 4217.366466 12358.725248 2506.718295
+10000000.000000 -9.985569 38.580608 0.114868 0.405562 0.106082 0.002947 10197.393845 -40738.371529 -111.193166
+10000000.000000 63.995290 -84.235318 0.104944 0.798122 0.554104 0.000978 -3840.264033 4653.788133 -41.966224
+10000000.000000 95.991071 13.998468 0.314951 0.196463 -1.000582 0.002981 -7081.684954 -1024.941029 -38.816722
+10000000.000000 93.990788 22.420497 -0.289951 0.196350 -0.716379 0.002019 -7312.354259 -1827.047296 34.632085
+10000000.000000 -58.993998 78.576651 0.204973 0.402373 0.313806 0.000988 4703.750522 -6135.314575 -28.598542
+10000000.000000 81.991766 47.857654 -0.294999 0.396717 -0.629444 0.001001 -6686.610237 -3853.547216 1.987107
+10000000.000000 -63.986609 -40.658276 -0.694556 0.205278 -0.329980 0.001176 10424.232594 6910.423861 358.525220
+10000000.000000 -23.958060 -27.880121 -0.678781 0.216503 -0.166938 0.004480 32371.648946 37145.867946 946.206249
+10000000.000000 25.988870 -51.315870 -0.794354 0.795501 0.341386 0.001243 -9508.821690 18057.641295 418.720240
+10000000.000000 79.993163 -229.996456 0.109760 0.598213 -46.198745 0.001920 -398.549301 1136.438090 -0.488443
+10000000.000000 49.976063 25.171851 -0.894445 0.190480 -0.368178 0.001218 -19219.012720 -10036.841285 423.629035
+10000000.000000 24.931803 -18.746202 -0.892363 0.172804 0.261080 0.002044 -55548.849469 40834.910822 2092.794018
+10000000.000000 67.979063 -3.773988 -0.285763 0.792001 2.845607 0.002827 -14647.563107 735.756631 64.214470
+10000000.000000 -84.989037 26.382719 0.709868 0.404309 2.676101 0.001946 8428.814590 -2113.086946 -119.839864
+10000000.000000 62.986569 -38.441536 0.019986 0.194655 0.313330 0.003994 -10848.964033 6508.191517 -14.955036
+10000000.000000 20.905485 -15.746707 0.203801 0.162232 0.265370 0.000526 -77573.485202 58204.886947 -949.827544
+10000000.000000 -26.988534 -53.408749 0.109500 0.804758 -0.477287 0.001738 10672.988504 19174.625002 -1222.399953
+10000000.000000 37.956837 17.061162 0.104921 0.782753 -1.192298 0.000964 -35276.695599 -16238.380854 -97.517364
+10000000.000000 45.970944 -21.028450 0.909004 0.188461 0.397149 0.001615 -23367.221502 10973.953591 -702.435942
+10000000.000000 92.992175 -43.996166 0.519946 0.196907 0.401496 0.003976 -6174.837441 2874.935682 -58.159480
+10000000.000000 -15.998154 95.166186 -0.395691 0.200797 0.030600 0.000675 2316.603724 -11164.390800 -978.256568
+10000000.000000 -53.994701 -98.147828 -0.894404 0.402119 -0.228196 0.001257 4357.409469 5691.546416 654.735371
+10000000.000000 -97.990701 24.948247 -0.793176 0.203679 0.989428 0.001783 7000.549692 -1043.090267 90.739656
+10000000.000000 -31.997005 -93.345804 0.814805 0.201180 -0.067391 0.002923 2321.504726 7142.787417 -154.021121
+10000000.000000 -27.001022 -87.029026 -0.894619 0.599545 -0.200968 0.001173 2148.017506 28473.621410 591.458159
+10000000.000000 -95.991362 35.212119 0.614187 0.603734 4.240594 0.004604 23662.486658 7408.721679 181241.206880
+10000000.000000 -72.992753 57.722036 -0.794360 0.402858 0.543335 0.001259 5623.856916 -4508.932182 549.308363
+10000000.000000 31.990986 -62.491756 0.919362 0.196430 0.104806 0.003753 -7166.539069 12667.868756 -450.004114
+10000000.000000 -80.996096 -96.849730 0.104997 0.201541 -0.169073 0.000998 3051.129380 3547.075289 -6.798490
+10000000.000000 21.989691 -50.189827 0.014808 0.395836 0.167104 0.002935 -8827.955085 20438.058870 -72.251941
+10000000.000000 15.994221 60.732983 0.304837 0.197685 -0.057533 0.000933 -4784.467163 -16641.043333 -145.117869
+10000000.000000 53.995900 77.675950 -0.194981 0.398338 -0.266331 0.001017 -3575.594926 -6221.258992 87.583340
+10000000.000000 -83.987333 -40.623294 0.613882 0.605013 -6.523986 0.002464 6721.261257 3725.895911 -348.583148
+10000000.000000 90.988790 -20.333298 0.304874 0.595681 -5.866447 0.000926 -7725.455920 1467.577790 -81.813891
+10000000.000000 -77.997238 75.065844 -0.082945 0.201606 0.212497 0.003242 4424.201489 -3898.528042 -58.396861
+10000000.000000 -90.993715 61.031694 -0.579811 0.602495 1.005518 0.004068 5016.929641 -3428.621698 100.232082
+10000000.000000 59.990421 53.990334 -0.594620 0.596177 -0.603826 0.001161 -7737.861349 -7594.296117 425.756999
+10000000.000000 12.996707 65.526309 -0.789680 0.598640 -0.098484 0.002128 -3051.923866 -15105.293554 261.104008
+10000000.000000 -94.991791 27.997435 -0.789528 0.203160 0.799047 0.002260 6702.311583 -1667.786236 153.058550
+10000000.000000 74.983368 -6.287219 -0.884474 0.793492 -4.057497 0.003195 -12374.823872 597.116048 342.582206
+10000000.000000 94.991170 -23.516715 -0.194994 0.196521 0.696957 0.000993 -6955.990948 1017.432143 -76.219468
+10000000.000000 82.986734 -17.666692 -0.279930 0.594873 -5.333107 0.004030 -9600.558953 1232.582581 316.700100
+10000000.000000 38.995152 80.521742 0.015069 0.198066 -0.097405 0.003034 -3958.071243 -6937.285855 115.734679
+10000000.000000 -72.989981 43.756248 0.019997 0.203958 0.350124 0.003999 7844.192278 -4641.190062 -4.582962
+10000000.000000 21.808645 -10.323028 0.009982 0.329417 -2.656403 0.001981 -104348.403924 48802.972006 -71.733123
+10000000.000000 73.988719 -35.327000 -0.489759 0.795504 1.335763 0.002101 -9163.521579 4426.361934 78.028962
+10000000.000000 76.995401 87.528306 -0.589874 0.598171 -0.495317 0.002053 -3698.016388 -3931.940466 124.997131
+10000000.000000 56.994759 73.526253 0.504646 0.397925 -0.296131 0.000859 -4148.930803 -5570.518818 -284.952532
+10000000.000000 -34.996675 -83.881330 -0.589413 0.401342 -0.174238 0.002217 2768.382632 8262.570703 381.304832
+10000000.000000 -49.968276 -15.195162 0.704493 0.212470 -2.037753 0.000791 24335.255830 6472.534739 -508.962319
+10000000.000000 -94.991398 -34.093917 -0.579929 0.203586 -0.618069 0.003962 12710.968781 2504.141645 -1831.585296
+10000000.000000 59.988991 -49.763925 0.019999 0.595609 0.649068 0.003999 -9019.836398 7349.481294 -10.918670
+10000000.000000 -79.994330 -65.599092 -0.694207 0.402237 -0.518987 0.001316 4300.996689 3849.566698 705.948042
+10000000.000000 51.974256 19.671269 0.019934 0.189773 -0.467753 0.003975 -20631.714347 -7869.249266 -44.717630
+10000000.000000 -12.982503 -40.702676 -0.185743 0.806333 -0.332703 0.002462 8179.503624 32867.831095 -1607.877985
+10000000.000000 -80.994054 -67.547976 0.709194 0.402361 -0.508420 0.001681 4754.150754 5000.111631 -667.110346
+10000000.000000 79.993162 61.740505 -0.884856 0.197290 -0.252972 0.003057 -5418.825551 -4286.118704 116.712472
+10000000.000000 8.993556 43.502862 0.619272 0.797209 -0.107718 0.003709 -6994.492241 -33184.046065 -595.347145
+10000000.000000 -86.991831 53.687333 -0.789625 0.203211 0.336464 0.002149 6245.299298 -4201.308718 313.057996
+10000000.000000 -12.988302 46.031095 0.509558 0.604471 0.199208 0.001825 7972.206649 -28445.136740 -352.045542
+10000000.000000 8.996601 -53.600834 0.015024 0.798522 0.085454 0.003009 -3736.409288 22593.520426 13.169533
+10000000.000000 -36.984347 -46.715521 0.809601 0.406127 -0.339569 0.001841 11805.757327 14457.733413 -321.837353
+10000000.000000 91.996857 -97.067413 0.404889 0.198722 0.187292 0.000964 -2708.621220 3102.854789 -47.852038
+10000000.000000 35.994758 90.913631 0.015324 0.598053 -0.219113 0.003096 -3238.336483 -7099.156922 55.524251
+10000000.000000 -26.994757 -82.328626 0.006205 0.202092 -0.063215 0.001476 4294.061528 10190.631636 963.286300
+10000000.000000 86.992112 41.634011 -0.784908 0.596935 -1.073948 0.003031 -5979.676563 -2471.409510 32.961592
+10000000.000000 -69.993806 65.845707 -0.394815 0.802467 0.967816 0.001062 4975.821192 -5376.069981 73.738313
+10000000.000000 44.985751 -46.048925 -0.684693 0.194334 0.193137 0.003120 -11390.026882 11782.386574 228.435720
+10000000.000000 -34.984639 46.762721 0.714598 0.206053 0.148617 0.002838 12027.055196 -15937.961566 -362.397591
+10000000.000000 -78.995892 95.718453 -0.384954 0.401624 0.342716 0.003018 3223.543822 -3947.875648 37.579511
+10000000.000000 -15.001157 93.358093 -0.794627 0.399119 0.070225 0.001108 -5011.120115 -4949.876028 -171.408713
+10000000.000000 81.988310 -19.842707 0.704831 0.395360 1.232101 0.000930 -9060.679995 2959.975912 -398.788937
+10000000.000000 41.983844 -41.604284 -0.494781 0.793510 0.682557 0.001086 -13502.809105 13342.655628 169.302184
+10000000.000000 -37.993668 -82.510834 0.519170 0.602530 -0.301011 0.003479 4292.615475 2398.695066 -2955.696058
+10000000.000000 -58.991479 252.993832 0.009133 0.802120 50.398141 0.001816 243.267491 -1034.163483 -0.059556
+10000000.000000 -75.992237 78.315501 -0.581973 0.802537 0.861682 0.003789 3719.753563 -4638.430944 118.368996
+10000000.000000 68.992856 64.962934 0.409909 0.197160 -0.208724 0.001965 -5741.978337 -5250.276271 -64.523830
+10000000.000000 -13.985990 -41.322242 -0.793026 0.205789 -0.055594 0.002021 13919.128418 34935.477060 2557.171046
+10000000.000000 64.993476 -68.603836 -0.394947 0.797396 0.680638 0.001022 -5278.724490 5560.810288 54.584653
+10000000.000000 19.997553 82.217234 -0.284940 0.798991 -0.158818 0.003024 -2277.012758 -9055.499824 47.340184
+10000000.000000 -54.995186 75.271906 -0.184048 0.801828 0.653015 0.003321 3827.181584 -6139.778996 191.129246
+10000000.000000 43.957102 -4.214717 -0.379570 0.182988 0.958203 0.004169 -34107.886124 3459.214182 327.021105
+10000000.000000 86.995140 -81.089844 0.015043 0.798074 0.782861 0.003012 -3881.189193 3321.372296 0.946491
+10000000.000000 36.996559 83.437434 0.504863 0.798623 -0.314423 0.000942 -2818.331707 -7858.450871 -150.935275
+10000000.000000 -61.978286 23.998357 -0.289277 0.208910 4.198808 0.002171 15904.698769 -7193.193860 100.338459
+10000000.000000 -87.990605 32.065889 0.904832 0.203696 0.612553 0.000932 7289.040900 -2525.079954 -146.398522
+10000000.000000 -8.002550 96.333221 -0.388100 0.599169 0.064576 0.002593 -784.008985 -8342.628726 486.387303
+10000000.000000 20.994975 -64.673337 0.204856 0.198009 0.069010 0.000941 -4048.265525 14678.089672 -132.452890
+10000000.000000 2.985833 -17.741282 -0.882000 0.591583 0.102257 0.006136 -33647.110981 202781.608967 10174.072172
+10000000.000000 58.992542 66.125662 -0.089978 0.197058 -0.176552 0.002010 -5819.028485 -6723.274871 24.082137
+10000000.000000 -26.996994 91.628049 0.004986 0.401174 0.123778 0.000995 2235.100509 -7417.374764 -11.194510
+10000000.000000 -35.996013 85.383477 0.304938 0.601555 0.274843 0.000975 2947.364520 -7469.977205 -57.544026
+10000000.000000 -17.986656 -45.856353 -0.884101 0.405174 -0.164871 0.003353 9664.743841 25914.353677 686.540688
+10000000.000000 -63.993493 -71.906508 -0.884861 0.602549 -0.580014 0.003056 4909.743033 5225.358541 119.653462
+10000000.000000 -3.992644 -37.076195 0.903382 0.202842 -0.003722 0.000359 5404.847094 46543.733018 -1284.622024
+10000000.000000 75.992197 55.193905 -0.894842 0.796893 -0.962376 0.001061 -6313.803676 -4524.672142 115.947319
+10000000.000000 -78.991781 59.373210 0.514663 0.203162 0.273361 0.002855 5554.704295 -5929.239125 -504.586541
+10000000.000000 46.996629 -94.044877 0.005038 0.398655 0.192537 0.001014 -2750.462553 6079.978066 25.607232
+10000000.000000 85.994784 -326.996883 0.504874 0.798707 -65.599007 0.000968 -160.446064 607.773713 -0.943382
+10000000.000000 8.998593 76.720153 -0.894092 0.798919 -0.059490 0.001318 -3008.469670 -11780.353334 274.987293
+10000000.000000 -21.993610 -61.767984 -0.789387 0.402471 -0.149881 0.002245 4570.439628 15038.444841 511.802300
+10000000.000000 -11.992562 -51.224897 -0.794384 0.202899 -0.039085 0.001244 5519.895419 23869.498303 486.270443
+10000000.000000 -85.996460 101.692915 -0.394980 0.601394 0.537780 0.001008 2737.883470 -3276.755029 15.868605
+10000000.000000 -45.996338 93.498449 -0.779715 0.201443 0.098306 0.004106 3018.960136 -5874.835158 176.037378
+10000000.000000 53.994233 -86.384027 -0.893594 0.197678 0.124522 0.001654 -4826.335871 5356.219946 2000.867058
+10000000.000000 32.986081 47.713485 -0.879574 0.394435 -0.261425 0.004168 -11424.323660 -16520.611503 333.165829
+10000000.000000 86.992266 -48.240592 0.814858 0.596932 0.952776 0.002945 -6157.724702 3523.972728 -107.271485
+10000000.000000 8.996244 57.734879 -0.489320 0.398465 -0.057712 0.002253 -3330.496934 -19045.465859 421.651396
+10000000.000000 32.991033 -58.050271 -0.694322 0.796387 0.393159 0.001251 -7546.966012 12948.780786 418.920291
+10000000.000000 -62.986190 -37.770758 0.104788 0.205443 -0.352734 0.000915 10766.419857 5912.092789 -175.449065
+10000000.000000 -57.988775 -50.194194 0.204935 0.204440 -0.236875 0.000974 8852.605307 8038.574354 -55.084056
+10000000.000000 44.964892 14.984774 -0.389224 0.586002 -1.205746 0.002267 -28276.566934 -9771.203711 356.184518
+10000000.000000 0.000922 47.983972 0.214822 0.200304 -0.010432 0.002929 240.476607 -29197.329158 -143.034277
+10000000.000000 2.972544 18.665125 0.704845 0.188390 -0.112081 -0.001111 -27692.784974 -183653.458860 -8276.213808
+10000000.000000 11.980443 -31.960475 0.713322 0.791726 0.221385 0.002329 -19666.338491 53520.033575 -1377.763572
+10000000.000000 -5.530760 12.604150 -0.642914 0.956471 1.436777 0.017186 143825.518839 -322476.881859 16669.231161
+10000000.000000 8.832300 -12.700270 0.884757 0.330542 0.317460 -0.007120 -157871.768543 227916.411625 -16013.841143
+10000000.000000 -46.963846 -16.685691 0.015006 0.214363 -0.735697 0.003006 28893.644090 6407.190591 60.433054
+10000000.000000 59.979113 17.376172 -0.194926 0.791691 -1.726197 0.001030 -16713.728156 -4904.416912 63.408204
+10000000.000000 -94.991260 43.339419 0.514372 0.203390 0.467382 0.002809 6492.913473 -2369.222905 -221.302885
+10000000.000000 9.999185 -91.761709 -0.184874 0.599649 0.049616 0.003051 -886.476060 7890.256416 101.031660
+10000000.000000 5.934901 16.198392 0.790614 0.571051 -0.212873 -0.004750 -76931.120893 -208584.755172 -11665.859626
+10000000.000000 -85.992832 -68.660240 0.808625 0.402713 -0.530818 0.001534 4884.669710 4780.233309 -512.610345
+10000000.000000 25.965121 -28.114623 0.005045 0.785844 0.585871 0.001016 -30230.277531 34048.931216 17.080460
+10000000.000000 -3.994657 42.072038 0.808990 0.202029 0.005182 0.001601 3545.041835 -37322.504495 -796.922887
+10000000.000000 -71.996589 -97.745757 0.215223 0.201688 -0.147417 0.003188 7106.579535 6557.244483 882.100254
+10000000.000000 20.933502 19.967112 -0.578452 0.772961 -0.621036 0.004698 -57914.619124 -55161.596743 1613.275055
+10000000.000000 45.996299 95.260811 -0.090038 0.798531 -0.349254 0.001987 -2964.062854 -5714.243184 -12.765016
+10000000.000000 26.994452 -71.291813 -0.694449 0.397773 0.144331 0.001211 -4627.664210 10871.026981 387.446523
+10000000.000000 -80.992852 45.861658 -0.279416 0.202959 0.371815 0.004190 6430.268724 -2424.551411 203.486523
+10000000.000000 -19.994638 -65.059529 -0.784674 0.602067 -0.208270 0.003128 3803.653561 14657.950810 251.151508
+10000000.000000 30.969243 29.692509 -0.079903 0.787596 -0.668029 0.004038 -26088.082459 -25161.123769 68.639781
+10000000.000000 -26.995321 -77.172924 0.719739 0.601815 -0.232380 0.003895 3385.013936 8862.549004 -218.005084
+10000000.000000 15.989329 -46.647660 0.495934 0.195722 0.076960 -0.005704 -8868.934946 26174.838367 -21010.437973
+10000000.000000 50.981439 -33.038641 -0.189957 0.792573 0.994898 0.002011 -15536.625783 10183.582658 57.219558
+10000000.000000 -43.983107 42.284538 0.104714 0.406645 0.453803 0.000885 13023.572517 -12854.836732 -195.590681
+10000000.000000 -67.983052 16.622257 -0.294867 0.206683 1.723905 0.001050 13508.301695 -2710.966416 68.102137
+10000000.000000 4.997979 -69.896660 0.704724 0.599246 0.024112 0.000896 -1376.177624 13873.604218 -187.556530
+10000000.000000 -0.906396 -15.062472 -0.477422 0.830132 -0.140045 0.006908 18761.809931 292024.492434 9268.657765
+10000000.000000 -85.994738 86.385693 -0.294914 0.802127 0.876191 0.001044 4450.905278 -4272.655823 162.344832
+10000000.000000 7.978019 26.295761 0.408097 0.790240 -0.162428 0.001239 -25759.529078 -85609.422942 -1550.206241
+10000000.000000 48.963758 8.000155 0.508881 0.185693 2.399559 0.001626 -28834.093990 -3571.313497 -846.461960
+10000000.000000 25.989656 53.515205 -0.279880 0.195874 -0.101224 0.004047 -8420.800512 -17176.805603 93.138816
+10000000.000000 70.983136 13.499851 0.904382 0.193419 3.499656 0.000701 -12480.276463 -1829.454188 -1013.150612
+10000000.000000 82.987111 4.197742 0.109960 0.794888 -3.160727 0.001986 -10112.778640 -528.384574 -26.926755
+10000000.000000 0.220411 0.855777 0.001709 -3.486013 0.070552 -0.009199 -31742672.083802 -68699315.699627 -176042.437104
+10000000.000000 3.999736 81.950008 -0.494902 0.599863 -0.012628 0.001039 -471.847199 -10630.575665 76.636737
+10000000.000000 69.984867 -21.957335 -0.389878 0.393977 1.009565 0.002046 -12203.232428 3918.004811 77.223911
+10000000.000000 -18.868952 13.583681 0.307971 0.251495 0.299732 0.001192 100582.392352 -71677.970380 -1641.280410
+10000000.000000 -65.995607 -88.755668 0.314965 0.201734 -0.150014 0.002986 3435.656643 4541.615615 -29.686147
+10000000.000000 -28.984373 -51.901508 0.005102 0.606026 -0.376516 0.001021 11289.695188 15730.554351 -64.998565
+10000000.000000 -72.986003 -22.107567 0.009981 0.205490 -0.820821 0.001988 11015.390019 2786.039110 -17.358023
+10000000.000000 -15.993743 93.604312 -0.894275 0.602770 0.119232 0.001379 7685.852926 -6783.820172 1481.340248
+10000000.000000 -96.993120 58.715935 0.809690 0.202701 0.342491 0.001892 5292.582978 -2915.099258 -157.364176
+10000000.000000 -49.995349 -94.113771 -0.084902 0.401850 -0.221953 0.003035 3828.514974 2741.256054 45.018915
+10000000.000000 -61.983113 -24.858821 0.818286 0.206988 -0.570663 0.003535 14267.848137 4975.313241 -258.005384
+10000000.000000 -60.980430 22.594947 -0.279722 0.407110 2.517754 0.004067 13875.234134 -3304.331537 38.314150
+10000000.000000 9.998513 83.737469 0.519799 0.599382 -0.054959 0.003920 -1407.968468 -9892.302285 -161.336300
+10000000.000000 29.969837 -30.905129 -0.793891 0.787824 0.625805 0.001437 -25649.444260 26623.181247 868.215641
+10000000.000000 -67.996276 96.713230 0.314949 0.201461 0.141561 0.002979 2834.873732 -4401.824010 -47.947905
+10000000.000000 3.999327 -78.985989 -0.879659 0.799688 0.005543 0.004134 -895.345474 11044.892023 264.788202
+10000000.000000 -79.991670 -51.631549 -0.689806 0.803225 -1.525334 0.002105 6524.284510 4088.904096 98.351044
+10000000.000000 97.995949 -87.864864 0.814907 0.598393 0.627663 0.002964 -3229.914353 2555.581355 -69.095465
+10000000.000000 -21.996359 80.275280 -0.279910 0.201424 0.052665 0.004034 2737.179579 -9644.550165 60.071186
+10000000.000000 -91.994162 45.160142 -0.594723 0.202558 0.431491 0.001110 5911.058922 -2735.434364 229.469033
+10000000.000000 77.988920 30.652584 -0.794758 0.395573 -0.870333 0.001091 -9070.397622 -3290.722779 156.745147
+10000000.000000 -45.970220 -17.343312 0.005019 0.211597 -0.665783 0.001014 21863.167121 12247.799919 77.554311
+10000000.000000 45.960163 6.389685 -0.196060 0.584235 -1.723282 0.000694 -30897.411099 -2616.988343 62.845256
+10000000.000000 -8.998181 -80.436995 0.714834 0.600688 -0.084846 0.002935 1181.767867 10326.477815 -129.852113
+10000000.000000 6.998054 75.912322 -0.780438 0.199680 -0.019658 0.003867 -246.788458 -10974.433046 92.743794
+10000000.000000 9.999070 -95.896288 0.604837 0.199629 0.022707 0.000935 -742.174137 7966.750560 -132.297129
+10000000.000000 -56.975948 22.329852 -0.594663 0.209233 3.864853 0.001127 16444.628733 -6098.800530 234.851163
+10000000.000000 -25.989596 -52.497154 -0.389410 0.203935 -0.095168 0.002315 6717.993820 15870.531397 1418.855252
+10000000.000000 52.995831 81.762475 0.904586 0.398319 -0.249172 0.000847 -3530.602258 -6665.759329 -252.145735
+10000000.000000 36.990238 -59.385045 0.409807 0.196103 0.125922 0.001918 -7993.935655 11867.809429 -207.153984
+10000000.000000 99.990742 13.788093 0.304963 0.196333 -1.042624 0.000986 -7337.338551 -873.326410 -27.989224
+10000000.000000 47.969280 -15.387979 -0.879001 0.387797 0.924535 0.004371 -24917.677123 7744.149711 603.694617
+10000000.000000 79.994649 74.095645 0.619979 0.797856 -0.782205 0.003991 -4424.240157 -5304.766132 -23.053011
+10000000.000000 -77.993551 67.191053 -0.584804 0.202551 0.237038 0.003078 5071.363368 -4788.047409 161.575427
+10000000.000000 48.978141 -28.803496 0.009964 0.591287 0.842056 0.001982 -17733.557742 10840.750051 -70.934792
+10000000.000000 96.995928 -94.089244 -0.494805 0.598415 0.582844 0.001066 -3046.973316 2798.588317 80.753932
+10000000.000000 64.995382 87.266645 -0.284819 0.198101 -0.147868 0.003109 -4423.635264 -4923.996729 625.150476
+10000000.000000 56.974107 -7.329157 0.204816 0.189752 0.934870 0.000929 -20573.125618 2663.657955 -79.137595
+10000000.000000 -31.961709 28.351031 -0.593069 0.614920 0.864921 0.001624 27985.960961 -23090.581929 713.809599
+10000000.000000 -28.944489 46.974989 -0.778508 0.817372 8.789361 0.004500 12404.520778 -18504.417732 677.914847
+10000000.000000 -79.988145 26.518247 0.219933 0.204652 0.702978 0.003977 8919.168449 -2730.698439 -6.783032
+10000000.000000 -0.000748 93.000310 0.304697 0.199644 -0.002004 0.000847 -1131.126459 -8472.088356 -590.131896
+10000000.000000 56.973232 -3.334926 0.404740 0.189432 -1.867032 0.000901 -20867.119843 585.423044 -192.523777
+10000000.000000 22.971357 -31.716750 0.219593 0.788307 0.465796 0.003838 -25401.732166 35822.967659 -330.359120
+10000000.000000 -41.972560 -28.574913 -0.379728 0.210816 -0.311452 0.004107 21322.809493 14513.942129 208.671081
+10000000.000000 85.988372 12.997436 0.019998 0.395409 -1.600942 0.003999 -9109.705267 -1424.300885 -4.079486
+10000000.000000 -26.985725 48.210082 0.004991 0.405577 0.237263 0.000991 10136.627850 -19809.418374 -276.569474
+10000000.000000 40.956238 38.988684 0.109779 0.185105 7.994224 0.001930 -15414.438827 -14687.075754 -60.708593
+10000000.000000 4.819471 9.803724 -0.460005 0.516125 -0.364960 0.013852 -244179.232780 -500520.253978 23551.452964
+10000000.000000 40.995353 84.269661 0.404910 0.798121 -0.347913 0.000964 -3999.461054 -7410.270192 -74.658708
+10000000.000000 -91.995477 -84.514547 0.804917 0.601774 -0.702118 0.000967 3453.874268 3247.506414 -65.735536
+10000000.000000 -0.985898 26.341506 0.005057 0.604641 0.044688 0.001019 3659.625643 -95605.121129 13.214554
+10000000.000000 60.996608 -95.777228 -0.794784 0.398656 0.245779 0.001088 -2685.482020 4925.512681 192.406444
+10000000.000000 -18.995572 71.576577 -0.194930 0.401724 0.112367 0.001027 3276.388940 -11960.394814 53.320102
+10000000.000000 52.970054 -44.994019 -0.688788 0.789654 -9.796730 0.002441 -12018.146741 7666.629034 885.511821
+10000000.000000 60.992868 74.440806 0.604290 0.397133 -0.313065 0.000667 -5984.481747 -4663.216763 -1058.298946
+10000000.000000 43.961828 7.989403 -0.887246 0.384717 -1.204016 0.002969 -31588.874064 -6316.549640 1249.272176
+10000000.000000 -26.992455 -86.454474 -0.884651 0.802953 -0.291431 0.003114 2300.929113 -11090.749790 -46.362882
+10000000.000000 53.984640 39.696136 -0.794635 0.193870 -0.262946 0.001145 -12561.421860 -8747.004467 295.140209
+10000000.000000 28.992838 -62.538631 0.704474 0.197113 0.095563 0.000798 -6105.115048 13229.382036 -400.438433
+10000000.000000 92.989936 -11.259026 -0.879753 0.595963 2.348481 0.004104 -8034.825230 787.819369 109.922666
+10000000.000000 -72.990300 -47.602676 -0.094989 0.203823 -0.319342 0.001004 7573.503270 4875.981245 7.405880
+10000000.000000 79.996453 83.053488 0.408937 0.198514 -0.190412 0.001659 -3405.133449 -4215.266922 -333.977161
+10000000.000000 -42.974254 90.987970 -0.788777 0.407393 17.995252 0.002423 2667.058736 -6205.867939 118.454182
+10000000.000000 52.995832 -83.228892 0.904505 0.598299 0.355459 0.000802 -3708.692487 4969.456344 -383.613390
+10000000.000000 -91.994034 78.256435 0.509689 0.802415 1.050405 0.001830 4567.414148 -4138.415863 -447.870129
+10000000.000000 -2.986834 29.039836 0.403116 0.205003 -0.011350 0.000289 8680.909294 -78343.750337 -1255.492932
+10000000.000000 69.995388 -98.296779 -0.492046 0.198371 0.141950 0.002051 -2484.828769 5110.151301 953.488887
+10000000.000000 21.996652 -74.454765 0.819503 0.398829 0.111314 0.003793 -1369.219539 9400.262815 -412.960142
+10000000.000000 46.996459 -88.525636 0.514900 0.598584 0.296377 0.002960 -2900.204333 6062.036286 -85.902710
+10000000.000000 -9.995690 96.239752 0.302811 0.401517 0.045955 0.000297 2069.185999 -8022.328775 -682.573976
+10000000.000000 1.002749 -43.233341 0.015258 0.800941 -0.037775 0.003197 1304.117932 35023.086713 1593.959035
+10000000.000000 -93.990838 -34.185707 -0.889835 0.603395 -3.636860 0.002125 874.216140 1827.405882 1990.273932
+10000000.000000 49.991321 58.388787 -0.194955 0.396538 -0.324420 0.001018 -7073.855583 -8718.540159 38.341345
+10000000.000000 88.991123 43.040695 -0.894859 0.196408 -0.392648 0.001060 -7447.895267 -3585.331828 139.449657
+10000000.000000 -51.983824 -41.311476 -0.693217 0.206652 -0.259846 0.001785 12496.197619 8753.166169 506.706898
+10000000.000000 -80.990171 -62.663789 -0.194850 0.803710 -11.331881 0.001002 5393.197161 3302.107800 -8.230281
+10000000.000000 -41.981704 -41.957253 0.209893 0.807132 -0.988262 0.001959 13561.800196 13248.127274 -71.006404
+10000000.000000 -43.997090 96.950469 0.204788 0.401141 0.188562 0.000923 2232.542636 -6262.949094 -133.873598
+10000000.000000 -97.989563 35.999171 -0.280064 0.204188 6.599471 0.003917 8454.444143 -2735.604383 1081.081752
+10000000.000000 -17.990400 53.186214 0.504712 0.603705 0.232245 0.000886 6813.065393 -20310.606484 -230.537094
+10000000.000000 -6.953047 -23.652637 -0.188894 0.417864 -0.104758 0.002434 31324.075491 105271.357638 845.927792
+10000000.000000 -94.994139 -66.738472 0.419958 0.602307 -0.947005 0.003981 4539.566629 2834.909416 -50.429771
+10000000.000000 86.994586 82.134733 -0.279959 0.797862 -0.773951 0.004014 -4219.354745 -3481.557670 18.164708
+10000000.000000 68.997544 96.626755 0.215051 0.399006 -0.275782 0.003024 -2104.762261 -4497.010811 66.990160
+10000000.000000 4.997232 40.852613 -0.394381 0.798597 -0.039201 0.001243 -4632.129635 -39032.352489 473.166219
+10000000.000000 39.997127 -94.835702 0.204985 0.598850 0.234430 0.000994 -2368.152261 6321.223165 -13.097184
+10000000.000000 36.948844 12.579860 -0.094860 0.179643 -0.487727 0.001057 -41244.918960 -13974.007463 124.504401
+10000000.000000 -18.952712 26.707322 -0.388791 0.218627 0.129124 0.002460 36525.373817 -50619.279671 835.683254
+10000000.000000 -80.990641 48.682289 0.019482 0.403464 0.735270 0.003847 5695.673977 -4381.158885 -53.936525
+10000000.000000 83.990793 -35.068755 -0.094919 0.596331 1.187069 0.001027 -7428.917252 3160.079581 31.716476
+10000000.000000 -56.984584 39.616183 0.020016 0.806034 1.521390 0.004006 11499.678058 -7924.805048 -0.459641
+10000000.000000 -73.992170 -59.194208 -0.594895 0.603065 -0.837675 0.001042 5877.265284 4772.075269 88.931858
+10000000.000000 41.992228 -65.241204 -0.284906 0.596889 0.354189 0.003037 -6415.597463 9715.498706 68.453669
+10000000.000000 -81.989369 -37.232265 -0.279199 0.803919 -4.045706 0.004368 7451.807089 3185.983899 155.125568
+10000000.000000 -11.781406 -15.997337 0.004884 0.877964 -1.766886 0.000948 101961.644671 136264.422358 -120.569985
+10000000.000000 -42.991664 63.686436 0.219848 0.203280 0.134932 0.003912 6503.564081 -9575.153671 -41.610493
+10000000.000000 32.996217 79.557330 0.504895 0.798478 -0.290591 0.000958 -3179.138097 -8239.504227 -88.995133
+10000000.000000 -92.992616 53.796368 -0.894810 0.402941 0.758506 0.001080 6087.944430 -3369.067089 200.453668
+10000000.000000 -79.988021 -25.711892 -0.194935 0.404812 -2.341849 0.001022 9802.531609 2315.253672 26.657729
+10000000.000000 66.995530 -89.261151 -0.879842 0.198223 0.148854 0.004064 -3581.832619 4405.564568 132.933013
+10000000.000000 37.960277 -19.845892 -0.184784 0.384158 0.635226 0.003085 -32317.593934 16830.485260 164.452751
+10000000.000000 -1.999731 92.152769 -0.894542 0.600135 0.028569 0.001209 483.891606 -7850.589760 668.117391
+10000000.000000 31.963081 -26.860914 -0.394504 0.185259 0.233977 0.001199 -30259.652368 24469.820318 420.073944
+10000000.000000 -7.999269 90.090674 0.419264 0.200342 0.016329 0.003703 1012.481634 -7405.007421 -513.436835
+10000000.000000 -13.995555 65.766346 0.014992 0.601701 0.149675 0.002997 3044.139884 -14568.726041 -8.992258
+10000000.000000 34.972943 32.031988 0.004986 0.389190 -0.398761 0.000994 -22231.610803 -20378.789431 -15.158708
+10000000.000000 20.930402 -19.977015 -0.886653 0.172230 0.218217 0.003324 -56792.763529 54239.788102 2641.780030
+10000000.000000 92.994675 -268.997216 0.804760 0.598603 -53.999023 0.000940 -292.571613 836.248799 -2.623489
+10000000.000000 15.989330 -46.647658 -0.071271 0.195723 0.076961 0.010570 -8868.979776 26177.278573 20738.670225
+10000000.000000 -9.919877 21.821265 0.814571 0.829828 0.538708 0.001868 48066.878170 -105485.638153 -4103.866229
+10000000.000000 -43.994138 -76.582980 -0.079974 0.202310 -0.114800 0.004009 4555.593590 7284.288140 14.324194
+10000000.000000 -44.995363 83.545652 -0.289946 0.201857 0.107449 0.002013 3626.916574 -6650.278194 31.738639
+10000000.000000 15.998497 -81.401981 0.804640 0.799409 0.122071 0.000819 -1105.331261 9869.888857 -721.383281
+10000000.000000 12.690921 -7.452196 -0.569971 0.075287 0.349784 0.008957 -264750.032956 155941.644128 11998.233665
+10000000.000000 -56.981014 -32.327979 0.609136 0.806928 -4.064014 0.001551 13212.507147 8040.719122 -251.538739
+10000000.000000 43.967122 19.329713 0.703905 0.386889 -0.737336 0.000606 -26582.702395 -12327.717115 -597.600721
index e960ffe..e275eb5 100644 (file)
@@ -34,6 +34,7 @@ Camera eye;
  */
 void Graphics_Run(int argc, char ** argv) 
 {
+       
        if (options.draw_graphics == false)
        {
                // This message is left here for when I inevitably accidentally call the function
@@ -53,6 +54,8 @@ void Graphics_Run(int argc, char ** argv)
                glutCreateWindow("N-Body : Multi-Threaded (pthread)");
        #elif defined OMP_THREADED
                glutCreateWindow("N-Body : Multi-Threaded (OpenMP)");   
+       #elif defined BARNES_HUT
+               glutCreateWindow("N-Body : Barnes Hut Algorithm");
        #else
                glutCreateWindow("N-Body");
        #endif 
@@ -111,7 +114,10 @@ void Graphics_Run(int argc, char ** argv)
 
 
        #ifndef OMP_THREADED
-               glutMainLoop(); 
+       #ifndef BARNES_HUT
+               glutMainLoop(); // the mthread and single-thread versions can just start the loop here
+               // In OpenMP, because barriers have to be within the #pragma, need glutMainLoopEvent in the #pragma
+       #endif //BARNS_HUT
        #endif //OMP_THREADED
 }
 
@@ -134,6 +140,7 @@ void Graphics_Display()
        //Check whether the graphics thread should exit for any reason
        if (ExitCondition())
        {
+               QuitProgram(false);
                glutLeaveMainLoop();    // original glut does not have this, which makes "nicely" exiting a bit annoying
                return;
        }
@@ -168,12 +175,12 @@ void Graphics_Display()
                glutSolidSphere (BALL_SIZE, 10, 10);
                glPopMatrix(); // restore the previous matrix
        }
-       glFlush();
+       
 
        AfterDraw(); // Stuff to do after graphics is done drawing
                        // Single-thread - Nothing at all
                        // Multiple threads - signal threads it is safe to change position variables
-
+       glFlush();
 }
 
 /**
@@ -193,43 +200,44 @@ void Graphics_Keyboard(unsigned char theKey, int mouseX, int mouseY)
        }
 
        #ifdef FLYING_CAMERA
+       float s = 10;
        switch (theKey)
        {
                // Translate in direction of camera
                case 'W':
                case 'w':
                        for (unsigned i = 0; i < DIMENSIONS; ++i)
-                               eye.p[i] += eye.x[i];
+                               eye.p[i] += s * eye.x[i];
                        break;
                // Translate backwards from camera direction
                case 'S':
                case 's':
                        for (unsigned i = 0; i < DIMENSIONS; ++i)
-                               eye.p[i] -= eye.x[i];
+                               eye.p[i] -=  s * eye.x[i];
                        break;
                // Translate left from camera direction
                case 'A':
                case 'a':
                        for (unsigned i = 0; i < DIMENSIONS; ++i)
-                               eye.p[i] -= eye.y[i];
+                               eye.p[i] -= s * eye.y[i];
                        break;
                // Translate right from camera direction
                case 'D':
                case 'd':
                        for (unsigned i = 0; i < DIMENSIONS; ++i)
-                               eye.p[i] += eye.y[i];
+                               eye.p[i] += s * eye.y[i];
                        break;
                // Translate up from camera direction
                case 'Q':
                case 'q':
                        for (unsigned i = 0; i < DIMENSIONS; ++i)
-                               eye.p[i] += eye.z[i];
+                               eye.p[i] += s * eye.z[i];
                        break;
                // Translate down from camera direction
                case 'E':
                case 'e':
                        for (unsigned i = 0; i < DIMENSIONS; ++i)
-                               eye.p[i] -= eye.z[i];
+                               eye.p[i] -= s * eye.z[i];
                        break;
 
                // Rotate camera direction "down"
index 24a7a33..13a4369 100644 (file)
@@ -42,6 +42,7 @@ void Graphics_Display(void);
 void Graphics_Keyboard(unsigned char key, int mouse_x, int mouse_y);
 void Graphics_Reshape(int width, int height);
 
+extern double scale;
 
 #define FLYING_CAMERA
 
diff --git a/course/semester2/pprog/assignment1/single-thread/graphics.o b/course/semester2/pprog/assignment1/single-thread/graphics.o
new file mode 100644 (file)
index 0000000..07de784
Binary files /dev/null and b/course/semester2/pprog/assignment1/single-thread/graphics.o differ
index e55c75f..174e005 100644 (file)
@@ -47,9 +47,11 @@ int main(int argc, char** argv)
        options.num_steps = -1; // Negative values => simulation runs forever unless otherwise specified
        options.timeout = -1;
        options.draw_graphics = true;
-       options.pedantic_graphics = false;
+       options.pedantic_graphics = true;
        options.print_positions = false;
        options.verbosity = 0;
+       options.theta = 0.50;
+       options.random = 0;
 
        //If there are no arguments, print information about usage
        if (argc == 1)
@@ -64,7 +66,7 @@ int main(int argc, char** argv)
        HandleArguments(argc, argv);
        
        //Check there is an initial field.
-       if (options.input == NULL)
+       if (options.input == NULL && options.random <= 0)
        {
                fprintf(stderr, "Usage: %s [OPTIONS] field\n", argv[0]);
                fprintf(stderr, " (You did not provide a file for the initial field of bodies)\n");
@@ -76,7 +78,11 @@ int main(int argc, char** argv)
        signal(SIGINT, Interrupt); //Handle SIGINT signals
        atexit(Universe_Cleanup); //On exit, cleanup universe (and write positions of bodies to file if supplied).
        atexit(DisplayStatistics); //On exit, print information about the computations done
-       System_Init(&universe,options.input); //Initialise the universe from the initial field
+       if (options.input != NULL)
+               System_Init(&universe,options.input); //Initialise the universe from the initial field
+       else
+               System_Random(&universe, options.random); //Randomly create bodies
+       
        
        //Setup the time of day at which the simulation starts
        if (gettimeofday(&(options.start_time), NULL) != 0)
@@ -152,6 +158,14 @@ void HandleArguments(int argc, char ** argv)
                                        exit(EXIT_FAILURE);
                                }                               
                                break;
+                       case 'r': //Random initial field
+                               IntegerArgument(&i, argc, argv, &(options.random), NULL);
+                               if (options.random < 0)
+                               {
+                                       fprintf(stderr, "Require a positive integer number of bodies (-%c %s is invalid).", 'r', argv[i]);
+                                       exit(EXIT_FAILURE);
+                               }
+                               break;
                        case 'g': //Graphics switch
                                options.draw_graphics = !options.draw_graphics;
                                break;
@@ -174,6 +188,21 @@ void HandleArguments(int argc, char ** argv)
                                        fprintf(stderr, "Warning: %s switch has no effect in the single threaded program.\n", argv[i]);
                                        #endif //SINGLE_THREADED
 
+                               }
+                               else if (strcmp(argv[i]+2, "theta") == 0)
+                               {
+                                       FloatArgument(&i, argc, argv, &(options.theta));
+                                       #ifndef BARNES_HUT
+                                       fprintf(stderr, "Warning: %s switch only works in Barnes Hut version.\n", argv[i-1]);
+                                       #else
+                                       if (options.theta < 0)
+                                       {
+                                               fprintf(stderr, "Require a theta value greater or equal to zero (%s %s is invalid).\n", argv[i-1], argv[i]);
+                                               exit(EXIT_FAILURE);
+                                       }
+                                       
+                                       #endif //BARNS_HUT
+                                       
                                }
                                else
                                {
diff --git a/course/semester2/pprog/assignment1/single-thread/main.o b/course/semester2/pprog/assignment1/single-thread/main.o
new file mode 100644 (file)
index 0000000..372a608
Binary files /dev/null and b/course/semester2/pprog/assignment1/single-thread/main.o differ
diff --git a/course/semester2/pprog/assignment1/single-thread/nbody b/course/semester2/pprog/assignment1/single-thread/nbody
new file mode 100755 (executable)
index 0000000..6899289
Binary files /dev/null and b/course/semester2/pprog/assignment1/single-thread/nbody differ
index 30e5c76..cb39b7f 100644 (file)
@@ -62,9 +62,9 @@ inline void Body_Forces(Body * a, System * s)
  */
 inline void Body_Force(Body * a, Body * b)
 {
-       double distance;
-       double con;
-       double gd;
+       float distance;
+       float con;
+       float gd;
        //Calculate distance between a and b
        distance = 0.0;
        for (unsigned i = 0; i < DIMENSIONS; ++i)
@@ -158,6 +158,14 @@ inline void System_Init(System * s, const char *fileName)
        FILE * file;
 
        file = fopen(fileName, "rt");
+
+       if (file == NULL)
+       {
+               fprintf(stderr, "%s\n", fileName);
+               perror("Couldn't open file");
+               exit(EXIT_FAILURE);
+       }
+
        s->N = atoi(fgets(line, LINE_SIZE, file));
        s->body = (Body*) calloc((size_t)s->N, sizeof(Body));
        s->steps = 0;
@@ -306,3 +314,32 @@ System * Split_System(System * s, unsigned n)
        }
        return result;
 }
+
+/**
+ * @function System_Random
+ * @purpose Randomly generate initial body field
+ * @param s - The system
+ * @param n - Number of bodies
+ */
+void System_Random(System * s, int n)
+{
+       srand(0);
+       s->N = (unsigned)n;
+       s->body = (Body*) calloc((size_t)s->N, sizeof(Body));
+       s->steps = 0;
+
+       s->body[0].mass = 1e11;
+
+       for (unsigned a = 1; a < s->N; ++a)
+       {
+               s->body[a].mass = 1e7;
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+               {
+                       s->body[a].x[i] = -10000 + rand() % 20000;
+                       s->body[a].v[i] = -2 + rand() % 4; 
+               }
+               s->body[a].v[2] = 0;
+               s->body[a].x[2] = 0; //set z to zero; force in plane
+               
+       }
+}
index df7cd9d..718f25c 100644 (file)
@@ -62,6 +62,9 @@ inline void Body_Forces(Body * a, System * s)
  */
 inline void Body_Force(Body * a, Body * b)
 {
+       float distance;
+       float con;
+       float gd;
        //Calculate distance between a and b
        distance = 0.0;
        for (unsigned i = 0; i < DIMENSIONS; ++i)
@@ -155,6 +158,14 @@ inline void System_Init(System * s, const char *fileName)
        FILE * file;
 
        file = fopen(fileName, "rt");
+
+       if (file == NULL)
+       {
+               fprintf(stderr, "%s\n", fileName);
+               perror("Couldn't open file");
+               exit(EXIT_FAILURE);
+       }
+
        s->N = atoi(fgets(line, LINE_SIZE, file));
        s->body = (Body*) calloc((size_t)s->N, sizeof(Body));
        s->steps = 0;
@@ -303,3 +314,32 @@ System * Split_System(System * s, unsigned n)
        }
        return result;
 }
+
+/**
+ * @function System_Random
+ * @purpose Randomly generate initial body field
+ * @param s - The system
+ * @param n - Number of bodies
+ */
+void System_Random(System * s, int n)
+{
+       srand(time(NULL));
+       s->N = (unsigned)n;
+       s->body = (Body*) calloc((size_t)s->N, sizeof(Body));
+       s->steps = 0;
+
+       s->body[0].mass = 1e11;
+
+       for (unsigned a = 1; a < s->N; ++a)
+       {
+               s->body[a].mass = 1e7;
+               for (unsigned i = 0; i < DIMENSIONS; ++i)
+               {
+                       s->body[a].x[i] = -10000 + rand() % 20000;
+                       s->body[a].v[i] = -2 + rand() % 4; 
+               }
+               s->body[a].v[2] = 0;
+               s->body[a].x[2] = 0; //set z to zero; force in plane
+               
+       }
+}
index 2ce28b0..2ff81d7 100644 (file)
@@ -105,6 +105,8 @@ typedef struct
        int verbosity; // print statistics every number of steps indicated by this variable
        clock_t start_clock;  // clock cycles done when simulation starts
        struct timeval start_time; // time at which simulation starts
+       float theta; // Parameter used for Barns Hut algorithm
+       int random; //Used to randomly create bodies
 } Options;
 
 void Body_Print(Body * a, FILE * out); //Print body a
@@ -114,6 +116,7 @@ void Body_Velocity(Body * a); //Compute velocity of body a
 void Body_Position(Body * a); //Compute position of body a
 
 void System_Init(System * s, const char * fileName); //Initialise System (array of bodies) from a text file
+void System_Random(System * s, int r); //Randomly create bodies
 void System_Compute(System * s);
 void System_Forces(System * s1, System * s2); //Compute forces for bodies in s1 due to bodies in s2 (also updates velocities)
 void System_Positions(System * s); //Update positions for bodies in s1
diff --git a/course/semester2/pprog/assignment1/single-thread/nbody.o b/course/semester2/pprog/assignment1/single-thread/nbody.o
new file mode 100644 (file)
index 0000000..bc65de2
Binary files /dev/null and b/course/semester2/pprog/assignment1/single-thread/nbody.o differ
diff --git a/course/semester2/pprog/assignment1/time_vs_n.png b/course/semester2/pprog/assignment1/time_vs_n.png
new file mode 100644 (file)
index 0000000..d7720b2
Binary files /dev/null and b/course/semester2/pprog/assignment1/time_vs_n.png differ

UCC git Repository :: git.ucc.asn.au