* [PATCH 1/4] CodeSamples/count: Restore atomic125.eps
2018-12-04 15:27 [PATCH 0/4] Misc updates Akira Yokosawa
@ 2018-12-04 15:28 ` Akira Yokosawa
2018-12-04 15:30 ` [PATCH 2/4] count: Restore 'fig:count:Atomic Increment Scalability on Nehalem' Akira Yokosawa
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Akira Yokosawa @ 2018-12-04 15:28 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
From 01e55591da491ee4b42839383b567e98f051285c Mon Sep 17 00:00:00 2001
From: Akira Yokosawa <akiyks@gmail.com>
Date: Tue, 4 Dec 2018 23:34:53 +0900
Subject: [PATCH 1/4] CodeSamples/count: Restore atomic125.eps
Commit 3b62f67a76e1 ("Regenerating the atomic counter graph on
a more modern CPU") accidentally overwrote atomic125.eps.
Restore it and restore old atomic.eps (of Nehalem) as
atomic_nehalem.eps.
Also restore .png files.
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
CodeSamples/count/atomic125.eps | 856 +++++++------
CodeSamples/count/atomic125.png | Bin 3189 -> 3337 bytes
CodeSamples/count/atomic_nehalem.eps | 2266 ++++++++++++++++++++++++++++++++++
3 files changed, 2752 insertions(+), 370 deletions(-)
create mode 100644 CodeSamples/count/atomic_nehalem.eps
diff --git a/CodeSamples/count/atomic125.eps b/CodeSamples/count/atomic125.eps
index 1e28a27..179f3d4 100644
--- a/CodeSamples/count/atomic125.eps
+++ b/CodeSamples/count/atomic125.eps
@@ -1,7 +1,7 @@
%!PS-Adobe-2.0
%%Title: Is Parallel Programming Hard, And, If So, What Can You Do About It?
-%%Creator: gnuplot 5.0 patchlevel 3
-%%CreationDate: Mon Jul 16 22:02:17 2018
+%%Creator: gnuplot 4.4 patchlevel 0
+%%CreationDate: Wed Jan 5 07:20:51 2011
%%DocumentFonts: (atend)
%%BoundingBox: 50 95 302 355
%%Orientation: Portrait
@@ -20,29 +20,42 @@ gnudict begin
/Dashlength 1 def
/Landscape false def
/Level1 false def
-/Level3 false def
/Rounded false def
/ClipToBoundingBox false def
-/SuppressPDFMark false def
/TransparentPatterns false def
/gnulinewidth 5.000 def
/userlinewidth gnulinewidth def
/Gamma 1.0 def
-/BackgroundColor {-1.000 -1.000 -1.000} def
%
/vshift -33 def
/dl1 {
- 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul
+ 10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
} def
/dl2 {
- 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul
+ 10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul add } if
} def
/hpt_ 31.5 def
/vpt_ 31.5 def
/hpt hpt_ def
/vpt vpt_ def
+Level1 {} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+ userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+ /Title (Is Parallel Programming Hard, And, If So, What Can You Do About It?)
+ /Subject (gnuplot plot)
+ /Creator (gnuplot 4.4 patchlevel 0)
+ /Author (paulmck)
+% /Producer (gnuplot)
+% /Keywords ()
+ /CreationDate (Wed Jan 5 07:20:51 2011)
+ /DOCINFO pdfmark
+end
+} ifelse
/doclip {
ClipToBoundingBox {
newpath 50 50 moveto 302 50 lineto 302 410 lineto 50 410 lineto closepath
@@ -50,7 +63,7 @@ gnudict begin
} if
} def
%
-% Gnuplot Prolog Version 5.1 (Oct 2015)
+% Gnuplot Prolog Version 4.4 (January 2010)
%
%/SuppressPDFMark true def
%
@@ -62,16 +75,15 @@ gnudict begin
/Z {closepath} bind def
/C {setrgbcolor} bind def
/f {rlineto fill} bind def
-/g {setgray} bind def
/Gshow {show} def % May be redefined later in the file to support UTF-8
/vpt2 vpt 2 mul def
/hpt2 hpt 2 mul def
/Lshow {currentpoint stroke M 0 vshift R
- Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
- Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
- Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
/hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
@@ -84,8 +96,7 @@ gnudict begin
dup 1 lt {pop 1} if 10 mul /udl exch def} def
/PL {stroke userlinewidth setlinewidth
Rounded {1 setlinejoin 1 setlinecap} if} def
-3.8 setmiterlimit
-% Classic Line colors (version 5.0)
+% Default Line colors
/LCw {1 1 1} def
/LCb {0 0 0} def
/LCa {0 0 0} def
@@ -98,21 +109,19 @@ gnudict begin
/LC6 {0 0 0} def
/LC7 {1 0.3 0} def
/LC8 {0.5 0.5 0.5} def
-% Default dash patterns (version 5.0)
-/LTB {BL [] LCb DL} def
+% Default Line Types
/LTw {PL [] 1 setgray} def
-/LTb {PL [] LCb DL} def
+/LTb {BL [] LCb DL} def
/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
/LT0 {PL [] LC0 DL} def
-/LT1 {PL [2 dl1 3 dl2] LC1 DL} def
-/LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def
-/LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def
-/LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
-/LT5 {PL [4 dl1 2 dl2] LC5 DL} def
-/LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def
-/LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def
-/LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def
-/SL {[] 0 setdash} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
/Dia {stroke [] 0 setdash 2 copy vpt add M
hpt neg vpt neg V hpt vpt neg V
@@ -319,8 +328,7 @@ gnudict begin
/PatternFill {gsave /PFa [ 9 2 roll ] def
PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
- TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
- clip
+ gsave 1 setgray fill grestore clip
currentlinewidth 0.5 mul setlinewidth
/PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
0 0 M PFa 5 get rotate PFs -2 div dup translate
@@ -334,14 +342,9 @@ gnudict begin
%
/languagelevel where
{pop languagelevel} {1} ifelse
-dup 2 lt
- {/InterpretLevel1 true def
- /InterpretLevel3 false def}
- {/InterpretLevel1 Level1 def
- 2 gt
- {/InterpretLevel3 Level3 def}
- {/InterpretLevel3 false def}
- ifelse }
+ 2 lt
+ {/InterpretLevel1 true def}
+ {/InterpretLevel1 Level1 def}
ifelse
%
% PostScript level 2 pattern fill definitions
@@ -430,17 +433,16 @@ Level1 {Level1PatternFill} {Level2PatternFill} ifelse
/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
currentdict end definefont pop
-%
/MFshow {
{ dup 5 get 3 ge
{ 5 get 3 eq {gsave} {grestore} ifelse }
{dup dup 0 get findfont exch 1 get scalefont setfont
[ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
- get exch 4 get {textshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
+ get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
{dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
- textshow 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
+ show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
pop aload pop M} ifelse }ifelse }ifelse }
ifelse }
forall} def
@@ -1848,51 +1850,6 @@ ba6d2a8e73b10c6de72a8e8f3bfeab8344fe6622fadd5d01457e31e8facd74cb
cleartomark
{restore}if
%%EndProcSet
-Level1 SuppressPDFMark or
-{} {
-/SDict 10 dict def
-systemdict /pdfmark known not {
- userdict /pdfmark systemdict /cleartomark get put
-} if
-SDict begin [
- /Title (Is Parallel Programming Hard, And, If So, What Can You Do About It?)
- /Subject (gnuplot plot)
- /Creator (gnuplot 5.0 patchlevel 3)
- /Author (imre)
-% /Producer (gnuplot)
-% /Keywords ()
- /CreationDate (Mon Jul 16 22:02:17 2018)
- /DOCINFO pdfmark
-end
-} ifelse
-%
-% Support for boxed text - Ethan A Merritt May 2005
-%
-/InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put
- userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put
- /Boxing true def } def
-/ExtendTextBox { Boxing
- { gsave dup false charpath pathbbox
- dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse
- dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse
- dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse
- dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse
- grestore } if } def
-/PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M
- TBx1 TBxmargin sub TBy2 TBymargin add L
- TBx2 TBxmargin add TBy2 TBymargin add L
- TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def
-/DrawTextBox { PopTextBox stroke /Boxing false def} def
-/FillTextBox { gsave PopTextBox 1 1 1 setrgbcolor fill grestore /Boxing false def} def
-0 0 0 0 InitTextBox
-/TBxmargin 20 def
-/TBymargin 20 def
-/Boxing false def
-/textshow { ExtendTextBox Gshow } def
-%
-% redundant definitions for compatibility with prologue.ps older than 5.0.2
-/LTB {BL [] LCb DL} def
-/LTb {PL [] LCb DL} def
end
%%EndProlog
%%Page: 1 1
@@ -1904,436 +1861,595 @@ doclip
0 setgray
newpath
(NimbusSanL-Regu) findfont 100 scalefont setfont
-BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if
1.000 UL
LTb
-LCb setrgbcolor
-490 975 M
+670 1050 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 975 M
+610 1050 M
[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 0)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 1181 M
+670 1239 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 1181 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 20)]
+610 1239 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 5000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 1386 M
+670 1428 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 1386 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 40)]
+610 1428 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 10000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 1592 M
+670 1617 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 1592 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 60)]
+610 1617 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 15000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 1797 M
+670 1806 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 1797 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 80)]
+610 1806 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 20000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 2003 M
+670 1994 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 2003 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 100)]
+610 1994 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 25000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 2208 M
+670 2183 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 2208 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 120)]
+610 2183 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 30000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 2414 M
+670 2372 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 2414 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 140)]
+610 2372 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 35000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 2619 M
+670 2561 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 2619 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 160)]
+610 2561 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 40000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 2825 M
+670 2750 M
63 0 V
-1786 0 R
+1636 0 R
-63 0 V
stroke
-430 2825 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 180)]
+610 2750 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 45000)]
] -33.3 MRshow
1.000 UL
LTb
-LCb setrgbcolor
-490 975 M
+670 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-490 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 1)]
+670 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 0)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-754 975 M
+913 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-754 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 2)]
+913 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 20)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-1018 975 M
+1155 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-1018 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 3)]
+1155 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 40)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-1282 975 M
+1398 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-1282 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 4)]
+1398 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 60)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-1547 975 M
+1641 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-1547 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 5)]
+1641 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 80)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-1811 975 M
+1884 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-1811 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 6)]
+1884 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 100)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-2075 975 M
+2126 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-2075 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 7)]
+2126 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 120)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-2339 975 M
+2369 1050 M
0 63 V
-0 1787 R
+0 1637 R
0 -63 V
stroke
-2339 875 M
-[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 8)]
+2369 950 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 140)]
] -33.3 MCshow
1.000 UL
LTb
-LCb setrgbcolor
-1.000 UL
-LTB
-LCb setrgbcolor
-490 2825 N
-490 975 L
-1849 0 V
-0 1850 V
--1849 0 V
-Z stroke
-1.000 UP
1.000 UL
LTb
+670 2750 N
+0 -1700 V
+1699 0 V
+0 1700 V
+-1699 0 V
+Z stroke
LCb setrgbcolor
-LCb setrgbcolor
-80 1900 M
+140 1900 M
currentpoint gsave translate -270 rotate 0 0 moveto
[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 (Time Per Increment \(ns\))]
] -33.3 MCshow
grestore
LTb
LCb setrgbcolor
-1414 725 M
+1519 800 M
[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 (Number of CPUs \(Threads\))]
] -33.3 MCshow
LTb
-% Begin plot #1
1.000 UP
1.000 UL
LTb
-LCb setrgbcolor
+% Begin plot #1
+1.000 UP
+1.000 UL
+LT0
/NimbusSanL-Regu findfont 100 scalefont setfont
-/vshift -33 def
-490 1019 M
-0 10 V
-0 -10 R
-31 0 V
--31 10 R
-31 0 V
-233 335 R
-0 28 V
--31 -28 R
-62 0 V
--62 28 R
-62 0 V
-233 102 R
-0 112 V
-987 1494 M
-62 0 V
--62 112 R
-62 0 V
-233 3 R
-0 199 V
--31 -199 R
-62 0 V
--62 199 R
-62 0 V
-234 69 R
-0 133 V
--31 -133 R
-62 0 V
--62 133 R
-62 0 V
-233 -1 R
-0 241 V
--31 -241 R
-62 0 V
--62 241 R
-62 0 V
-233 -56 R
-0 238 V
--31 -238 R
-62 0 V
--62 238 R
-62 0 V
-233 63 R
-0 200 V
--31 -200 R
-31 0 V
--31 200 R
-31 0 V
-490 1023 Pls
-754 1378 Pls
-1018 1569 Pls
-1282 1696 Pls
-1547 1934 Pls
-1811 2119 Pls
-2075 2300 Pls
-2339 2625 Pls
+682 1051 M
+0 1 V
+-31 -1 R
+62 0 V
+-62 1 R
+62 0 V
+18 12 R
+0 3 V
+-31 -3 R
+62 0 V
+-62 3 R
+62 0 V
+17 12 R
+0 6 V
+-31 -6 R
+62 0 V
+-62 6 R
+62 0 V
+18 20 R
+0 6 V
+-31 -6 R
+62 0 V
+-62 6 R
+62 0 V
+17 27 R
+0 9 V
+-31 -9 R
+62 0 V
+-62 9 R
+62 0 V
+18 32 R
+0 12 V
+-31 -12 R
+62 0 V
+-62 12 R
+62 0 V
+17 26 R
+0 14 V
+-31 -14 R
+62 0 V
+-62 14 R
+62 0 V
+18 32 R
+0 30 V
+-31 -30 R
+62 0 V
+-62 30 R
+62 0 V
+17 29 R
+0 46 V
+-31 -46 R
+62 0 V
+-62 46 R
+62 0 V
+18 6 R
+0 45 V
+-31 -45 R
+62 0 V
+-62 45 R
+62 0 V
+18 42 R
+0 48 V
+-31 -48 R
+62 0 V
+-62 48 R
+62 0 V
+17 24 R
+0 39 V
+-31 -39 R
+62 0 V
+-62 39 R
+62 0 V
+18 22 R
+0 58 V
+-31 -58 R
+62 0 V
+-62 58 R
+62 0 V
+17 24 R
+0 32 V
+-31 -32 R
+62 0 V
+-62 32 R
+62 0 V
+18 29 R
+0 82 V
+-31 -82 R
+62 0 V
+-62 82 R
+62 0 V
+17 -33 R
+0 74 V
+-31 -74 R
+62 0 V
+-62 74 R
+62 0 V
+18 -5 R
+0 79 V
+-31 -79 R
+62 0 V
+-62 79 R
+62 0 V
+17 -13 R
+0 83 V
+-31 -83 R
+62 0 V
+stroke 1538 1921 M
+-62 83 R
+62 0 V
+18 -32 R
+0 72 V
+-31 -72 R
+62 0 V
+-62 72 R
+62 0 V
+17 -12 R
+0 85 V
+-31 -85 R
+62 0 V
+-62 85 R
+62 0 V
+18 -31 R
+0 55 V
+-31 -55 R
+62 0 V
+-62 55 R
+62 0 V
+18 -12 R
+0 107 V
+-31 -107 R
+62 0 V
+-62 107 R
+62 0 V
+17 -48 R
+0 81 V
+-31 -81 R
+62 0 V
+-62 81 R
+62 0 V
+18 -31 R
+0 69 V
+-31 -69 R
+62 0 V
+-62 69 R
+62 0 V
+17 -36 R
+0 90 V
+-31 -90 R
+62 0 V
+-62 90 R
+62 0 V
+18 -51 R
+0 79 V
+-31 -79 R
+62 0 V
+-62 79 R
+62 0 V
+17 0 R
+0 47 V
+-31 -47 R
+62 0 V
+-62 47 R
+62 0 V
+18 -221 R
+0 217 V
+-31 -217 R
+62 0 V
+-62 217 R
+62 0 V
+17 31 R
+0 83 V
+-31 -83 R
+62 0 V
+-62 83 R
+62 0 V
+18 -291 R
+0 304 V
+-31 -304 R
+62 0 V
+-62 304 R
+62 0 V
+17 -44 R
+0 104 V
+-31 -104 R
+62 0 V
+-62 104 R
+62 0 V
+18 -16 R
+0 73 V
+-31 -73 R
+62 0 V
+-62 73 R
+62 0 V
+682 1052 Pls
+731 1066 Pls
+779 1081 Pls
+828 1108 Pls
+876 1143 Pls
+925 1185 Pls
+973 1224 Pls
+1022 1276 Pls
+1070 1339 Pls
+1119 1404 Pls
+1168 1479 Pls
+1216 1548 Pls
+1265 1630 Pls
+1313 1690 Pls
+1362 1764 Pls
+1410 1823 Pls
+1459 1888 Pls
+1507 1969 Pls
+1556 2005 Pls
+1604 2071 Pls
+1653 2123 Pls
+1702 2171 Pls
+1750 2223 Pls
+1799 2276 Pls
+1847 2336 Pls
+1896 2353 Pls
+1944 2416 Pls
+1993 2352 Pls
+2041 2515 Pls
+2090 2453 Pls
+2138 2572 Pls
+2187 2650 Pls
% End plot #1
% Begin plot #2
1.000 UL
-LTb
LT1
-LCb setrgbcolor
/NimbusSanL-Regu findfont 100 scalefont setfont
-490 1023 M
-264 355 V
-264 191 V
-264 127 V
-265 238 V
-264 185 V
-264 181 V
-264 325 V
+682 1052 M
+49 14 V
+48 15 V
+49 27 V
+48 35 V
+49 42 V
+48 39 V
+49 52 V
+48 63 V
+49 65 V
+49 75 V
+48 69 V
+49 82 V
+48 60 V
+49 74 V
+48 59 V
+49 65 V
+48 81 V
+49 36 V
+48 66 V
+49 52 V
+49 48 V
+48 52 V
+49 53 V
+48 60 V
+49 17 V
+48 63 V
+49 -64 V
+48 163 V
+49 -62 V
+48 119 V
+49 78 V
% End plot #2
% Begin plot #3
stroke
-LTb
LT2
-LCb setrgbcolor
/NimbusSanL-Regu findfont 100 scalefont setfont
-490 1066 M
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
-19 0 V
-18 0 V
-19 0 V
+682 1050 M
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
+15 0 V
+15 0 V
+16 0 V
+15 0 V
+15 0 V
% End plot #3
stroke
-2.000 UL
LTb
-LCb setrgbcolor
-1.000 UL
-LTB
-LCb setrgbcolor
-490 2825 N
-490 975 L
-1849 0 V
-0 1850 V
--1849 0 V
+670 2750 N
+0 -1700 V
+1699 0 V
+0 1700 V
+-1699 0 V
Z stroke
1.000 UP
1.000 UL
LTb
-LCb setrgbcolor
stroke
grestore
end
diff --git a/CodeSamples/count/atomic125.png b/CodeSamples/count/atomic125.png
index 8cb327e16335a307735e8f9423a973fa5b7362aa..f2b860ae4d0615f7580a5320ee7305cfd0777739 100644
GIT binary patch
delta 2897
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
EKlOoE^Z)<=
delta 2747
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
BSH=JU
diff --git a/CodeSamples/count/atomic_nehalem.eps b/CodeSamples/count/atomic_nehalem.eps
new file mode 100644
index 0000000..5e3ed2b
--- /dev/null
+++ b/CodeSamples/count/atomic_nehalem.eps
@@ -0,0 +1,2266 @@
+%!PS-Adobe-2.0
+%%Title: Is Parallel Programming Hard, And, If So, What Can You Do About It?
+%%Creator: gnuplot 4.4 patchlevel 0
+%%CreationDate: Wed Jan 5 07:20:50 2011
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 95 302 355
+%%Orientation: Portrait
+%%Pages: (atend)
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color false def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+%
+/vshift -33 def
+/dl1 {
+ 10.0 Dashlength mul mul
+ Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+ 10.0 Dashlength mul mul
+ Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+Level1 {} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+ userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+ /Title (Is Parallel Programming Hard, And, If So, What Can You Do About It?)
+ /Subject (gnuplot plot)
+ /Creator (gnuplot 4.4 patchlevel 0)
+ /Author (paulmck)
+% /Producer (gnuplot)
+% /Keywords ()
+ /CreationDate (Wed Jan 5 07:20:50 2011)
+ /DOCINFO pdfmark
+end
+} ifelse
+/doclip {
+ ClipToBoundingBox {
+ newpath 50 50 moveto 302 50 lineto 302 410 lineto 50 410 lineto closepath
+ clip
+ } if
+} def
+%
+% Gnuplot Prolog Version 4.4 (January 2010)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/Gshow {show} def % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore} def
+/CircE {stroke [] 0 setdash
+ hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ {PFa 4 get mul 0 M 0 PFs V} for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ {PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+ stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+ {/InterpretLevel1 true def}
+ {/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+ bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke}
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+ 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+ 8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+ 0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+ 0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+ 0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+ 0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+ 12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+ -4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+ TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+/MFshow {
+ { dup 5 get 3 ge
+ { 5 get 3 eq {gsave} {grestore} ifelse }
+ {dup dup 0 get findfont exch 1 get scalefont setfont
+ [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
+ get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
+ {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
+ get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
+ dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
+ show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
+ pop aload pop M} ifelse }ifelse }ifelse }
+ ifelse }
+ forall} def
+/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
+/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
+ {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
+ 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
+/MLshow { currentpoint stroke M
+ 0 exch R
+ Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MRshow { currentpoint stroke M
+ exch dup MFwidth neg 3 -1 roll R
+ Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MCshow { currentpoint stroke M
+ exch dup MFwidth -2 div 3 -1 roll R
+ Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/XYsave { [( ) 1 2 true false 3 ()] } bind def
+/XYrestore { [( ) 1 2 true false 4 ()] } bind def
+%%BeginProcSet: ../../fonts/uhvr8a.pfb
+%!PS-AdobeFont-1.0: NimbusSanL-Regu 1.05a
+%%Title: Is Parallel Programming Hard, And, If So, What Can You Do About It?
+%%CreationDate: Thu Mar 20 10:08:51 2003
+%%Creator: Primoz Peterlin
+%%DocumentSuppliedResources: font NimbusSanL-Regu
+% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+% Generated by PfaEdit 1.0 (http://pfaedit.sf.net/)
+%%EndComments
+FontDirectory/NimbusSanL-Regu known{/NimbusSanL-Regu findfont dup/UniqueID known{dup
+/UniqueID
+get 5020902 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 /NimbusSanL-Regu def
+/FontBBox [-174 -285 1001 953 ]readonly def
+/UniqueID 5020902 def
+/PaintType 0 def
+/FontInfo 9 dict dup begin
+ /version (1.05a) readonly def
+ /Notice (Copyright \050URW\051++,Copyright 1999 by \050URW\051++ Design & De\
+velopment) readonly def
+ /FullName (Nimbus Sans L Regular) readonly def
+ /FamilyName (Nimbus Sans L) readonly def
+ /Weight (Regular) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ /UnderlinePosition -151 def
+ /UnderlineThickness 50 def
+end readonly def
+/Encoding StandardEncoding def
+currentdict end
+currentfile eexec
+69d900414434c93d12731064fd536c430f0d1610cd3375452676cd606a5bb242
+c10907a5bd9376f92a21ad5b1848a71c72c2b1f2e98fc6dbfb2e6c7d58f554dd
+1e867bfc4b07a94035a628f3e0ae48fd1aae1cd99ea9bd6a0c2a5cfb81777d13
+ff195e956f8556495b0e331dfab4b85e7ed17e24a88bdd49ed1e6a99e1ea53bd
+56db08d1b932c6f8710f4f02883a38439bbb0802fab586d7afd17c75c2c867dc
+8595e7f5d98f9a3c5a1e366b3823919841929cc44f5fe6d2a0393fdebd1d14ef
+b6fae1fa9d15b5c57b3b3e241b704a53dd0f8d1edf05b0d574935acd7a667a8e
+8743b27e906be3128e9943b31050d63500866cdaab6903605abffe737e95baa8
+cad2c6cd5380ff5961ccbc56980823ae0dc1f87ec51d79b152eaf1610afc7d0a
+7275025ea45420cb6462ff426fd3a0f9f6356012188b3b072c9b3ac6e09e111e
+66f203b84b28fa74e02f510bf39a9cb0da968a5287382c753a24e4b9b2a1b1b9
+0dfb3ef712e23996a31f115b9f6df17db1dfd368eb1a5ac477473b492bd7f155
+486c9f1d6f2818430819af48fa0e8228f88709c33e4522dd66cd8bd3889d987e
+5c937a18018b64af4ca6ff1cc26375559e2e811867c10da979533c1fb61b0713
+d41619f53e993b6077539498beabf1cbc6135280888735b11ccf273ee1057b31
+affed835f9c07d59634c7b98cfc5973a20ab5704e65ed9508506fcd91d14a007
+dda6a32cbb92089f23879796c84033d649be7aee25fcdf372639eafa8b4f7119
+a94c1a2557be20cc99730867f3f12fa0d94060021a31b6ab77a76b3a82c5c21d
+1655f9d60323cbd0370efa4a7ffe43ecee2ff2010f2198d5eaa915a1214a628f
+539840b827766ee0723fb98694ebc19c52918bc041362e7d04f18f2b89a73098
+4f33bf9f3166f182cbe9c7f9634c0ff3c4595f0dbe6211ae7bfe2dd1dc7300eb
+2e2dad4fe6db12fd1d656e5b9723e9b459e88ff180d7cf1694ddeab7835372b4
+2840c0c8e32ebf80bd51b9b0a2bc7eb5138b97c9bfc0b1601c4d50063e8fb4bc
+d9ccc8285f548d0dbf8fed28461b2b566fa49155a8afc116434b39a80dea350a
+2af2ed3e0ab1f8a3dc4399ef04a51aff29847eea033d8e37195ba171287bb3f9
+fb79ce4cc7655690e65382e789b41c41c77b2d243ff4aea956d5f5218acca29f
+abdad21a2cb80d16023b4af7d030ba2708d94b6bf8605c6ecf8b6671bb1744c6
+355e1a6711e486de31d2776d66120f13950bccd6fef9c22dcead1181146da0fc
+bc27f02e676ef58233e21381ecd7b548158b622e5c65c680f85339a93941020b
+ebdfdfd1ccf0e84d8f10c927d146866249ca7a1f05301063aad96650ac58894e
+4bd3a8597a039665257522809fc9c5a0f2561ba71185a191bc66dedb187acb59
+0e6b5d673e24e5b1efbf79bdc092690cce83ec0c64176d5ac1451b55cee4a860
+ed34e2fc4547f314bdf234d7d36ef03a241257518e9906fdcdfbd7e7b4c648a4
+1341787677bda550341b2f1dd6e4e8d22305e213e2e177da99d22d2ae0e15e63
+17c24dcd04ea82aefe5137553f2c394e8fa1ab72e31a31d995abae6181753ec8
+e7594f7e8810895a7545cf7e5698b05fa8a2bcf47fad1e4a86b28fa010cff56a
+384800455be036ee896dff611fb78dfefdb0f0e48a9813080db35089bbcba525
+4f78a64e4090edf276645961c355bcd58b4d61f8c9797172f66a5814b1616c8b
+fd6d3860cbeddc58f45670c2f28cc437e2e3d42ccecb4b145aaef9cae80c6547
+ea68c0d453945f7cb55e03fbdc29cf12046ca3f4638b131e03ea8a4d86efe79e
+e274f4faa3e8043ae78c7ded728931c69b9f707cde97442b360779d4a07d1d8a
+aaa7067444fbd50b106389c0c6c1917f72000e75a7f058ab549fbeaef528db44
+dbea3021441d9a00f04da765d9dde32f8a88ee07a77d530260443ddeddadef98
+b1eeafa5f6ed123e0ced5ef2f913911022705305bd94b9677c7db01eb32805d3
+57b6cb408978d492a8d8002925c55cfb20aaed5531a44fa926093a1cb2f373e1
+8a9dc8b2b87a39417d78d8899bddf305a682b4da5855dfad242d3115b7592d85
+0152057ee65b6382611580f8e1423b68e9dec70e8bc41368f1c07072f5bcc3c7
+c55d7f1126f1bd66fdc19e8190b4be56ee011c9485713f28d33d325bf17af103
+c3d05e77ba7cd12d8eced28c4267396f3a7155a8737f9b0d7db0319dad607ffe
+22c319ee64f60c578c35add0a8d9d4d8618f1ee2909de8c549e85dccf16664e9
+fcecd191f8502faa5a84aa4e995b235dcb849f9a38631e3b9adc418f5d6b6872
+5d842d936ce35feb53c542bc0ae4d56f9a2ceccaa12e4893a8e9636497e2f53e
+4f7429e293f84865b0b194d11073d99caad492fc6bfa3c6ae8c12e9d95aa5fe7
+f43a207656b360b4cbd3a5db3320769fdee29279c49084e4b8f79e73ab562bc7
+2424e480cd06ec4625f390849eb491bdb7edb7e1b36c547753cf8f73b7bd0299
+e2d51f2fd2ab4fe53c63c78552f4ebe1bc63a99f3b98646ec45b5198ec94002e
+96698b27a9f1d866dd0aefa30551019eb4fed06363182d67759500c3a762254a
+baf4a2f2a88c43757fa0afe83447634255fc5c1e00f7d267d63eb5fd43af1379
+53153675a67001b84480de176743c240b25a68042aac49ed34a569c8a039e504
+a40a70802f41b44e5800a7aae8e3377b74d39d491daa67bef4ad8170cc81a8a7
+b2cec0a7254f280cda8989c9751bf29c0c9f23043251592d1f0074b8b6aa22c9
+16d7674561cb69a2a4a81938b0f74cb885b1bae7c0655a7c984b6bb390f4b3ec
+2afdb990105cd23b20ffaaaf9275429fbf067b5c12a514241c028d9bcbc5d67e
+e73f5b8935eb6202618ec68bc3fc7ace51a5f57c8915f67299adac78aa16b13d
+d10ca06a91943b36afdce58844433cf2163a70c202bd6284daef9e2ff9c2b947
+4fc4a738c02ed75c70e94189b84ac5545d34d3fbabc01f2ca718059ec54b1be4
+36b1aa20e11123f70792cf315baaa2fc2328a3aa6c506b75b8957c141f634e9f
+637fd26f14d69d0678d5f8ee1a8340daa18aa6aea3bbba81b3ff4b7f4a006021
+05e08503c57c5e8dd6d3c74bf638791cb29cc6a95b2811cf61b3714077befc31
+8c4ee38b64d46e5965a9816cd56b91179b8a92e110f74d2902b8d89db7ddf5b0
+1242e3ca7a31b3dc17e59010e0962bb77092e92c6cfcf43e40e621b86e1845df
+8f8927a0d3012efa854a7b3737608b0016cced92176d4ed553077f245117a4de
+e1b60ad95a83246b63e594f3ee04db9bf961b46f8a7eec15d92216e60256e1bf
+68bb5539e181250f81fd363ce13ca8990dcf8c3ff9152026fc384c1fab27fd52
+484be67f302a25f15a6c401e49e042c15b944150153c99fbff35563340e1b64d
+f5d81d86a5075de64c1e8abd78a50c25b26dc97e99984009138d74bb8eb501aa
+4323746bd9325057b1b5afe094894add806e5a7695fe9b0a14bfd2073a634b53
+b9cb7461b911244ad00d38b9758b2ee330fa934e907162b395ad1f5f7b821d8a
+6b759dd9be83fc0b5d8c0e658db980c6205940e39b5dbbaa35e3bcaef7664c1d
+5df03311f94c6f84ec94a7ba3aa9c1826016e9b117e49eaae4c9c8a243a6890c
+e85200b8f4ec0574543dd594071e24a1c16163cf0ab2d9e187f9e15825f579da
+8c3ed52426f200571834bbdc44adffaa4bc7c2d477f6e80deae0f254d07969ec
+f456fd9597555db37c092b7456da6906a741ef1ce52397cae65ab7fd7e14ad34
+f29913bbf4ecfd81d705e3604c958057241936d1a07e1df6572b46399fed2635
+528af4f2ec88b39f7b01398298382b2f27e7daa3b4d22ce6019413f66a819996
+0357b0175270e79cf7646153233006178b9a6bc43da3a8bf19e9b52fc99f4ba2
+126c53b1ef4a345b2f7e4f98034372230d2b36956329630a38375af28bd94952
+1e9a39f0c9e0d7ac835c4244b341b12053e962e3c36d4299765578eb49d246c4
+09033ca1bd669eb8a62c1194ead50a0d93a09c632250abc2edac18266fc1d0e4
+c1a6fd7df63b46a04ba972ebbfb2609c456a49696fe5bee9eea1aec3f3dd991b
+acbbbf3fda754eda86bb9f9a6cac0da61e177a9091edcb012f7bba3ccb1c13a4
+3926a0d25cb32a4b8c2f629f47992475754878d605e5de8388082e75530174d3
+a4629ebc1f00d628255439fbe94ae6c4fef76b9aa0d1e9ee8b39a0db0fb6c36c
+55084ecbee71ffc5bfe9b178d148ef451a48fc8caeae1dec1ad5a6245560ea4f
+e44e3bf8307603b524702bb129654d181ddadb70c678cdd69088b2dc8261234d
+b9c7a933dc532a29256b34c3a05d779cf97a06d4512c631e3b14687b9e351bc5
+d529008c851c24aa3e8971508e3dc97282f387a82427ab28ecd7fe0374c13d1a
+008ae66dd8944070abaf45e7a60642033c4ee644f929e005007e325ca8af4288
+a49cf7549c047523ea25e489af740105ac3d461aba8c7737876ed3d5c2e879c1
+63d4dac3186d8c4ca15e8e1cef082643d605842de26b20784b5bfa3f09368345
+c9101238b261cd57a6a20ddd5dd38886ebfd84a70d972f891f598e3cd6b85ba9
+7fbe9250967c3b203c6224fc78e91e9105d2d7f72a09204aed2f451df1083214
+1a2221cd0c2d75c37b263af814f3301ddb948aaa80dd0357e35e180517480226
+2303f216b73a87ccd96441172aa81b1e435750e5c665f602fdb02cbac18ff548
+af36f41e219f064c5b64d88ddeae5ada11fbbfdfc1747b8cfde51c128e471add
+c48baa5277ac6f0799c903d18c63c22af20cf2f02f177037738a152a0d5e1730
+4d99d7a4e87eb609c7c0f86fe4ba59140dadd4cde67ee108845e975dfd8d7a1a
+8fce80883e9d22a36e3cf90a1f2103a8d3fd5f53cc8711030d2483f7564f04ab
+b39d0592e327e72139d6a9cdbc148f5add9a192526a4c5366d3d5e566e70cebe
+ba9d2078e2977923fc74b06fafebb81ee4366a32cd3b7ef2632776accfec671b
+7f820c386701a97391bc1d3236ead403f90750dddb6bb12d951162420c6a15fa
+a0bb78248f7ec1ab6a1c69e809cf36c0cfdf283610c3d967a41408d373d5fd72
+385ebc238f18a254982d8b2a49abe28871b49aaf2ca3a3134afffeb9535885dd
+89ba5d2ebce072a99f8718c1ed5f374d18ad3d2ad2c8b193113f1676f4396c92
+b608ca2fe99c258e68a1edb98477ceea17053f6fd1b24229eedeeeb0a296667e
+2896098dc756eca49527d98da373bf15a8ab6af1f80e38282f72e20e5e9a1c1c
+c88578094b535cbbb2b9688e76ed5aa7baef252745a920bd41f2d6d117705e66
+4a179a2ef37e583f98054dacd3f906c5b74e78e836d10d890ef6e51603b61cfd
+cd5121dc2d3ad687bf3245c1325fdf500eac93d45e23b26ba05bcd16cf26e00c
+d63bc2d0c500922aef5900b332ef50b65cc937f54e48919d9d1cecb5e81b3cc8
+62a675ad5b403eac1f9140e2810c26c3a3d74e4fb87ac80e78f97e30479fd649
+fb917a88ef37239ae1e64f7487e5f45a6cec1f613356d7eb5f46eea50271dbd4
+226d6930d1c4e38d1b00cf95e18714a5ed0f0cd6a10203b6601fa373fc31d0af
+f4ebffd288392d480180183b5106346ec0d1cf4d3c8fe21224500d3d3f251bd0
+681a3b6f065fbef75c7308c4d82d089ea490d7ac6380da68f8a88ce96563211f
+edd945549cef2960ec542095fec9dc6b4d4613c61f0de5fe36d0b834bd19501b
+1fb73c05757dc4222a2b4ef45588bf5ef51c5c3f8184c4304702494c828d7f6f
+8fd4378a581b974ae16d51c815c196ff8902c3681f4bfc168d29f067a65a571e
+89b816b4e095f264ba561334031aa8d22c29f1b161531398cf72fa62565fee02
+60b0dcc734c7bcc1532ed7d3a915d12497ebf9de920f508b90622acfbc636b30
+e354220fbc80cacd37085405668bd979d0e18fc748d90381ecebfde7b2ff90a3
+85e9713bc55ce84da933d94bb239be152494d3d57b05aa003dae9f92d5c55e89
+21f16d5ea3591764dd8be1e70b4c19816a4a3aaba875e658fdc67741c203f1d4
+e62b0fe02f63696a48c832f41c5c2e6827a362d48140dd3b2e0afc86fc40a8f2
+c448f196fd8c051b2eae74850d054dbd9ed912456f1dda8a6a8120a9c52f909c
+1517f0f1d60a89111efb276b08455d3bb452417f1d87bcfe0a8f17a0e3dd89ce
+b85987088e283e95d63b7ff850fc9ea13c49f92b5a658b7610a025a6ec490f54
+0287d85697f4ca8e2b3cfc3cdbdf60f3acce2316b49812733b024d44a8e7bb28
+bf01f80808585cacef9c4269dc8f235c15188ace4342ffcf5f0bc646d3e747a3
+53038f60ba7a7db23252ab6a2d1831d9785c82bb6a8f931d012bc2c2bba87e5d
+e0dfc0522e14e959dc634fa72c5bc51a536d322bdac301e2e0cf756e3cf532c4
+004e60a63dcdcfaf661dbba6a85fc3eef3ca4f206f6a2bd5c3ffa0c20c80d288
+d2a6a6f6d3664c5d0355f8b4ac2d706fd472013bc2ec142aae8f141ad97e59d7
+56ce58200d76596b46d6d942e744d6f2588df121ef72c1b4ebfee1f541edd337
+7519ab28632e3cd6c33e83d5320d48b118a32b7943129a8a6fb15cb50db15732
+92eb2fadfce8fcc8c401ff0fa522b3bf30b87d1b24d16131f4ebaa7daea08c5b
+169a3e287357edcfab5b33354cd765305222aa78673761416b29c96ac08886a1
+23ecb2e381370c6b2057fba48637c818db92bf8de894ae937782beaa4e32db70
+a720949ea2bcfc54bb196122387ba771441ffecbd6e0fb54efd294a3d109d123
+3d5ac42d4b4da68fe4217484bb975578c53a08e94728516204b126ba11723314
+07339b9d873fbc84ea5b3b6a7b7d0acedc3e042f830830ce565b7a26f1bdd54f
+d21ac76a325ad54b3efb01d867563247d4f100c5b363fb3a218b9098aaf5a3ce
+fb6e4b4177d9b6bfe23ceb43e59a885074294587304998154d0d74ab7dc1668d
+12d1b4a10777b78882e133cffd355ab23231c6083b55b1e940f755381acf661c
+daa6b8a4ec33c89be0a2afbfb65468ab16af7dc083f7ed4d62695280e8d0e55d
+6d7ceac92998dccf29891943974d53b8ef363af6aba6d8bc0d155165d1244dc3
+52105cfe06b44c9bcf236b074dbcca06bf14ec8f81b9bcaa759645f4c27a07ac
+e5b4b8d9e384c862acf202d1c217accac9871bbf6ccbef4183749d02eaf95396
+cb7a4e84757d9b9d167927584924633d70def5664184e7cd7842af6bcd223548
+18845c562b3801afcdd0d72dbe1815bf1bb3cf8ee1aaaa83de6a3e27083e62ab
+2136f48fcc5a3997746d1eb0b703886185f73072e2745d3878d3cd83fc523677
+235c8fbbe0c8dfa45ade77fa687a0e2ed86193ca35eb436b90f2925e483bf5d3
+3d2ad942346f45029ec4b54109a1b5d369611087ff5aa90539291b88dd2aabb3
+fc795ec6aec574fac06aa6357aa99b59a29f51e4ac1c3637f7b5f8628ffce04e
+26a842f4b13428e8e87764015784232027ac430072138757b73e9fd5542949bb
+d1d6ff9946049d4c0a4c37566ea8ee84eae695663412ba83a353d18cdf614bcf
+3d8e243cdedb86c08ac7600040ea55c14907854b8dec1ecb85d369e6143c11cf
+1afc2be394368b5893addd71f0378dccf5f5e48b3c8835ccce161793b918c1d4
+e51e344118fc1740b1d41d435585836b3261532247a8570d860c155e03d5a8ef
+33decc19960542df7b4b6a7babe0aac2213157bf11df21b109d7dc8ddb8c5c10
+25aaa6eacbd2d588cb23dbebafd3a66fce2fbb4533fb8c1ade543c3677d12983
+7e6e755bc1fd91ad14c17d7bd930b6464f2f79da7d9c6d2c1a9f0fe37c063999
+6ac611a934830e2047a56505d0404fe29c9f52a755c415d740d9ae598d6a023d
+f5ed0e1ded43b392ef1561d89cdbce05f0733af96afe2b24b30c5d725d217d74
+3e8a023ef716037fff953f85dcb538910900c3294c4d95988b9ccf37ca44199f
+828f5247fb7155c8cb092b27953ff88b44c870dbb3b7d527a3c21e5b3c177a9c
+a79ac129c9d2d48615cbdc203cbb36d372cd605ffcceb2cad3fbfb0fdb0e3476
+859a5f19c5f7c6669e903a281d4412b860bd929b1ee9aaaac001909ffc90f758
+e0364deacd0cf2bfbf989539f3fc98dd195ba98f47326b6308d41b37ea2bd844
+182e699afcfd4ec3fcb3e24c67f0203f3583fe31b53d93b7bafaa6e293d03379
+057ee574a15b9e76b3c4a0c23e1379f10eb2cefec5f0c74df9d1e3f15a923781
+96d839e941d42ace33bdc0e2a514cee3fede79a107c1cbcb893a52e16f965057
+6fbf8b910cf7f16cdf1432bd112b865459a27799e63f136dce31e633646142e4
+b2a7c7d6c772b1d5067b72113c17fd8e45e800ea2f2f92852762f5d5c6304ac5
+e0fb7c64ca58c9fecfbc66e6f6ea7359f270e526d497575b877c38c1ac280404
+0aae27b2d42e5fa04c6927434930bd937f6b741c9455b48094d2914bbe16ec8b
+1b2257624dda57c53ff3a86c07fea3f9a8255cb172b60e10e69f515af4946ddd
+055a37fc3d5a6f286586f0d7789cd3e5580098a3fcebafba13bc12bdc742d29d
+a24caf0659c54f6257215d9b2de05ba12d91b143ae7904d97042bfbc02d56f72
+cd84962ebfc2db1f724b7908b62b7effaea4ff78bff8c9ae5a3c92f4778e2e31
+873f15c0d1435b7f5962f6e21a1fad4d94cb8c5dcf18fce875bca9550e20d89c
+09884bd8ac291b0c7a6d62f9cfaa0bc1f13db710c6351a6d549013d6d888d682
+9eb00947cb6b546128742ffd3218b645dbc3fba97205ff8a8527f1e8cde3af50
+9b61b413b0c25f7c9ec4efa5119dbf92f497e9a10644ae52a5b47253e423bdeb
+b6a54a20bbd9efa63d2e307056843bd1ce641c8300c594fad16406b25ef62046
+ce901f65e4e996910db9a27473cbba22d132800b97fd4811e6b81735ab30e65c
+fd6c8753aa7fd68be77f28353a7a514f7b9c4096852bb018101b8e0ec7b88872
+e9ae63b3258fe7bb17464ab1a4f28a71d9c6f521907668fb3a5dea208ef198cd
+09e67e88e1267c6ce8ee9050b2bfa1d5c6f3824ed5a57a4872ab418745f7453c
+174d514a9c457e84bf7e44c8a67bdd311278887bb697cc67cceec9f179a5267e
+7075318bb09455b3c07c499446b670a70c1ca5e6bd28143afdf0fb7d36df3366
+3ea0f8c12d01631ef8de21dfb38c7993691ec0c33662266a03ab4a317f6c2d25
+f46c99f456a9a7fba51067d0fa704d437e62e8a8124f020f8bc59461a32be8df
+f39f8bb4e92a549ec99ba6072b2a6b66f0ea0015f96cbc087aa9bef1416f4662
+50647f37a368e75b2bcbdf4fa3304d20c9dc56920ded4ebf55c237f6769b5906
+3a3eb017b1a663cc9481c79b8948e5492d8ec892e3c43c08f0c1a87a30d7a9b6
+03f35241a3cc9e52165d8d04ed952727b2a6016185d2ec32b4bc88b5522c2d7f
+9db2ab060c5321113f0468c187d58915979287566b045d4d73d37e2dfedb68c0
+da667548063f775e3258b705e11541092fb5a46e82845d720cd9a597509122e5
+bdd170b4002e727a66174dd6409be8720150613917e43ff456b5c43189823b83
+9edf533fb7d4c709f51e2ed5ae242a1ec4f41939ff8d89d92deef30b1108a0d3
+1ddd6dd9ab35cef4ab0fc7fdf631de6dbf360170c95a088681f923ec7288b07a
+51a84009230529372491044e11949574495bf8e806ec448d0a7a2df74fc07e86
+2198ab516bc3480c9d700980ba4758a69d9d55295bae8fe3b8a4cb2d5beb528c
+ac4889868a889a8b4227ed29b9a8cf29d9e88f2450c67027ad5c1b21caa3b387
+98ea155f5376b193b5a3c3d549414a7da07f9a776b894afba1c099d37dca4c17
+099b69cfae216575942370b1d384f2b6488f76144d1e1ca77d242648daabe525
+f87c11602cf712f95a817b0a98d9e54cc3fbb41a0df3d31e19918ccc9ac31263
+7f18ce4fbcb1698143f1fabddb6c0cc913b7269e7dfd8d0bcec142665f281c6a
+ec02980aaebc6a8e77c180bb5753be1bccaa518423b70ebd6d3356ab50f58047
+08915340e38b68050c32797603e402d351b7ac1fc6d95a932c0271a805ee7fd5
+e0c5c1c20eb7e64d8cd7f126efc463478e134bb128f70f82b968f022aec9adb6
+cb0eebffee6604b1ede0d8515c6ae0c9b0408c2da3a912c51f21280878f2967d
+d236ca55ce44f0c9f9a915c8d9aed9b6a3d13c107f18c6f43372638ea7631edd
+ae78b32402581fffd9f4d7f53564211070798bba7f51c79a5b11a8ab865584ac
+9a7748fcb9074a47cc3c3707c6957f9fb4904a86ab6ad881f1319f3e16150754
+6f0bd8fcca92b47ceb127dda9e2ea868c240fa2c17293a83b3d0f6b8d9715dc3
+306f41635f16d023870df1fe5dbdffa7d4f5a4bdb1dff6874cdd4ed9967fc799
+b16626355dd8b581d17dd202c776028657efb23a97d6c58a1ec3545a494351f6
+7c7a0c36cd2545445cb03073fc014b1d2d97926ed55c0590f432ddd6cb11de3d
+dc1212622b351ee9aadca98bdbbaf6a78cb1950717be38e314cf39dbb9677686
+84847f456a86bca3c90b7d4d3711b24553e892251f704874091336bc8236a827
+4617444590eb9057b1854daa0e70bf182cb400c510af162e5a06b22b0b27c69f
+14271c0dc982f64d21b7b557fe714bb76fe22377673ec61f760f87c51b14641f
+c9813202a3a861a0e36ea2870785b3f523f67ef149a19ad352978291fd3bc6a4
+c05e7717f777d09a12d89de562b6143a300558df252063c0f9519e681babd890
+e636beac1bbf457d5dc7d0f1248848e48946c8c66ba9f345a2ee66e725c1fa41
+01ebce5dc5eec5c7655efdc26ef814f0e0d8972b255ec6338e7c7e5a59fcdc31
+1defc94df922ce892b9b453f8b7236603cef2ba3c291fe9d3891d03d8cd51478
+61f9fcecdb1e0c4db0aa86266e24f53636cf46e53d06dade2258081e64a26502
+713ae84d7ef1918faf5ea1dd8aed39c52386b1c486496a635c2234a4adf881ec
+b40fd9bce066a3b9777fcd2d1bff42ea412b8734429220c1159a0690c8e0b22d
+5b8225c308f8761800a80c2a07fa72aeb31b8eb28ab961f7721c1bfb0773642b
+a72e77102997b7c557b08e0df067ee387593f947c36d3991a264979e5a1fb78d
+05b9aec119acdd3f5036a9c67fb9e425c9efbb918c7f04bb9e1cd05b95137d8a
+eea46bc69ae0c3b50637fc6ef8b781d938ab703f62234e13e0e62dc258ac6a65
+0943692867744ba4984a1723f59f71be1072dbda7b1e91c8c3df379ec81a7c29
+5a7407e59fae78b6227a9c34bfeccaf964137c43b2c945068605a974fee6b864
+02d237f47ca261aaf5622cca28fb31dfec9b3ad78260ccfa13c4ef211ac8f863
+7aee6b5579afe8c957b669c66caf735a2155b15ed4f1f22258e8e39c0fdce883
+bc1a9d30083636db87bfb76dda816b234f60713a8327aeecbac306dfcd2b1235
+ca0f15d9664efe8630675f9dcdb65207cdb8677cd3e87c102dade7dd6a5795d6
+d759866f516a5d6f42b463193568c56dc795fd23a5d18df3f7acc7a2cb4ce997
+8ab2d7dcd5762ec0419b61d65356481d4bc68a505784101d51cd8afe6477fd0b
+66d906ed3988cff0e0d420157ec976d3b671f60289539d993b994e67155adafc
+8e17a2ec2e9477f8578c0d912b130dc93cc6e8589075c3dc8378d7752af3453d
+1e5807202e2b09211a74de345971fa4c6638b69391b57ae4035c97aa8157b346
+1738953a26b37f1f325f243a55cc978c4ffaf7b36bf3a54748a85bb5668f2e39
+1d2f4cac541885b774b83f1c5f6410a7a71b98f54e9c9cc7a23e083bf1c1139d
+52601c0068656bdf738e998a9ac08692c7f7be0db205cd3c5748d1ee4305c041
+7fe88881bedf7f590e2fe5eee3d741a8d393cd7ce485bbee14a122fb60545690
+daf27db115b7834239f121144c1c4de2193812b932c3660f8b0515067f0d0454
+f62018f90096a1ba611ae6f0d9fbd922e12842403cb7c3057627c80d6b0f6212
+97a1aad410e3f96cbce47af14dc694baa3ca17050a9b4ab4ba2d8a7bb0a0c000
+0f826633da7be83891a2c1b396eed1598b6a72785c550ae8198c0be76ea467e5
+d555144abee0c8b590d0e49663a58cd6fe9c09b102dc29ee0a5b45a9159baec3
+27cb6c378296a4a894cc9f526bc54a5e6ee9fc2dea19863e422c8c72692dc178
+ee9f085d532808328c566cc48c28e8b1cabd8f42a16929996e45dd8ce6ce2bde
+4de1353e29a9bb5be0b44c49e2aad3baf951bdb2185a4c31c703d16a04d3fde5
+b243f17ece882cb115aec6d1a5884fa719deb0e6866b7194aa8b50bbcd78ce9a
+e290ec4fd0489579eb54d1e9d5b92083d5ff55f28a5de47a815e10754ead1125
+cc64ae11246bc5663de3bfe6119ba5cda60d1a720c80fa03880210fbebc787f2
+c9967f31368ed8347be6c77cb6c573b5b6f5001c8e9bb82868b92cd214ea8ed0
+66dc583f6182f8c255d9769352a18e11bfb294ec588e96389e73082b30455fe1
+4481d35ca3f82814cfefea95ea00712b282e6a81818128d80054f2b21dbd07fc
+dc52964bdb5e5013685f8deefda2bcb5521f9069d17a09b9f51c2ca6fe08e0c8
+8a8187be2df126939e0b40a01fadbf9cecc4666d715807044f1eea5481c8f3cd
+d7570f7346580f034ef4a4741a9cf7ee522b9917833ee7db54e46df7ee8a1dca
+dbd69046f61645d1e5e8223bab55e7b954ab339ee8fcb110fd719b8b9b4b404b
+e3cc0136157da664cf58305d5a0f0d420364d004f07ec5033f95abc12e75defe
+e2f6c3123bf7c79b6f9c536723971295810157b74735d6a3821091886cc47016
+d350f82d945c486bd6e4bb161b1d379c43c2735d564f012d1aeb3eafba8716e5
+02a29ed890283855f41c1afaedeefe3d54b489f82a0754b946df4bf3a884f678
+87c914ebcbe81855a9fef46ae8cea338ca8d69af5f92edd5379ae5bf2d127432
+374f95dbcacfbf29a2116d9acdd70f11ff7c250130739ad6b2a466b5f0115dce
+adb035c9376281a8cd5de64402cca2adfbbc76925242f734641276c726e0e797
+bacde80e23a02062ff32f7e501fee35323efcd9d2ebe52b47dac34a79e369e0e
+8df6a73845ab76e6609bbe499ef7459baf974344b3b9a6c08fb520e63776818c
+47263501a90f63a70d26066061579176ca06ed53ab181f936400160a16ddd838
+67745f6f684380537fac719ab0a2c15dad214c03d3f98697dfa7ca5bda83114e
+927cfc1330b2115ccfe21c0e531e2df16957159aedd27d28d754ecbe90a879f1
+254430780eaca6a5714f8f399c5f11a4ee0e8583d13e13f5a25adddc9be5d24c
+c49e344002d7a6d4595ecbc75e5eb9e4faf9e695db25a2b7533f59b50cb765e6
+0ea42589c19d38622f8d406790f4a6f515a9fe8c88066d8704a70b17a750002a
+9f4462ac581add1cefd7d12a49a90ae97afd714be6aacdbb9278e559fdc8ca54
+47e7feb15ca462525d6db510aec516df1dc8e5d866a8561539554a595ae011d1
+e16a12da58fdcfb87452d020078d9c6164b5add26bcdecd22bbdeb8c0d0241f7
+3367810c6d6f7f0644e5082f8f020844cf77e7ee09303e583c55ff96364781cc
+ff0281af27aad988a00ba3d80addbc87baa65d422c80dd4cf014d0f9e8a84050
+9a97b047cbdc6109e95385e108842dd512757af7172f189cdd9707e27a12e4bb
+6f4ecf8a25d15ae44052eac5b27249faf553bf942e8295fd0a7bb8fa9f7dcb50
+e02fcc797ee6b3577da8d3d02db28ce78bc219f99161a38d89d32f948319b5e3
+31b7a9a7da8ac178be2581ed37e83825fdf41fcf4161590ebfd0c0dbb17e25a4
+d2d79f0e2c1ddedd99fd0d671e1852350b0d6dbcb141f9770217149e2e750d24
+133fece9dfa0f3f8a69b2351c53375a75b0e9bce7297f8e91313d4f990219149
+e633a4ee7954110bc7ec4d7ac7b5e5d57008d6ff7c801641e2689ce52c06ec78
+857672f809584da94ec360bc90fc1963a3570f2ad52dee8bba840a9cbe5a17de
+7f2c3a90384bbe6eee6de553ae1b6282c7f517570fa60c7816e502edeaa85a37
+8d2cef20196af902c88fcca80c9e65a5e92ad39bcdf530a4f97ca4249e884a49
+60551a1b41e2bd44c68901cc22a0ad835e81cf630fb8f616d6f1aff86b21b40c
+10286ab256ff87d57ad3d429fa0b732adf640ef66180cec51729fdbf548198e0
+2ee3f2532b929369e76506ae9c0a9707d5ad6d7d2005bb12eb7bdbcfab442420
+c49e88213c365661e3aa81561136f274702a6d38fe9b5dd8ef5414588c4b63a9
+9114f908af41b0e53edf67d1e2aba74d4fa40150e17e9032ce814153766bab3d
+5af2390c4519a7881c958feed96723d7576f80d2a924721519632b4f53be2b1a
+e38192815aad70b62d283477ab58d4aa7e07ce5165ffe16ab2778c677bc1c60a
+6bcdde659f5bfcf86899a4b565230e807ced928cb390e350dbe256a32bb5c39c
+5f3cc1b3e145a333045a44717d9f29f63a544af82814be20add84bd9f55827dc
+c218819215d447779311bb1f8fb48799b489e1ccb3c4b0e9906fa967503fd8b1
+022b0eea82083d23062492a2252d07baeac71497c01c3e0351d23b17c5f9a553
+e3764398760236c5598317e364d3628dbb20e16d9e59ca0795af52523a8b2e45
+56e63a9cab48b305e9395960b3529b49db5a8c8036de87ef9e2594017fc86c6e
+cfe14fbafe6ec4d93d2c8246209614de4859be1f15f82490760c3c7ce63d66d8
+01a7130b78623d7555f1f8c4a788c119a24e107110459728fedeccd3c4bba680
+d9af4e0e7b01089df00d6d796c641a5ca748bd2fc41c07a71e8f7adafade8e5a
+5e847e1010bfff52d82ab29c4facd228fa48eaadb9207c5c596901f815f80748
+a520df0339e32001f4f8ff7ecbc95e6884d9b078793697e0791f4c913f55ade5
+9e74093c4a52888df670a324d1e92109431fa3f8a8c32bd19a4ac56b3402a3bb
+9605d14c4c65ee542c6ab8731eb5037dd6a09e2668b8846eda3def3438c8facc
+93e64cd47678a038b4ed26aff8445c3e8b78a12e03d0b3edb9f762fb280f7b00
+5f6d92f7f426af8fc8a0fe8d0d7348efe49706e8e53a24a3fca5cc2140fee151
+3fdffaddaaa1e85ece9f970ef125bd003eef1c6ac2f737986b88858d1dc607da
+25cd46b9ecdc68a99575e89dd69bfa57da13a69cdf0d4ce606997b8ca3568f33
+79f0ce6a5c39ad85238337a39cfc252cbb522c564663ac3bacecc73f003cef32
+f39266773eee578803aeca02544f5cf4f7dfca999485c3e87ce72cd67b46dd37
+7cb944f4f7a099a3e5f76b9f80cd47539abcac6404b66c3704ae5301f5a0fa3e
+75f5ad86cc2f846694b09f77abcbb787db5f61fb6b8591442189b11284f26062
+4fb4b9d82d506cfa1b69da122ea8cc2494b9e74dd962de90c68a67ad1db1ffb4
+3268d20b6ee0cc710c25aeaed28659b33fa045414767a7881d51a13ad3f9f3e9
+9830f71db8dc8611fdfa565a2a7f644072e620d1078201b0422dfc576936abe8
+7488f102f02542fab85b3289732bceeb8838066131287acfaca11b1d408d1c63
+0b2f4a570ac7451ba40d3a501c997840f61e221bbb3820ed21182a22379de1d3
+45d5a425df2b5b52e0acdb7ee6ef15da6a759a08a8debc24d0dce1b975cc9b8a
+aec03cf38e5102fd4238e15b9653a76bcaca3d91697ea648bb6314dabd58e452
+df8912ccc89e10add61131b17615ead70788663b32251ee9e6d978bc27f16356
+75a6768ec7ac4bce803479949c5d79727e53bff661e4f6c64bfe0d15e9fa3380
+5bdf47d08b16fedc1b2b2389e2789277c364200982554ac3d53b3c247e2498b0
+ee8aff44f7b69baa6eaae91b6a33e547d29418392ea143f3619e63fea5996fa8
+f73501855aa356e94f78deac02aa08b51020f270bbfd9981eb16441b16f8d90b
+666de936532faefad27934d97e6a29aa6642c005a900d8b508b5f24c0149d920
+b34c69c567ef6f5a2c14de9a07fca820ac2a4369d0da314fbb09f295a2428925
+910a8e300645a972d1586e15f8bb09c93936a0ac18a903334115670ae661e58a
+26ea1caa576ab63e09c739ea0dc737e3f461423493535bd59c0a1accb788fe86
+1ccdf527237c12767abae05636f82ad765f98625614db4fb550c844fc142c6fa
+107464c2a8f0087f1ca7773b5a53a15df8e3a1e1b64cd1901b04c23e9e63119f
+f4950fe739f2e27871464230d19e9a85a237afec08aafd64fa2f24772853c9f2
+b6dcf8315682e2a4b38160384df5ebe12ff4bfa52e1d1017762e0e8ccee3c70d
+5c3c654697c778a7f6a05565788b73bc792a2817a6ca45122a5762c5e5f6a02d
+1131a16ba4941d6e8f1c320d9295c804f2ebd9648ca940a7ec562f259c9a489a
+e36edb7ee621a3e69b7f5d34d3893e47d226910b25f8ade6c6ecc5936b5e67e1
+2e08991c2234bd71e6fb7ab65d61ad6a6a18c8c95251e4641ffdc9dea1396df6
+df1638b8f833eae66e14ecd9707b7d2d721832c12d32375cbbee010703857e7c
+e0aec92042e029dc32bd8ea930dd0362844295d219062afa8659e5e96f915dbf
+69ac1ee33126cddb0181a1ef82be859d2b1354de7a8c1b9e80cecea63c5332e0
+cff6bd4c37e47b2aba2ed28b6a3090e65f9c361ade6be54af3c723f07d20c79e
+16de2f2aad68c96b037c3b1511ad575ccb9fecfc10c34f37e295a31f6aebdf96
+c6014d85b11ac180f53322895e60fbf299363e621ba35205c9b81a9524aa85e6
+c78ef1251f71f55a2ef11645bad942157eb00535be92130ffaa6e67e605b65c6
+c91d84b03f20d5d12218f9054c90ce876a0483e80802ddaea96222fa2ef09ef5
+806dd67df4508d28a0a6ab5e2b08442ded576ba7079d20fc52eb6ca8d9109c66
+3363c5a55cef5a98fe4fbe64afc232042a96cda117598e202194c487e3217aa7
+09bd46ba672f02bac951352b141d4194f1402da2e87e043bb91f9eea26fe15a1
+1c3cac1833a4bb3cab03a2a31db9b07d5dd1041ec2b9b7e51844794f05049d6c
+9fb0def51782812b66637c8547b8a6580665106b8265df917a4d1b49cf6bb3d7
+b9761779371bf19fc1bf57ee74d08a1675b3d0e391f8ece1628331a702b598bd
+691f0388b78ad1cf0da93ad409e33444572d021029fcedf4a3e70f602012f0a3
+d76c1e83867bb0dc48c483a9e54f409d1594ac287516da63539082922b473b22
+2ee4ad0c7634e297eabd7a02111d98617ba131ff638322d1d5d476da5c97aab5
+9b73c45867b0741f6036ce2f68d5970711ead7aa84531ce71b91b8bd2dbc4bd8
+4218b3c775fd841bd93efcae818ad7b7cca0fb6744fa938e4fca5968a1595173
+17ac147b030220fe95119094b5f25114a42e507b0796b16b7c57e34835f2b836
+0e36b9bf04381ea2820f324e992a9f0b0bdfe5f546941275e11688c81f8985be
+ada611b2d0fc0d5ed6422504b99b165375a443f4559b4a24acf8779f5256bf9e
+feab09a08c686154789e04af5dbc30e07463de3b2358b6dbf27ea928629c2040
+53eac7ec267115cf762b3696696a7866299002f4106c3e886841d11e9559e6fb
+e366b0890491853b2e027b7443fe213f0510656b5622711d6ce24ebe4ace7c0d
+c674d6732d26acb9967d9376761d02e2c76c55a3c42f9f5d047ceed2598447b9
+70aba6460fca629cbc7b2bbdefce1bc3cb7e6506d94ead00a9320985692453f9
+a4cac24301b532916d89850aa961917e41fa56c5a6b1023db0670f38e5708f07
+caa2080a08a23e5b8ff1becc48725047484457696dee0e3e4cc94dba588a814f
+f351d5e32e49492aa780be15e4cd3380521b5158621920bbb8bb33c25b47389c
+9c3bd47e2e74ae91c57e831f63795d61eb19c3070772aae9ac70516f09d8c80e
+0f48dc8d82c590f6d1b225baa2831603388553f810be7b52f20ca8a06dd52862
+af045a34dfd3937da9538e1ae134ed0bbbe1bf0015b20eccb6657b04023a74a5
+83927e62f6cc27dfc96cd7c713e46768b43f683dc2c892e525eb8d97a0e2b6cd
+ed8c591f2db59c48cf89b1c98ed3c9b722ead07cab808fb53374929cc5b09233
+dfc590e7094b935b7694106d63593f2658fe68870855c7cdf1e4d78019f1bb6d
+99c33d1b47372e6b403a3058774ee26e7b6206bbe0f063276f01be9b50dc26c5
+d553164887ceaf247c1af22646706b236c0b36af9f919ba4015611f5ca8c7b0c
+0c4f7677ee80e9bb71df47737fb563958d83c43d49cd0bf7edd722848da79b80
+c1079653a17ee36597efb64ff7638da165394cceb5326f739da8de994c6d1452
+9d643f2ffbcacb89eff37ec185afd0a93728598874d498a855cbbb27d788b109
+863568f7b8bf15e3c2cd0a4d6d36f66cee409070e5a7c81fba3c3e848d312700
+9fc70d7aa50fabac91eef13507ddf2cb171a530e60d32ed12ca7b6be9af714ce
+69242905e1f2c6a2c86ac3303cd8997bebb3216796b8a9eadbadc4ddd7af5bd8
+ddac9bfd102b0ef4f2db8ab41caf77fc707a414ab452f971e5f99e1e66d2a6dc
+5e9808074b3ae0010ac01e2edc8fdeafa33efa90021b28abcc0d41545affe2db
+8cb77e13cf12f8e079b781cf9045af8ea346af90f64d7231556188a92e8fa7b1
+c52935b72f1724781ba995ae920f975611ba58cec4f59e215ed2929f27e79498
+14c907a92ca1a1f6c551c015fe1447827f53f3882686fb736625f037fc380f63
+c4c3b88d2e6ddfac5bf74919bccd63e9aadb5513067a99fb44ec1a9e568a49b8
+3d9e11a0164972c02873d1195151068fcfece7c421098563402905b1c1249e67
+9874b282ca00ad0d629622b339a3e25bbd2a6403e6bd5649444c04ce7178ddd9
+e5597cf6abde96c151ce40e61d8c1e2b31148921235c8d115315c605c7f4e471
+afe321eaa29c20beea2aafb41e81041f2275d4579e17baf9f576733e7411d715
+5df84532a852782b5a96b135345d06bceeab57b8ee8ccc511dda95b18830cce7
+420086cc3f5cc70462661feace35fe95167e34a600b41a6d8fea62e615cb1b8d
+ded90dfa075b5f4ef154809ff42246a592f1a457a5f71ce903c85c180b41166d
+d398c33db12412c1d95c7b4a6e4978d628e1c278b4a501254a2439f9aff3610c
+80f83ccdf22ef5a3661c09eaa9e843240c9926c482f7021412e6ebcde392c33e
+33d458804bbb6ad4c9824d24a345955a91cc9757ed6871a3a9483a608a370a8f
+4f6be27e8cd3af807bc7d296996cf568fcbbb660437d967479637ee8b3042f5b
+0aed5cb1e0781c4d572ff72a87307149fb2d53f282bc85386fe22e584f6568b1
+b7ed886140774aa1e4b3e31b6a58b5e49c1ec3e1a32890b1b8efa5f25e898648
+0ffe15e5651a999b2811447f446eebf3a39d5a8c1f2b51acd36ac929032c4923
+7af2c06c6acab5a6103b2dd2c947dbd11098ba9e7fb27306dd67737dc92ac6c7
+5e0f0ab272f6e6889949cb011e861124c7d09775e6af78cadf535ad12496f117
+03da2d7501a75bcba7d44558f2048e34d8bcfd085e32710097ba75b45aaa9ead
+ea0abd704389a13f643b8b3664ba9babf77660f6c388ab5b963e9a8c984a77ee
+2dc6bbd11d7c8492c0454cc758418e639d80d7b63b67b8d29ce8f0717a3d639e
+af8d9934a4f78c10f35ba79162cfc8c13a4d0376184252270b75f415a0a0fdce
+37d42a8989c20ab88d082eb247a3a5ca7eb03e23d42791013566b86c769afe05
+fa4d09d955027df5e4aa0aadc75c6efa68f40366e344d262080b8d0fb3de78ed
+2e6f3c881165c8c68f4698e3575177b07bec0234eec94eeaddedb90c7c8c9892
+ca90786d04b7ffd610875e5c3680bb46ef46d0e8cf7bfee67b656490c83aa4f6
+da28375f3c2b8c74c51d5edac5b3b74cbf130949e29efb5fad298f4d0c172826
+1b12db5d71ded5442642b21a75c78a4f8f6c240d6337769f838ec325be810a4f
+04d11d665f96c244fb24746b093c3f4091b7516f8df1ab9f3ca2c6ac96fa6764
+a31f21bec14c2d2821823cfad018b4c59c40292d21c8f0df185350e2b99826b3
+22fe13edcfe3d8d0f21664cd9b43cac45edfcc26d2ec0680ceb0d27f43c6644f
+215879f1da5733265b9ac66d0e61033e70050b721efb9d073a95980753016e4b
+ef8a8afb127b1eb2ba7f348e98a75df1e9cf0aebc12defcbd7e8e298752dee70
+bea92a6f4c77e5a66fe20f5c8687b536e4a2db15cdd829609c0af1f81d354972
+c7efdaaff2da6f3f7790284be57b8516c1e43dbb6b44669a419e2c836587ca21
+e5ea761cf4aadb91508c942500a0c79e63be648fe9656321cdf96add0037eb48
+dd379713fe79e68beb57b2985e0cdcf2dd3c9993a20e7f6b295f4b1d66880ba9
+8feddba6b77ee28268a5be9ba64b5a5716d689a2d84a3833b5c3721d1908ef71
+664adff0d2c101d371371e7efd113800ab8c3ff87ca462cc88289a78ea4329de
+dbd433eaa9053b9853abc435f1976ddf047f6884e9d7ce0eaf429db8defb7f32
+07216351160d9b4d69b70c81e07b473a59fc42692e3c0aec3547cc33105afe27
+341fa0028344004bcbc6ed220e3986a8a8961740b74af3b5f2ffa20e1fa842ff
+ac1019978422845a831af4d1d33f42f5fda39b9dc57f44fc4d2218b10c000aae
+45e307f0353a611042eb863272b9cf41cacd4f4740c524088248f93293b39ad3
+c9d9c85a22e1e5839e66a2403724dd30c96aed0b74736438ffeecf912c9320f8
+d6fed48ea805375af30f94c1192bbf58b5647c740f1ac838466b89ea801f85b3
+4d5f0dae85b57d9c15d1a9a11e3666df6f96b3d5410c7fd653aecd1bc002952d
+8cc4042bf851462257c5652c730087097df1a8b21e4ca87d2df5016b7f302762
+e791a09b9d45d8a34fb40a241b4d3d0fd356afa26781235a65dbf76190c70968
+4a1c5ab45a7be7a835cc9f958ba9c35c802c346b0966bc056c18107a8b1b579d
+e99d85a2a46213c1c8c668f4fb0ea41cdd8d41ae4b7812c3c9ce16a72d963a67
+8cf6197cddb8737d2861bba747f5fe2cf183147b5664cf815ba1424b794074c6
+fafa4cdb6e1a922573ffd3674f5d94de81bea89f0add8a63c49bd4fbb132b00a
+f3c3eefb34c273ef865335388cfec53864141cd869b9b88f0cf4c469ef0fb9dd
+591e6d19a1003cbe5e6b5f7a3c6dc1d5e93f4df2eee64e222bd4094b63319536
+3df1f31785d3620e5d56b0c37444cd9ef07f27fc17551c0232c8f0ecb723294a
+308b9bc8e087b3175a45f0118413d16f3bbbe292eb31b46b75c47c13f661a991
+b4247e52adfcc2fd0fe67327c0e9bb4869a7ef45a148eba87fd67ce263d87b3b
+c67547e46d6e402fa6ab225f8622096c924ae5ce1c911caa9c7c7de1b9e10898
+46050a0d77903b68daf2a986e0a5edbdc9c5f74df7aa9e46397f5288b9fef58a
+1888d49e4648712cc9c3dbd2cffcec13af609ec37868d5495fecd98ed60e1533
+c1d81e5f4c6aeaec319819a418b409640b2dc6d6a3d576be8550c9d612373db2
+6888571c523347fc8429cf05788073cc56d470801b90c0b0129fd76877c2ad87
+b50f98343fcb06c2734dac8eb8564e7292101f02156ad3d794f56e8e263bfa59
+289c7a1b73d3256bbbda344410cacbc92496330725af58e1ff0bab1043c2bc69
+9cf12f4ec6018ca5b64e04ea44b53fcbc648428b91478fb19b262fbc012b04f7
+9b57074149001fd27f6d6007d673403e1dc59c64258fde5d0c1643240174bf35
+8487b55dbeef48ab9b0f4d59956da98fbd5872338b9eaf94fc0e7d72060437af
+2a7311f37f2176fbea9c087e6aeeb2d1787f467c0440214ab9aa534b1dd1f2e1
+a6f0b8c0fd5739b0ef4422e359fa0c55f6ee8025f24afdbaaef3cdd3ba90d9a5
+58bc7b33f44eb2cee284309b84dba7b2352e0451097986b3c01319f6e6160cc2
+4a8308111583d473afe5082cb81a6cc4bee3155db2be1b08590726e80cb7347a
+db9218ecea7e428f57f4475a6881bef1e5c14143b832e83444b44c7401bf4e0c
+e3fa946fb7642b8c9dee8196369c3a440e47d79058cc25a193c709090bc4e8dc
+417f8e1a1554b19ba12d8df5cde03acad996656029e0a2b274233deb558486ca
+e05fb023b3575334cd976f685fcc4831480d31cdb7c8e48dc6830deb44f0f1d3
+8e7d3d8cb9b37ce562cb12c6d5e2011a7dd561ac116fe2f5ece27750e6c0039e
+bbaa7b4d6d62a9ddd832747657d654985d1dcf204c3d6f85ab664ec266a73e22
+6d7b90b2f4afab06a03258249df0eba1d30957dce345ea86c16e7828b0ade91d
+342d48e01a0936d659b27601ae5e61057f0e3994ef588b4d9b106ed06a5f6cbc
+41bec67651711547360426b46e303c319ebec46d67793066c1e4bcc8b26f8e08
+8136c73cfa992663a7bd57cc34d6e461dafb019c6eb53159bf0d295fcd99f2a2
+a256fe622190178919b516033cd8cf008d35e1f3ea7a7658f0b3a72c9258a479
+5b5d39091cdf3a8710d762cd18a7bcf84a5951a2c238275e8b106dc9960640f7
+b5e1b2453f2edbedc029b6471250d1094d98f6ec33ee70cab5cc3fc6a2407d9f
+6bea7ce48f912ae6317309de6f53b050e04f08de71b29afebab7988cef1d1e2b
+b3f6d9877e2bb60475e13be923b810f6f7cd8876e3977b42a74ac90e13de4ebc
+5a2758021b69571575f67a2f08f694b401b8bbbaff8c0c1d57bb245254977c92
+ac379a95b5984959e959a36bd328d34b3ede92db195b33ea77ae97e52027c841
+2ceef50045e1507c68835a42d61c0570f4482c84f013a64833e4d30009ce04eb
+feb39cfd8623282c5175d413463b97c496825bb49eba6c9854c63c16300d60a8
+3ab78c6a40591795cbba80e8bfbbcb569b3cb4fdd127a674ae0aab5f741c4ef4
+1ac00f3baf8e71938c0d6bc8b318507f53d4e0b3b3c0891e8081f6d0d74c591a
+4862a18605eac0a41d4416d6d1ae22e668bf859816b4bb96d98b295a6c330bd4
+49af2bd6f7c5af73d6690231407b0d8266512978207fd54e36c9efaebb4f887a
+68f33ecdb9a6412b6acaabd315ea030d5d2a4f9af49be975d1b27537986ae217
+64ef883ffc71bfb1aa76c29ccd66e7278ebf75e58c1f76604a9f4dce616b35a0
+0216d07705a079e7ba1ed6b0c57973ec27a23d15888eedd4e08e8cb020e34ce8
+da4525000530d7f670be71f4574ab8629ac0d0ac5775b22959afc05130aa0cf4
+2b321378e51b2000548daed73419b3f7869acda7a1815e12a92c1d249d1c72b7
+9d64e79329c52e71a9434d7c209e277bdb6980a89f694be02496ce4d6c6b2ee8
+0858afa04e21b4061d6886683b61b050e51842b5c7b37a1877a611f3662dbc13
+6bb6873ebe4387a83701b3b1df1897f470ed4fba0843331ef52cd31a5e26c49f
+51a88441dc1ca372b220a3b7b565fd7c3ba9b104b66b9142e18735834c551c08
+671ba66eca48e7ae94aceb42d096e017aae8d161c2b6263c5c3e997f148ae368
+fd109c355106846dc069208ba09ef22003567301b9f2516b023e02772739b510
+e545030aace2469ef328f2a8d010c0d6fe83f79513e101713813a743797982aa
+ff2fed4a697048508b33bb297b9f89087ff70fa8d67683c36f46822d27e0777b
+df2ffbef4328af34afbfc91d0da5c8c7feed4e751a0c6a94c0317e0afbcabf99
+aca1ba4c171bb9f85d1eea2ab5864c65ae7bbcd4e4e1a68f6fac09ce88b4c1cb
+9d3b696eb1b1b59b25fd542038ac23c1cedd7827b83050a9bced00dba1bc5fda
+ecf9775228928a618102c0c31a185264ff0a359b379e688838a2c426888ad8b4
+7ce5560f6646e75672f37f6d427de4cc6728c5068006f3f3951d3b7c6c2fed88
+28ca26c85bc526502ed3395c88559d134ab3e1791c682d10566e53cfa9b5dbff
+a1349cd85655d9962db68fefd4bd669e1dd18ac9b6d82a8499a04cd8c267397a
+e4cc7333dd901202d794e13908d6211697c55ee756b0fd95a0e1f5b73a8b818a
+2d453c0c8fc98956ff77b18129553116d57e375d2eedb52feb98c53d1923fa8e
+bc354ef1bb0db47a5aa402e206283723669e310645f4c8472520ebb4cea883c6
+4c9a2273f2a3c3a7232aa9a19e50209f8c47ea9ce56efb0dfd4ceb08952e029e
+d32e1c32d0cb5253e103d01b1c170f396e5e9b165d049303d4e6c2bcfefcc928
+79b891660ad068015d82fb714798e9ff7982ad9a3c99454f1dee48e0cb6f4593
+4c695eef3a85f20e70f309388c6ca8128850ec68a10eba077399d03c7a3b80ed
+0c683c598d1d5c605ce62e19f2c8f33b07239469ffc3fe764048e477c5a3697d
+504d9fca2d89a24d6be4467460202ebed6a0462c7ba62ab2476daa10088a58b1
+1d8e07164543b39879390941804abe6a9b7833c80d7e950d15d40fe6371237f9
+78fd5cb0223bebe74606db90cc7b52fb02137bbc5bcaa6242792425722e38bf5
+5d6271e5d5e40d230d5ff157d197f1271885c390350a5e9159a825a9822674d4
+fa8edd33add5f5df12fd34788d2b4fe1d371208af1f85c943828f9846cef0715
+a400d8fd9fac11da19cb13ae69d361216057a4ac436cc5be7375caab1c890dd7
+212e5f906cc35c14c2f6396be9cda5806813e8622aeae1de3a2a5fac04a8a9f7
+ff7563bee5195450561ae347842060e717b75daf024de5fa5216e1ba654bc5c0
+ecf83f67c9a95a6c7b4c92ec6120094e18523ce8abe2f91dc68739633878b5d3
+8c241dc929f6def44eab11740d9851f025ee0395a290a2cabd1290686d639850
+d72a4ff4b3a9e3e05f0693727581b5017056b8a45e736fba3a13e8954fddb5ce
+cb67b69c214b0e4c09631b55f2bf242fdf341d2b9c4ea41f12d55de26e1db93a
+2731d6cf3aba575e64cfc7f114816e57236a6cbb77b111952de02495575a2af7
+ca45074bf8f932db7af85549a1e9c1dcf69a13463a4f58f6c830aef9ef320b9f
+9d220e712e4853b7573074d755857c39afb6290f560c0a6aae4aeb3e01725bb9
+6b7c4ba4bc06d17bab3bd054173e36b3af2fa5429408ae01cfca512b828ba38e
+ee2e7293ed1bec465ba21073f144952b587961a3513d6cc18f222d797f6fccff
+860fc6ded9ae23598005ebc446e8728c8e2b7cb9e187c01c113df86991d15b5e
+1141a62f6289053325686f2d845446ff5c96fc0dde950eae954d1262e671c627
+ec1186d6b866bf8363a0907150326b0ffafec5cfabc78e98f97aa20e2002e27b
+5087ea6cb67db547c99a7a65914f1a886589eb5421af9fb95bc7c8b1f762fdcf
+7b4d78abed3a84633ac436b84e31eaa1b694ae1de78b53e80307a4aab6d43e99
+9736561993ae4c2b008ed9b39064faa77124437729fdd57327d3c620df948090
+aba7321dc476d0dca1e002746a4dceba853abbc7a23cacbc01f6025170537c64
+bbfd35a4ab1a14b2cc02960b2a798333900e8a5c754491e8806e7f6e3bcae0b8
+5d9aa4f76e783fda9a39c99e30689837f1e9ec40f004a4e6108620f27dc1e9ab
+3840ce30cf40e7261d4bd4cc4081e3a3cd8c8c61e804dd629105c62abfb1e730
+0f789df895bdb447d8bbb528e35b9e5c6147ba0860c33a72e5ec176f6f015228
+7654f4473c7bf20ba17062662738f3ea9dafaaec0f6e8e5284d88c20d20f496c
+164ef565ea707266b5abfb1c56fb451d23368eda908b3feb575aa72336263c3c
+72196c9ec09f1c6f15d066cdacc711fd098a6bbcfcdd5424750cb0d3e9f13146
+71f2eba35d303d7f62877f2d124499e6f2d4a053d91db3c093b52359af8181e2
+72d967dfc8d6c639f142bc714adcb4b3f20dead7b65c70d864ac51179649835f
+18979be2de4b5658e82b91eeeedd7cdc8bba8bcc58f8fcd29c935038f651e3bd
+02a074d2fae420c346eaaa960d1dfb45f273e88012e67ac0cf5fadb5dd9259fa
+06b1377d3c9c3193a9aad863fa26aec00821bc03471124c24973fbf3a41fa391
+537b92d13a89bfffbee8755e715fee87abf20e83f6e3ea423812c561885abb55
+b004be54b387d2de1dcc1e8032253ada40f5bc531db231f7912facbe21624e60
+26902c4c200ce7021b0220d8196702fe8c72509f7ef5eb0727f9cb510e77a886
+9f669b2846d95b94fff321c78ac22e0b5e5d694742d6a46487dd515e812bfc64
+2f5ba7b41c14eedcc699052e55d1646540582b249280c44735d8e26f3a303364
+046ded295084638b2d92020ad4ffb7ed77032e20b79eab6c0a1244a8db5488f6
+933291df839f07f63d81f1dea989f286e36033ab150b3dc2b8ac47a1d113cdfe
+9c125a83d560239c9c39983185092682e90f86b5a4e5c3fc1244e9ea2dd4dffa
+75f2308786d6eae658393c0358d53e56f7ad52a57bbe2bec92ebe20637c08fde
+69ddfa06318a0618177873da9e3d45167eb920ba13cfeefbe37c9987ce1f3d26
+c7b6c9f142b442fac0bac5a8c670d7f2f03907840a6c9dfe587a0e33af666071
+72fdf2119d293c99bc2edf154a26d5b5b628eb64fb25e1d6b414a3aa6ac6e692
+0d6f1e1bb5ffff7fe16c1b35d216dbdf6c5abbf1c40f51023164e804869db2a1
+71e6c8955afda58ad63d05cc77978d916913fc0780f5582f8e2c3803e56b1aa5
+ebe528e6c2ea42375b7a0a61a5b7b4877fb87938a1516e812d644f1e604a4aef
+0626f3432b000c534d914d9aae20910b9950e5174ebc81614adbf37c43736386
+5ee260d31f59ed07501de38f77a5da3942e2c48693b61fb031b8ac1a9af2adfd
+3b374e39d140127f71d4b45ba52254a45d6287c60fdcd37b41472de4cf1d2a59
+30884aaf061ed50baacb40410cd3c8a43e7c4ddd1c17c2a5a46f5f261d3dd015
+16e09daeb48a9bdb5cc53b5debd022c9652fda3472767503475c12f1f62cd468
+52e995b87344199fe03e907a7a1f272d0050a12efd404e92818aa58ee81ab369
+14b8b9c166718812737ec0bf390e0680038458fbf80b6b3d57929d2fa3cab775
+400a6b71ed965be3d77b3cb23da229ba60e41041555975c9fa14aaeb7b266c1e
+4abc167fed931b245d6ff98b47d06b0f90a970d7acd9d42111e1a25fa5b69546
+61ee9e9a35f77ed189ebaffd00e8db0dc16b1ed20cd63e5a5a5d9d1fc78f1382
+fa0606e07e7740bda5bca7d91cb671c4b47568b576da2da419e9932a7771a926
+643e1de6d189989cb2ef723b1e14324909149ea9bc9cf4c786aa95cf14dedb84
+ca2505e16b5be7cceb163d465183d2b7e4def3174a0915768fa0255b42942fb3
+970cfeea9ad94ee0df250dc1c36ab60675f7c80363730256e4976a25f621edf1
+6b950554181696df545e359c03f1d245b5e0ed1fe3142720386004d0263080ed
+dc7db7c1475bcabbcd6500c9d12bde3b47f0a930cbe496182fd773ee25eead4e
+fcc59fc1bdf4fa9eb644a6adccdac57255663a96b8d7dcf7b63ecf46dbc0eac7
+bc1c4836b6cbee5a2cb6a2db0390623a734e691bd16c6cc541afb3de03366545
+7f071c83b0e477852020afc776a9b4df270a1fcf110a46a02e47af17fe2b9e87
+3098603946ff887ca2ffa9820188eb5bb5ed2bf839dcf22d738c49867495a67b
+3074d54b81170f822c04aa83b4f859d5552ba3bce906c146465f7cf1dedddbc5
+49adcd1dfe45e8f4c252c99c0832e1998f34b7b554a914ddcd633a28cee42215
+3713d35e8a76a89b6e329efc1506f2e4e0c477603d2e4625f327702a7ba6767d
+ca991862e85ed035551338c678a98eba760e23893dfdb47dd0bc5de123dd1853
+646710aeffa6c18651a36020301db5b3c2f864fe9e1d2eaf8f5b5504572f7f7d
+c0d4166a918b1bc19de01a9bfbcc758a0675bb4071f7184a80d8b9e26d9b25ae
+ee28fdb7295afd6066a7567f1cb090805c4bc87bef63b645d8030ccda627554a
+255ce8f23ba96daba91f871e3373bda2c8f94c5b9886789730e823c44e91a3ca
+a11fbc4b3be5b4622d871cd99e5b59eb47a93251f517deea4f4737986e49a789
+dadaccf91366071f1884536e849501e855440fdf466da0c33282c8e3976bf5d1
+291dd2ef252f5db3fda60622d6a3330885d27e47fee400fcf2789b21c0f32153
+5c492022973d26e8cba841fc3ba292391ff33bf144c6d77cb664a7e3595868b2
+07f36360cb710942a29549a0429d370b8f1b62957353e58fc8a01a62f5a8a85f
+f52d4ce5e31fc6beede6d4a8c0fbaf8a889c91e6b7e6aafa4b366978cce118a7
+bad3f41157db3fe0bc31f5ac42248868035d37dee5a488fde0a84a416d998746
+6f6a679181aa12635b26d73bfd36b12dd1f9689181f3dc944a29de48fb8eb5fa
+c5cdf502fab6e7619b856b4fa9b029bf9640cc2e09e71960d09dbb4a0aff5fe4
+5215e80fdfe9b42c175ad3fdb80d8e0a9a9c550db4717c07569b2b0513c6c0dd
+3918ac8c6b34ba7dfe1edc43f2cef7b65593a7deb7482a2bc7a12a4267588658
+7a59c4bb674f5e1f4374959e685c5cdf7e2570fe222bb169e4e2d0e4d1e6956c
+7d14468d3b85d084f2e9a93667c85d0404139ed7e5c5dc1cb416539647dd24bc
+be2a1d8c6a11533afb2f6fa0669e02d02bb4ffdd4c78c51c71a79a55f52f9625
+1b5b28c5c01d08dcc05189f3a8e22ac7a59682fdf3899d66b3809e50878beedd
+e395f6f9cebea0ffebcb5ebae9c3fa2ddca28bf522cc2774e90834e2dd982bc6
+e8c09c702ced12570fce960384fb7f3023802655b31b6fd738ed2d967b0069c8
+66b274c6b1eca4f6a0eb6241579e548b9cd7d3d24b5695a1eb6eabad124e8940
+cc88ef5cac863dc72fa9924b9dbc5bafcadfcdd842d9a66b25e32aaebe1a7d98
+d42a4be11134cfc48046d6b2b36a4ea60b5231c48577ca2542354ae2663b4191
+53e59cf293a2d5ccebfd0bed728dafd263afa35c8a728826235d449e82c7ee04
+ade348eb12ec108f6345849d97f3de45fb97b065a60d4140655e1df8c1f3e9ca
+34ca0deabe98f980fe14df24e690ad881e1f0f908eb452238b2225e9641500d5
+4ef9b967b12912e336a384d41f57c8affde37b37b2a8ddc14fcd8a0a5c1281e8
+8810d6a556270710c9fe6c4b84d53bdd96dc713b5fa3d29745bdfdc6ff396e76
+c4264614d8ea6e6702a7c4da7a24a59e8b23bdfc5f2038d350efd74010085d94
+8bf7624f30b20ef97fa59cde7f9ed388942e280c4f299f67164c860388d0674e
+23f9940004300b351a440c9a6f0edcc71b1e74f71f561a5a5975332e87eb5b54
+11c5021d1530e8fadb8c9b2ae7c64dbc07a75d424e8e9aee27e595b8240dfa15
+d061373f90d5ec95c34b0752ccac9a5434b000e2ada2d59a412dba6bcc8b75b3
+07b905b3233631ac2e07c283a7734a530c925afaa2ffd561228559e0e7ec2ddf
+dc36bc7902a7d29653d83a415c7faf433b45ec16aad753bbd91641f2caf94234
+ae54d89696dfa5a40465893ba9ba1e49bd184abe1ba26289ab8991c8a79442eb
+6d78e4a2d934b2e24fd3672593f92250a7dd06d8a65d3da58848b685393e42f2
+e95dd8d7624eddfadb5453a8ec0709607a7fb5f5cd6077423d4c1cf863bd76b2
+dc104ea598945114c420799c5ae67af9defd985331421a5fa602c0389c5b7a2b
+c2e9b6d4cdf7d5c0c525842a562504459263981058b45c7c72b01f366362efe0
+be5c43df58f672336012d95cfd705b88aa5c39682f7f6138eb67dbadae5eccbf
+29d13042c91750316565f87c724842957e6da0114ef5bd6d88f3d15284b51a3b
+1d562934cf8ef49e4cad2b5e59d7b5548b803d24203286257eb9bd4e6683e84e
+6b94af7fe0ccf643c11dffde2328cf63757f15dd6ed41b77b0139d4a7e845617
+1632f9a301431b5dfb6ad060d4e5990ee8c9e2673a522cbebdb0c525d434c934
+5f9840684e52d9272aaa0b6c84e83e0bc1c98e2ecbf1308734f160bb25d6c991
+3b76558823255be3f7c99a1b330e1a6662c6f63a9557c575ed85708308a7cf5a
+6b47796636124d97a65a2cae6f873782fec9459bea3f8bb2af396a47112eb71a
+0062e678d1c67148b037d8f07ce0bc42019433a54393261afd7ee09a72ac0a5b
+2e2aaf49cb6b2a9ddb5c95748b3c184bff72c402eeb9ef87363ead24c39a5faf
+884c57ebf0e849cddca95cf40671ee4bcfd515e500162f25bf658244a45f56a5
+942cb88a7113d025a6236a78b2c1848e6107f667dcac143fd1a8f41e19ec0e3b
+4198fa544c71456f68f9eb0b5aab536a07a1764c2f756a0fe2f2ac158cce4b67
+4f222aaa2f872aba5e4994c2c42943b4f551cdde108066d8324dbf2ebdb72aee
+402b60a2c51c86557d471cbd60c4a82cb568239ced71242bb1505cb049458072
+c71d33c3f871377114ef6bc7df0cd6a9a8a340d0d19059b06878b53bed52e175
+83487eea23302cfed73dfd6785db005824e2349d0d435eeb7b7d2b9458c5ffb3
+9eb382b889c5adadd94331defcef42044128ab52dd5f02790512eba2c0933ae3
+571987c16c20815dba68c9b96ebf619523f29362e7927fe174952577999c3e95
+32d76d8d2e02d2e908f41eec8685459f9ddecb2f6d4c215743f4b76ab79ecc4b
+585ed6c5f5384929e44789698899ae95ac265e57a27bf324ee3f701bd86e4688
+d8c86e171f357da2aaf8409adb7c8d14eb582708b4ad73deb8d186b3cfa4aaca
+e9cb05ccc4bcb3e2abad6b5921ee664648d5a01bb593a1f53d171b358c42c3d6
+cbae0f38244c5d3be90c37150f3a5ca18e3e8e01c25fce7570532c3a9e502ed9
+bfbe2d634954d7cad309e6a6df01db68c011b3e2bc5e904c575ae07560ed5d31
+936c202bb2d2753c74d506ea3bd0ee9990ec00e07a20a24cffa59301a9523804
+78fbfd18cb7f3d8f158da9a650db9778bc7799798584dea07ee146054cb31e72
+bf8c1498dfddb7c7d658bd2b343fecc7975e1a8d807b579b8d80a32b26bd88e8
+f5ada4ad287c05bccf949bd52f492585a28588d643ac51cadbbecf5347599c69
+5732cb35186e95c3d35c4ea03dde72b1b3d0da03ae1f8aa3e3473826ee62e4ed
+5ce20ef813cf22a22766b24bcdc41786278ebc444b8a9de9837d3956c092862e
+3f999a25ac299c033fa521aa3dc9ef7c248e7fa9aa05603cffd75c93febf0e77
+bf9332a45af3543b4cf6ed73f7fb4be96acadf8368cc1b64ec5e279ad5fcdc0c
+48c60d07a3d41906829644df01f4c1e46a0485737c92a389662321d08850acb7
+d613069999aeda26309f85583a08b46f2b47e0eaa833e8cab86681b143a5812f
+1f49c351fbe7cda8830944e7492122814ce10c6ca8788e1c35aa4a5cc7d29815
+2ef21aa1b1730e6ad76c3387f6b2135d9a99766d741153a2fc1c5af8e084eb0f
+1958747890d0331ece4c596980e38e2d49704ffe21f4094a1930b7a2a561e0b8
+440b3e68dfdfc3703d24ca8e93bf7dec011aa9fa7984fcf93825d56b0966130f
+0257acb5af5d4bfa2259d572a2bbc652def62bc86634a4b43d647f322725dc5c
+384921856bddb51ba25d56ad03a1cd1f4262347316495cbc1576aeb1016008d5
+bb04d1e9c928b6d7a1e0810b6e297fc768a66a9300dc1f91b2e2c9384e733801
+fcaffaf596052b460117483229f2a65fd6528b03fa6d6be31b9ef58f30ab3fbf
+a38a7189a494392ec6a18645794c75c68df0b12bb545b51c19384e2ff15df55d
+a14a138af9190ede8a2141ba609f8b150150b0a3a12d8b41fd94465b5d629491
+e23aa71d59fe1c0c357e627427670e3f62f261954c0858c8fce5552a171b5f64
+4e6cf1ee006dfe90561c5cc2489d7c1085b6e122b1d8adac3242b3a80ce81a65
+fc55427e567da908783acef8706b8b4556e1be57c854d186c9aa934ce6f860f9
+7019043668593cb28e1213bc1b41419b367847e3c994370db9ef2143d0562b89
+d322369725a47f833e363aa9419095f2c70b371b044b33b0d97bc330e7076c0c
+b5557835c4fb7b28a1dda019ab3dc2bf1d7e6c942bc3d874beb1598074fa8ed5
+024aeae632a36e3cd0f19e1392a2f7b06555eb103f0f6e3cbdef8499917e297d
+13f4a8ae1a87d57847baa22b0d69648d36eccd83bdaad3c5e6c55f872d26aca5
+24bfe074e442f5a7892e6640b8d3ce3d139b448ce0607ee958aba9d91635a7dd
+3eb9901042de9b7295ddd3400a157de3d937e7c7c05c826cc9f9edf9049a38b9
+c94d25408afe09e727db8c16ca73b13af88735645c48dac844121cd93bf17e75
+7454c9fc4e29aa900f3395dc78216bc610c380de0de1836d72f884e4ddac418f
+b19af31fce726866cab6a633832cc4981e4bd29667d3f75657d8a0fe6c79456b
+59100e4eb9b77f98212baf9e27201b33f34f1efdf530733f2b6b054cf4aeef33
+9df78efc3d986a9fe952045d5bb3534c22e5c06bc52712cd5de9d8d642936d81
+98ca3e8f927dc22646f3c10375904c1538dc440e54f2a68aed448271a846d6a9
+735523d0af7e821c1b8d3310a76e3fc48db544370e78cd96b80776accddce60b
+905e5ee019adf08063cc14a67f4974d7e5198a80797854d25a82df78f0793db6
+a82a55ad6d45b6d0acb73236de51647988565339ad9c51d9ea7f41559b6ed3ce
+fcc2d7b48371ed90338397b1f9815bbfd9abd7eaba116fd4495d2c411deb677d
+972af20716459eba447066efe8f4ac8c34cf8a4033c1b451d1352a29d6b4103e
+bb227ea78e4460894bcba9aec4cec79442f8df9ba3e0661ff40294b0e95878a9
+51851bc1922e915c6a4a5ae97aca5a18bb0dda696ba18e2a2f78216e7b27db8e
+e42630059a505886b7f65283103b911c668014c46b439028d4899c6ebf3131e0
+1612e79609d9341eba38dde5b6741a551fbffe2e8afd01559e2d0ea5e50dc28a
+30641c4d7300e9b71c15399371563dc14e4b4d52b0343dfff43a85009587162b
+d9bb9b257e4d66c2c98adb6a8c5b7c06eafc7df9b9e47f01d4d6e29182b7e881
+8d1a3fd3b343bc6d17cda2d1bea3b15cb6fee1aad72eb480017c16dd03ad759b
+1d62907851df0b6559ba1cb171bb83ba5b4e1c26855ba603955382cfb1e16134
+1df466c4584100af9cb4f7306257cd110dd9377f09ce7b6dbd28d6e9b8fc5ef1
+2e588fb016dd04aeac59c7ce6b2044da852f1dcbc9f69511aa3e6bd7ff640f64
+9401f8658fef628c5e935ab5da5b8e83487d1c3af24a364dacf3294b2e286236
+2c25810f629ebf1cd3a81c8ed87732a8bb4418baab58f6224fbcc2cb2a97a503
+0a7a94ef5b69d1a133629ff5cfde69f8bce0338d58c641549e79afd153b62d74
+2b7105287941c0781b7b130f0dab73f76bd4fde6609b42e0dda18e844f342171
+f6116c81fdc877f428805f8e6d448784d472bd69b0f530b547343bd5f91be100
+99e139e18829e58322e3b1ee2d0f350fb7668957129f2db877d3a70723acf5cb
+8aa871d7812b9cc6b949980e67cb83f5af2a158e6354cbc342b0993b34d67a05
+21d7ea790dfd497417dd91eb42453fa5e66242877f55d4e70ac1ff8f4ccba408
+42cc5b27a72d05a7f6a97de863babb1e421e8b5d7ec15b95504b4d5868d2d23c
+99f910170f5cc19b59b1008582ffd4589418cafbc0bf00ee58b62218fd94a628
+dc3a5d023d4019734f9655a2d09ccd00b69af554bf60a81eea9005edff723f8f
+e1fd53340fd006cc08a0cdd6d8e24196df2186690ed0ce24843c484e51d7d652
+b00a0df424d8fbc266bbf5ee836731361fe77ee1f4c8ab65903240f8f457e0d9
+0835b511287de82338d9ff400220a3e0f9a60c571fbb4598e8af35530c5aaf13
+217008666062fda0d9a3099175452a3c77913453237259abcba9b47ab1c9269f
+9dbee349f5d0f519128bc6a6c4f5320f198a9b006a784b82fba10ee217ff1723
+2ac6e280d4d949bb447e9d884295168da0d6c0e49798bf0bf835151dadd98ea0
+9c251af37b70a58731bffc749299f62682aad2b3290cc7040db4508a11503822
+b0389127bfd295d282290c45cf0fa9cda8679501d51daebae62842ab48cd0466
+b8e64acc2a7ab4e803f4c089b29021491b7f365d84d785b08b62ab90065e7d99
+d86d73561d29829e36f1081944dc989139a8a19b2951b73f1e4cf8feeefb44d3
+2426d6836881b8a5fb5a824deefcc01a37e20e28ea2df33044b8b5a552bec7c7
+f5d80777f7b92ff8ac1299ca5364c8eb575b6679dac7bd853277a8823c6dd4d9
+7f4802818f989aa4cec93378d058f8b2dd1d094a6b52614fbc525d611d04f181
+07c4c7f0e82f9cef12dcfe6884bb1df639f92edce74f964f2ff65ae107bb6fad
+5d28d47bd4a25ba7fcc1debd600d34e2f603acd1f55dbbf29a5d6db4caebf459
+5fba31c8d28fb8cfef692d575bd8dc3a8550be2738fcc4cd2d9144307998816b
+713efd831e47320efa8037f56738bd230185a5c24ab9bfcda3e0ff04ea998534
+ba973314cfc4d94b42b4d93f5b1a518c5b5ce3e0ec93fc0a7e14ecba2c59eba7
+491c04a64a33282376a861da39320b891a10a695d4fc2e32cdff4c205ba1eec2
+263c5222eb0f057d2ae86600bf704a69e266c9fc0516b885467e841ff76f1de7
+684bd614f840bab0772d3854f08f615be12a3948617015f6800a8df4d337e990
+91031d77b097b3a3034e954e170b43205e509a949f93f050c817f06b5308dbd6
+38c4b7e3659ff0925a422493c3bbdfb04ffa78ecf7af3c204d24c88789b797aa
+e784bf6dc29ce66f55e190958f8f579f2515b812abaf227ee5fd2a813eefa441
+e724c918bc64605b1f9b79227e22a6e001dcf230b6b166aa299fa0dc017f660b
+c1bd4e37c59e7eb4a5be4b91a2a5f195acddffca46f517f5d00c7932d3e00202
+3490f8964c408fce15ccbd2d14c47071412ca07e2d34ec875416b6af53fa776a
+c28e1a418fc7706b85fff2e903872d2a4c4e3f75998d9553f0936989f215c3e5
+bfa8b7c340478d92e729a7b0539d6e581fcba1e1db0875057cf2472939e8855a
+d9b1acb41698139d77eb49f16b56411bdc0f205fc867beac8a049d95ba40e3e7
+91a221c09654b6c607a9629dfc2c1533d08bed0cdb420313ed362321edd9f730
+b06d2b76e2ff25c6f8c0afec0d6dccbd39ddf0339649e13039df1f88d76a2ffb
+e06c60220438c3c375d166e635f1dc9041c173456fcde14536b54bceff14f40a
+df2e8913e4b212ae18c6bdb74726753f1819c6410a2e16f368d0c5df9f782e80
+cb773744461e06fd5781dfbc36c04564bff91d3d9ba1843ab94a940eb129dd03
+0ceeda6de02bbc0ead27a4ef64f51a2f96e986082133f3e9a75cc8f10a91d5b7
+68543b567760137b651ef7b72b65a987b9ad9230e3d244c272acf3a26b836a15
+bc88c4045baf6cad6bfabcdf2b314a578de1646edcabf591028ff58f4f442dc8
+9ad30848cdf26a97dda9e3f1d36989a68f98b7b38128555d6b559f63342dc7e2
+b8c817ecf8e55c3ccd2467625677caa39166761c233975001efce426f731d626
+18f60fb35dca46459e8f4ed0e5162b16ca1f40702c7cd7800d4606dbedae0fd9
+7dab349188a9b374e3c634e0a832fa1d3eb10926f0bcc755cb55ca86c8e77191
+1dcee69ba9c62342dafae8c507c4acdc84db82b9bf1c9f7f5daed2d2df13e214
+9e1741f639fc4ef3ea6a71b1524dfe34addd067f176739f769c4ce20757f5654
+5b4694ab62c76a39c0cdccb4791b744b359117d83e14bdc9a6d11517693a2f4c
+dc0073f0323e82d5ffca88626aad309a7d65f4f1fd14467fd45c30cb5c71e1fc
+77cdaa5eaa4c7b4fcf8bf66ef17f0727062e99768e0065178f0fd131e00072fd
+f98d523a9bb7195425f013b570bd64856ab7691c422b3ea6278643c8aa0e89a4
+5e6629dff435673a4c2d7e90c424e01886d07c2534b18bd3155cdcc0940cc139
+bb471eb70a95bc684b071d84ed1cfe40be632fb866a14e35afb32e327b66d8c4
+0b2b7349e7a1dafe55e541d09c53fcb2bdaf0f24089bfcb533755552abc01644
+15c69a694c0cc8fce9d6226a04c778d7ea62e33125f066582d65856e41ef6132
+cdcecc479682049528e6cf311b15a043995b21a095131a5f8e49cf95587a3bde
+9eb44219cfff7f7ffbf2eac6434779c8a422f66e80c3db90e4789be0e5940d3b
+f0d173fec9947d7611135100566345edd811f9cc94b97e5d2c96967eb13695bc
+28d863905d94909e0f2c1c299a6f5a063c9af1ea6f922dc70784720608e997e2
+7e427f3492ccca9570b81be4126c1a4445465a00f9bddab13e4e42c7b0ea7753
+d3dd30428b6b8f5bceea6e0649ba9c6cfde880719414a3afc7f2c995fe899fb3
+c37d4c59d1179e410e6d2e41775d4e2da2534ce87442a90b5295a3c99a5cf411
+dd8da9dd5b81c825e5811669967d6cd584e461a17073d1b9701d7c5d1fed097b
+032502b8247cf9d2dba49649ef3bd7e6bf52badb7fbc167bbaf7b13376ec03e8
+ee04d881ba7d74efc16b669ab02ca11df2910e88071a25e3f4e81d9115bcccea
+fc1cad242ade2b0fd8e233d28050374b3f5dd0d7e414202bc8b2da9fd5c83069
+6b56f3a65848fe6e76afe8ea3a766e480b7ce54d48a6bac7decc73acaba9243c
+6604088a58eccf105d8f09bcfafbfb83d3fd705553381a3b2414151639cf3eb3
+df353fe4e0c0f4b61b6a4318fd6c9262488694eb142bb1cd160cc766c9defc91
+22af8fa3913558535e74c259dcfe275ea330904d7d0756d99eb4874fd1457751
+dc28ac87b5169a3ea128221336958ac7b0b26da3a8c0c67b767e4234c1b97252
+675d7b6177d6ee0b82b280cf7641bd0793fba0235079fd6566e3ba565f4df5de
+aa9854469bf10ecf83fddeca5ed7684238a7db5fb6a72f1807be54de2f08c9bf
+fa608816ab648da9c41f06f4d635473d1dd95b99bcc83a5b6ae8e21a92339e85
+f20fe8b3cc04e0985ef24ffa8a3eab55f556cd2fbb61f3a6f6c611fd29d71d47
+fca780045ba9a120efeac851799960049b6abc52e14f888fab11a907c1906e10
+b5ce9c144f6355ecb9d98faf15b72b416933cad83f796eebab7d1eeb9d5e616f
+49e38a86c9d24f53a6d44c674902e8cf9e383b878585edecdc557673cf061834
+644529155fb00c60eae4892484a458a4018649bfbf6bd6ebf721c4966dfd5364
+6278a6a57112f2bd67f1426dcec86a4c3010d768fcde374eaba2866a96c85de9
+dc7388b59c3c116967c29ee252306eca853aca3cbec796866e3cb41f8c62993b
+f59d39793d0f02007d8509c25f7a8cce2389e3fde88a24e7221f55384f1aa17d
+48c7ab1be0ec37a247485b8adea4fae484201dbb0b7e88236e1d8e0db5ca592c
+3f0b2e1195fbdba7f0fcb6494de5fbcd2cdac2dbe2b331eab091fc15731378c4
+9a8baeeb21eb191457befc7c5108d31dd8c5f4340e4640a3b866868aa061f9c7
+8fd7b078319278bb63278bc589e040bce4a765209bb656b25a5188f3f304e1f8
+9fd5e922cc956c575cbfa791cf59951270269ef286d901bd43c6b15b264671e2
+db65784bbc36be39738048ad9cda5cb289f948a54258a2ed8e6210c2be918924
+37df564d0bb1d6184c4b4f9a012784e78195f19506040d15da6c85f6a61a9c80
+eab3b0a6efe179339aeab281ccd07caf4a75410e30069e615ec86faf6e92bd55
+149ae1446be7927290e9d88c30e428e9adc9e7bcb734d8511ebe467e09fe341d
+5df044ee5f024763c6b4e6925a5cc46169718e31315653ed533b7e12034cbb45
+115bd0496a0b02561bc0007c183fe4965e9f8d2919bbb404fb22067191b0b7e0
+2da1adbd2a43db5575519b4abb47e648074124acf29197e9ffde2837469ca79d
+32c5079237a3f17fd9bdf5b2d41269ff952e028f24adb0b16063b0b9bc83eb86
+dac2b66efc23c1ec18e0bfa764c7bd23b225e1273ddfdc56aac95fc355b7d503
+21c3029b3ecfd14ac937cd312763489b1ca32e44109e46061a380a151f6edd9c
+0a54329822a66a8ab73390067318837d0e01db12d4d4b2014b758a3cbec6eb0b
+63b8512ee45ff99a88cf7bfc894b39b3967ecb198d32c225ece763d6f42cd089
+6e9dcf32a69178a2cfa61a4e93a8f4344cc7658a70e8448534616de0de4da963
+23e63b4061ff4785c818aaa9d2141b866ff6cf537e5d28c81c8013d07f3d7f27
+6a7c921771316752d260323359585a4e2b07e093a980ce55e715763e4c11585b
+04387404b1c8381fdc8a5123d88e54425e4b43bd62ebd92234dc2528fbbb090a
+a220deaf8042e59d8d688a5e84d073aee92e564a361f1012f915ec30ca52c769
+74f7439345e2275dbdcbbdedf32fdde895c60d267a921e449ef705e09d1dbecb
+19969225954556ad6bbbe4f39b4e67f505483d1f375c5af02df6e12dd97d28f4
+b441965704cb0b4b4779c66c83adc18420bd8c159360c0f16c7baa2eb32856ab
+88dfc24b20eddb586a444234d47facbc946ec283bb0c63d7dd69a001ea2d8925
+1f3a6d53a31efcce00c992b94e9cf3e389d0cf492037451b79987cf35a218f47
+e673ede427e7ea34d20db31e36dfa83f12253283edb89191d38e5b0ed587a8cb
+7ad0a11167c48c00e5a0b30b6f03c51b8cc3f0da983a14133f647ee0997bbb01
+af1f59f11c2e505b5362ed3e15358b76552fce7d6b2084310bdf66544ffab59c
+68b15ba14cfb9b6eca794e3426bc9f532ec41ebbf730532d26c8966e42f94656
+3d7760a60789c869be97513b973a5fcde8c13efc12c1ddc9e3b2003e351916d5
+c94ba463e48aeef0194d369954011469ee5f4476e97c678a07b17eb958b49774
+5b8d9f93ecefe22ef419095859d336d8d63b869d4110017cb3ef0398bcaea810
+fd5d8d93cd8fa4d616b023769a3be294423031ae7c55e7df73cd43646437e33d
+b692735dff3efc596a6786ba9f8c81a596d6aae62b9cb846cbf0174911d8317a
+a308dc565d0df5bca02ab5e9951d3fea0a7902f865a0c6f127cf6a246e479484
+63e0a096e1aa26d5ba3ea2481346682b8812c8b1fa665fb1f7cb2c751cd3b1ca
+e67eb17a25f1cc4270268325236f5c02b8eac541c0e2b9b33e33e0a9efd16be0
+79385882e27d915058734d5743e35821d9b6cfa725d4d3e91e2e3703c4dfa5dd
+adea16cb34c2ded3f67a3fb00dda757201f9dbea2c207aa84ce7bbdd91d4685a
+de3f3018511c97e02533e897440983789aa4a64752715a80cfef745e6780dcc9
+7d46d0495c2485baba03c0707f62babb811cf8c53083535558b4352836cfa36c
+32e55a09ff88c0f366a152aed3390cdd07fc812cb400ecae8a6e312259e11407
+348ab9b1a748a4b006f3d8255aa32dccb092d0dbf6e70960280d789fece9ca97
+58b61be0b2287cd81a53322c30cb5b08adffa3e8f5c6a9b49f564043efddf252
+a6e6a2f66967160551e6c3c08f0d512c012f44df7abb971896986ca43457d984
+595aacee5ff340423b048d40605d08118d54957cb37961bb1c6ab983c170459b
+4f0eaf8cad2127212c62a26c07a3a9412e620e043bf31e1eeb37ee4217072a93
+56b3db0f4b2ff1228b02de0bd740b9f123be12fbabb847a96684784dfa45ab77
+f349bc44588112533d9a69b3fca90822d3453df28dc670b2d06cdbaf68aa34ad
+dab29b728ccf35bd6b560e4db125d43332c707a46d91f2d8a1b4f8bd26b91efa
+4b5aa3b182dcd2e516f08b3ee3888604e95afbd43484e4439b41ef328e56effa
+5424242aed8159c6811c5d91222fd046a5ad1c205480abddd94f1942534c66f9
+44a426786ae02546c4e789d6d4156f8972dca3ac1c7f30186438189e58ca8be1
+1446f11fc38b9ac775e303e0a8939ed925d5107248009724b371bf86bcd06b56
+029c6a484708a1adfbf8b0ab88c5096737372cf031ca6710493f85d84c24118e
+cfcca26d0fcee57bb28ce97c4e515770897e85cd5c26bb23423f0d234a29afa4
+4834563f616377d1905b61fcb2ef4e1dd74ee5a5ce8005891dc2c4b6563e260b
+d0538e1607a7d7956bb11ebef22772748b3934237a6ac4637add115ac35d2f87
+b21781dc5e5d7f31850538606044539e655b4c763ec27e11e59f2259f0168797
+267c6f6de71f4dca9e613a1a1dfdaa1c1afe69c88fc0ee9cb8a4022ac193f54a
+4b3d9ea2b32e6f15429e7dd11851af592985a697eb32e2c084526a0f44e112cf
+4aa9b9e9660b066675ddc2c848856a0bae01af9ae5d3818f7a51622eafd51bc3
+584fe7d8c0df2212bddeed3acf3952b862dac39675461493e61e431ed9b3f7d0
+bb9661046f9fd71ac3339b71450952facf48d741b6f07f105473544b07dadc84
+29f0e050342da70a301049d517555805cf7c920fbbb48c56a907a3a19d8c50aa
+8b624a4d3789a9cd600ca2332d77d101e808f83822c2942eee8e2a68e6f0e8cf
+be1b63b5efb1e2d1af9d6e311ee20d58cd61085c6071d48fe9aa42d64638b7de
+49403daa2d3667588de865feac8f3e4c9f9cf9746b72af6e4aeb6d61afd1b895
+b15fc935231b0f245c5802fe3bdb234bb53b48379ad397cb7f543c418b457c2a
+9443e5c640943135ce35ac901abec98e42688331100aea3dfd0868fbd96b0aba
+fa9588db53793d0e9aea3b011d0223dc696fbd83a5a3faaf6faf4959be8d3d15
+b141231a47caa4d7746ec45c778809da6990b8fc5a17f71b54a33d8b2bfcab20
+2d77c515c2fd7d4e8d4d16e2f932d37aba003be26de0552467103e2a76efe0bd
+2ecc64c528ca69ecb11b1cc06a444aa8e2bd3e6eed849ac8da359a82212e00ce
+bb2750beffda0ef79c020d9338571d8b6d1f22a4f27d56d3ca15adc2a79f23f1
+c4280d6773456f2784f0252398aff2006f03e76567700b64b1aec7ab85ebb1da
+8691ba860f8478e42c88be431c07c924acc2eb6bbe37488720f914e0dddbc15c
+83705852d5045dc73856c8f4b6aa093e032af86da474b9f07a211f2c3e1f2c53
+352f18125c184924ce07f287a03f51cdc13c864e19b86c4c4e62807432096fe6
+fafdb8b65f00191fc640464c4caf1cba3e36e7ccf06e702c2d66b59665368f9b
+dd06aba38849343c8e1df4e0be2d847b93cbf79cdd0360ec590622c67df13c98
+bda559eea0a07dc5e9cdeef962b161f5c82f2fc8d3ffc2cecdce1308f5713c07
+96fce8b4c71dd823a694b741904626659c1ce3c4f89efc98918aefbcab53e389
+8a366b6f24ca56625a0dcdbacf39fa6d417b632cb5305c526a427412c49f8a0f
+e4fbd6f0b51fc97b85c1a30cfe91f32d6695cfb4c4a1619a4ead80a674c53876
+59ab6dadb763f1f1695453ce2627169874a3845f5c6295c10a9d3c534d14ba0b
+491dff6be63cd182b2496e01b53d931c857a0dd957706da4d1a07ddcc5b80b4c
+4072dbb1a8b4273d4e2bbfb42bad673b923cc4ab10ccdac1e796429b0995fb9f
+9952f06ad26267a5af7a41f673d82f6e700f43e163f4d5cdf7a40b009f477b55
+dd2758b4dc949918dfcc0f5d914ea98c8a2abd3b73376717bbf822b0f5f1054c
+b01f9222986e5f9f22f1b506079570ace57f20c80c55697b0de5a417a227f4da
+26cdab1b766f4854ea5fb574781c09945e54690824c587468648dc20e1f16d64
+a7133342f9d3d3cc93773fe065f101042b8d891e9041a72c250b862054231491
+00e539a3cb9e9398d4ab0d19f15bf8268373c06a08f43f800dd9b0b2dbd7d43f
+18a3f2dfa0ce5bdaf8631140d572b7d15a6f4acd06eda1e9b92d69464887cd28
+37c33c50af0a9db430ef96e4507b330bd2d7bee0075cc19a88ef0625eaee6ec3
+429cdf7d20ff1cbbddec2758ba20ec6501753025f717b6e5e278ce406e1f3b0b
+62beb675411d62a19c1f12de5582c544c252adb313b2e9cabbcc9827ede5824a
+887a8965ab08b30a2e242b4f78d8c92e8f4d5b040bf89194dfedac93cd88dfed
+379d3e9b80f37e5e2dd904d4b17fd8c463407a9f4a6d0553817198c07ab8a347
+c71a6c7e5b2a11c12ec2d09e6f82560b608e666d6503e21a5b5366eccaa1a325
+2be976dc010234b9f1152b43cd36fb38977697849cbba678308326e915d2da8b
+997c92f29b600787c187aec219631084944b1eadedc3961d273da1f3dce724e8
+4243f0cc7cfc03215ae8fd7d52e17860a3548a46c0b7dd5456f942352eba20d8
+58139c9f3a188f01ff82411a5f8cfcbb7baeebe5624c207a731ca4e6cbff4c69
+d0a94b0f8fac582ac5c4ad113f3879426e5f9452edf4ca72bcfdfe383d76e704
+24a48aa7d31ebc31315acca51aad68f516819815d23a55a872b666059a0208cd
+c4771cd19853ffef6b498d51167c92ca5a4383f3080a98bcde941cbbdaf29b4b
+7cf1bc338a725406344ffd2f53eb4b11a7ed0d088e5e0c71d9d44c1f23f262c8
+008dff2c4f3c214a2a6e8bf8022edda08bb27aa4d843c144325398bbc5fd1010
+4e0bcace0f9e5ed4916e6797a15ecc7d2d0b7ad2db5bd59c625ed75b722d7ef8
+3f83461cb6e2f10f69b3d9fa28296548da4fec5977ab2ce4eb764bca4712248b
+f06ecb933a186c3a853b9dce6ce162ecbae5c3bc4768b88d178833a2d0d452ed
+364573c1aebe6a9904c96b7ecc3bc7bf206dd42a2784f5fed52ca93ac40c1cba
+cce9d2a3ae64de5033c6866d443eefdff4a5fbc6673de330b78d695a7b0cf370
+9fbef1efab2c8ee3f012a68b45e7814e78a7f473fc0fe5e0f371348572b168ef
+c0fe3bc25afada49cc40a89535d72cd06698555ca10693cf7bb47165f949ae69
+59191e44cb5b852b111cada0433df3ac8a17ab71520ff59c0b9118efb4f52c43
+e56155ac69f18c3d100ffcb0d770b553da90c7c5259bd7520fe8670d643e7d56
+6ae598d6f24adaf5c81217a3ebf95a84b06de0224a84a71caa0c315b65e5d58e
+ca1b92dc723705eba78ce05c4e4b6fdb7c6c1fddf45017e58da47ac0abba680a
+5296d14e8f7b4f318dd0f3064c6f1fd82eebcacbb6fc49bfde348170fd7bc83c
+0029c096f4e22e6df93af0e8729953c17bdb4d3135a2f3bbe91190b4a1eab51c
+57b43ca507bb92c162ef96eb4cad3199a8840038c2a898ff9ea044ba66c188eb
+7443fe4cbc2f73dfd6b00f606b235e0364a3d838d79a1bf68de8d585ec2bef72
+3ed31a1074a6cac7caa6de79bb0c847acaaa185ee8bc28408e4aa5434d634087
+7d0eb5f09c4365d31ac35a8864253251786097e97c5033e340d957ce822ba2ce
+590d15b5e8fcd805d84f44206d3dd5f925a89b944056b44079ca4b9c038bdd40
+8c05707ec5c063f12893c37100c3f9e1c8f8e85b21e51a63ec79b622ba8312ab
+7c75e014997e8a0a58f029e63dbf4933106221d240df71213d992ca0f8d25c07
+530f66faa44bfc66cf1f8d5789290164b8f89072e75fb820a6f5628d671d4e09
+389a07ccc1f98b7ce8c6bc97a6c5d938b199c52a8cba2d2ea936f509fa8a3f89
+f33007cce264b2b251ed6db0e6ba0bad65950b261bb2bfd1a802e6c9b401e6b8
+88abb479787df3383a5ad57e119974a0f2dc3282d8d5b022ee52bf27204f6387
+8a4f0edf9279078fa651eec4cc77b04ff9c18b5532fe7f91a0b9515b0fcd3d3e
+bffc3beb47094a78e942733ede5155ca699917ea075d729df6ccd8a96cc37b50
+789e44e71a080902e8755dcf17398ad464470938493714abf0e7d0a41c3c55fb
+f509cabbfd130c142af7b4dfe6b59d1f11f67a1c14b7550d8b379dfa1b2bd9ec
+7e371567f011f324bea202c76ed48acfe2cda65fe3119162685bd52898da3044
+058d497208f7c47df5b2865a912cac9b557f5aacf08b907f4970325f52cd94a6
+695ce71c19e854d2160d4157a046300def566654ad5c83f63a18bb28a473c00e
+389b2bbd0c89bff39bdbc207a5c47a062e69c62d0f43d9030b1fb4e6e1e34580
+8c2ee2e8a61243203dd7f6e6d7a0fad51e85272143e27baaaacd4ca894785695
+d34c270eee9a5ba06cb2bf3eb8c1c70557d89cc0624b7c6b2f55a68470ed1285
+fcf3bd21c5e4cff2ab4eb8ef4168dc015096456e62311e8360deebe75740cc9b
+ae5789e59dda3297e3cde567743a8c9a9ef36c62d8702fdddace6da2a4faed91
+8a89eb6fe9f611e1fe4a2d36c130fa78f7d373020d5d0383ae3ccc8183157deb
+99929bc37d59c77b80d868352263cb0ad543a33603be91823f2e87c57caa8f65
+d2d72b80b6a19befa505b4a38c5d797f84dbc85676a5b91c2de7b7a644f72acb
+e6867c7f3de86d60f080f3b852875bf0bf9e958cc9cd76b0aa4d8647fb82d86e
+50d30a8b92ad80db83eaab632866757bbfa6de4db7685fa81f8455f91fa0695f
+3bf47cc90c068c8cf50cde3629ba4d0554c6d524e0a609a8aae797c4fbdd1fa5
+529eab74640d590bfe62a97e8d25ebe9c03eee03ab9fbc7c839e1b7e9849bcf5
+11176df6ffbd0b19e4ffaf2f019f995bd6e70f6a0a46dd103fbea95b9a268c69
+17f6de62445c2a60f3162b04c4e25573060971bfe8018c278300512c25f7e68d
+bc399b875056ba92ae450bd41b0c4a0657689593a9d1ba110b869d02a9b8864d
+5474c653d299879ab1f09cee055ff5b875b4e32e6dd2782e5b8f5918d01f03b2
+ff4192562d39263a5f621dc77e1951a3f7c5f68a17fe788398bb0cddd7245286
+6ce8860ec0d0d354d1c81274eb5f078c3a1eac81e59768157ad0fb88e42527ac
+32180fe6cc1ac34e70edf2b4824c836486e8e4ebed8a2bd1fe4298b489060bab
+f6869d1acaec387075bd8e0d032e26c2047eceb321c9b062f595d1745ef64214
+c9737a025d15bb016411b9ab6d92c4b79cd4589b290082d3a24d0a0496c0694b
+5c2418f93a14cf8a30388dd8a847a6d0d75d15d8e64a7bac3e3e76754f1e2cfc
+36b1d1e026f1709e8881e18ea83132049ab405227b035d8534b19812cf8eeb3e
+f53cbb5b421ac1e40f15fdb7ecfb5b37fdf5ee1ce6b24101cda6dfa49f04e770
+f9ae5995000ce6cb123f8dabf249a8c2b961b1d7330207b273cbe67d512d310b
+0e1721bc29fede1e98da94737af350fcbdf8b8ba357cd922d328180fc39e92af
+d759268e7db777c995f1801dec0e787d3844c05eb62c70f3359597619a23db98
+4c41bb92333ff13227d997dc0e484124f5d6aedfb9d984d16e211a9c436f6df9
+3c0f014e2f97943cc623ebebaff551f618413bc0e3978c67ee03d9c232e1ac4b
+298bca7e97fedd901b70336c243742571d1285d466eca801d811680cd743a84d
+7e7d281fdb343e3d22249411036ebae6a8a6556bc213a2ba1840400e96204111
+1613b471e7f9fc81dd9dec37aea9b6e52a88e80cc9444e265f6669a03f8ab790
+450713d34df2576746c7c5024a6b8525c38025680f3cc68292f929e7c73398bb
+4ba02b577cd2fa184438e201dfb25db9e76fd01b2e53eb0c841bcfa60eac059d
+55af1aa26a07b8b0372fcaf61a7c883d6bafc79b59de13a2c2d8424378b835e9
+354a2d875aeafad3d01274fea6721126ba49a1da708d2502a4cd8ed3feb8bc1e
+aab3b5bd5eee75b21a40f6bc5475edc20b4b4637868d0fd9ad8733ce6c1c91d1
+cd78efa5444743d1cd7bab427f8f24093a7591beec1f385a8b9dc02d93907753
+e403bfbf5a3fce9355e7172df168f6704074c65317ef148b5795db5cbb9c3bf8
+6dafe9a83a325823db0472d0c0d00479fd1c0bd02cda2b2959dacabb5b3a23f6
+cdd6a36b91de15cf3ee6718030f8999ac4994cb3fef37838191fc57285b579dd
+dde76d4e27983c8bf6f2119f72e0adcc515ff59ed1280e6d12b5176fec1a621e
+99b0afb4244e6fa2ef33fe2b0e315bf378b128821104e00849834f8ac186843f
+f860c4b333f1197b84eee7e967032b56b3bcfa4ea7764c937c4f03defb93e4dd
+9c96de10b02878228d99a40d87ea64a9afd14f5d6ed48ccf4dfbb94024cb1c0a
+a64423963be9e9882e707c6276333c0ba3f6eefba424a2e10ff88cf76e45ac33
+d0a641e2656329edbeccc5d213bbba44586f5722a6dae8245c1e84a06421cd6b
+659be273a1055d6e092e5769ae93759b6533bc9c8ef13e5b920d24125dbb51ff
+c74a1a340b5ad94f785ecfdb245d443162fc9f417b49881512ede1aebd251766
+84901482dbb37acef30242ffceabfa06d1492c30afc075ec2de8554a66cf5c8a
+3e5a0a134eb1f8cf581db83a92f8addfa60e4a814dda2dae415a5ab30692f325
+09fab18f8724a013d617911fe426da5260e8cc5caee8187fe6a9f57812c15a8b
+247b51c8e1412d22aa040a894a7210b49b847e0be3ea398946f0d9bc8c11b751
+642a93629d39a1d655dc59d5e7e6fa18cf2c0c89bb126a1e5d18698d616317f2
+46f410a8f1c40820498e0c4c8235914163bd76180b82274e80d0598848fd6df4
+69378cbcfa0d3c260a24aa164132b18dc004ea9904c1f740471806f1d06bfec1
+931748be9355c122f29e50cb39cf027fa12f106c72b2d62a382df68503a8d143
+11ad51abee9283a5227aa457d0ebc2dc1b157485fe22b26f9f0b4df8c8e7e508
+dcc32c020b6cfc571110064c501afae8b41cb81a6dea6624edbd8071037a48d4
+fb571ea290dea299154059ecc52150330697a70a9667eb22a6e0c973a4357cc9
+44e7b8834c39c7ec0064c8110a6f7f233b378fab8fce7056796f6ef4b0f72f60
+06610f8b2087f7900c133431595f07198ce709984c03e1acc00946f1f614243c
+c4f4e017a78dc33c7b7811b88bcc693fd3806348f97ef72256615bbfc7741ff3
+a4e618a72938f7d463992fb16517e702282e853cce87044bd4e62c72a28a2ec4
+8c9f1193c7875c032597b9ca428f8e4bdda12a44cab7f6e5af78c0e92308849c
+5ce537fd9de29fe21c99cd028b1cc09bbf5503e448ea3b188a91fb43838bba59
+a7a7cc61223a71b3f151bc5a30b2e5198c9cc424177e5c19d709671692adc9fc
+5f82d062d5f57f63f9aff9226f89b3e14b454e379efdc1deec12aa599bc76aee
+eb6e0df8ae03e89208079e2d5120d4736ba05bfa19c60c5c28811e4cee12253f
+5d5c4327759dd964d256f84fd0f1f0e612278dd1d4c2e2b50572899ef1094923
+e4e1c7a65e3302032177d5750960d7bc24fb0dccdf2fade839a18d536b66f95d
+775ef0710487534df9f36d4689a7a2a2404f9f597a9fd0424749582fbadb1aa0
+caeb17e0103e7dcf549147ebad2343cb485f3ebdafb72223b34c717db9611835
+175403c46f3bc70331a47113bf566be329cec0cf54f84e71de96e8ef12303ba0
+4f994b0fe1a04988405957e4b631788bbc41ee8add5df85acad98cdc7e7f7fd5
+cb0b6a9e4b77b1f8f7f86d50e9f632cda32118a666f95201696a01332e60aaf4
+4363cbfce23c20d426e6cd5844510d73ba24b0d0a341202f25d50d1b31de34e7
+3ff9c5dc5a9e7ea6252ae425fa98182cc530456f259fd020bb88714c49edbf41
+f0861b9a92a1e40f272997fc4999e3e9499e652ab3a0217048b2fbf9fb4e3d7f
+304ef8bd3d34ebff374dc7ae7b94ae711b829097b3175f867603e75cea74341e
+53aceb9040741c0a170865a804af6f4b0b5342d7f85a35daf2c5de35f9ef11d7
+61fd7239c8285d7b159c21322d47d70dbe74c3cef60f0a8b5333cbc9b5c71d84
+3c467acabf2c45c5b2cf1a117317dca0f51095e2eee1c56a3cefda5640c979d7
+9846ae1badbf764027f5a3109cb4087d97d09719fb1c4450f1b428abe5844fc1
+e85cc6b22e451ea40724f82ba78a19f71e0e5a594600cf40b2785949a56a6ab9
+e3a08428aeb81368057d5b51cbc805ba244b46f672f63a1842b6619d78a428bd
+953b8e5447a7867d54cf4c6b4097c9f5692f7e547236cbbaa46f49f2ddda6bda
+71049234fdb1b31cb7a8793c2f26d7460010f4664194208f2e73a157fa8af181
+89a2ddfb9413a77a3ed4a4b1224bf684f900183246439d7bbef6d67cec3585d3
+2ecf716728da2e53a4dfca098752cdb70066b51dbd85aebc018e42eafddb40cc
+db702f6ceae21be6eb5effaf3e7a3bfeaebee77159855b622457bf5f01b3146a
+0ff7f33790beca7240b5a0031f57d9d8ac1f80a32569df420936e2aa5f2afe90
+173ba6d34dcb45102ca00a28cb26a419ee365a5eb5e27d67bf38b7b81f233a68
+0095429772e796ad24d0fba81acdd559548474764290ec307e02463085c3fd0d
+8f08eca815c97ddc42e939dce6ff49bceda5c8b8750daff47390bb96e998c005
+f31cbb6a0aa280eddeac7b4c832b4b530bc66ecda6b85965cd1bf0c7bb426ce7
+f0e68ee5b1cc180fc68c09649c84ce5a74cfe4f4bc10dfc8f5a959a3c0c97dc9
+3e054569d2e1b45a9a353081de9a06e31be6dbe93ce131edb7318adccd8968be
+cc7ead5e00b0f0c640691bfde2d1de3a7baaaa33913f17d8feaf4973e7e6cd0b
+648e2e4b7509a42f02ba8b9ea61fa632828b352adf1b9fa31488d5b3f1ded0ea
+a34da077efca470d508cf246aa993a1fa10dac8c01797d8147205c7ca5a0bff7
+3ebbaf5b0626b06eb56aaafdcff53bb98f3320b4babf796404e1724bab3d7dd1
+b6c25844675877e0ed95f61a0a677a828aa2b05f68852e25e2a3c5057df1a14c
+073efef67326d39119371be9dfc99f1589ac6c5810f1e9ac069cfbfb141b85e3
+0579e31d33bb046c4931fbad3463a6384712fc6b4bc29d0f8d7debc9df8a4feb
+a2cc53680bf75e2c65b47061cf2b56ba6d390a1cdbf87065f436bbbe28b50aa1
+6ad75e6da40b79086e3a11be3afacf81880ba0f16a9190f5f4a77cb100b1d783
+e7048df13a219d17d1b5db8c7ed82b1fff15dca29139da190240b8380bc45b61
+e8594ff8b483db15c3b0906a4c7d6ff39160d953624ac1090d0f282100a57149
+5dea6c4412286b233d867ec147c21aebc5e10118d95db3bd9e5c5613b067c49a
+ccb42620f21cb5ab5f6aeb20618421f868c5092beea9876ef0cce6c20855760a
+cce59df19120d59eb0017d8c92d9b31bea8b52a607b5a021aa675c8ab541ef71
+5f516601b1082a3231b8c07e7c97a6b6812c9a8f3935959f297617df68080c0b
+28364fe635c804e68153e7e2cf5d34ff602bbe565c46446b7f2071c6df407536
+c8e59796be1e192db379bf112b6df94e7917cf5cc6a905886ccc24e57f1c99a7
+2665f6cffdaa6743a5e2c9d46b519dfab9a4a6c76935a583022bbc0d7869e08d
+a1dd91d9a776cd39542ed3097ec97ceaca9db06a6143a0b33a4dcfe91340f5a6
+f908b2dc123eb636caf6bd09117a51388d1b2760ae8d70fff2924cd002ae0995
+c6f10c7c17aa792dcd270056567ad17cbb88669ce7b81e6fc36a7371c218ea67
+4493a18f6ae4fbce2ff08bbfb25ca2dd65aa3fe28ccbde3b2f36c88de30cd95b
+5c1fa810981e56abd6697b0dbc2ebda8783c7eeacde33f688239d406b4160ad2
+065bfe629bec65231876c1539c0d227986957a3a0cde922496996640dac05a06
+36c0d29dfad1de8988c24a890839f835951059498ae98927e14d2196f6c28944
+3c4dc3e822bae65643119150791c62a3a7425d0229a9b4a7d7ae570a3e8f9cde
+5674c3223b636ab84774f4770afe4ca9eced4617a1f182afe9367dd32d380a1e
+e13f5e17897f36a1acfb0f4c54c6254ee611ca6dee914ca30e3a3a0ebf95c135
+cf9877d6e4751bb600593506825e180878532fa7ad50d2478eab9d4f352975f2
+aba5e90d4f831495112bb28f8f45c3d86e0bc5300a3e46468572ba4d6da50ad2
+17371128a884dbbe9277f39be7d30e3f2952eb28e9780db38c8678b5f03263c2
+d2c73712a902c81be43006044d5039fb0b5c2a8e1959963f5a5b8be2b6ef2df1
+12a7bccb5d5bf711b9c4c3a4cc939d319b922ed6d7f9a30719c48cf048a417f3
+1b392db55253b0df1f7fa1ef0e7a0bd2c80112cb212160c82e4e8004937da3c4
+bca6b944ce45c8e78064ead90e48ad5c559c84295be22f394e8f100a85e1438a
+62607ab296bdef7aa61bce23ae31577f98b51a40b38e6b55167119349428c0eb
+9bf6761daaa00512e64fe94425825869893414117397028a116ac84fbc8244ff
+48bcee233f65f347ee1d31e63e53efee9106e5e630754dbd5de12ee758bd79f5
+4f3807d5c5836950d522bd2fc19e859b8d2fae02b4f0760d7fc1699fa9e6605b
+ae0ad932ed1edb58d6de581bf126f0e2dfade0cb56d6ffed96c3dc2a6835382f
+c97f5964cec441c28d6e311898953149ab52ddcf980b6ebd80d86c503ba3762c
+be653cd04ba14791c9e806e3619789c0cf59917120d2db9b31a682f83f2ae579
+c8da0c4fd6a183b53a17e581c851dc561ebed01d0b30769ca8f009d6a400f9b7
+8aeabcb48996d5ab280f68c667dac1d45d2c8109482567e1c491e372d88f0ff2
+447b435dddd5bc5c161a5abe218b5de63886162167d32ae4f94ab84645cec019
+989d004b75cc0da438150f5f43030c8f71e5d685604407eb734495af6f686805
+3f0a2c041a5f5f751c590b863cc2b6ca66336991a51d7818cb120bfdb2a3b7ef
+93e0a7877e4348003b18088e9bc99c3a0ea007e8b331bfb0baf46b668f11f5f0
+8bf5ce92369f31daf63064f4185957c164f9cde3b5d2f761f8bc0cfa01550258
+93b6f23b012aaf99395959dbce11162bbc15f9e8b99d1fec44ddb83fe90b3bea
+4d9b47409e7186f39c78b15a144703c3e372fc3f2f50ef7f23f10ec97e4413a1
+fb38ad3d96af63ead6bac3e3514e9789221ec29c91dfb1c4fcdfd14fcbafe5aa
+e07b8f18d310fa4494a5e9ae7975ab6c89f5ad85a29b640468e9b0802c37dbf1
+be4a6e4619c0501bdebd8dfed599501f5cd91e1311473f0e74e5e5e48cd13082
+f8728156c408ac7f756fd6eb64ea7d7ea2ab95007766b1b5c86c91c0d3126e45
+64501475810152e4d7079c095a80eba1b872e98b3e452c2dbe8d5d10cde82dc6
+0c7a9490859590e8ac36142e66652b9ae0c88ab875f33a0cbea2fac0efadc267
+6f633d32e446bdd173426b6063ba5318418135f09efd113536833166981c6fde
+b63ba794cfbea7644d6e7b11cc762b239e033a5a971fe52dfe175e26a18e26bb
+c965d2dec8b9c15470e0335a33bbcd75995b589ef5c07f39f4711bfe601a909b
+d97058d980a2cbad9a67be65281f4223c180bc94b41ccfbbb50252a4bb147c8f
+3b83f0f2ac2940a5cd6ed6bdab0a72f231aa5190da620857d25b78cfcedca03d
+b09ec37f8cc53e994d6564cc50e9bf2649c48b12cbdb6e57ec4bf2a27ae324d0
+951bd9badb0a3d1d6d75fe45951ee163bc46719d7e84bb99d97909357d51a8af
+4061b8ce2586e2c0cfe67eb65318536b101c1321162678979f8cef80f26e080d
+07ed450609ec1874809ef032734cb18ea6ab90963a6a2290138c206934a4c28f
+ae27bcfe07d8a7580f2fb9730c833b8b61c68c74282d91456898f5e65ee32a3d
+6d7c7c3fe5233920682aba31017946f77e77e0ec99f367386dd98de87580678c
+ea7d485f64970b1262663142f27d344dd2409639421d9794b8ead1f7d22d73a8
+a0c3a5f60af51a00c12ce2cc3c766c57fa1bd04852f296c080c679526a428e3d
+cad49189cd4ee8ab55f7cee20c4334307c10c58a474fefe2719a6203d2b8874f
+c31cf068356a004b8ff28b67d798bf9e3f1605f8d72e4486a08576d4bb4b2150
+f2337e2ebeccd7e481e197b65c5ce812da34c3271b875c31294ad191fcbd6518
+bdd957c85c3dd88a4435801d4af80d6a630268bc26cce5e89c9d117027f964bb
+b8d0e9564332b9facc27ac16aa6121b5baefba598b2b5c7a172f81e07cd58d08
+a0761381988241f6668db2d732976083ff410063e2f563d945c172feffcfa13a
+bd5ca6dd951c8d57ac32c16de0605da28fd7ce0248f5297753a052a55ae572be
+78f584758d2db162558b4d2b3ef76c1a8f3faacad21fcbcf092157c6e5187ee1
+3fd49d3831880f4c80fd4085be90a6f0331083100971b581a7be38cef978eb70
+eece1ee276bed3425c511326adf34d8daf4b55b679a2f99bf297f67100261a14
+a41d76aafc53757f6054d5b70ba54201bd118c1826664318816ba77130f6e340
+74d0af632466bf3d18b5f2efd4117249a6c8f2a74dec1b9adbfceda0a8703b12
+abff2cb696de07fe9573ac271087e78eec4c524529a1f8a2863faed167b37b48
+917215d3822051d77ad4377cdd7bc70a70b17e7ebea98a02f261dc18421bc867
+dbd09831d7f34f1a65eaf783705c2c525337b4d8db43982a5a1ac11e30d0df41
+15a05f41827566c7a511e4f5a770968da93ec342943474c35a0d5aad31933d4e
+2a7356b4338aec558e9a7850a9b2b1b4dc7cd66a838694b4d56851969d954950
+90be29c451a570d72b4440381b56a2c1bb7d16f04301f092103751e524c8770a
+9b94e0bbec15c538362aa636d8cf672b256bb22a139dfed133bf6c9aae54c7cd
+0bd40472b8e0fcffe53de7e1ea67a240bd5822b2b35ead3f63b90e661329cb75
+13019d0be7eb0b4bc1d5dc95379305bc65704ea0aa25256c59fde2d5126460cc
+3be5c6a4b3ae637bc6f5640cecfef8a433a266876a062334003db993a1a1cbb0
+b3ffb9e64e6225610c0643ceed78f933414449c3cc72c823e476aeaf3f8114af
+3d3ca3db89266681cddb2c6bb6bdb6dd9384c6dc3be6c40b5f59c361ef53ee27
+549eab8c41234a47e742941286202af90bd93e2892119f4e6fa8ef793608e205
+f7688f01a1ba584a921e349d897bd50c9384c9330311dc0c8bc1cb6ceadda4c8
+d546b46b3176091ac8e9715fbbe24b1746dfad205c9b222e8fd5c0efc67d4786
+24cdf12e49583d3037e13c8a51d2a7fe5ae4cf6145bf6c0c1d9a8c303f581b2d
+91be37bedd9d67be023d377025c449656e798564f5f4bd4d4d5cd332d5febcec
+1e35bd69c70246482955a12a0ba7b2787c4e572942f255d0c07d5b82d966485f
+570dc90a5bb1ca1b155da6536008345bd13b8c4de84b9459bffb5d524a2171f8
+34b1b313372e1d17c358e0b6ad7dc73a70e91d30ca8a2b84ad6a94d816ce65b7
+6fb93c45b5e7617f6706dd4437cef28f132a3ebb1ae82a6fd264bcd98a4f7aae
+0893de4e1be948ebf8ed26982b31fa370c619ac67bf1521ba7b2c637a8b36aa1
+e89446902f5e89aedf0157aea3ca44444a445d45cbdb79a3c30a55b5a16ac263
+5e565c3586911f0e1ce0754c4be7754d2a15136077a32f6d64aefec7c56998c7
+994bc8c22874477af5e8d98411bbf9fe2b5c5dc67326d567a458178095017fdc
+ab84e90c7b4243229f898d3917c120bdfc85e406a95d8b3f583bd3da53c1a2d8
+94718e521ada0ae9391955297da1218be09d93ff8049b82b9b833f8e94cbad11
+3732bc658a56141da6a9e57cda45ac02598091567cd075e5d2370aafde959ac7
+d42910225a0926edd9972605c1ed974b3ae63ff13daf6c088aeb8490e2cf9679
+e8324c7a6a55a14f485c3285829155ea8491de6e4220a3dcdf32755dc3a60c28
+443fe2dd221fc988726809ba450c7762671c3e559d8cf84dd858ad511d4c34bd
+cca655455353d69642e170f5e384e3ca7160e9a7ccbdcb3c1bef0d7583e0a640
+34e74efe5c7cf76dd3e82bfd04f5956cd38c1b95fa137572827ac07e2fcc6ce9
+be139b876a6e80789cb6d0e83faf79d37b44554f8409caa4411725a9b18ef451
+1870a4e2a4bf936ee4faa655d63c5b869b78bf32f1dfa1b1fd8cc73d366f01a0
+6f63f8a8803af1526a619fa5e80c19c7f1f33886e2fc99f7509059234ba3552b
+0e7edd9965e8cdfd9b888c39ac1e71ce4f9fc9659797609500b6a5cea8133eec
+809ed63f154aba6a3cb05eb6070acd6c97157f0e654c69432227245b72ae2fa4
+382b163d6f83c9daad9a962edcd26d5f80bbe7cbba1a0fb1b9c5ab08cf79f195
+0cce9a6d8ce087522bed603e2cec5ee0e78d116880fff51db48b956bdb5c1efb
+2d764588878a07c7f40643f6ddc531786301ea60235e9ac91970a0f975db1547
+cb5c0f111452f414d4a856c22e740ba07b99cd1f5342c148b7f30faecb99fe84
+82d19c1ffadf593bcd4f31c620bcd61531148c677fafd8357344b3155a0958ba
+3b7bf827f1fd4ef1b09b63b1ff747459f6ee03bb8825fba143fe99c1cf545f3c
+33fd37788552896dc6dc977aaf3ae8ba9344199bb9516c81ae75ccc5aabebd27
+ab1e220d6e8ab6f3a1746918a6d4e659c547567aaa9e23518f01d1b8b5763899
+10f106313cfbb27d26872fa9730c6ac93fc763bcf2c71d7d6709c783076931e4
+86efa44585c697ac381322df0e49cd218cb8d9ed532f885e3fd8860d9b673a06
+3d4146ca527c7fbfc652933bb424ac7de89eaec71873f3db3e8b18118d5fae19
+5a8f2284a4788e20fe54c6e8e3bb12aecc9bc2fe8f93f305c1e9ba663c31e8d0
+f5ab258578cf03c84715f84e7271e85c080a5ea9284813b23923418b39f7e323
+e01779cd437c882868aa9c769cbe3022aa148aaa2b749b0a83bfe8176e5e7f2c
+29b70ce442ba7ce0ab77f07ac1db387c5e7c7e385e36746edf51c853cc8af8e8
+5bd0cce9bd31cf70cec111bc3a5495ffa55bd8131478e9706a953e75b90cf736
+c9a0732fe44ce0e16fcdb7cf056fe10bbf841e9a6b600a24c9a199d159c313bb
+1f904811bd80d6f5da2bf237b68464dc03963ac0ea6aa66e07b8f9b87137b7e9
+72a6081fcfd48c5e1b71071404ea3d2932c4119dc85e0353a5d799cb17d100c3
+7333e39f85fa75f7ac60954bdb51f0d65b23de3b674651472751a2d68681f735
+8b559201ec3e9b2fe9d4dc3e4ab3f2e840874630682e1831a20079fbf2d3433d
+dca6bd85df27c83541fbcf5a36c23e67aeb6fd04fd93c177893aa690fdbc9840
+9ab4aa58505f38cb04125405866693c283158aaf0a9ab92010384ce173da89b0
+585eea140d0743450ae9adbb4b20cbf9a9613fe8268d6069019eb3ab40cd396e
+db1c22a8dc3a060691daf5dc7e11f3d0ca562aa64228d2459cfdc38f312edfd2
+b4ebca34a63018c90d206b8cab923ed65b3a6e5b697036df587d6e8aa4e617c7
+3eff5066661347c2f0b5d54cf0b4a663debd6e89d6c80b403dd6c022faa0647b
+623edef055faa48d420cdc6507ab3540ef480abee5103e3882084c3bb9582eca
+6d9de7debf781b6c5a37a5c5d1c3497dd1e59339868cca92b8bd48ff7e9aa4d5
+cbd6bc568c4c12a3ddbb443e3403211b6db8bc5d3622c9ca30748095984ed6c3
+e50268ec2973f70c7b2a7647987696d5af56997106f2b2a779d00506d9881845
+9747b4d786c6b2892206f4c8edc481f3511d41b258cc58078e734c54ae1cdf26
+5fb7766d3cb56aa0c1200519ed135ffd05232fbc96e8b4510a70ea2c9728915a
+05206fbc436f7949c9485129f590696607b8ffe469d3e65386ea64fc344018d6
+03c82856871ab3167d6624fd929e3aee174f3811d84cc2ab1dd79a065bfa0d98
+b7ecf4341c2309f7422ab925902e838b12efd89e19fe5d95b6f993de36ea2f46
+a120170d2a4b5459107aa8548b5ffcc5bd9bcb907173ba8d117d0dedfa40fce0
+620e3ff0b1ef5a8194ca877daa79bb33e3288a1aba4f089e775815222973c5ca
+392720766696e6e9f5cee98a05015d2e1c513a5a07d93b891d23254ad589915f
+83b3a52490434e6319ed25e37e2ed93db893c6915146f56083486cabe0126b18
+de2926e978ca26acd4955bd6a74f48f85baace677eec526051bf30dc233077ef
+f217b97a6c98be8d0b1a2b059dd55f8eed9ab512004aaeb8a864345fa76e12ab
+b7ee70e302238b5ebbe3b6ecd33e98ef32dea4a532bd9794eeb23c6f4e499ce0
+d72fe5fd98879407ae21c1342800d36754fa2ecb52bf0e0f98af588e490ff1cf
+57b1067b5b58694310c31da1f38866930659f27c8b7d0bd35352e6717446e128
+c23b0d7e4f40e00db0716d97464f7a52ceea989977d29934892aa9c091aa8ea6
+6e24a184adef9f0b4b703d7a3fbe3d07cef899139bb3013a779024631bfd4007
+f4df330ee68a6fbe517c8465a10b30ed48d2a846157be3f66eeabf52429089af
+c1a0d5c5cb4facc2acde70b3f39464533259fc29d5c492329f289d273e3eefc1
+5db09f4c426422aeb3ece6d7507655fd7137b71ebfce06fe735c3a6e6984da65
+deac7c125c32bf8ce2d00168f78d0dd2d24a965b4818f524865f5c9499cad2e1
+954ac4c9670a54c8cf382bdc1729175aa091e3682ffe5bf121cad285fc7b0fae
+c6b0d862e702302d1245751d14b235066a0f435cef9823dc8ef9fa74083915ef
+20ac5778b43670aeea34f1dfa6531271afb83e63700fc6451da498699ef17904
+8c84c9f34a49ab18c88bf61f0697d94e04bfdcf80180f894f9860d01566ec0cb
+d2b5224d25041230b9a4f3916d68af6201090365084e9bb33c32529f1f701cb3
+cff3017e64a7e4c02bd909a353b503f67641afc8f767b154063d8f180382b893
+f3e9e6072653dcb53dfd468afcec42856f7e58c654cdaecee338ea4b93f08342
+8c5b4ea93e347c196590a082aba7c34bf15eb551b16f7b5fcfc57ded573eccca
+e1f50aaec19ac7506461568df57d4156764f63a2726e3196383b43d9cb85d150
+1e4940c123dd6dc60ba164ae047fa49123984254b181999b72f120d288dc9997
+a9d45a92b8aad626e4552042a17d589073c11e02907ffe309aa078f544c6d0c6
+201dde89fa756d8ddcac5ed468a942073cdbbf4defe4d80019238d4d0934b175
+2852218c7a1fb370ed7611245aa7d30439b5931b62d1bdbfc2f5e3d43343b724
+d0858175c2711d97bd49e7fdf83941566cb4025c991b80a17bccf4e8d53e0841
+f53abe2325b780d74d0c2e686e9d22cf5c5eea5460a2677b1131e2f06eac3ba9
+ee9e875a4d1592f89546e28cd976a5b57c3aa842181c4056c0bf73a2cff38de6
+653c47e0b941d7be0d5a83c3557b754eef02e3b49d66c2ac8d9c188e5644d488
+5785e98526d9fed905b61dca7fc7339b92096cfe90d831dec7d59f83a70854c7
+4b22a39ea7f223715b30b9e4469923f6b947fd7937efb2bc2d3d933b3501142f
+cf3bfabaa04f04665e56da8a397dd951d405903582a61813d4f5e20fbcdb4f5c
+a91a76d85812b04dbad9d1a7d3703d1cbb6b4806eff4980ef7bcc9355874dae2
+dc333059e427acccdb285789f3aceea22d751f6c6b93a9d247181c7587c6b6fe
+ab001f6dddaba0ba7592540db46f2dc35b2b1e0ec01fbc43c987301878f6c1fd
+e897d8058346cd75766c9dd2bd783a6fee67e6145c0cf32554d659577865282c
+d5d1d24fdcb4f59dc2f64b6b53bbb57c66ae89f1ce3800e012796e6a4ccc4982
+78570920bf142997dfeb1ecfea1885bce4b9c5a4374b0b0a8af40e72b27c276b
+b23901a57e218fac4e0deda5b1d199a531d97905207d4d5567aab070c38cf1c5
+1d0bec00b3ae4db83d4d28eccbf1620ad81484f684b9301171a74fd191b393fe
+5aecb1009a0e60c718de184609a833c89c7c1c037a8ee70390fe71c893c8169f
+d78c37fc732e8d932be4903152cfddb646f344b97b52a3be9e47786d42c76f8d
+54ad03dcac23bbecd33b94b6b9f1c0de8d55de268f1c8593c5b8bce56437ae6e
+74e198c455ede877870c39144a2e0dd24a2f18a05dd7553ddad9388b164b0061
+9c3b0cd01574d3672c8d46e2bf51dc7cf42a3a7ff9c1611a65ac3e1ba62c5dc7
+26c5cd66ea76e64c4f0bb39336601ac0c4f65339392b290afda4f00f0801df09
+a19a83abe38fdf0dac9de6fb4872c962ea4e5c98b44c5f6ae426f1a7542c31fa
+a4618ca4f39947fa81e2eabf5efeb176b7d333ed6f71e22d7c4ce2455940b7c3
+aa3a1ba85aaf1e5fad0f67cda9afa9d774d115f84de2a98e6c85ab4f9e829576
+7fecd9bdd781f108f8f32d25b41d1acc75aafa35fc01e64e364fd7e541ff0448
+14281f3c64304f58494a039efa4382f54f04ebff666c5217379b34194cee42eb
+d3885b74950e25c26f491494cd923eae995002cd172655a210fc2f82d2907ce2
+3c1b6ae2615496a0d0fe4cff39b8666afdda1114bd5e9cadd33faf4c773bbe68
+655852303642ba755ff3e5afa4b393f5f346107774dfc253b91585655e420eda
+4900a0540cd4480ff2f92ee54abe5bdc728c6c364215fa6eeb4e5a714806b264
+df292a1aade8e1e1689c09522977f387105813f7ee887274e1f3188c801d2a37
+6fe8c434b2b604d220e607217e972d1b0299929163d8be484051fde89a73af9d
+0436d8cb66dfa3b9e25c89c6da4466760fab4a143c82f94bd0f89dc59551a2f5
+7a5a6402c2d74d5dff6b8c153e8b79c766ccbf89ffb3d161592e16ea1e9d3491
+dad62f05f27afdd394e3cd27f965a41c35e5ea9bfdb88f23bb9911a8b9fa489b
+31228ff8c0571528e7d96242961c446c8d24fcaae327b370315e5448c5899fba
+9206bc2104022039266c58e28352c9d304b74954ffa1e19a348161706fbede2f
+57d38f46592161a4258958f11be38f9d1338d251ab64c8099716fa1b97e2945e
+26cc6dcd06340e3941af652aff6b0c5758601f59611d7cfbb804f4f21053c6ce
+d27d7559aeb5b1692cb4dff67037a871068a1c71b6cf6f372adb39ef521a7517
+28c7b0ce0435af48d6a973653aa8e25f12ac52b9ccd59ac2f4935cf4efd1bc7f
+2bf3c0629f36176fb7d6b5611f8257a0a3c5d43be6b23bef360e975c5be72d5f
+80f105e1d96d089560a4995adc11dc8463197b77648a09e9f315b049801f40da
+8693a06c92aebad42ced91c20ed00d4d23da04112e28c5a6dede6c68618bf359
+fa060e1b2e3f54e95ff7303cc5c42d455955f5c8ba99745393ea5cac5bae1849
+e5573a03516a6e339b828eba521727213ff193d5510eb4974774225a07695bac
+479424391d08663a47816feb0db2edad68c5d7f20ff19a8d4163bd61f9ce7243
+a4facd400b96297b14dc3ffa6265b883a478738024e360112dc7b5c2e406d9a5
+ee0491cdc1d02270451445cbcddbba82bbd37e6af48d3a79b11ba8276983dafd
+eee5584189f62edd9c2450f034f25bf454452f21377e10778326a04ea2366038
+fb158603dfafd9988740a5a5e14307566e86d5278ec67a4af86ce38943133f31
+ce3e39624d9c89f526ed7cec931d57769c8b0c7d47ef3e42fd7072bf54cf1a9a
+dab9f03c77fed3c7b65dac47d72af70d19adae8ef8f7470e5d99c7be98317c04
+c3dff220d8718be44d4b2ce6544980dd8023d6bc6cd75909eb349bc426d8128f
+31323010dd439e8332a54bce159b03af1691b1ddbc2583d2a7a617c7f38d7b39
+631a5691a05922eb21e8f6bf7c8eeb1833aeb9db2b80503eb309015ea0d65689
+b4c9549f4d3ffe5d0e75e8f96f0d55f20f5ffd440b60feb4fab3fdaeccdf16c2
+5041d1b66f031abcd15b08fc2273571958e47f2271a0a231488a689107b8081f
+a85070bbc5d118ea0bbf60028f9b08052e3d8d95c275dde17ff46526c791ba21
+3844528fa7494e436842a42ccbd09a6ff37cbeed3b07c992604a0700453413cc
+97ac42fcd81169fcd185f2707a4dceb3ab8f258dc29892a082b97e71616627fa
+1ab7a1f24a93db38d72bf3f2b9ac701183d296bcc26d953cc9c5b0c52811921a
+b6cecb189361fc868a8fdf5c563e4b95d882660291cc3c0bb6de71bb173e35b9
+223a325cd9f642cdb80d3b65be74c95844e72a24082f4f05b03bc05c00b51b74
+67b2540ba10394a6199c08dcd33f54b568d2684d1df43564374bac27068c47d6
+865ca7025f806f9c53b060aacf530b35fefc05c67e56cc855f763bfb520e07d3
+e7aff225296ace8d96fb6ec5c91d99a6e31c18b6f9ae4c52a0fdbc94491642b0
+2162961a8037c700b74b247ccbf01aacaa66d3eb9f09f3f66c6e29dc509a104a
+683f894e6a0c1a833d3abe2ea9eab831d83fcddf5123324f51c50954e172c862
+c9945e9173a06ced6fe338cabb0b9b742e3ecd2ad3a0102b2ab3b213c31c2f10
+a3a9c48e181f765787de863337c2908bd3031ea1cac0e7d285a16e83e35b473c
+66b40a11968023eb5d7028e81f2407106ff7297a8127dcb877dddac02c5ec29f
+0eeecb00a337b98ed3257869c2bf73d8e039cd713cd1559873e67fa078186f7b
+59a1b53785e59b554e35ae76ac2239df088df859c8e4242bab5e6e2eefc89137
+2fb15cf8a2187a3887b4a5b44a4ac8dac1de6c2c1cff931f7841d82c5374d543
+60b58df7bd6796ac0c6bbf20a706115ac75dabfbf1eb66e2a8bbfdd082734b82
+2e5cfe361806d24ac7595e22259e8a06c0deee0a06c33d920c1c661d29111860
+e3382062f26698eae0fcab0b2d7a363e58564caa80d4d45132f63d81f19c44f3
+476b666f28c399c30fc849307fd8b4b468a4ca4079f20d31c11115e4e3d0f604
+d10551369751df0cdb66f902e7fc8e1662b9c9c67cd74621f7660b2d41ed9407
+751cf529be48fb641423c4a92fda00fb53fca0002957d46f3029943105ce4ffd
+d9bfaf918cb79262785600c184f783b7ca9786b967e1e580645b41621b7c3253
+dcd007965c23994d21d9dcfb06d23f450ccaf1360b1a0b8d487dd6cbc1a3ed88
+1d162778488614482f80e10df800e110e584c5e2b7d5ad46f1fda8975fa6803b
+eb676e7829e2e3bcd293c3d77887b7c630f00a4e678b6463b82453427c9bd7ed
+9c356f0d9d73f3c3e2560d862aeafe91430083e80b8f169762f116398d941cbf
+811ac77fcea373fd9ad3101f7da8a5a93d617553a0f50946a8b2fd5f7282d8db
+b760c21be26474c13028f7e6249de5b7ca8bd97433694e2f7c8dcb2306b6852c
+4f8258da2dfef3e8d8829bf9d74aa74a261443791d68f9b1331085d30573fbd0
+d1b55fb2580d67d8adcb6668aab03e6e970ad540f63f93c231d43a88b25dd234
+88e8bbb72a703ebfde30e607ab95b70bbb6314ad7e2a855cdfdb6b0b6bf8431f
+f0ab90a25b3b7fc283e0af75125e2df55ac91cde45954d1a8f1372b527719171
+ce420b4b45269c52a67b4b638872ec18efdee262c2c8df8bdd031b00ef942e32
+2e246209aa908032713b4b8e36fd523eb0f5dc04398b69d87a3690e7f7dd47fd
+8b74b3f27b65804e8177fc997c0bd08057c3ce825b034888e95d231b4def08f9
+a77fd13e26a0a4febb4d9dd8d12838fd174df173017a69bf24bf7e91175aad5d
+ffbb14a337397c60cb54c6e981bb1a8faa797b2039fb89cc4f3465b03809090c
+fba943d15ac47b2878ea92355e843ff3ae49754feb5447fcfc8b58b1ec530b64
+82127a6c6cd994e146c25a9a9c0e677a4cfec21f1be2ba7f198c983bddad9e60
+68faa065c84529433ed370db409b64a9788cd2ed29caa8e6641711fee94bd9b5
+ba6d2a8e73b10c6de72a8e8f3bfeab8344fe6622fadd5d01457e31e8facd74cb
+548317d15efbec53cdab722db40c57bfa357feaa9075eb60dfa05661638bca2a
+0a8bb498
+
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndProcSet
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.100 0.100 scale
+0 setgray
+newpath
+(NimbusSanL-Regu) findfont 100 scalefont setfont
+1.000 UL
+LTb
+550 990 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 990 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 0)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 1192 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 1192 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 100)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 1394 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 1394 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 200)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 1597 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 1597 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 300)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 1799 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 1799 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 400)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 2001 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 2001 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 500)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 2203 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 2203 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 600)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 2406 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 2406 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 700)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 2608 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 2608 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 800)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 2810 M
+63 0 V
+1756 0 R
+-63 0 V
+stroke
+490 2810 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 900)]
+] -33.3 MRshow
+1.000 UL
+LTb
+550 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+550 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 1)]
+] -33.3 MCshow
+1.000 UL
+LTb
+810 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+810 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 2)]
+] -33.3 MCshow
+1.000 UL
+LTb
+1070 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+1070 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 3)]
+] -33.3 MCshow
+1.000 UL
+LTb
+1330 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+1330 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 4)]
+] -33.3 MCshow
+1.000 UL
+LTb
+1589 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+1589 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 5)]
+] -33.3 MCshow
+1.000 UL
+LTb
+1849 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+1849 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 6)]
+] -33.3 MCshow
+1.000 UL
+LTb
+2109 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+2109 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 7)]
+] -33.3 MCshow
+1.000 UL
+LTb
+2369 990 M
+0 63 V
+0 1757 R
+0 -63 V
+stroke
+2369 890 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 ( 8)]
+] -33.3 MCshow
+1.000 UL
+LTb
+1.000 UL
+LTb
+550 2810 N
+550 990 L
+1819 0 V
+0 1820 V
+-1819 0 V
+Z stroke
+LCb setrgbcolor
+140 1900 M
+currentpoint gsave translate -270 rotate 0 0 moveto
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 (Time Per Increment \(nanoseconds\))]
+] -33.3 MCshow
+grestore
+LTb
+LCb setrgbcolor
+1459 740 M
+[ [(NimbusSanL-Regu) 100.0 0.0 true true 0 (Number of CPUs \(Threads\))]
+] -33.3 MCshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+% Begin plot #1
+1.000 UP
+1.000 UL
+LT0
+/NimbusSanL-Regu findfont 100 scalefont setfont
+550 1079 M
+0 2 V
+-31 -2 R
+62 0 V
+-62 2 R
+62 0 V
+229 118 R
+0 10 V
+-31 -10 R
+62 0 V
+-62 10 R
+62 0 V
+229 189 R
+0 94 V
+-31 -94 R
+62 0 V
+-62 94 R
+62 0 V
+229 205 R
+0 97 V
+-31 -97 R
+62 0 V
+-62 97 R
+62 0 V
+228 64 R
+0 80 V
+-31 -80 R
+62 0 V
+-62 80 R
+62 0 V
+229 96 R
+0 281 V
+-31 -281 R
+62 0 V
+-62 281 R
+62 0 V
+229 11 R
+0 149 V
+-31 -149 R
+62 0 V
+-62 149 R
+62 0 V
+229 27 R
+0 144 V
+-31 -144 R
+62 0 V
+-62 144 R
+62 0 V
+550 1080 Pls
+810 1204 Pls
+1070 1454 Pls
+1330 1739 Pls
+1589 1904 Pls
+1849 2163 Pls
+2109 2398 Pls
+2369 2588 Pls
+% End plot #1
+% Begin plot #2
+1.000 UL
+LT1
+/NimbusSanL-Regu findfont 100 scalefont setfont
+550 1080 M
+260 124 V
+260 250 V
+260 285 V
+259 165 V
+260 259 V
+260 235 V
+260 190 V
+% End plot #2
+% Begin plot #3
+stroke
+LT2
+/NimbusSanL-Regu findfont 100 scalefont setfont
+550 1008 M
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+19 0 V
+18 0 V
+18 0 V
+19 0 V
+18 0 V
+% End plot #3
+stroke
+LTb
+550 2810 N
+550 990 L
+1819 0 V
+0 1820 V
+-1819 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: NimbusSanL-Regu
+%%Pages: 1
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/4] count: Restore 'fig:count:Atomic Increment Scalability on Nehalem'
2018-12-04 15:27 [PATCH 0/4] Misc updates Akira Yokosawa
2018-12-04 15:28 ` [PATCH 1/4] CodeSamples/count: Restore atomic125.eps Akira Yokosawa
@ 2018-12-04 15:30 ` Akira Yokosawa
2018-12-04 15:31 ` [PATCH 3/4] defer: Prevent page/column break in short inline code snippets Akira Yokosawa
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Akira Yokosawa @ 2018-12-04 15:30 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
From ae18c92aaee6e3212df302294131eca14a4bba4e Mon Sep 17 00:00:00 2001
From: Akira Yokosawa <akiyks@gmail.com>
Date: Tue, 4 Dec 2018 23:40:20 +0900
Subject: [PATCH 2/4] count: Restore 'fig:count:Atomic Increment Scalability on Nehalem'
Current "fig:count:Atomic Increment Scalability on Kaby Lake" has
wrong dashed graph of ideal case. Restore old plot of Nehalem
for the moment.
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
count/count.tex | 14 +++++++-------
defer/rcuintro.tex | 2 +-
locking/locking.tex | 2 +-
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/count/count.tex b/count/count.tex
index c465634..6fd54b5 100644
--- a/count/count.tex
+++ b/count/count.tex
@@ -248,9 +248,9 @@ accuracies far greater than 50\,\% are almost always necessary.
\begin{figure}[tb]
\centering
-\resizebox{2.5in}{!}{\includegraphics{CodeSamples/count/atomic}}
-\caption{Atomic Increment Scalability on Kaby Lake}
-\label{fig:count:Atomic Increment Scalability on Kaby Lake}
+\resizebox{2.5in}{!}{\includegraphics{CodeSamples/count/atomic_nehalem}}
+\caption{Atomic Increment Scalability on Nehalem}
+\label{fig:count:Atomic Increment Scalability on Nehalem}
\end{figure}
The straightforward way to count accurately is to use atomic operations,
@@ -281,7 +281,7 @@ This poor performance should not be a surprise, given the discussion in
Chapter~\ref{chp:Hardware and its Habits},
nor should it be a surprise that the performance of atomic increment
gets slower as the number of CPUs and threads increase, as shown in
-Figure~\ref{fig:count:Atomic Increment Scalability on Kaby Lake}.
+Figure~\ref{fig:count:Atomic Increment Scalability on Nehalem}.
In this figure, the horizontal dashed line resting on the x~axis
is the ideal performance that would be achieved
by a perfectly scalable algorithm: with such an algorithm, a given
@@ -350,7 +350,7 @@ global variable, the cache line containing that variable must
circulate among all the CPUs, as shown by the red arrows.
Such circulation will take significant time, resulting in
the poor performance seen in
-Figure~\ref{fig:count:Atomic Increment Scalability on Kaby Lake},
+Figure~\ref{fig:count:Atomic Increment Scalability on Nehalem},
which might be thought of as shown in
Figure~\ref{fig:count:Waiting to Count}.
@@ -2870,7 +2870,7 @@ courtesy of eventual consistency.
``Use the right tool for the job.''
As can be seen from
- Figure~\ref{fig:count:Atomic Increment Scalability on Kaby Lake},
+ Figure~\ref{fig:count:Atomic Increment Scalability on Nehalem},
single-variable atomic increment need not apply for any job
involving heavy use of parallel updates.
In contrast, the algorithms shown in
@@ -3156,7 +3156,7 @@ Summarizing the summary:
\item Different levels of performance and scalability will affect
algorithm and data-structure design, as do a large number of
other factors.
- Figure~\ref{fig:count:Atomic Increment Scalability on Kaby Lake}
+ Figure~\ref{fig:count:Atomic Increment Scalability on Nehalem}
illustrates this point: Atomic increment might be completely
acceptable for a two-CPU system, but be completely inadequate for an
eight-CPU system.
diff --git a/defer/rcuintro.tex b/defer/rcuintro.tex
index 3259a19..b93136d 100644
--- a/defer/rcuintro.tex
+++ b/defer/rcuintro.tex
@@ -76,7 +76,7 @@ the figure.
But how can we tell when the readers are finished?
It is tempting to consider a reference-counting scheme, but
-Figure~\ref{fig:count:Atomic Increment Scalability on Kaby Lake}
+Figure~\ref{fig:count:Atomic Increment Scalability on Nehalem}
in
Chapter~\ref{chp:Counting}
shows that this can also result in long delays, just as can
diff --git a/locking/locking.tex b/locking/locking.tex
index 874fb3b..ce99007 100644
--- a/locking/locking.tex
+++ b/locking/locking.tex
@@ -1534,7 +1534,7 @@ Either way, line~\lnref{rel2} releases the root \co{rcu_node} structure's
but only for relatively small numbers of CPUs.
To see why it is problematic in systems with many hundreds of
CPUs, look at
- Figure~\ref{fig:count:Atomic Increment Scalability on Kaby Lake}
+ Figure~\ref{fig:count:Atomic Increment Scalability on Nehalem}
and extrapolate the delay from eight to 1,000 CPUs.
} \QuickQuizEnd
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 3/4] defer: Prevent page/column break in short inline code snippets
2018-12-04 15:27 [PATCH 0/4] Misc updates Akira Yokosawa
2018-12-04 15:28 ` [PATCH 1/4] CodeSamples/count: Restore atomic125.eps Akira Yokosawa
2018-12-04 15:30 ` [PATCH 2/4] count: Restore 'fig:count:Atomic Increment Scalability on Nehalem' Akira Yokosawa
@ 2018-12-04 15:31 ` Akira Yokosawa
2018-12-04 15:32 ` [PATCH 4/4] owned: Fix typo in epigraph Akira Yokosawa
2018-12-04 16:40 ` [PATCH 0/4] Misc updates Paul E. McKenney
4 siblings, 0 replies; 6+ messages in thread
From: Akira Yokosawa @ 2018-12-04 15:31 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
From 23fca971d1fe94d7c3e1dd94ea9818e397056e10 Mon Sep 17 00:00:00 2001
From: Akira Yokosawa <akiyks@gmail.com>
Date: Tue, 4 Dec 2018 23:40:56 +0900
Subject: [PATCH 3/4] defer: Prevent page/column break in short inline code snippets
Put "samepage=true" option to such VerbatimN snippets.
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
defer/rcufundamental.tex | 14 +++++++-------
defer/rcuintro.tex | 2 +-
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/defer/rcufundamental.tex b/defer/rcufundamental.tex
index 3a5fad2..6cf209c 100644
--- a/defer/rcufundamental.tex
+++ b/defer/rcufundamental.tex
@@ -112,7 +112,7 @@ We therefore encapsulate them into a primitive
\co{rcu_assign_pointer()} that has publication semantics.
The last four lines would then be as follows:
-\begin{VerbatimN}
+\begin{VerbatimN}[samepage=true]
p->a = 1;
p->b = 2;
p->c = 3;
@@ -128,7 +128,7 @@ However, it is not sufficient to only enforce ordering at the
updater, as the reader must enforce proper ordering as well.
Consider for example the following code fragment:
-\begin{VerbatimN}
+\begin{VerbatimN}[samepage=true]
p = gp;
if (p != NULL) {
do_something_with(p->a, p->b, p->c);
@@ -163,7 +163,7 @@ directives are required for this purpose:\footnote{
\co{memory_order_acquire}, thus emitting a needless memory-barrier
instruction on weakly ordered systems.)}
-\begin{VerbatimN}
+\begin{VerbatimN}[samepage=true]
rcu_read_lock();
p = rcu_dereference(gp);
if (p != NULL) {
@@ -257,7 +257,7 @@ instance from executing concurrently with RCU readers.
Subscribing to an RCU-protected list is straightforward:
-\begin{VerbatimN}
+\begin{VerbatimN}[samepage=true]
rcu_read_lock();
list_for_each_entry_rcu(p, head, list) {
do_something_with(p->a, p->b, p->c);
@@ -340,7 +340,7 @@ mechanism, for example, a lock.
Subscribing to an RCU-protected hlist is also similar to the
circular list:
-\begin{VerbatimN}
+\begin{VerbatimN}[samepage=true]
rcu_read_lock();
hlist_for_each_entry_rcu(p, head, list) {
do_something_with(p->a, p->b, p->c);
@@ -544,7 +544,7 @@ to read as follows:
\end{lineref}
\begin{linelabel}[ln:defer:RCU Deletion From Linked List]
-\begin{VerbatimN}[commandchars=\\\[\]]
+\begin{VerbatimN}[samepage=true,commandchars=\\\[\]]
p = search(head, key);
if (p != NULL) {
list_del_rcu(&p->list); \lnlbl[del_rcu]
@@ -623,7 +623,7 @@ example shown in
Listing~\ref{lst:defer:Canonical RCU Replacement Example}:
\begin{linelabel}[ln:defer:Canonical RCU Replacement Example (2nd)]
-\begin{VerbatimN}[commandchars=\\\[\],firstnumber=15]
+\begin{VerbatimN}[samepage=true,commandchars=\\\[\],firstnumber=15]
q = kmalloc(sizeof(*p), GFP_KERNEL); \lnlbl[kmalloc]
*q = *p; \lnlbl[copy]
q->b = 2; \lnlbl[update1]
diff --git a/defer/rcuintro.tex b/defer/rcuintro.tex
index b93136d..f42e2e7 100644
--- a/defer/rcuintro.tex
+++ b/defer/rcuintro.tex
@@ -146,7 +146,7 @@ with time advancing from the top of the figure to the bottom.
Although production-quality implementations of this approach can be
quite complex, a toy implementation is exceedingly simple:
-\begin{VerbatimN}
+\begin{VerbatimN}[samepage=true]
for_each_online_cpu(cpu)
run_on(cpu);
\end{VerbatimN}
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 4/4] owned: Fix typo in epigraph
2018-12-04 15:27 [PATCH 0/4] Misc updates Akira Yokosawa
` (2 preceding siblings ...)
2018-12-04 15:31 ` [PATCH 3/4] defer: Prevent page/column break in short inline code snippets Akira Yokosawa
@ 2018-12-04 15:32 ` Akira Yokosawa
2018-12-04 16:40 ` [PATCH 0/4] Misc updates Paul E. McKenney
4 siblings, 0 replies; 6+ messages in thread
From: Akira Yokosawa @ 2018-12-04 15:32 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
From 5471262067bf42e8698c80fee3e1d42a8c576d43 Mon Sep 17 00:00:00 2001
From: Akira Yokosawa <akiyks@gmail.com>
Date: Tue, 4 Dec 2018 23:42:11 +0900
Subject: [PATCH 4/4] owned: Fix typo in epigraph
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
owned/owned.tex | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/owned/owned.tex b/owned/owned.tex
index 700db0d..2dcd8e3 100644
--- a/owned/owned.tex
+++ b/owned/owned.tex
@@ -253,7 +253,7 @@ page~\pageref{lst:count:Signal-Theft Limit Counter Subtract Function}).
\section{Designated Thread}
\label{sec:owned:Designated Thread}
%
-\epigraph{Let a man practice the professiong which he best knows.}
+\epigraph{Let a man practice the profession which he best knows.}
{\emph{Cicero}}
The earlier sections describe ways of allowing each thread to keep its
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH 0/4] Misc updates
2018-12-04 15:27 [PATCH 0/4] Misc updates Akira Yokosawa
` (3 preceding siblings ...)
2018-12-04 15:32 ` [PATCH 4/4] owned: Fix typo in epigraph Akira Yokosawa
@ 2018-12-04 16:40 ` Paul E. McKenney
4 siblings, 0 replies; 6+ messages in thread
From: Paul E. McKenney @ 2018-12-04 16:40 UTC (permalink / raw)
To: Akira Yokosawa; +Cc: perfbook
On Wed, Dec 05, 2018 at 12:27:34AM +0900, Akira Yokosawa wrote:
> >From 5471262067bf42e8698c80fee3e1d42a8c576d43 Mon Sep 17 00:00:00 2001
> From: Akira Yokosawa <akiyks@gmail.com>
> Date: Wed, 5 Dec 2018 00:10:12 +0900
> Subject: [PATCH 0/4] Misc updates
>
> Hi Paul,
>
> As I reported this September, Figure 5.1 is not complete yet.
> As a workaround, patches #1 and #2 restores the old plot of
> Nehalem for Figure 5.1. Once we can obtain complete data,
> it should be easy to update again.
>
> Patch #3 is a minor tweak in RCU code snippets to prevent
> short code snippets from being page/column broken.
>
> Patch #4 fixes a typo in an epigraph you've added recently.
>
> Hopefully, this would be a final patch set from me for the
> upcoming release.
Applied and pushed, thank you! And good point, and same for me -- no
more commits authored by me (except for minor fixes) until the release.
Of course, I also welcome minor fixes from others. Large changes are
also still welcome, but I will instead add them to a branch to be merged
afterthe release.
Thanx, Paul
> Thanks, Akira
> --
> Akira Yokosawa (4):
> CodeSamples/count: Restore atomic125.eps
> count: Restore 'fig:count:Atomic Increment Scalability on Nehalem'
> defer: Prevent page/column break in short inline code snippets
> owned: Fix typo in epigraph
>
> CodeSamples/count/atomic125.eps | 856 +++++++------
> CodeSamples/count/atomic125.png | Bin 3189 -> 3337 bytes
> CodeSamples/count/atomic_nehalem.eps | 2266 ++++++++++++++++++++++++++++++++++
> count/count.tex | 14 +-
> defer/rcufundamental.tex | 14 +-
> defer/rcuintro.tex | 4 +-
> locking/locking.tex | 2 +-
> owned/owned.tex | 2 +-
> 8 files changed, 2770 insertions(+), 388 deletions(-)
> create mode 100644 CodeSamples/count/atomic_nehalem.eps
>
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 6+ messages in thread