[m-rev.] diff: Make future_wait/2 impure.
Paul Bone
pbone at csse.unimelb.edu.au
Tue May 31 17:10:28 AEST 2011
When pushing signals and waits into callees during the dependant parallel
conjunction transformation we may push a wait into a callee that doesn't
actually make use of it's argument on some paths. In these cases we insert
a wait signal at the end of the procedure so that the caller can assume that
any future passed in an argument is waited on (and therefore it doesn't need
to use the wait operation). This can be a problem with the wait that was
inserted is optimised away because it is a pure, deterministic goal that
does not bind any variables.
This change makes the future_wait/2 operation impure to prevent this.
compiler/dep_par_conj.m:
Make all calls to wait_future/2 impure, preventing them from being
optimized away.
library/par_builtin.m:
Make wait_future/2 impure.
tests/par_conj/impure_wait.m:
tests/par_conj/impure_wait.exp:
tests/par_conj/Mmakefile:
Add a test case for this problem.
Index: compiler/dep_par_conj.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/dep_par_conj.m,v
retrieving revision 1.54
diff -u -p -b -r1.54 dep_par_conj.m
--- compiler/dep_par_conj.m 31 May 2011 03:14:20 -0000 1.54
+++ compiler/dep_par_conj.m 31 May 2011 06:40:44 -0000
@@ -3116,10 +3116,12 @@ make_wait_or_get(ModuleInfo, VarTypes, F
(
WaitOrGetPred = wait_pred,
PredName = wait_future_pred_name,
+ Purity = purity_impure,
Code = "MR_par_builtin_wait_future(Future, Value);"
;
WaitOrGetPred = get_pred,
PredName = get_future_pred_name,
+ Purity = purity_pure,
Code = "MR_par_builtin_get_future(Future, Value);"
),
Features = [],
@@ -3130,11 +3132,11 @@ make_wait_or_get(ModuleInfo, VarTypes, F
ShouldInline = no,
ArgVars = [FutureVar, ConsumedVar],
generate_simple_call(ModuleName, PredName, pf_predicate,
- only_mode, detism_det, purity_pure, ArgVars, Features,
+ only_mode, detism_det, Purity, ArgVars, Features,
InstMapDelta, ModuleInfo, Context, WaitGoal)
;
ShouldInline = yes,
- ForeignAttrs = par_builtin_foreign_proc_attributes(purity_pure, no),
+ ForeignAttrs = par_builtin_foreign_proc_attributes(Purity, no),
Arg1 = foreign_arg(FutureVar, yes("Future" - in_mode),
map.lookup(VarTypes, FutureVar), native_if_possible),
Arg2 = foreign_arg(ConsumedVar, yes("Value" - out_mode),
@@ -3142,7 +3144,7 @@ make_wait_or_get(ModuleInfo, VarTypes, F
Args = [Arg1, Arg2],
ExtraArgs = [],
generate_foreign_proc(ModuleName, PredName, pf_predicate,
- only_mode, detism_det, purity_pure, ForeignAttrs, Args, ExtraArgs,
+ only_mode, detism_det, Purity, ForeignAttrs, Args, ExtraArgs,
no, Code, Features, InstMapDelta, ModuleInfo, Context, WaitGoal)
).
Index: library/par_builtin.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/par_builtin.m,v
retrieving revision 1.25
diff -u -p -b -r1.25 par_builtin.m
--- library/par_builtin.m 31 May 2011 03:14:21 -0000 1.25
+++ library/par_builtin.m 31 May 2011 06:40:44 -0000
@@ -43,7 +43,12 @@
% Wait until Future is signalled, blocking if necessary. Then set Var
% to the value bound to the variable associated with the future.
%
-:- pred wait_future(future(T)::in, T::out) is det.
+ % wait_future/2 doesn't actually have a side effect. However once it has
+ % returned get_future/2 is guaranteed to be safe. Therefore it must be
+ % impure to prevent it from being optimized away, especially in (valid)
+ % cases where its output occurs only once in a procedure.
+ %
+:- impure pred wait_future(future(T)::in, T::out) is det.
% get_future(Future, Var):
%
@@ -129,7 +134,7 @@
:- pragma foreign_proc("C",
wait_future(Future::in, Var::out),
- [will_not_call_mercury, promise_pure, thread_safe, will_not_modify_trail,
+ [will_not_call_mercury, thread_safe, will_not_modify_trail,
may_not_duplicate],
"
MR_par_builtin_wait_future(Future, Var);
Index: tests/par_conj/Mercury.options
===================================================================
RCS file: /home/mercury1/repository/tests/par_conj/Mercury.options,v
retrieving revision 1.5
diff -u -p -b -r1.5 Mercury.options
--- tests/par_conj/Mercury.options 16 Jul 2009 02:50:51 -0000 1.5
+++ tests/par_conj/Mercury.options 31 May 2011 03:23:44 -0000
@@ -7,3 +7,7 @@ MCFLAGS-par_ddeath_2 = --trace deep
MCFLAGS-dg_fib = --parallel --distance-granularity 10
MCFLAGS-dg_fib_func = --parallel --distance-granularity 10
+
+# With --intermod-opt the call to impure_wait will be optimized away.
+MCFLAGS-impure_wait = --intermod-opt -O3
+
Index: tests/par_conj/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/par_conj/Mmakefile,v
retrieving revision 1.22
diff -u -p -b -r1.22 Mmakefile
--- tests/par_conj/Mmakefile 8 Feb 2011 03:48:10 -0000 1.22
+++ tests/par_conj/Mmakefile 31 May 2011 03:23:44 -0000
@@ -52,6 +52,7 @@ DEP_PAR_CONJ_PROGS= \
dep_par_27 \
dep_par_28 \
dep_par_29 \
+ impure_wait \
pathological_right_recursion \
produce_in_nondet_disj
@@ -175,6 +176,11 @@ pathological_right_recursion.out: pathol
./pathological_right_recursion 2>&1 > pathological_right_recursion.out || \
{ grep . $@ /dev/null; exit 1; }
+impure_wait.out: impure_wait
+ MERCURY_OPTIONS="--thread-pinning" \
+ ./impure_wait 2>&1 > impure_wait.out || \
+ { grep . $@ /dev/null; exit 1; }
+
endif
#-----------------------------------------------------------------------------#
Index: tests/par_conj/impure_wait.exp
===================================================================
RCS file: tests/par_conj/impure_wait.exp
diff -N tests/par_conj/impure_wait.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tests/par_conj/impure_wait.exp 31 May 2011 03:23:44 -0000
@@ -0,0 +1,101 @@
+ 343400 348450 353500 358550 363600 368650 373700 378750 383800 388850 393900 398950 404000 409050 414100 419150 424200 429250 434300 439350 444400 449450 454500 459550 464600 469650 474700 479750 484800 489850 494900 499950 505000 510050 515100 520150 525200 530250 535300 540350 545400 550450 555500 560550 565600 570650 575700 580750 585800 590850 595900 600950 606000 611050 616100 621150 626200 631250 636300 641350 646400 651450 656500 661550 666600 671650 676700 681750 686800 691850 696900 701950 707000 712050 717100 722150 727200 732250 737300 742350 747400 752450 757500 762550 767600 772650 777700 782750 787800 792850 797900 802950 808000 813050 818100 823150 828200 833250 838300 843350
+ 348550 353700 358850 364000 369150 374300 379450 384600 389750 394900 400050 405200 410350 415500 420650 425800 430950 436100 441250 446400 451550 456700 461850 467000 472150 477300 482450 487600 492750 497900 503050 508200 513350 518500 523650 528800 533950 539100 544250 549400 554550 559700 564850 570000 575150 580300 585450 590600 595750 600900 606050 611200 616350 621500 626650 631800 636950 642100 647250 652400 657550 662700 667850 673000 678150 683300 688450 693600 698750 703900 709050 714200 719350 724500 729650 734800 739950 745100 750250 755400 760550 765700 770850 776000 781150 786300 791450 796600 801750 806900 812050 817200 822350 827500 832650 837800 842950 848100 853250 858400
+ 353700 358950 364200 369450 374700 379950 385200 390450 395700 400950 406200 411450 416700 421950 427200 432450 437700 442950 448200 453450 458700 463950 469200 474450 479700 484950 490200 495450 500700 505950 511200 516450 521700 526950 532200 537450 542700 547950 553200 558450 563700 568950 574200 579450 584700 589950 595200 600450 605700 610950 616200 621450 626700 631950 637200 642450 647700 652950 658200 663450 668700 673950 679200 684450 689700 694950 700200 705450 710700 715950 721200 726450 731700 736950 742200 747450 752700 757950 763200 768450 773700 778950 784200 789450 794700 799950 805200 810450 815700 820950 826200 831450 836700 841950 847200 852450 857700 862950 868200 873450
+ 358850 364200 369550 374900 380250 385600 390950 396300 401650 407000 412350 417700 423050 428400 433750 439100 444450 449800 455150 460500 465850 471200 476550 481900 487250 492600 497950 503300 508650 514000 519350 524700 530050 535400 540750 546100 551450 556800 562150 567500 572850 578200 583550 588900 594250 599600 604950 610300 615650 621000 626350 631700 637050 642400 647750 653100 658450 663800 669150 674500 679850 685200 690550 695900 701250 706600 711950 717300 722650 728000 733350 738700 744050 749400 754750 760100 765450 770800 776150 781500 786850 792200 797550 802900 808250 813600 818950 824300 829650 835000 840350 845700 851050 856400 861750 867100 872450 877800 883150 888500
+ 364000 369450 374900 380350 385800 391250 396700 402150 407600 413050 418500 423950 429400 434850 440300 445750 451200 456650 462100 467550 473000 478450 483900 489350 494800 500250 505700 511150 516600 522050 527500 532950 538400 543850 549300 554750 560200 565650 571100 576550 582000 587450 592900 598350 603800 609250 614700 620150 625600 631050 636500 641950 647400 652850 658300 663750 669200 674650 680100 685550 691000 696450 701900 707350 712800 718250 723700 729150 734600 740050 745500 750950 756400 761850 767300 772750 778200 783650 789100 794550 800000 805450 810900 816350 821800 827250 832700 838150 843600 849050 854500 859950 865400 870850 876300 881750 887200 892650 898100 903550
+ 369150 374700 380250 385800 391350 396900 402450 408000 413550 419100 424650 430200 435750 441300 446850 452400 457950 463500 469050 474600 480150 485700 491250 496800 502350 507900 513450 519000 524550 530100 535650 541200 546750 552300 557850 563400 568950 574500 580050 585600 591150 596700 602250 607800 613350 618900 624450 630000 635550 641100 646650 652200 657750 663300 668850 674400 679950 685500 691050 696600 702150 707700 713250 718800 724350 729900 735450 741000 746550 752100 757650 763200 768750 774300 779850 785400 790950 796500 802050 807600 813150 818700 824250 829800 835350 840900 846450 852000 857550 863100 868650 874200 879750 885300 890850 896400 901950 907500 913050 918600
+ 374300 379950 385600 391250 396900 402550 408200 413850 419500 425150 430800 436450 442100 447750 453400 459050 464700 470350 476000 481650 487300 492950 498600 504250 509900 515550 521200 526850 532500 538150 543800 549450 555100 560750 566400 572050 577700 583350 589000 594650 600300 605950 611600 617250 622900 628550 634200 639850 645500 651150 656800 662450 668100 673750 679400 685050 690700 696350 702000 707650 713300 718950 724600 730250 735900 741550 747200 752850 758500 764150 769800 775450 781100 786750 792400 798050 803700 809350 815000 820650 826300 831950 837600 843250 848900 854550 860200 865850 871500 877150 882800 888450 894100 899750 905400 911050 916700 922350 928000 933650
+ 379450 385200 390950 396700 402450 408200 413950 419700 425450 431200 436950 442700 448450 454200 459950 465700 471450 477200 482950 488700 494450 500200 505950 511700 517450 523200 528950 534700 540450 546200 551950 557700 563450 569200 574950 580700 586450 592200 597950 603700 609450 615200 620950 626700 632450 638200 643950 649700 655450 661200 666950 672700 678450 684200 689950 695700 701450 707200 712950 718700 724450 730200 735950 741700 747450 753200 758950 764700 770450 776200 781950 787700 793450 799200 804950 810700 816450 822200 827950 833700 839450 845200 850950 856700 862450 868200 873950 879700 885450 891200 896950 902700 908450 914200 919950 925700 931450 937200 942950 948700
+ 384600 390450 396300 402150 408000 413850 419700 425550 431400 437250 443100 448950 454800 460650 466500 472350 478200 484050 489900 495750 501600 507450 513300 519150 525000 530850 536700 542550 548400 554250 560100 565950 571800 577650 583500 589350 595200 601050 606900 612750 618600 624450 630300 636150 642000 647850 653700 659550 665400 671250 677100 682950 688800 694650 700500 706350 712200 718050 723900 729750 735600 741450 747300 753150 759000 764850 770700 776550 782400 788250 794100 799950 805800 811650 817500 823350 829200 835050 840900 846750 852600 858450 864300 870150 876000 881850 887700 893550 899400 905250 911100 916950 922800 928650 934500 940350 946200 952050 957900 963750
+ 389750 395700 401650 407600 413550 419500 425450 431400 437350 443300 449250 455200 461150 467100 473050 479000 484950 490900 496850 502800 508750 514700 520650 526600 532550 538500 544450 550400 556350 562300 568250 574200 580150 586100 592050 598000 603950 609900 615850 621800 627750 633700 639650 645600 651550 657500 663450 669400 675350 681300 687250 693200 699150 705100 711050 717000 722950 728900 734850 740800 746750 752700 758650 764600 770550 776500 782450 788400 794350 800300 806250 812200 818150 824100 830050 836000 841950 847900 853850 859800 865750 871700 877650 883600 889550 895500 901450 907400 913350 919300 925250 931200 937150 943100 949050 955000 960950 966900 972850 978800
+ 394900 400950 407000 413050 419100 425150 431200 437250 443300 449350 455400 461450 467500 473550 479600 485650 491700 497750 503800 509850 515900 521950 528000 534050 540100 546150 552200 558250 564300 570350 576400 582450 588500 594550 600600 606650 612700 618750 624800 630850 636900 642950 649000 655050 661100 667150 673200 679250 685300 691350 697400 703450 709500 715550 721600 727650 733700 739750 745800 751850 757900 763950 770000 776050 782100 788150 794200 800250 806300 812350 818400 824450 830500 836550 842600 848650 854700 860750 866800 872850 878900 884950 891000 897050 903100 909150 915200 921250 927300 933350 939400 945450 951500 957550 963600 969650 975700 981750 987800 993850
+ 400050 406200 412350 418500 424650 430800 436950 443100 449250 455400 461550 467700 473850 480000 486150 492300 498450 504600 510750 516900 523050 529200 535350 541500 547650 553800 559950 566100 572250 578400 584550 590700 596850 603000 609150 615300 621450 627600 633750 639900 646050 652200 658350 664500 670650 676800 682950 689100 695250 701400 707550 713700 719850 726000 732150 738300 744450 750600 756750 762900 769050 775200 781350 787500 793650 799800 805950 812100 818250 824400 830550 836700 842850 849000 855150 861300 867450 873600 879750 885900 892050 898200 904350 910500 916650 922800 928950 935100 941250 947400 953550 959700 965850 972000 978150 984300 990450 996600 1002750 1008900
+ 405200 411450 417700 423950 430200 436450 442700 448950 455200 461450 467700 473950 480200 486450 492700 498950 505200 511450 517700 523950 530200 536450 542700 548950 555200 561450 567700 573950 580200 586450 592700 598950 605200 611450 617700 623950 630200 636450 642700 648950 655200 661450 667700 673950 680200 686450 692700 698950 705200 711450 717700 723950 730200 736450 742700 748950 755200 761450 767700 773950 780200 786450 792700 798950 805200 811450 817700 823950 830200 836450 842700 848950 855200 861450 867700 873950 880200 886450 892700 898950 905200 911450 917700 923950 930200 936450 942700 948950 955200 961450 967700 973950 980200 986450 992700 998950 1005200 1011450 1017700 1023950
+ 410350 416700 423050 429400 435750 442100 448450 454800 461150 467500 473850 480200 486550 492900 499250 505600 511950 518300 524650 531000 537350 543700 550050 556400 562750 569100 575450 581800 588150 594500 600850 607200 613550 619900 626250 632600 638950 645300 651650 658000 664350 670700 677050 683400 689750 696100 702450 708800 715150 721500 727850 734200 740550 746900 753250 759600 765950 772300 778650 785000 791350 797700 804050 810400 816750 823100 829450 835800 842150 848500 854850 861200 867550 873900 880250 886600 892950 899300 905650 912000 918350 924700 931050 937400 943750 950100 956450 962800 969150 975500 981850 988200 994550 1000900 1007250 1013600 1019950 1026300 1032650 1039000
+ 415500 421950 428400 434850 441300 447750 454200 460650 467100 473550 480000 486450 492900 499350 505800 512250 518700 525150 531600 538050 544500 550950 557400 563850 570300 576750 583200 589650 596100 602550 609000 615450 621900 628350 634800 641250 647700 654150 660600 667050 673500 679950 686400 692850 699300 705750 712200 718650 725100 731550 738000 744450 750900 757350 763800 770250 776700 783150 789600 796050 802500 808950 815400 821850 828300 834750 841200 847650 854100 860550 867000 873450 879900 886350 892800 899250 905700 912150 918600 925050 931500 937950 944400 950850 957300 963750 970200 976650 983100 989550 996000 1002450 1008900 1015350 1021800 1028250 1034700 1041150 1047600 1054050
+ 420650 427200 433750 440300 446850 453400 459950 466500 473050 479600 486150 492700 499250 505800 512350 518900 525450 532000 538550 545100 551650 558200 564750 571300 577850 584400 590950 597500 604050 610600 617150 623700 630250 636800 643350 649900 656450 663000 669550 676100 682650 689200 695750 702300 708850 715400 721950 728500 735050 741600 748150 754700 761250 767800 774350 780900 787450 794000 800550 807100 813650 820200 826750 833300 839850 846400 852950 859500 866050 872600 879150 885700 892250 898800 905350 911900 918450 925000 931550 938100 944650 951200 957750 964300 970850 977400 983950 990500 997050 1003600 1010150 1016700 1023250 1029800 1036350 1042900 1049450 1056000 1062550 1069100
+ 425800 432450 439100 445750 452400 459050 465700 472350 479000 485650 492300 498950 505600 512250 518900 525550 532200 538850 545500 552150 558800 565450 572100 578750 585400 592050 598700 605350 612000 618650 625300 631950 638600 645250 651900 658550 665200 671850 678500 685150 691800 698450 705100 711750 718400 725050 731700 738350 745000 751650 758300 764950 771600 778250 784900 791550 798200 804850 811500 818150 824800 831450 838100 844750 851400 858050 864700 871350 878000 884650 891300 897950 904600 911250 917900 924550 931200 937850 944500 951150 957800 964450 971100 977750 984400 991050 997700 1004350 1011000 1017650 1024300 1030950 1037600 1044250 1050900 1057550 1064200 1070850 1077500 1084150
+ 430950 437700 444450 451200 457950 464700 471450 478200 484950 491700 498450 505200 511950 518700 525450 532200 538950 545700 552450 559200 565950 572700 579450 586200 592950 599700 606450 613200 619950 626700 633450 640200 646950 653700 660450 667200 673950 680700 687450 694200 700950 707700 714450 721200 727950 734700 741450 748200 754950 761700 768450 775200 781950 788700 795450 802200 808950 815700 822450 829200 835950 842700 849450 856200 862950 869700 876450 883200 889950 896700 903450 910200 916950 923700 930450 937200 943950 950700 957450 964200 970950 977700 984450 991200 997950 1004700 1011450 1018200 1024950 1031700 1038450 1045200 1051950 1058700 1065450 1072200 1078950 1085700 1092450 1099200
+ 436100 442950 449800 456650 463500 470350 477200 484050 490900 497750 504600 511450 518300 525150 532000 538850 545700 552550 559400 566250 573100 579950 586800 593650 600500 607350 614200 621050 627900 634750 641600 648450 655300 662150 669000 675850 682700 689550 696400 703250 710100 716950 723800 730650 737500 744350 751200 758050 764900 771750 778600 785450 792300 799150 806000 812850 819700 826550 833400 840250 847100 853950 860800 867650 874500 881350 888200 895050 901900 908750 915600 922450 929300 936150 943000 949850 956700 963550 970400 977250 984100 990950 997800 1004650 1011500 1018350 1025200 1032050 1038900 1045750 1052600 1059450 1066300 1073150 1080000 1086850 1093700 1100550 1107400 1114250
+ 441250 448200 455150 462100 469050 476000 482950 489900 496850 503800 510750 517700 524650 531600 538550 545500 552450 559400 566350 573300 580250 587200 594150 601100 608050 615000 621950 628900 635850 642800 649750 656700 663650 670600 677550 684500 691450 698400 705350 712300 719250 726200 733150 740100 747050 754000 760950 767900 774850 781800 788750 795700 802650 809600 816550 823500 830450 837400 844350 851300 858250 865200 872150 879100 886050 893000 899950 906900 913850 920800 927750 934700 941650 948600 955550 962500 969450 976400 983350 990300 997250 1004200 1011150 1018100 1025050 1032000 1038950 1045900 1052850 1059800 1066750 1073700 1080650 1087600 1094550 1101500 1108450 1115400 1122350 1129300
+ 446400 453450 460500 467550 474600 481650 488700 495750 502800 509850 516900 523950 531000 538050 545100 552150 559200 566250 573300 580350 587400 594450 601500 608550 615600 622650 629700 636750 643800 650850 657900 664950 672000 679050 686100 693150 700200 707250 714300 721350 728400 735450 742500 749550 756600 763650 770700 777750 784800 791850 798900 805950 813000 820050 827100 834150 841200 848250 855300 862350 869400 876450 883500 890550 897600 904650 911700 918750 925800 932850 939900 946950 954000 961050 968100 975150 982200 989250 996300 1003350 1010400 1017450 1024500 1031550 1038600 1045650 1052700 1059750 1066800 1073850 1080900 1087950 1095000 1102050 1109100 1116150 1123200 1130250 1137300 1144350
+ 451550 458700 465850 473000 480150 487300 494450 501600 508750 515900 523050 530200 537350 544500 551650 558800 565950 573100 580250 587400 594550 601700 608850 616000 623150 630300 637450 644600 651750 658900 666050 673200 680350 687500 694650 701800 708950 716100 723250 730400 737550 744700 751850 759000 766150 773300 780450 787600 794750 801900 809050 816200 823350 830500 837650 844800 851950 859100 866250 873400 880550 887700 894850 902000 909150 916300 923450 930600 937750 944900 952050 959200 966350 973500 980650 987800 994950 1002100 1009250 1016400 1023550 1030700 1037850 1045000 1052150 1059300 1066450 1073600 1080750 1087900 1095050 1102200 1109350 1116500 1123650 1130800 1137950 1145100 1152250 1159400
+ 456700 463950 471200 478450 485700 492950 500200 507450 514700 521950 529200 536450 543700 550950 558200 565450 572700 579950 587200 594450 601700 608950 616200 623450 630700 637950 645200 652450 659700 666950 674200 681450 688700 695950 703200 710450 717700 724950 732200 739450 746700 753950 761200 768450 775700 782950 790200 797450 804700 811950 819200 826450 833700 840950 848200 855450 862700 869950 877200 884450 891700 898950 906200 913450 920700 927950 935200 942450 949700 956950 964200 971450 978700 985950 993200 1000450 1007700 1014950 1022200 1029450 1036700 1043950 1051200 1058450 1065700 1072950 1080200 1087450 1094700 1101950 1109200 1116450 1123700 1130950 1138200 1145450 1152700 1159950 1167200 1174450
+ 461850 469200 476550 483900 491250 498600 505950 513300 520650 528000 535350 542700 550050 557400 564750 572100 579450 586800 594150 601500 608850 616200 623550 630900 638250 645600 652950 660300 667650 675000 682350 689700 697050 704400 711750 719100 726450 733800 741150 748500 755850 763200 770550 777900 785250 792600 799950 807300 814650 822000 829350 836700 844050 851400 858750 866100 873450 880800 888150 895500 902850 910200 917550 924900 932250 939600 946950 954300 961650 969000 976350 983700 991050 998400 1005750 1013100 1020450 1027800 1035150 1042500 1049850 1057200 1064550 1071900 1079250 1086600 1093950 1101300 1108650 1116000 1123350 1130700 1138050 1145400 1152750 1160100 1167450 1174800 1182150 1189500
+ 467000 474450 481900 489350 496800 504250 511700 519150 526600 534050 541500 548950 556400 563850 571300 578750 586200 593650 601100 608550 616000 623450 630900 638350 645800 653250 660700 668150 675600 683050 690500 697950 705400 712850 720300 727750 735200 742650 750100 757550 765000 772450 779900 787350 794800 802250 809700 817150 824600 832050 839500 846950 854400 861850 869300 876750 884200 891650 899100 906550 914000 921450 928900 936350 943800 951250 958700 966150 973600 981050 988500 995950 1003400 1010850 1018300 1025750 1033200 1040650 1048100 1055550 1063000 1070450 1077900 1085350 1092800 1100250 1107700 1115150 1122600 1130050 1137500 1144950 1152400 1159850 1167300 1174750 1182200 1189650 1197100 1204550
+ 472150 479700 487250 494800 502350 509900 517450 525000 532550 540100 547650 555200 562750 570300 577850 585400 592950 600500 608050 615600 623150 630700 638250 645800 653350 660900 668450 676000 683550 691100 698650 706200 713750 721300 728850 736400 743950 751500 759050 766600 774150 781700 789250 796800 804350 811900 819450 827000 834550 842100 849650 857200 864750 872300 879850 887400 894950 902500 910050 917600 925150 932700 940250 947800 955350 962900 970450 978000 985550 993100 1000650 1008200 1015750 1023300 1030850 1038400 1045950 1053500 1061050 1068600 1076150 1083700 1091250 1098800 1106350 1113900 1121450 1129000 1136550 1144100 1151650 1159200 1166750 1174300 1181850 1189400 1196950 1204500 1212050 1219600
+ 477300 484950 492600 500250 507900 515550 523200 530850 538500 546150 553800 561450 569100 576750 584400 592050 599700 607350 615000 622650 630300 637950 645600 653250 660900 668550 676200 683850 691500 699150 706800 714450 722100 729750 737400 745050 752700 760350 768000 775650 783300 790950 798600 806250 813900 821550 829200 836850 844500 852150 859800 867450 875100 882750 890400 898050 905700 913350 921000 928650 936300 943950 951600 959250 966900 974550 982200 989850 997500 1005150 1012800 1020450 1028100 1035750 1043400 1051050 1058700 1066350 1074000 1081650 1089300 1096950 1104600 1112250 1119900 1127550 1135200 1142850 1150500 1158150 1165800 1173450 1181100 1188750 1196400 1204050 1211700 1219350 1227000 1234650
+ 482450 490200 497950 505700 513450 521200 528950 536700 544450 552200 559950 567700 575450 583200 590950 598700 606450 614200 621950 629700 637450 645200 652950 660700 668450 676200 683950 691700 699450 707200 714950 722700 730450 738200 745950 753700 761450 769200 776950 784700 792450 800200 807950 815700 823450 831200 838950 846700 854450 862200 869950 877700 885450 893200 900950 908700 916450 924200 931950 939700 947450 955200 962950 970700 978450 986200 993950 1001700 1009450 1017200 1024950 1032700 1040450 1048200 1055950 1063700 1071450 1079200 1086950 1094700 1102450 1110200 1117950 1125700 1133450 1141200 1148950 1156700 1164450 1172200 1179950 1187700 1195450 1203200 1210950 1218700 1226450 1234200 1241950 1249700
+ 487600 495450 503300 511150 519000 526850 534700 542550 550400 558250 566100 573950 581800 589650 597500 605350 613200 621050 628900 636750 644600 652450 660300 668150 676000 683850 691700 699550 707400 715250 723100 730950 738800 746650 754500 762350 770200 778050 785900 793750 801600 809450 817300 825150 833000 840850 848700 856550 864400 872250 880100 887950 895800 903650 911500 919350 927200 935050 942900 950750 958600 966450 974300 982150 990000 997850 1005700 1013550 1021400 1029250 1037100 1044950 1052800 1060650 1068500 1076350 1084200 1092050 1099900 1107750 1115600 1123450 1131300 1139150 1147000 1154850 1162700 1170550 1178400 1186250 1194100 1201950 1209800 1217650 1225500 1233350 1241200 1249050 1256900 1264750
+ 492750 500700 508650 516600 524550 532500 540450 548400 556350 564300 572250 580200 588150 596100 604050 612000 619950 627900 635850 643800 651750 659700 667650 675600 683550 691500 699450 707400 715350 723300 731250 739200 747150 755100 763050 771000 778950 786900 794850 802800 810750 818700 826650 834600 842550 850500 858450 866400 874350 882300 890250 898200 906150 914100 922050 930000 937950 945900 953850 961800 969750 977700 985650 993600 1001550 1009500 1017450 1025400 1033350 1041300 1049250 1057200 1065150 1073100 1081050 1089000 1096950 1104900 1112850 1120800 1128750 1136700 1144650 1152600 1160550 1168500 1176450 1184400 1192350 1200300 1208250 1216200 1224150 1232100 1240050 1248000 1255950 1263900 1271850 1279800
+ 497900 505950 514000 522050 530100 538150 546200 554250 562300 570350 578400 586450 594500 602550 610600 618650 626700 634750 642800 650850 658900 666950 675000 683050 691100 699150 707200 715250 723300 731350 739400 747450 755500 763550 771600 779650 787700 795750 803800 811850 819900 827950 836000 844050 852100 860150 868200 876250 884300 892350 900400 908450 916500 924550 932600 940650 948700 956750 964800 972850 980900 988950 997000 1005050 1013100 1021150 1029200 1037250 1045300 1053350 1061400 1069450 1077500 1085550 1093600 1101650 1109700 1117750 1125800 1133850 1141900 1149950 1158000 1166050 1174100 1182150 1190200 1198250 1206300 1214350 1222400 1230450 1238500 1246550 1254600 1262650 1270700 1278750 1286800 1294850
+ 503050 511200 519350 527500 535650 543800 551950 560100 568250 576400 584550 592700 600850 609000 617150 625300 633450 641600 649750 657900 666050 674200 682350 690500 698650 706800 714950 723100 731250 739400 747550 755700 763850 772000 780150 788300 796450 804600 812750 820900 829050 837200 845350 853500 861650 869800 877950 886100 894250 902400 910550 918700 926850 935000 943150 951300 959450 967600 975750 983900 992050 1000200 1008350 1016500 1024650 1032800 1040950 1049100 1057250 1065400 1073550 1081700 1089850 1098000 1106150 1114300 1122450 1130600 1138750 1146900 1155050 1163200 1171350 1179500 1187650 1195800 1203950 1212100 1220250 1228400 1236550 1244700 1252850 1261000 1269150 1277300 1285450 1293600 1301750 1309900
+ 508200 516450 524700 532950 541200 549450 557700 565950 574200 582450 590700 598950 607200 615450 623700 631950 640200 648450 656700 664950 673200 681450 689700 697950 706200 714450 722700 730950 739200 747450 755700 763950 772200 780450 788700 796950 805200 813450 821700 829950 838200 846450 854700 862950 871200 879450 887700 895950 904200 912450 920700 928950 937200 945450 953700 961950 970200 978450 986700 994950 1003200 1011450 1019700 1027950 1036200 1044450 1052700 1060950 1069200 1077450 1085700 1093950 1102200 1110450 1118700 1126950 1135200 1143450 1151700 1159950 1168200 1176450 1184700 1192950 1201200 1209450 1217700 1225950 1234200 1242450 1250700 1258950 1267200 1275450 1283700 1291950 1300200 1308450 1316700 1324950
+ 513350 521700 530050 538400 546750 555100 563450 571800 580150 588500 596850 605200 613550 621900 630250 638600 646950 655300 663650 672000 680350 688700 697050 705400 713750 722100 730450 738800 747150 755500 763850 772200 780550 788900 797250 805600 813950 822300 830650 839000 847350 855700 864050 872400 880750 889100 897450 905800 914150 922500 930850 939200 947550 955900 964250 972600 980950 989300 997650 1006000 1014350 1022700 1031050 1039400 1047750 1056100 1064450 1072800 1081150 1089500 1097850 1106200 1114550 1122900 1131250 1139600 1147950 1156300 1164650 1173000 1181350 1189700 1198050 1206400 1214750 1223100 1231450 1239800 1248150 1256500 1264850 1273200 1281550 1289900 1298250 1306600 1314950 1323300 1331650 1340000
+ 518500 526950 535400 543850 552300 560750 569200 577650 586100 594550 603000 611450 619900 628350 636800 645250 653700 662150 670600 679050 687500 695950 704400 712850 721300 729750 738200 746650 755100 763550 772000 780450 788900 797350 805800 814250 822700 831150 839600 848050 856500 864950 873400 881850 890300 898750 907200 915650 924100 932550 941000 949450 957900 966350 974800 983250 991700 1000150 1008600 1017050 1025500 1033950 1042400 1050850 1059300 1067750 1076200 1084650 1093100 1101550 1110000 1118450 1126900 1135350 1143800 1152250 1160700 1169150 1177600 1186050 1194500 1202950 1211400 1219850 1228300 1236750 1245200 1253650 1262100 1270550 1279000 1287450 1295900 1304350 1312800 1321250 1329700 1338150 1346600 1355050
+ 523650 532200 540750 549300 557850 566400 574950 583500 592050 600600 609150 617700 626250 634800 643350 651900 660450 669000 677550 686100 694650 703200 711750 720300 728850 737400 745950 754500 763050 771600 780150 788700 797250 805800 814350 822900 831450 840000 848550 857100 865650 874200 882750 891300 899850 908400 916950 925500 934050 942600 951150 959700 968250 976800 985350 993900 1002450 1011000 1019550 1028100 1036650 1045200 1053750 1062300 1070850 1079400 1087950 1096500 1105050 1113600 1122150 1130700 1139250 1147800 1156350 1164900 1173450 1182000 1190550 1199100 1207650 1216200 1224750 1233300 1241850 1250400 1258950 1267500 1276050 1284600 1293150 1301700 1310250 1318800 1327350 1335900 1344450 1353000 1361550 1370100
+ 528800 537450 546100 554750 563400 572050 580700 589350 598000 606650 615300 623950 632600 641250 649900 658550 667200 675850 684500 693150 701800 710450 719100 727750 736400 745050 753700 762350 771000 779650 788300 796950 805600 814250 822900 831550 840200 848850 857500 866150 874800 883450 892100 900750 909400 918050 926700 935350 944000 952650 961300 969950 978600 987250 995900 1004550 1013200 1021850 1030500 1039150 1047800 1056450 1065100 1073750 1082400 1091050 1099700 1108350 1117000 1125650 1134300 1142950 1151600 1160250 1168900 1177550 1186200 1194850 1203500 1212150 1220800 1229450 1238100 1246750 1255400 1264050 1272700 1281350 1290000 1298650 1307300 1315950 1324600 1333250 1341900 1350550 1359200 1367850 1376500 1385150
+ 533950 542700 551450 560200 568950 577700 586450 595200 603950 612700 621450 630200 638950 647700 656450 665200 673950 682700 691450 700200 708950 717700 726450 735200 743950 752700 761450 770200 778950 787700 796450 805200 813950 822700 831450 840200 848950 857700 866450 875200 883950 892700 901450 910200 918950 927700 936450 945200 953950 962700 971450 980200 988950 997700 1006450 1015200 1023950 1032700 1041450 1050200 1058950 1067700 1076450 1085200 1093950 1102700 1111450 1120200 1128950 1137700 1146450 1155200 1163950 1172700 1181450 1190200 1198950 1207700 1216450 1225200 1233950 1242700 1251450 1260200 1268950 1277700 1286450 1295200 1303950 1312700 1321450 1330200 1338950 1347700 1356450 1365200 1373950 1382700 1391450 1400200
+ 539100 547950 556800 565650 574500 583350 592200 601050 609900 618750 627600 636450 645300 654150 663000 671850 680700 689550 698400 707250 716100 724950 733800 742650 751500 760350 769200 778050 786900 795750 804600 813450 822300 831150 840000 848850 857700 866550 875400 884250 893100 901950 910800 919650 928500 937350 946200 955050 963900 972750 981600 990450 999300 1008150 1017000 1025850 1034700 1043550 1052400 1061250 1070100 1078950 1087800 1096650 1105500 1114350 1123200 1132050 1140900 1149750 1158600 1167450 1176300 1185150 1194000 1202850 1211700 1220550 1229400 1238250 1247100 1255950 1264800 1273650 1282500 1291350 1300200 1309050 1317900 1326750 1335600 1344450 1353300 1362150 1371000 1379850 1388700 1397550 1406400 1415250
+ 544250 553200 562150 571100 580050 589000 597950 606900 615850 624800 633750 642700 651650 660600 669550 678500 687450 696400 705350 714300 723250 732200 741150 750100 759050 768000 776950 785900 794850 803800 812750 821700 830650 839600 848550 857500 866450 875400 884350 893300 902250 911200 920150 929100 938050 947000 955950 964900 973850 982800 991750 1000700 1009650 1018600 1027550 1036500 1045450 1054400 1063350 1072300 1081250 1090200 1099150 1108100 1117050 1126000 1134950 1143900 1152850 1161800 1170750 1179700 1188650 1197600 1206550 1215500 1224450 1233400 1242350 1251300 1260250 1269200 1278150 1287100 1296050 1305000 1313950 1322900 1331850 1340800 1349750 1358700 1367650 1376600 1385550 1394500 1403450 1412400 1421350 1430300
+ 549400 558450 567500 576550 585600 594650 603700 612750 621800 630850 639900 648950 658000 667050 676100 685150 694200 703250 712300 721350 730400 739450 748500 757550 766600 775650 784700 793750 802800 811850 820900 829950 839000 848050 857100 866150 875200 884250 893300 902350 911400 920450 929500 938550 947600 956650 965700 974750 983800 992850 1001900 1010950 1020000 1029050 1038100 1047150 1056200 1065250 1074300 1083350 1092400 1101450 1110500 1119550 1128600 1137650 1146700 1155750 1164800 1173850 1182900 1191950 1201000 1210050 1219100 1228150 1237200 1246250 1255300 1264350 1273400 1282450 1291500 1300550 1309600 1318650 1327700 1336750 1345800 1354850 1363900 1372950 1382000 1391050 1400100 1409150 1418200 1427250 1436300 1445350
+ 554550 563700 572850 582000 591150 600300 609450 618600 627750 636900 646050 655200 664350 673500 682650 691800 700950 710100 719250 728400 737550 746700 755850 765000 774150 783300 792450 801600 810750 819900 829050 838200 847350 856500 865650 874800 883950 893100 902250 911400 920550 929700 938850 948000 957150 966300 975450 984600 993750 1002900 1012050 1021200 1030350 1039500 1048650 1057800 1066950 1076100 1085250 1094400 1103550 1112700 1121850 1131000 1140150 1149300 1158450 1167600 1176750 1185900 1195050 1204200 1213350 1222500 1231650 1240800 1249950 1259100 1268250 1277400 1286550 1295700 1304850 1314000 1323150 1332300 1341450 1350600 1359750 1368900 1378050 1387200 1396350 1405500 1414650 1423800 1432950 1442100 1451250 1460400
+ 559700 568950 578200 587450 596700 605950 615200 624450 633700 642950 652200 661450 670700 679950 689200 698450 707700 716950 726200 735450 744700 753950 763200 772450 781700 790950 800200 809450 818700 827950 837200 846450 855700 864950 874200 883450 892700 901950 911200 920450 929700 938950 948200 957450 966700 975950 985200 994450 1003700 1012950 1022200 1031450 1040700 1049950 1059200 1068450 1077700 1086950 1096200 1105450 1114700 1123950 1133200 1142450 1151700 1160950 1170200 1179450 1188700 1197950 1207200 1216450 1225700 1234950 1244200 1253450 1262700 1271950 1281200 1290450 1299700 1308950 1318200 1327450 1336700 1345950 1355200 1364450 1373700 1382950 1392200 1401450 1410700 1419950 1429200 1438450 1447700 1456950 1466200 1475450
+ 564850 574200 583550 592900 602250 611600 620950 630300 639650 649000 658350 667700 677050 686400 695750 705100 714450 723800 733150 742500 751850 761200 770550 779900 789250 798600 807950 817300 826650 836000 845350 854700 864050 873400 882750 892100 901450 910800 920150 929500 938850 948200 957550 966900 976250 985600 994950 1004300 1013650 1023000 1032350 1041700 1051050 1060400 1069750 1079100 1088450 1097800 1107150 1116500 1125850 1135200 1144550 1153900 1163250 1172600 1181950 1191300 1200650 1210000 1219350 1228700 1238050 1247400 1256750 1266100 1275450 1284800 1294150 1303500 1312850 1322200 1331550 1340900 1350250 1359600 1368950 1378300 1387650 1397000 1406350 1415700 1425050 1434400 1443750 1453100 1462450 1471800 1481150 1490500
+ 570000 579450 588900 598350 607800 617250 626700 636150 645600 655050 664500 673950 683400 692850 702300 711750 721200 730650 740100 749550 759000 768450 777900 787350 796800 806250 815700 825150 834600 844050 853500 862950 872400 881850 891300 900750 910200 919650 929100 938550 948000 957450 966900 976350 985800 995250 1004700 1014150 1023600 1033050 1042500 1051950 1061400 1070850 1080300 1089750 1099200 1108650 1118100 1127550 1137000 1146450 1155900 1165350 1174800 1184250 1193700 1203150 1212600 1222050 1231500 1240950 1250400 1259850 1269300 1278750 1288200 1297650 1307100 1316550 1326000 1335450 1344900 1354350 1363800 1373250 1382700 1392150 1401600 1411050 1420500 1429950 1439400 1448850 1458300 1467750 1477200 1486650 1496100 1505550
+ 575150 584700 594250 603800 613350 622900 632450 642000 651550 661100 670650 680200 689750 699300 708850 718400 727950 737500 747050 756600 766150 775700 785250 794800 804350 813900 823450 833000 842550 852100 861650 871200 880750 890300 899850 909400 918950 928500 938050 947600 957150 966700 976250 985800 995350 1004900 1014450 1024000 1033550 1043100 1052650 1062200 1071750 1081300 1090850 1100400 1109950 1119500 1129050 1138600 1148150 1157700 1167250 1176800 1186350 1195900 1205450 1215000 1224550 1234100 1243650 1253200 1262750 1272300 1281850 1291400 1300950 1310500 1320050 1329600 1339150 1348700 1358250 1367800 1377350 1386900 1396450 1406000 1415550 1425100 1434650 1444200 1453750 1463300 1472850 1482400 1491950 1501500 1511050 1520600
+ 580300 589950 599600 609250 618900 628550 638200 647850 657500 667150 676800 686450 696100 705750 715400 725050 734700 744350 754000 763650 773300 782950 792600 802250 811900 821550 831200 840850 850500 860150 869800 879450 889100 898750 908400 918050 927700 937350 947000 956650 966300 975950 985600 995250 1004900 1014550 1024200 1033850 1043500 1053150 1062800 1072450 1082100 1091750 1101400 1111050 1120700 1130350 1140000 1149650 1159300 1168950 1178600 1188250 1197900 1207550 1217200 1226850 1236500 1246150 1255800 1265450 1275100 1284750 1294400 1304050 1313700 1323350 1333000 1342650 1352300 1361950 1371600 1381250 1390900 1400550 1410200 1419850 1429500 1439150 1448800 1458450 1468100 1477750 1487400 1497050 1506700 1516350 1526000 1535650
+ 585450 595200 604950 614700 624450 634200 643950 653700 663450 673200 682950 692700 702450 712200 721950 731700 741450 751200 760950 770700 780450 790200 799950 809700 819450 829200 838950 848700 858450 868200 877950 887700 897450 907200 916950 926700 936450 946200 955950 965700 975450 985200 994950 1004700 1014450 1024200 1033950 1043700 1053450 1063200 1072950 1082700 1092450 1102200 1111950 1121700 1131450 1141200 1150950 1160700 1170450 1180200 1189950 1199700 1209450 1219200 1228950 1238700 1248450 1258200 1267950 1277700 1287450 1297200 1306950 1316700 1326450 1336200 1345950 1355700 1365450 1375200 1384950 1394700 1404450 1414200 1423950 1433700 1443450 1453200 1462950 1472700 1482450 1492200 1501950 1511700 1521450 1531200 1540950 1550700
+ 590600 600450 610300 620150 630000 639850 649700 659550 669400 679250 689100 698950 708800 718650 728500 738350 748200 758050 767900 777750 787600 797450 807300 817150 827000 836850 846700 856550 866400 876250 886100 895950 905800 915650 925500 935350 945200 955050 964900 974750 984600 994450 1004300 1014150 1024000 1033850 1043700 1053550 1063400 1073250 1083100 1092950 1102800 1112650 1122500 1132350 1142200 1152050 1161900 1171750 1181600 1191450 1201300 1211150 1221000 1230850 1240700 1250550 1260400 1270250 1280100 1289950 1299800 1309650 1319500 1329350 1339200 1349050 1358900 1368750 1378600 1388450 1398300 1408150 1418000 1427850 1437700 1447550 1457400 1467250 1477100 1486950 1496800 1506650 1516500 1526350 1536200 1546050 1555900 1565750
+ 595750 605700 615650 625600 635550 645500 655450 665400 675350 685300 695250 705200 715150 725100 735050 745000 754950 764900 774850 784800 794750 804700 814650 824600 834550 844500 854450 864400 874350 884300 894250 904200 914150 924100 934050 944000 953950 963900 973850 983800 993750 1003700 1013650 1023600 1033550 1043500 1053450 1063400 1073350 1083300 1093250 1103200 1113150 1123100 1133050 1143000 1152950 1162900 1172850 1182800 1192750 1202700 1212650 1222600 1232550 1242500 1252450 1262400 1272350 1282300 1292250 1302200 1312150 1322100 1332050 1342000 1351950 1361900 1371850 1381800 1391750 1401700 1411650 1421600 1431550 1441500 1451450 1461400 1471350 1481300 1491250 1501200 1511150 1521100 1531050 1541000 1550950 1560900 1570850 1580800
+ 600900 610950 621000 631050 641100 651150 661200 671250 681300 691350 701400 711450 721500 731550 741600 751650 761700 771750 781800 791850 801900 811950 822000 832050 842100 852150 862200 872250 882300 892350 902400 912450 922500 932550 942600 952650 962700 972750 982800 992850 1002900 1012950 1023000 1033050 1043100 1053150 1063200 1073250 1083300 1093350 1103400 1113450 1123500 1133550 1143600 1153650 1163700 1173750 1183800 1193850 1203900 1213950 1224000 1234050 1244100 1254150 1264200 1274250 1284300 1294350 1304400 1314450 1324500 1334550 1344600 1354650 1364700 1374750 1384800 1394850 1404900 1414950 1425000 1435050 1445100 1455150 1465200 1475250 1485300 1495350 1505400 1515450 1525500 1535550 1545600 1555650 1565700 1575750 1585800 1595850
+ 606050 616200 626350 636500 646650 656800 666950 677100 687250 697400 707550 717700 727850 738000 748150 758300 768450 778600 788750 798900 809050 819200 829350 839500 849650 859800 869950 880100 890250 900400 910550 920700 930850 941000 951150 961300 971450 981600 991750 1001900 1012050 1022200 1032350 1042500 1052650 1062800 1072950 1083100 1093250 1103400 1113550 1123700 1133850 1144000 1154150 1164300 1174450 1184600 1194750 1204900 1215050 1225200 1235350 1245500 1255650 1265800 1275950 1286100 1296250 1306400 1316550 1326700 1336850 1347000 1357150 1367300 1377450 1387600 1397750 1407900 1418050 1428200 1438350 1448500 1458650 1468800 1478950 1489100 1499250 1509400 1519550 1529700 1539850 1550000 1560150 1570300 1580450 1590600 1600750 1610900
+ 611200 621450 631700 641950 652200 662450 672700 682950 693200 703450 713700 723950 734200 744450 754700 764950 775200 785450 795700 805950 816200 826450 836700 846950 857200 867450 877700 887950 898200 908450 918700 928950 939200 949450 959700 969950 980200 990450 1000700 1010950 1021200 1031450 1041700 1051950 1062200 1072450 1082700 1092950 1103200 1113450 1123700 1133950 1144200 1154450 1164700 1174950 1185200 1195450 1205700 1215950 1226200 1236450 1246700 1256950 1267200 1277450 1287700 1297950 1308200 1318450 1328700 1338950 1349200 1359450 1369700 1379950 1390200 1400450 1410700 1420950 1431200 1441450 1451700 1461950 1472200 1482450 1492700 1502950 1513200 1523450 1533700 1543950 1554200 1564450 1574700 1584950 1595200 1605450 1615700 1625950
+ 616350 626700 637050 647400 657750 668100 678450 688800 699150 709500 719850 730200 740550 750900 761250 771600 781950 792300 802650 813000 823350 833700 844050 854400 864750 875100 885450 895800 906150 916500 926850 937200 947550 957900 968250 978600 988950 999300 1009650 1020000 1030350 1040700 1051050 1061400 1071750 1082100 1092450 1102800 1113150 1123500 1133850 1144200 1154550 1164900 1175250 1185600 1195950 1206300 1216650 1227000 1237350 1247700 1258050 1268400 1278750 1289100 1299450 1309800 1320150 1330500 1340850 1351200 1361550 1371900 1382250 1392600 1402950 1413300 1423650 1434000 1444350 1454700 1465050 1475400 1485750 1496100 1506450 1516800 1527150 1537500 1547850 1558200 1568550 1578900 1589250 1599600 1609950 1620300 1630650 1641000
+ 621500 631950 642400 652850 663300 673750 684200 694650 705100 715550 726000 736450 746900 757350 767800 778250 788700 799150 809600 820050 830500 840950 851400 861850 872300 882750 893200 903650 914100 924550 935000 945450 955900 966350 976800 987250 997700 1008150 1018600 1029050 1039500 1049950 1060400 1070850 1081300 1091750 1102200 1112650 1123100 1133550 1144000 1154450 1164900 1175350 1185800 1196250 1206700 1217150 1227600 1238050 1248500 1258950 1269400 1279850 1290300 1300750 1311200 1321650 1332100 1342550 1353000 1363450 1373900 1384350 1394800 1405250 1415700 1426150 1436600 1447050 1457500 1467950 1478400 1488850 1499300 1509750 1520200 1530650 1541100 1551550 1562000 1572450 1582900 1593350 1603800 1614250 1624700 1635150 1645600 1656050
+ 626650 637200 647750 658300 668850 679400 689950 700500 711050 721600 732150 742700 753250 763800 774350 784900 795450 806000 816550 827100 837650 848200 858750 869300 879850 890400 900950 911500 922050 932600 943150 953700 964250 974800 985350 995900 1006450 1017000 1027550 1038100 1048650 1059200 1069750 1080300 1090850 1101400 1111950 1122500 1133050 1143600 1154150 1164700 1175250 1185800 1196350 1206900 1217450 1228000 1238550 1249100 1259650 1270200 1280750 1291300 1301850 1312400 1322950 1333500 1344050 1354600 1365150 1375700 1386250 1396800 1407350 1417900 1428450 1439000 1449550 1460100 1470650 1481200 1491750 1502300 1512850 1523400 1533950 1544500 1555050 1565600 1576150 1586700 1597250 1607800 1618350 1628900 1639450 1650000 1660550 1671100
+ 631800 642450 653100 663750 674400 685050 695700 706350 717000 727650 738300 748950 759600 770250 780900 791550 802200 812850 823500 834150 844800 855450 866100 876750 887400 898050 908700 919350 930000 940650 951300 961950 972600 983250 993900 1004550 1015200 1025850 1036500 1047150 1057800 1068450 1079100 1089750 1100400 1111050 1121700 1132350 1143000 1153650 1164300 1174950 1185600 1196250 1206900 1217550 1228200 1238850 1249500 1260150 1270800 1281450 1292100 1302750 1313400 1324050 1334700 1345350 1356000 1366650 1377300 1387950 1398600 1409250 1419900 1430550 1441200 1451850 1462500 1473150 1483800 1494450 1505100 1515750 1526400 1537050 1547700 1558350 1569000 1579650 1590300 1600950 1611600 1622250 1632900 1643550 1654200 1664850 1675500 1686150
+ 636950 647700 658450 669200 679950 690700 701450 712200 722950 733700 744450 755200 765950 776700 787450 798200 808950 819700 830450 841200 851950 862700 873450 884200 894950 905700 916450 927200 937950 948700 959450 970200 980950 991700 1002450 1013200 1023950 1034700 1045450 1056200 1066950 1077700 1088450 1099200 1109950 1120700 1131450 1142200 1152950 1163700 1174450 1185200 1195950 1206700 1217450 1228200 1238950 1249700 1260450 1271200 1281950 1292700 1303450 1314200 1324950 1335700 1346450 1357200 1367950 1378700 1389450 1400200 1410950 1421700 1432450 1443200 1453950 1464700 1475450 1486200 1496950 1507700 1518450 1529200 1539950 1550700 1561450 1572200 1582950 1593700 1604450 1615200 1625950 1636700 1647450 1658200 1668950 1679700 1690450 1701200
+ 642100 652950 663800 674650 685500 696350 707200 718050 728900 739750 750600 761450 772300 783150 794000 804850 815700 826550 837400 848250 859100 869950 880800 891650 902500 913350 924200 935050 945900 956750 967600 978450 989300 1000150 1011000 1021850 1032700 1043550 1054400 1065250 1076100 1086950 1097800 1108650 1119500 1130350 1141200 1152050 1162900 1173750 1184600 1195450 1206300 1217150 1228000 1238850 1249700 1260550 1271400 1282250 1293100 1303950 1314800 1325650 1336500 1347350 1358200 1369050 1379900 1390750 1401600 1412450 1423300 1434150 1445000 1455850 1466700 1477550 1488400 1499250 1510100 1520950 1531800 1542650 1553500 1564350 1575200 1586050 1596900 1607750 1618600 1629450 1640300 1651150 1662000 1672850 1683700 1694550 1705400 1716250
+ 647250 658200 669150 680100 691050 702000 712950 723900 734850 745800 756750 767700 778650 789600 800550 811500 822450 833400 844350 855300 866250 877200 888150 899100 910050 921000 931950 942900 953850 964800 975750 986700 997650 1008600 1019550 1030500 1041450 1052400 1063350 1074300 1085250 1096200 1107150 1118100 1129050 1140000 1150950 1161900 1172850 1183800 1194750 1205700 1216650 1227600 1238550 1249500 1260450 1271400 1282350 1293300 1304250 1315200 1326150 1337100 1348050 1359000 1369950 1380900 1391850 1402800 1413750 1424700 1435650 1446600 1457550 1468500 1479450 1490400 1501350 1512300 1523250 1534200 1545150 1556100 1567050 1578000 1588950 1599900 1610850 1621800 1632750 1643700 1654650 1665600 1676550 1687500 1698450 1709400 1720350 1731300
+ 652400 663450 674500 685550 696600 707650 718700 729750 740800 751850 762900 773950 785000 796050 807100 818150 829200 840250 851300 862350 873400 884450 895500 906550 917600 928650 939700 950750 961800 972850 983900 994950 1006000 1017050 1028100 1039150 1050200 1061250 1072300 1083350 1094400 1105450 1116500 1127550 1138600 1149650 1160700 1171750 1182800 1193850 1204900 1215950 1227000 1238050 1249100 1260150 1271200 1282250 1293300 1304350 1315400 1326450 1337500 1348550 1359600 1370650 1381700 1392750 1403800 1414850 1425900 1436950 1448000 1459050 1470100 1481150 1492200 1503250 1514300 1525350 1536400 1547450 1558500 1569550 1580600 1591650 1602700 1613750 1624800 1635850 1646900 1657950 1669000 1680050 1691100 1702150 1713200 1724250 1735300 1746350
+ 657550 668700 679850 691000 702150 713300 724450 735600 746750 757900 769050 780200 791350 802500 813650 824800 835950 847100 858250 869400 880550 891700 902850 914000 925150 936300 947450 958600 969750 980900 992050 1003200 1014350 1025500 1036650 1047800 1058950 1070100 1081250 1092400 1103550 1114700 1125850 1137000 1148150 1159300 1170450 1181600 1192750 1203900 1215050 1226200 1237350 1248500 1259650 1270800 1281950 1293100 1304250 1315400 1326550 1337700 1348850 1360000 1371150 1382300 1393450 1404600 1415750 1426900 1438050 1449200 1460350 1471500 1482650 1493800 1504950 1516100 1527250 1538400 1549550 1560700 1571850 1583000 1594150 1605300 1616450 1627600 1638750 1649900 1661050 1672200 1683350 1694500 1705650 1716800 1727950 1739100 1750250 1761400
+ 662700 673950 685200 696450 707700 718950 730200 741450 752700 763950 775200 786450 797700 808950 820200 831450 842700 853950 865200 876450 887700 898950 910200 921450 932700 943950 955200 966450 977700 988950 1000200 1011450 1022700 1033950 1045200 1056450 1067700 1078950 1090200 1101450 1112700 1123950 1135200 1146450 1157700 1168950 1180200 1191450 1202700 1213950 1225200 1236450 1247700 1258950 1270200 1281450 1292700 1303950 1315200 1326450 1337700 1348950 1360200 1371450 1382700 1393950 1405200 1416450 1427700 1438950 1450200 1461450 1472700 1483950 1495200 1506450 1517700 1528950 1540200 1551450 1562700 1573950 1585200 1596450 1607700 1618950 1630200 1641450 1652700 1663950 1675200 1686450 1697700 1708950 1720200 1731450 1742700 1753950 1765200 1776450
+ 667850 679200 690550 701900 713250 724600 735950 747300 758650 770000 781350 792700 804050 815400 826750 838100 849450 860800 872150 883500 894850 906200 917550 928900 940250 951600 962950 974300 985650 997000 1008350 1019700 1031050 1042400 1053750 1065100 1076450 1087800 1099150 1110500 1121850 1133200 1144550 1155900 1167250 1178600 1189950 1201300 1212650 1224000 1235350 1246700 1258050 1269400 1280750 1292100 1303450 1314800 1326150 1337500 1348850 1360200 1371550 1382900 1394250 1405600 1416950 1428300 1439650 1451000 1462350 1473700 1485050 1496400 1507750 1519100 1530450 1541800 1553150 1564500 1575850 1587200 1598550 1609900 1621250 1632600 1643950 1655300 1666650 1678000 1689350 1700700 1712050 1723400 1734750 1746100 1757450 1768800 1780150 1791500
+ 673000 684450 695900 707350 718800 730250 741700 753150 764600 776050 787500 798950 810400 821850 833300 844750 856200 867650 879100 890550 902000 913450 924900 936350 947800 959250 970700 982150 993600 1005050 1016500 1027950 1039400 1050850 1062300 1073750 1085200 1096650 1108100 1119550 1131000 1142450 1153900 1165350 1176800 1188250 1199700 1211150 1222600 1234050 1245500 1256950 1268400 1279850 1291300 1302750 1314200 1325650 1337100 1348550 1360000 1371450 1382900 1394350 1405800 1417250 1428700 1440150 1451600 1463050 1474500 1485950 1497400 1508850 1520300 1531750 1543200 1554650 1566100 1577550 1589000 1600450 1611900 1623350 1634800 1646250 1657700 1669150 1680600 1692050 1703500 1714950 1726400 1737850 1749300 1760750 1772200 1783650 1795100 1806550
+ 678150 689700 701250 712800 724350 735900 747450 759000 770550 782100 793650 805200 816750 828300 839850 851400 862950 874500 886050 897600 909150 920700 932250 943800 955350 966900 978450 990000 1001550 1013100 1024650 1036200 1047750 1059300 1070850 1082400 1093950 1105500 1117050 1128600 1140150 1151700 1163250 1174800 1186350 1197900 1209450 1221000 1232550 1244100 1255650 1267200 1278750 1290300 1301850 1313400 1324950 1336500 1348050 1359600 1371150 1382700 1394250 1405800 1417350 1428900 1440450 1452000 1463550 1475100 1486650 1498200 1509750 1521300 1532850 1544400 1555950 1567500 1579050 1590600 1602150 1613700 1625250 1636800 1648350 1659900 1671450 1683000 1694550 1706100 1717650 1729200 1740750 1752300 1763850 1775400 1786950 1798500 1810050 1821600
+ 683300 694950 706600 718250 729900 741550 753200 764850 776500 788150 799800 811450 823100 834750 846400 858050 869700 881350 893000 904650 916300 927950 939600 951250 962900 974550 986200 997850 1009500 1021150 1032800 1044450 1056100 1067750 1079400 1091050 1102700 1114350 1126000 1137650 1149300 1160950 1172600 1184250 1195900 1207550 1219200 1230850 1242500 1254150 1265800 1277450 1289100 1300750 1312400 1324050 1335700 1347350 1359000 1370650 1382300 1393950 1405600 1417250 1428900 1440550 1452200 1463850 1475500 1487150 1498800 1510450 1522100 1533750 1545400 1557050 1568700 1580350 1592000 1603650 1615300 1626950 1638600 1650250 1661900 1673550 1685200 1696850 1708500 1720150 1731800 1743450 1755100 1766750 1778400 1790050 1801700 1813350 1825000 1836650
+ 688450 700200 711950 723700 735450 747200 758950 770700 782450 794200 805950 817700 829450 841200 852950 864700 876450 888200 899950 911700 923450 935200 946950 958700 970450 982200 993950 1005700 1017450 1029200 1040950 1052700 1064450 1076200 1087950 1099700 1111450 1123200 1134950 1146700 1158450 1170200 1181950 1193700 1205450 1217200 1228950 1240700 1252450 1264200 1275950 1287700 1299450 1311200 1322950 1334700 1346450 1358200 1369950 1381700 1393450 1405200 1416950 1428700 1440450 1452200 1463950 1475700 1487450 1499200 1510950 1522700 1534450 1546200 1557950 1569700 1581450 1593200 1604950 1616700 1628450 1640200 1651950 1663700 1675450 1687200 1698950 1710700 1722450 1734200 1745950 1757700 1769450 1781200 1792950 1804700 1816450 1828200 1839950 1851700
+ 693600 705450 717300 729150 741000 752850 764700 776550 788400 800250 812100 823950 835800 847650 859500 871350 883200 895050 906900 918750 930600 942450 954300 966150 978000 989850 1001700 1013550 1025400 1037250 1049100 1060950 1072800 1084650 1096500 1108350 1120200 1132050 1143900 1155750 1167600 1179450 1191300 1203150 1215000 1226850 1238700 1250550 1262400 1274250 1286100 1297950 1309800 1321650 1333500 1345350 1357200 1369050 1380900 1392750 1404600 1416450 1428300 1440150 1452000 1463850 1475700 1487550 1499400 1511250 1523100 1534950 1546800 1558650 1570500 1582350 1594200 1606050 1617900 1629750 1641600 1653450 1665300 1677150 1689000 1700850 1712700 1724550 1736400 1748250 1760100 1771950 1783800 1795650 1807500 1819350 1831200 1843050 1854900 1866750
+ 698750 710700 722650 734600 746550 758500 770450 782400 794350 806300 818250 830200 842150 854100 866050 878000 889950 901900 913850 925800 937750 949700 961650 973600 985550 997500 1009450 1021400 1033350 1045300 1057250 1069200 1081150 1093100 1105050 1117000 1128950 1140900 1152850 1164800 1176750 1188700 1200650 1212600 1224550 1236500 1248450 1260400 1272350 1284300 1296250 1308200 1320150 1332100 1344050 1356000 1367950 1379900 1391850 1403800 1415750 1427700 1439650 1451600 1463550 1475500 1487450 1499400 1511350 1523300 1535250 1547200 1559150 1571100 1583050 1595000 1606950 1618900 1630850 1642800 1654750 1666700 1678650 1690600 1702550 1714500 1726450 1738400 1750350 1762300 1774250 1786200 1798150 1810100 1822050 1834000 1845950 1857900 1869850 1881800
+ 703900 715950 728000 740050 752100 764150 776200 788250 800300 812350 824400 836450 848500 860550 872600 884650 896700 908750 920800 932850 944900 956950 969000 981050 993100 1005150 1017200 1029250 1041300 1053350 1065400 1077450 1089500 1101550 1113600 1125650 1137700 1149750 1161800 1173850 1185900 1197950 1210000 1222050 1234100 1246150 1258200 1270250 1282300 1294350 1306400 1318450 1330500 1342550 1354600 1366650 1378700 1390750 1402800 1414850 1426900 1438950 1451000 1463050 1475100 1487150 1499200 1511250 1523300 1535350 1547400 1559450 1571500 1583550 1595600 1607650 1619700 1631750 1643800 1655850 1667900 1679950 1692000 1704050 1716100 1728150 1740200 1752250 1764300 1776350 1788400 1800450 1812500 1824550 1836600 1848650 1860700 1872750 1884800 1896850
+ 709050 721200 733350 745500 757650 769800 781950 794100 806250 818400 830550 842700 854850 867000 879150 891300 903450 915600 927750 939900 952050 964200 976350 988500 1000650 1012800 1024950 1037100 1049250 1061400 1073550 1085700 1097850 1110000 1122150 1134300 1146450 1158600 1170750 1182900 1195050 1207200 1219350 1231500 1243650 1255800 1267950 1280100 1292250 1304400 1316550 1328700 1340850 1353000 1365150 1377300 1389450 1401600 1413750 1425900 1438050 1450200 1462350 1474500 1486650 1498800 1510950 1523100 1535250 1547400 1559550 1571700 1583850 1596000 1608150 1620300 1632450 1644600 1656750 1668900 1681050 1693200 1705350 1717500 1729650 1741800 1753950 1766100 1778250 1790400 1802550 1814700 1826850 1839000 1851150 1863300 1875450 1887600 1899750 1911900
+ 714200 726450 738700 750950 763200 775450 787700 799950 812200 824450 836700 848950 861200 873450 885700 897950 910200 922450 934700 946950 959200 971450 983700 995950 1008200 1020450 1032700 1044950 1057200 1069450 1081700 1093950 1106200 1118450 1130700 1142950 1155200 1167450 1179700 1191950 1204200 1216450 1228700 1240950 1253200 1265450 1277700 1289950 1302200 1314450 1326700 1338950 1351200 1363450 1375700 1387950 1400200 1412450 1424700 1436950 1449200 1461450 1473700 1485950 1498200 1510450 1522700 1534950 1547200 1559450 1571700 1583950 1596200 1608450 1620700 1632950 1645200 1657450 1669700 1681950 1694200 1706450 1718700 1730950 1743200 1755450 1767700 1779950 1792200 1804450 1816700 1828950 1841200 1853450 1865700 1877950 1890200 1902450 1914700 1926950
+ 719350 731700 744050 756400 768750 781100 793450 805800 818150 830500 842850 855200 867550 879900 892250 904600 916950 929300 941650 954000 966350 978700 991050 1003400 1015750 1028100 1040450 1052800 1065150 1077500 1089850 1102200 1114550 1126900 1139250 1151600 1163950 1176300 1188650 1201000 1213350 1225700 1238050 1250400 1262750 1275100 1287450 1299800 1312150 1324500 1336850 1349200 1361550 1373900 1386250 1398600 1410950 1423300 1435650 1448000 1460350 1472700 1485050 1497400 1509750 1522100 1534450 1546800 1559150 1571500 1583850 1596200 1608550 1620900 1633250 1645600 1657950 1670300 1682650 1695000 1707350 1719700 1732050 1744400 1756750 1769100 1781450 1793800 1806150 1818500 1830850 1843200 1855550 1867900 1880250 1892600 1904950 1917300 1929650 1942000
+ 724500 736950 749400 761850 774300 786750 799200 811650 824100 836550 849000 861450 873900 886350 898800 911250 923700 936150 948600 961050 973500 985950 998400 1010850 1023300 1035750 1048200 1060650 1073100 1085550 1098000 1110450 1122900 1135350 1147800 1160250 1172700 1185150 1197600 1210050 1222500 1234950 1247400 1259850 1272300 1284750 1297200 1309650 1322100 1334550 1347000 1359450 1371900 1384350 1396800 1409250 1421700 1434150 1446600 1459050 1471500 1483950 1496400 1508850 1521300 1533750 1546200 1558650 1571100 1583550 1596000 1608450 1620900 1633350 1645800 1658250 1670700 1683150 1695600 1708050 1720500 1732950 1745400 1757850 1770300 1782750 1795200 1807650 1820100 1832550 1845000 1857450 1869900 1882350 1894800 1907250 1919700 1932150 1944600 1957050
+ 729650 742200 754750 767300 779850 792400 804950 817500 830050 842600 855150 867700 880250 892800 905350 917900 930450 943000 955550 968100 980650 993200 1005750 1018300 1030850 1043400 1055950 1068500 1081050 1093600 1106150 1118700 1131250 1143800 1156350 1168900 1181450 1194000 1206550 1219100 1231650 1244200 1256750 1269300 1281850 1294400 1306950 1319500 1332050 1344600 1357150 1369700 1382250 1394800 1407350 1419900 1432450 1445000 1457550 1470100 1482650 1495200 1507750 1520300 1532850 1545400 1557950 1570500 1583050 1595600 1608150 1620700 1633250 1645800 1658350 1670900 1683450 1696000 1708550 1721100 1733650 1746200 1758750 1771300 1783850 1796400 1808950 1821500 1834050 1846600 1859150 1871700 1884250 1896800 1909350 1921900 1934450 1947000 1959550 1972100
+ 734800 747450 760100 772750 785400 798050 810700 823350 836000 848650 861300 873950 886600 899250 911900 924550 937200 949850 962500 975150 987800 1000450 1013100 1025750 1038400 1051050 1063700 1076350 1089000 1101650 1114300 1126950 1139600 1152250 1164900 1177550 1190200 1202850 1215500 1228150 1240800 1253450 1266100 1278750 1291400 1304050 1316700 1329350 1342000 1354650 1367300 1379950 1392600 1405250 1417900 1430550 1443200 1455850 1468500 1481150 1493800 1506450 1519100 1531750 1544400 1557050 1569700 1582350 1595000 1607650 1620300 1632950 1645600 1658250 1670900 1683550 1696200 1708850 1721500 1734150 1746800 1759450 1772100 1784750 1797400 1810050 1822700 1835350 1848000 1860650 1873300 1885950 1898600 1911250 1923900 1936550 1949200 1961850 1974500 1987150
+ 739950 752700 765450 778200 790950 803700 816450 829200 841950 854700 867450 880200 892950 905700 918450 931200 943950 956700 969450 982200 994950 1007700 1020450 1033200 1045950 1058700 1071450 1084200 1096950 1109700 1122450 1135200 1147950 1160700 1173450 1186200 1198950 1211700 1224450 1237200 1249950 1262700 1275450 1288200 1300950 1313700 1326450 1339200 1351950 1364700 1377450 1390200 1402950 1415700 1428450 1441200 1453950 1466700 1479450 1492200 1504950 1517700 1530450 1543200 1555950 1568700 1581450 1594200 1606950 1619700 1632450 1645200 1657950 1670700 1683450 1696200 1708950 1721700 1734450 1747200 1759950 1772700 1785450 1798200 1810950 1823700 1836450 1849200 1861950 1874700 1887450 1900200 1912950 1925700 1938450 1951200 1963950 1976700 1989450 2002200
+ 745100 757950 770800 783650 796500 809350 822200 835050 847900 860750 873600 886450 899300 912150 925000 937850 950700 963550 976400 989250 1002100 1014950 1027800 1040650 1053500 1066350 1079200 1092050 1104900 1117750 1130600 1143450 1156300 1169150 1182000 1194850 1207700 1220550 1233400 1246250 1259100 1271950 1284800 1297650 1310500 1323350 1336200 1349050 1361900 1374750 1387600 1400450 1413300 1426150 1439000 1451850 1464700 1477550 1490400 1503250 1516100 1528950 1541800 1554650 1567500 1580350 1593200 1606050 1618900 1631750 1644600 1657450 1670300 1683150 1696000 1708850 1721700 1734550 1747400 1760250 1773100 1785950 1798800 1811650 1824500 1837350 1850200 1863050 1875900 1888750 1901600 1914450 1927300 1940150 1953000 1965850 1978700 1991550 2004400 2017250
+ 750250 763200 776150 789100 802050 815000 827950 840900 853850 866800 879750 892700 905650 918600 931550 944500 957450 970400 983350 996300 1009250 1022200 1035150 1048100 1061050 1074000 1086950 1099900 1112850 1125800 1138750 1151700 1164650 1177600 1190550 1203500 1216450 1229400 1242350 1255300 1268250 1281200 1294150 1307100 1320050 1333000 1345950 1358900 1371850 1384800 1397750 1410700 1423650 1436600 1449550 1462500 1475450 1488400 1501350 1514300 1527250 1540200 1553150 1566100 1579050 1592000 1604950 1617900 1630850 1643800 1656750 1669700 1682650 1695600 1708550 1721500 1734450 1747400 1760350 1773300 1786250 1799200 1812150 1825100 1838050 1851000 1863950 1876900 1889850 1902800 1915750 1928700 1941650 1954600 1967550 1980500 1993450 2006400 2019350 2032300
+ 755400 768450 781500 794550 807600 820650 833700 846750 859800 872850 885900 898950 912000 925050 938100 951150 964200 977250 990300 1003350 1016400 1029450 1042500 1055550 1068600 1081650 1094700 1107750 1120800 1133850 1146900 1159950 1173000 1186050 1199100 1212150 1225200 1238250 1251300 1264350 1277400 1290450 1303500 1316550 1329600 1342650 1355700 1368750 1381800 1394850 1407900 1420950 1434000 1447050 1460100 1473150 1486200 1499250 1512300 1525350 1538400 1551450 1564500 1577550 1590600 1603650 1616700 1629750 1642800 1655850 1668900 1681950 1695000 1708050 1721100 1734150 1747200 1760250 1773300 1786350 1799400 1812450 1825500 1838550 1851600 1864650 1877700 1890750 1903800 1916850 1929900 1942950 1956000 1969050 1982100 1995150 2008200 2021250 2034300 2047350
+ 760550 773700 786850 800000 813150 826300 839450 852600 865750 878900 892050 905200 918350 931500 944650 957800 970950 984100 997250 1010400 1023550 1036700 1049850 1063000 1076150 1089300 1102450 1115600 1128750 1141900 1155050 1168200 1181350 1194500 1207650 1220800 1233950 1247100 1260250 1273400 1286550 1299700 1312850 1326000 1339150 1352300 1365450 1378600 1391750 1404900 1418050 1431200 1444350 1457500 1470650 1483800 1496950 1510100 1523250 1536400 1549550 1562700 1575850 1589000 1602150 1615300 1628450 1641600 1654750 1667900 1681050 1694200 1707350 1720500 1733650 1746800 1759950 1773100 1786250 1799400 1812550 1825700 1838850 1852000 1865150 1878300 1891450 1904600 1917750 1930900 1944050 1957200 1970350 1983500 1996650 2009800 2022950 2036100 2049250 2062400
+ 765700 778950 792200 805450 818700 831950 845200 858450 871700 884950 898200 911450 924700 937950 951200 964450 977700 990950 1004200 1017450 1030700 1043950 1057200 1070450 1083700 1096950 1110200 1123450 1136700 1149950 1163200 1176450 1189700 1202950 1216200 1229450 1242700 1255950 1269200 1282450 1295700 1308950 1322200 1335450 1348700 1361950 1375200 1388450 1401700 1414950 1428200 1441450 1454700 1467950 1481200 1494450 1507700 1520950 1534200 1547450 1560700 1573950 1587200 1600450 1613700 1626950 1640200 1653450 1666700 1679950 1693200 1706450 1719700 1732950 1746200 1759450 1772700 1785950 1799200 1812450 1825700 1838950 1852200 1865450 1878700 1891950 1905200 1918450 1931700 1944950 1958200 1971450 1984700 1997950 2011200 2024450 2037700 2050950 2064200 2077450
+ 770850 784200 797550 810900 824250 837600 850950 864300 877650 891000 904350 917700 931050 944400 957750 971100 984450 997800 1011150 1024500 1037850 1051200 1064550 1077900 1091250 1104600 1117950 1131300 1144650 1158000 1171350 1184700 1198050 1211400 1224750 1238100 1251450 1264800 1278150 1291500 1304850 1318200 1331550 1344900 1358250 1371600 1384950 1398300 1411650 1425000 1438350 1451700 1465050 1478400 1491750 1505100 1518450 1531800 1545150 1558500 1571850 1585200 1598550 1611900 1625250 1638600 1651950 1665300 1678650 1692000 1705350 1718700 1732050 1745400 1758750 1772100 1785450 1798800 1812150 1825500 1838850 1852200 1865550 1878900 1892250 1905600 1918950 1932300 1945650 1959000 1972350 1985700 1999050 2012400 2025750 2039100 2052450 2065800 2079150 2092500
+ 776000 789450 802900 816350 829800 843250 856700 870150 883600 897050 910500 923950 937400 950850 964300 977750 991200 1004650 1018100 1031550 1045000 1058450 1071900 1085350 1098800 1112250 1125700 1139150 1152600 1166050 1179500 1192950 1206400 1219850 1233300 1246750 1260200 1273650 1287100 1300550 1314000 1327450 1340900 1354350 1367800 1381250 1394700 1408150 1421600 1435050 1448500 1461950 1475400 1488850 1502300 1515750 1529200 1542650 1556100 1569550 1583000 1596450 1609900 1623350 1636800 1650250 1663700 1677150 1690600 1704050 1717500 1730950 1744400 1757850 1771300 1784750 1798200 1811650 1825100 1838550 1852000 1865450 1878900 1892350 1905800 1919250 1932700 1946150 1959600 1973050 1986500 1999950 2013400 2026850 2040300 2053750 2067200 2080650 2094100 2107550
+ 781150 794700 808250 821800 835350 848900 862450 876000 889550 903100 916650 930200 943750 957300 970850 984400 997950 1011500 1025050 1038600 1052150 1065700 1079250 1092800 1106350 1119900 1133450 1147000 1160550 1174100 1187650 1201200 1214750 1228300 1241850 1255400 1268950 1282500 1296050 1309600 1323150 1336700 1350250 1363800 1377350 1390900 1404450 1418000 1431550 1445100 1458650 1472200 1485750 1499300 1512850 1526400 1539950 1553500 1567050 1580600 1594150 1607700 1621250 1634800 1648350 1661900 1675450 1689000 1702550 1716100 1729650 1743200 1756750 1770300 1783850 1797400 1810950 1824500 1838050 1851600 1865150 1878700 1892250 1905800 1919350 1932900 1946450 1960000 1973550 1987100 2000650 2014200 2027750 2041300 2054850 2068400 2081950 2095500 2109050 2122600
+ 786300 799950 813600 827250 840900 854550 868200 881850 895500 909150 922800 936450 950100 963750 977400 991050 1004700 1018350 1032000 1045650 1059300 1072950 1086600 1100250 1113900 1127550 1141200 1154850 1168500 1182150 1195800 1209450 1223100 1236750 1250400 1264050 1277700 1291350 1305000 1318650 1332300 1345950 1359600 1373250 1386900 1400550 1414200 1427850 1441500 1455150 1468800 1482450 1496100 1509750 1523400 1537050 1550700 1564350 1578000 1591650 1605300 1618950 1632600 1646250 1659900 1673550 1687200 1700850 1714500 1728150 1741800 1755450 1769100 1782750 1796400 1810050 1823700 1837350 1851000 1864650 1878300 1891950 1905600 1919250 1932900 1946550 1960200 1973850 1987500 2001150 2014800 2028450 2042100 2055750 2069400 2083050 2096700 2110350 2124000 2137650
+ 791450 805200 818950 832700 846450 860200 873950 887700 901450 915200 928950 942700 956450 970200 983950 997700 1011450 1025200 1038950 1052700 1066450 1080200 1093950 1107700 1121450 1135200 1148950 1162700 1176450 1190200 1203950 1217700 1231450 1245200 1258950 1272700 1286450 1300200 1313950 1327700 1341450 1355200 1368950 1382700 1396450 1410200 1423950 1437700 1451450 1465200 1478950 1492700 1506450 1520200 1533950 1547700 1561450 1575200 1588950 1602700 1616450 1630200 1643950 1657700 1671450 1685200 1698950 1712700 1726450 1740200 1753950 1767700 1781450 1795200 1808950 1822700 1836450 1850200 1863950 1877700 1891450 1905200 1918950 1932700 1946450 1960200 1973950 1987700 2001450 2015200 2028950 2042700 2056450 2070200 2083950 2097700 2111450 2125200 2138950 2152700
+ 796600 810450 824300 838150 852000 865850 879700 893550 907400 921250 935100 948950 962800 976650 990500 1004350 1018200 1032050 1045900 1059750 1073600 1087450 1101300 1115150 1129000 1142850 1156700 1170550 1184400 1198250 1212100 1225950 1239800 1253650 1267500 1281350 1295200 1309050 1322900 1336750 1350600 1364450 1378300 1392150 1406000 1419850 1433700 1447550 1461400 1475250 1489100 1502950 1516800 1530650 1544500 1558350 1572200 1586050 1599900 1613750 1627600 1641450 1655300 1669150 1683000 1696850 1710700 1724550 1738400 1752250 1766100 1779950 1793800 1807650 1821500 1835350 1849200 1863050 1876900 1890750 1904600 1918450 1932300 1946150 1960000 1973850 1987700 2001550 2015400 2029250 2043100 2056950 2070800 2084650 2098500 2112350 2126200 2140050 2153900 2167750
+ 801750 815700 829650 843600 857550 871500 885450 899400 913350 927300 941250 955200 969150 983100 997050 1011000 1024950 1038900 1052850 1066800 1080750 1094700 1108650 1122600 1136550 1150500 1164450 1178400 1192350 1206300 1220250 1234200 1248150 1262100 1276050 1290000 1303950 1317900 1331850 1345800 1359750 1373700 1387650 1401600 1415550 1429500 1443450 1457400 1471350 1485300 1499250 1513200 1527150 1541100 1555050 1569000 1582950 1596900 1610850 1624800 1638750 1652700 1666650 1680600 1694550 1708500 1722450 1736400 1750350 1764300 1778250 1792200 1806150 1820100 1834050 1848000 1861950 1875900 1889850 1903800 1917750 1931700 1945650 1959600 1973550 1987500 2001450 2015400 2029350 2043300 2057250 2071200 2085150 2099100 2113050 2127000 2140950 2154900 2168850 2182800
+ 806900 820950 835000 849050 863100 877150 891200 905250 919300 933350 947400 961450 975500 989550 1003600 1017650 1031700 1045750 1059800 1073850 1087900 1101950 1116000 1130050 1144100 1158150 1172200 1186250 1200300 1214350 1228400 1242450 1256500 1270550 1284600 1298650 1312700 1326750 1340800 1354850 1368900 1382950 1397000 1411050 1425100 1439150 1453200 1467250 1481300 1495350 1509400 1523450 1537500 1551550 1565600 1579650 1593700 1607750 1621800 1635850 1649900 1663950 1678000 1692050 1706100 1720150 1734200 1748250 1762300 1776350 1790400 1804450 1818500 1832550 1846600 1860650 1874700 1888750 1902800 1916850 1930900 1944950 1959000 1973050 1987100 2001150 2015200 2029250 2043300 2057350 2071400 2085450 2099500 2113550 2127600 2141650 2155700 2169750 2183800 2197850
+ 812050 826200 840350 854500 868650 882800 896950 911100 925250 939400 953550 967700 981850 996000 1010150 1024300 1038450 1052600 1066750 1080900 1095050 1109200 1123350 1137500 1151650 1165800 1179950 1194100 1208250 1222400 1236550 1250700 1264850 1279000 1293150 1307300 1321450 1335600 1349750 1363900 1378050 1392200 1406350 1420500 1434650 1448800 1462950 1477100 1491250 1505400 1519550 1533700 1547850 1562000 1576150 1590300 1604450 1618600 1632750 1646900 1661050 1675200 1689350 1703500 1717650 1731800 1745950 1760100 1774250 1788400 1802550 1816700 1830850 1845000 1859150 1873300 1887450 1901600 1915750 1929900 1944050 1958200 1972350 1986500 2000650 2014800 2028950 2043100 2057250 2071400 2085550 2099700 2113850 2128000 2142150 2156300 2170450 2184600 2198750 2212900
+ 817200 831450 845700 859950 874200 888450 902700 916950 931200 945450 959700 973950 988200 1002450 1016700 1030950 1045200 1059450 1073700 1087950 1102200 1116450 1130700 1144950 1159200 1173450 1187700 1201950 1216200 1230450 1244700 1258950 1273200 1287450 1301700 1315950 1330200 1344450 1358700 1372950 1387200 1401450 1415700 1429950 1444200 1458450 1472700 1486950 1501200 1515450 1529700 1543950 1558200 1572450 1586700 1600950 1615200 1629450 1643700 1657950 1672200 1686450 1700700 1714950 1729200 1743450 1757700 1771950 1786200 1800450 1814700 1828950 1843200 1857450 1871700 1885950 1900200 1914450 1928700 1942950 1957200 1971450 1985700 1999950 2014200 2028450 2042700 2056950 2071200 2085450 2099700 2113950 2128200 2142450 2156700 2170950 2185200 2199450 2213700 2227950
+ 822350 836700 851050 865400 879750 894100 908450 922800 937150 951500 965850 980200 994550 1008900 1023250 1037600 1051950 1066300 1080650 1095000 1109350 1123700 1138050 1152400 1166750 1181100 1195450 1209800 1224150 1238500 1252850 1267200 1281550 1295900 1310250 1324600 1338950 1353300 1367650 1382000 1396350 1410700 1425050 1439400 1453750 1468100 1482450 1496800 1511150 1525500 1539850 1554200 1568550 1582900 1597250 1611600 1625950 1640300 1654650 1669000 1683350 1697700 1712050 1726400 1740750 1755100 1769450 1783800 1798150 1812500 1826850 1841200 1855550 1869900 1884250 1898600 1912950 1927300 1941650 1956000 1970350 1984700 1999050 2013400 2027750 2042100 2056450 2070800 2085150 2099500 2113850 2128200 2142550 2156900 2171250 2185600 2199950 2214300 2228650 2243000
+ 827500 841950 856400 870850 885300 899750 914200 928650 943100 957550 972000 986450 1000900 1015350 1029800 1044250 1058700 1073150 1087600 1102050 1116500 1130950 1145400 1159850 1174300 1188750 1203200 1217650 1232100 1246550 1261000 1275450 1289900 1304350 1318800 1333250 1347700 1362150 1376600 1391050 1405500 1419950 1434400 1448850 1463300 1477750 1492200 1506650 1521100 1535550 1550000 1564450 1578900 1593350 1607800 1622250 1636700 1651150 1665600 1680050 1694500 1708950 1723400 1737850 1752300 1766750 1781200 1795650 1810100 1824550 1839000 1853450 1867900 1882350 1896800 1911250 1925700 1940150 1954600 1969050 1983500 1997950 2012400 2026850 2041300 2055750 2070200 2084650 2099100 2113550 2128000 2142450 2156900 2171350 2185800 2200250 2214700 2229150 2243600 2258050
+ 832650 847200 861750 876300 890850 905400 919950 934500 949050 963600 978150 992700 1007250 1021800 1036350 1050900 1065450 1080000 1094550 1109100 1123650 1138200 1152750 1167300 1181850 1196400 1210950 1225500 1240050 1254600 1269150 1283700 1298250 1312800 1327350 1341900 1356450 1371000 1385550 1400100 1414650 1429200 1443750 1458300 1472850 1487400 1501950 1516500 1531050 1545600 1560150 1574700 1589250 1603800 1618350 1632900 1647450 1662000 1676550 1691100 1705650 1720200 1734750 1749300 1763850 1778400 1792950 1807500 1822050 1836600 1851150 1865700 1880250 1894800 1909350 1923900 1938450 1953000 1967550 1982100 1996650 2011200 2025750 2040300 2054850 2069400 2083950 2098500 2113050 2127600 2142150 2156700 2171250 2185800 2200350 2214900 2229450 2244000 2258550 2273100
+ 837800 852450 867100 881750 896400 911050 925700 940350 955000 969650 984300 998950 1013600 1028250 1042900 1057550 1072200 1086850 1101500 1116150 1130800 1145450 1160100 1174750 1189400 1204050 1218700 1233350 1248000 1262650 1277300 1291950 1306600 1321250 1335900 1350550 1365200 1379850 1394500 1409150 1423800 1438450 1453100 1467750 1482400 1497050 1511700 1526350 1541000 1555650 1570300 1584950 1599600 1614250 1628900 1643550 1658200 1672850 1687500 1702150 1716800 1731450 1746100 1760750 1775400 1790050 1804700 1819350 1834000 1848650 1863300 1877950 1892600 1907250 1921900 1936550 1951200 1965850 1980500 1995150 2009800 2024450 2039100 2053750 2068400 2083050 2097700 2112350 2127000 2141650 2156300 2170950 2185600 2200250 2214900 2229550 2244200 2258850 2273500 2288150
+ 842950 857700 872450 887200 901950 916700 931450 946200 960950 975700 990450 1005200 1019950 1034700 1049450 1064200 1078950 1093700 1108450 1123200 1137950 1152700 1167450 1182200 1196950 1211700 1226450 1241200 1255950 1270700 1285450 1300200 1314950 1329700 1344450 1359200 1373950 1388700 1403450 1418200 1432950 1447700 1462450 1477200 1491950 1506700 1521450 1536200 1550950 1565700 1580450 1595200 1609950 1624700 1639450 1654200 1668950 1683700 1698450 1713200 1727950 1742700 1757450 1772200 1786950 1801700 1816450 1831200 1845950 1860700 1875450 1890200 1904950 1919700 1934450 1949200 1963950 1978700 1993450 2008200 2022950 2037700 2052450 2067200 2081950 2096700 2111450 2126200 2140950 2155700 2170450 2185200 2199950 2214700 2229450 2244200 2258950 2273700 2288450 2303200
+ 848100 862950 877800 892650 907500 922350 937200 952050 966900 981750 996600 1011450 1026300 1041150 1056000 1070850 1085700 1100550 1115400 1130250 1145100 1159950 1174800 1189650 1204500 1219350 1234200 1249050 1263900 1278750 1293600 1308450 1323300 1338150 1353000 1367850 1382700 1397550 1412400 1427250 1442100 1456950 1471800 1486650 1501500 1516350 1531200 1546050 1560900 1575750 1590600 1605450 1620300 1635150 1650000 1664850 1679700 1694550 1709400 1724250 1739100 1753950 1768800 1783650 1798500 1813350 1828200 1843050 1857900 1872750 1887600 1902450 1917300 1932150 1947000 1961850 1976700 1991550 2006400 2021250 2036100 2050950 2065800 2080650 2095500 2110350 2125200 2140050 2154900 2169750 2184600 2199450 2214300 2229150 2244000 2258850 2273700 2288550 2303400 2318250
+ 853250 868200 883150 898100 913050 928000 942950 957900 972850 987800 1002750 1017700 1032650 1047600 1062550 1077500 1092450 1107400 1122350 1137300 1152250 1167200 1182150 1197100 1212050 1227000 1241950 1256900 1271850 1286800 1301750 1316700 1331650 1346600 1361550 1376500 1391450 1406400 1421350 1436300 1451250 1466200 1481150 1496100 1511050 1526000 1540950 1555900 1570850 1585800 1600750 1615700 1630650 1645600 1660550 1675500 1690450 1705400 1720350 1735300 1750250 1765200 1780150 1795100 1810050 1825000 1839950 1854900 1869850 1884800 1899750 1914700 1929650 1944600 1959550 1974500 1989450 2004400 2019350 2034300 2049250 2064200 2079150 2094100 2109050 2124000 2138950 2153900 2168850 2183800 2198750 2213700 2228650 2243600 2258550 2273500 2288450 2303400 2318350 2333300
+
Index: tests/par_conj/impure_wait.m
===================================================================
RCS file: tests/par_conj/impure_wait.m
diff -N tests/par_conj/impure_wait.m
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tests/par_conj/impure_wait.m 31 May 2011 03:23:44 -0000
@@ -0,0 +1,115 @@
+% vim: ts=4 sw=4 et ft=mercury
+
+% Authors : schachte (Peter Schachte)
+% Purpose : Matrix multiply using a list encoding
+%
+% Transliterated from Ciao Prolog
+% Origin: http://www.ciaohome.org/ciao_html/ciao_111.html#SEC458
+%
+% Adopted into a test case by Paul Bone.
+
+:- module impure_wait.
+:- interface.
+
+:- import_module io.
+
+:- pred main(io::di, io::uo) is det.
+
+:- implementation.
+
+:- import_module list, int.
+:- import_module require.
+:- import_module string.
+
+main(!IO) :-
+ Size = 100,
+ matrix(1, Size, M1),
+ matrix(2, Size, M2),
+ mmultiply(M1, M2, M),
+ print_matrix(M, !IO).
+
+:- type matrix == list(list(int)).
+
+:- pred matrix(int::in, int::in, matrix::out) is det.
+
+matrix(M, N, Matrix) :-
+ matrix_rows(M, N, N, Matrix).
+
+:- pred matrix_rows(int::in, int::in, int::in, matrix::out) is det.
+
+matrix_rows(M, N, R, Matrix) :-
+ ( R =< 0 ->
+ Matrix = []
+ ;
+ matrix_row(M, N, Row),
+ matrix_rows(M+1, N, R-1, Rows),
+ Matrix = [Row | Rows]
+ ).
+
+:- pred matrix_row(int::in, int::in, list(int)::out) is det.
+
+matrix_row(M, N, Row) :-
+ ( N = 0 ->
+ Row = []
+ ;
+ matrix_row(M+1, N-1, Ms),
+ Row = [M | Ms]
+ ).
+
+:- pred print_matrix(matrix::in, io::di, io::uo) is det.
+
+print_matrix([], !IO) :-
+ nl(!IO).
+print_matrix([Row | Rows], !IO) :-
+ print_row(Row, !IO),
+ print_matrix(Rows, !IO).
+
+:- pred print_row(list(int)::in, io::di, io::uo) is det.
+
+print_row([], !IO) :-
+ nl(!IO).
+print_row([N | Ns], !IO) :-
+ format(" %8d", [i(N)], !IO),
+ print_row(Ns, !IO).
+
+:- pred mmultiply(matrix::in, matrix::in, matrix::out) is det.
+
+ % One of the auto-parallelisations expands mmultiply in this way. V0
+ % becomes a shared variable and it's wait is pushed into the call to
+ % mutiply, where it is not used by the base case and used by the recursive
+ % case only after the recursive call. Therefore a wait is inserted at the
+ % end of the procedure but optimised out later on.
+mmultiply(L0, V1, L) :-
+ (
+ L0 = [],
+ L = []
+ ;
+ L0 = [_ | Rest],
+ (
+ (
+ mmultiply(Rest, V1, Others),
+ V0 = det_head(L0)
+ )
+ &
+ multiply(V1, V0, Result)
+ ),
+ L = [Result | Others]
+ ).
+
+:- pred multiply(matrix::in, list(int)::in, list(int)::out) is det.
+
+multiply([], _, []).
+multiply([V0 | Rest], V1, [Result | Others]):-
+ multiply(Rest, V1, Others),
+ vmul(V0, V1, Result).
+
+:- pred vmul(list(int)::in, list(int)::in, int::out) is det.
+
+vmul([], [], 0).
+vmul([], [_ | _], _) :-
+ error("mmultiply: incompatible matrix sizes").
+vmul([H1 | T1], [H2 | T2], Result):-
+ vmul(T1, T2, Newresult),
+ Result = H1 * H2 + Newresult.
+vmul([_ | _], [], _) :-
+ error("mmultiply: incompatible matrix sizes").
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 489 bytes
Desc: Digital signature
URL: <http://lists.mercurylang.org/archives/reviews/attachments/20110531/fb4d739f/attachment.sig>
More information about the reviews
mailing list