# HG changeset patch # User Ryoma SHINYA # Date 1282864011 -32400 # Node ID 10ff440086e22dfd047805181611501a8f9e924a # Parent 4f3747c18585274fa906ffd58228d681a955f400 add llvm-intro. diff -r 4f3747c18585 -r 10ff440086e2 fig.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig.graffle Fri Aug 27 08:06:51 2010 +0900 @@ -0,0 +1,816 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 129.18 + + AutoAdjust + + CanvasColor + + w + 1 + + CanvasOrigin + {0, 0} + CanvasScale + 1 + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2010-08-27 04:52:46 +0900 + Creator + ryoma + DisplayScale + 1 cm = 1 cm + FileType + flat + GraphDocumentVersion + 5 + GraphicsList + + + Bounds + {{163.019, 135.064}, {48, 14}} + Class + ShapedGraphic + FitText + YES + FontInfo + + Color + + w + 0 + + Font + Helvetica-Oblique + Size + 12 + + ID + 20 + Line + + ID + 14 + Position + 0.4258759617805481 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 llvm-py} + + + + Bounds + {{168.43, 259.967}, {34, 18}} + Class + ShapedGraphic + FitText + YES + FontInfo + + Color + + w + 0 + + Font + Helvetica-Oblique + Size + 12 + + ID + 19 + Line + + ID + 18 + Position + 0.75643259286880493 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 \'8e\'c0\'8d\'73} + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 7 + Info + 1 + + ID + 18 + Points + + {109.498, 165.715} + {132, 251.946} + {236.75, 276.559} + + Style + + stroke + + HeadArrow + FilledArrow + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 2 + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 6 + + ID + 14 + Points + + {150.5, 142.356} + {236.25, 141.671} + + Style + + stroke + + HeadArrow + FilledArrow + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 2 + + + + Bounds + {{244, 233.946}, {69, 18}} + Class + ShapedGraphic + FitText + YES + FontInfo + + Color + + w + 0 + + Font + Helvetica-Oblique + Size + 12 + + ID + 13 + Line + + ID + 11 + Position + 0.5 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 \'83\'52\'83\'93\'83\'70\'83\'43\'83\'8b} + + + + Bounds + {{243.5, 164.268}, {70, 18}} + Class + ShapedGraphic + FitText + YES + FontInfo + + Color + + w + 0 + + Font + Helvetica-Oblique + Size + 12 + + ID + 12 + Line + + ID + 10 + Position + 0.45121949911117554 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 \'83\'52\'81\'5b\'83\'68\'90\'b6\'90\'ac} + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 7 + + ID + 11 + Points + + {278.5, 222.167} + {278.5, 263.726} + + Style + + stroke + + HeadArrow + FilledArrow + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 3 + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 3 + + ID + 10 + Points + + {278.5, 154.167} + {278.5, 196.5} + + Style + + stroke + + HeadArrow + FilledArrow + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 6 + + + + Bounds + {{241.5, 85}, {74, 30}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 12 + + ID + 9 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs50 \cf0 LLVM} + + Wrap + NO + + + Bounds + {{236.75, 264.226}, {83.5, 24.667}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 7 + Magnets + + {-0.5, 0} + {2.38419e-07, -0.5} + + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 \'8e\'c0\'8d\'73\'83\'6f\'83\'43\'83\'69\'83\'8a} + + + + Bounds + {{236.75, 129}, {83.5, 24.667}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 6 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 API} + + + + Bounds + {{236.75, 197}, {83.5, 24.667}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 3 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 LLVM-IR} + + + + Bounds + {{57, 120.231}, {93, 45}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 2 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs46 \cf0 Python} + + + + Bounds + {{225, 74}, {107, 231}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 4 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + IsPalette + NO + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + + ActiveLayerIndex + 0 + AutoAdjust + + CanvasColor + + w + 1 + + CanvasOrigin + {0, 0} + CanvasScale + 1 + ColumnAlign + 1 + ColumnSpacing + 36 + DisplayScale + 1 cm = 1 cm + GraphicsList + + GridInfo + + HPages + 1 + IsPalette + NO + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Orientation + 2 + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Master 1 + UniqueID + 1 + VPages + 1 + + + ModificationDate + 2010-08-27 05:20:48 +0900 + Modifier + ryoma + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklySG + + NSLeftMargin + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklySG + + NSPaperSize + + size + {595, 842} + + NSRightMargin + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklySG + + NSTopMargin + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFklySG + + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + NO + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + DrawerTab + Outline + DrawerWidth + 209 + Frame + {{-660, -537}, {538, 746}} + VisibleRegion + {{0, 0}, {523, 632}} + Zoom + 1 + + + diff -r 4f3747c18585 -r 10ff440086e2 fig7.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig7.eps Fri Aug 27 08:06:51 2010 +0900 @@ -0,0 +1,1067 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 279.000000 235.000000 +%APL_DSC_Encoding: UTF8 +%APLProducer: (Version 10.5.8 (Build 9L30) Quartz PS Context) +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 279 235 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +{ld}repeat pop +/SC{ + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd +/cm {cmmtx astore CM concat}bd +/W{clip newpath}bd +/W*{eoclip newpath}bd +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop + true +}{ + pop + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse +{ + { + { + pop pop + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add +dict begin +{def} repeat +pop +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end +}bd +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def +/cp_proc/x_proc ld +/base_charpath +{ + /t_array xs + /t_i 0 def + { + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ +findfont dup length dict copy definefont pop +}bd +L3? dup dup{save exch}if +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def +/setupFunEval +{ + begin + /nRange Range length 2 idiv store + /mulRange + + [ + 0 1 nRange 1 sub + { + 2 mul/nDim2 xd + Range nDim2 get + Range nDim2 1 add get + 1 index sub + + 255 div + exch + }for + ]store + end +}bd +/FunEval +{ + begin + + nRange mul /val xd + + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd + val + add DataSource exch get + mulRange nDim2 get mul + mulRange nDim2 1 add get + add + }for + end +}bd +/max +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd +/sh2 +{ + /Coords load aload pop + 3 index 3 index translate + + 3 -1 roll sub + 3 1 roll exch + sub + 2 copy + dup mul exch dup mul add sqrt + dup + scale + atan + + rotate + + /Function load setupFunEval + + + clippath {pathbbox}stopped {0 0 0 0}if newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop + grestore + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd +/shp +{ + 4 copy + + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd +/calcmaxs +{ + + xmin dup mul ymin dup mul add sqrt + xmax dup mul ymin dup mul add sqrt + xmin dup mul ymax dup mul add sqrt + xmax dup mul ymax dup mul add sqrt + max max max +}bd +/sh3 +{ + /Coords load aload pop + 5 index 5 index translate + 3 -1 roll 6 -1 roll sub + 3 -1 roll 5 -1 roll sub + 2 copy dup mul exch dup mul add sqrt + /dx xs + 2 copy 0 ne exch 0 ne or + { + + exch atan rotate + }{ + pop pop + }ifelse + + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub + /Nsteps xs + setupFunEval + + + + + + dx r2 add r1 lt{ + + 0 + }{ + dx r1 add r2 le + { + 1 + }{ + r1 r2 eq + { + 2 + }{ + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs + clippath {pathbbox}stopped {0 0 0 0}if + newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and + { + 0/Function load FunEval sc + + + + + { + { + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { + + + + + 0 r1 xmin abs r1 add neg r1 shp + } + { + + + r2 r1 gt{ + + 0 r1 + r1 neg r2 r1 sub div dx mul + 0 + shp + }{ + + + + 0 r1 calcmaxs + dup + + r2 add dx mul dx r1 r2 sub sub div + neg + exch 1 index + abs exch sub + shp + }ifelse + } + }sh3tp get exec + }if + }if + + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + + /d0 d0 di add store + /r0 r0 ri add store + }for + pop + + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and + { + Nsteps/Function load FunEval sc + + + + + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + + + xmax abs r1 add r1 dx r1 shp + } + { + + r2 r1 gt{ + + + + calcmaxs dup + + r1 add dx mul dx r2 r1 sub sub div + exch 1 index + exch sub + dx r2 + shp + }{ + + r1 neg r2 r1 sub div dx mul + 0 + dx + r2 + shp + }ifelse + } + } + sh3tp get exec + }if + }if +}bd +/sh +{ + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop + 2 index sub + 3 index + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd +{restore}if not dup{save exch}if + L3?{ + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if +end +setpacking +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 279 235 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Helvetica +%!FontType1-1.0: Helvetica 1.0000.0.0000 + 14 dict begin/FontName /Helvetica def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /P put + dup 34 /y put + dup 35 /t put + dup 36 /h put + dup 37 /o put + dup 38 /n put + dup 39 /L put + dup 40 /V put + dup 41 /M put + dup 42 /hyphen put + dup 43 /I put + dup 44 /R put + dup 45 /A put + dup 46 /l put + dup 47 /v put + dup 48 /m put + dup 49 /p put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -1947 1 index div -985 2 index div 2961 3 index div 2297 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000036C6670676D000000000000040800000A0C676C79660000000000000E1400000D30686561640000000000001B4400000038686865610000000000001B7C00000024686D74780000000000001BA0000000486C6F63610000000000001BE8000000266D6178700000000000001C1000000020707265700000000000001C30000003CF05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A + 002A002A002A002A40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020 + 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158 + B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592D00020042000004D005BD00030007003FB800532BB800082FB800092FB8000810B80000D0B800002FB8000910B80003DCB80004DCB8000010B80007DC00BA0007000000562BBA0002000500562B3031331121112711211142048EB8FCE205BDFA43B8044DFBB300000001005501DE024B029700030020400A002F03011A0500190405B80142B321BA48182B2B4EE410E6002F4DED3130132115215501F6FE0A0297B900000003001E0000053D05BD0002000A000B00DA40504801580168010388039704980AA90AB809B80A06280A010007060601020809090102080A000705018C01030420140A0A251209090114050525120606010B0B0503090A040605010B02010300021E0708B80159400904030206090A030508B801A840120D0D17171A059E019E0A190C0DA1218C5E182B2B194EF4184DFDFD194E456544E6464418003F173C3F3C4DFD3CFD3C11393F011112393912393911392F872E2B7D104B5158B004C01BB004C459872E182B7D104B5158B003C01BB003C4592B1112393912393987103C3C07103C3C3130015D5D005D010B01133301230321032301038EDFED85E10215DA95FDBB9FCC0290025A0289FD770363FA4301B8FE4805BD000100C90000019205BD00030017B8002B2BBA00010000002E2B00B800002FB800022F303113331123C9C9C905BDFA43 + 0001009C0000044B05BD000500314013000203021E040508031A070102250500190607B80153B321765E182B2B4EF43C4DFD3C4E10E6003F3C4DFD3C3F31301333112115219CC702E8FC5105BDFAF2AF000100970000061705BD001300CB405944014B03020601090316011903D7010513011C03140B1B0C57015803D401DB03D40BDB0C0A040A040D45028602045102970202290A280D380A380D4702570276020725640D0A0203120301020B0C120306081517171A040405B8019B400D0A1F030B06FD0C0102FD0D1F12B8019BB6130019147670182B4E10F43C4DFDE419F43939F4393918E4FD3C4E10456544E6003F173C3F3C1217394B5279B10D0CB801AAB40201020A0BB801AAB202020387054D2E7AFD047DC487052E7AFD047DC43130005D727101725D71132109012111231134363501230115141615112397011D01A601A3011ABD04FE5DC5FE5A05BE05BDFB2604DAFA4303632DD077FB2904D72D36DD34FC9D0000000200AF000004F805BD000A001400614035690C6912790C7A12044814581468147A140407081E1110100A010E0F1E0100020A080206120C0409141431041A160F092500191516B8010BB3219589182B2B4EF44DFD3C4E10F64DFD11121739003F3F3CFD3C1012392F3CFD3C015D31305D132132161514062321112300272623211121323635AF0295C4F0D6DEFE32C70380784273FE74018C86A705BDDDC8ACFFFD9304B93A1FFE03729000000200B40000057805BD0009002700944012070D49014805590158056905641478050816BB01300119001B011C40422321202660127112751403121E1F141C1503211E161404261224251E0009091B071E0B02261C1B082025151F251603310F691B1A29082625270A192829D6219566182B2B4EF43C4DFD3C4E10F64DF4EDD4EDD4ED003F3C3C3FFD12392F3CFD3C3911173901111239391239395D1112392B3130015D013236353427262321110321321716151406071E011F011617161715232E012F012627262321112303478CA3723D66FE1AC702A8A86DCF6D6256570507030B122EF40A0C040C0764397AFE3BC7031C70929D391EFE0A02A1315EFD84A833237280C55429461421133C56F590311BFD8A000100340000053605BD0006008F40449001A0010240015401021601017805E6010267046805880403192802251203030400251206060501050203060300020504080817171A0402039E0500019E0619078E5E182B194E10F4184DFD3939FD3939194E456544E618003F3C3F173C123901874D2E2B872E182B4B5279400C01020100030401000102060587087D10C487087D10C43130015D005D717172090233012301011001A601A1DFFDE8D3FDE905BDFB1D04E3FA4305BD00000000010084000003ED05C200160053402C060707081707170827042713 + 7507750808130D0213150000111D0607150C0A0D290A1A180115290016191718B80106B3216242182B2B4EF43C4DFD3C4E10F64DED003F3C3FED3F1139390112393130005D133311363736333217161511231134272623220615112384B440335782E9532DB91E318770B6B405C2FDDC512139A3599EFD5102A37637589AD6FDC8000000000100890000013D05BD0003002940150000030A0517171A0102290003190405AA216242182B2B4EF43C4DFD3C4E456544E6003F3F31301333112389B4B405BDFA4300000001008400000625044700260085403B0708070E060F1708170E170F2708270E270F4819560B670B0C23250A1A1D23190A02041725211D171D0D060700061B1C2503130A2817171A112914B80101B21A291DB80101400A00012E25292600192728B8010DB3216242182B2B4EF43C4DFDE410F4EDF4FD4E456544E6003F173C3F3F3C4DEDED111217390111123912393130005D13331536373633321716173E01333217161511231134262322061511231134272623220615112384B240345971804E2C243CA265D84E2ABB6B4D6A99B71A297066A7B4042F984F243D3F244656539C548EFD3702E86B508EA6FD9102BB6D324B9ECFFDC80000020084000003ED04490019001A005E4031B706C706020406140627147606740705140C021418101D05070006180B0A1A071A1A000C29091A1C012E18291900191B1CB80106B3216242182B2B4EF43C4DFDE44E10F64DED12392F003F3F3C3F3FED1139390112393130005D015D1333153E01333217161511231134272623220706070E011511230184AB4CAA68E4502CB71D307E40294A382D1BB401A7042F985E529F57A2FD5102A3623C640D1642357169FDCF0449000003003BFFD90421044E000C0018001900904033980896109916A504A808A610A916B808C808D704E50EE9140C3A08061D18070C1D120B190719191502270F1A1B092715191A1BB80109B321725D182B2B4EF44DED4E10F64DED12392F003F3FED3FED31304379402C001704260B1309260000110226010717092600050D0226010A140C260001100C26000816062601030E0626012B2B2B2B012B2B2B2B2B81005D241235342726232206151416331200111002212200351000330702E085304CBAA59696A3D6011EFCFEF7DDFEFC0112E70674010FA6965E94FCB2ABE403DAFEECFEF4FEFDFEAE012BFC010E01400500020076FE5504250449000E00220074402CA908A717022808201C110E061D15070F060E1D1C0B220E0227181A240A2E102E2129220F1923248721BD5D182B2B4EF43C4DFDE4E44E10F64DED003F3FED3F3FED1139123931304379401C161B00051A260426001B022601051602260101190E260003170626012B2B012B2B2B2B8181005D2436353427262322070615141716330133153637 + 36333212111007062322272627112302C6A72546BABB45252546BAFE2EAF36405B7BB6FEB7749A7952303BB479D3D2805CB1BB649A7C57A603B18E49283CFEE9FEFDFEA2965F351E49FDDD0000010017FFEF0209055A00180052B50D2E0AC00E01B8013F40250416391703060E0A111A17171A0301062900150E150F031F030203FC1619191AFC21677D182B2B4EF44DFD5D39C42F3CFD3C104E456544E6002F3F3F3C4DFD3CED10FDE431301333113315231114171633323637150E012322263511233533A8B6ABAB2615310D1E141F43277E5A9191055AFED593FD4538130B01028E0908816702C59300000001000B000003EA042F00060102402E4201C5010200670068026803670687048805A700A802084700480245044A0586048905C704C80508492873280708B80109B321677E182B2B4B5279B8FF70B40105042004B80183B703036D1202010205B80183401E06066D120000010506040301010502030603000605040A0817171A03AF02BA018400000184B301AF0619194EF4184DFDE0E0FD194E456544E618003F3C3F173C1239011112391239074D2E2B104EE44D072E2B104EE44D2B4B51794025022912030304002912060605010502030603000605040A0817171A020403AF050001AF0619194EF4184DFD3939FD3939194E456544E618003F3C3F173C12390507102B07102B313001715D005D7113090133012301DC011E012BC5FE6CC0FE75042FFC980368FBD1042F00020015FE4903E804490018001900CA406E8A158818A71803070617063812481258126707770377078C1498009705981597169717A800A8161048004B154717C915044405C605028705A600A601A705A8170524280518151716010006150C0B0F1D080E19071919161B17171A050001AF171518AF0C8F16191A1BD421677E182B2B194EF44DE418FD3939FD3939194E456544E61812392F003F3F4DFD3932192F183F3C3C3C123939014B5279401215150016166D121717180501016D12000018872E2B107DC418872E2B10087DC418015D71313071015D005D013306030207020623222627351E01333236373E0137013301030321C7268362429C809C26291E2F2A10322F10053E0EFE74CC011F01042F67FE91FEECAEFE66B40608A40D062118089424044EFC980382000001000000000000032DBC1E5F0F3CF500110800000000005F4D8F0000000000C321F6B6F865FC270B9108F9000000090001000000000000000100000629FE2900000C01F865FCED0B910001000000000000000000000000000000120512004202AA00550556001E023900C90473009C06AA0097055600AF05C700B4055600340473008401C7008906AA0084047300840473003B04730076023900170400000B0400001500000034005200DE00F6011E01AA0200028A02E80338035A + 03D6043204AA051C056C060206980000000100000012006F0009006B0007000200100010005D000007E80A0C00040001B800532BB800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500 + 00>] def + /CharStrings 18 dict dup begin + /.notdef 0 def +/hyphen 1 def +/A 2 def +/I 3 def +/L 4 def +/M 5 def +/P 6 def +/R 7 def +/V 8 def +/h 9 def +/l 10 def +/m 11 def +/n 12 def +/o 13 def +/p 14 def +/t 15 def +/v 16 def +/y 17 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-1947 -985 2961 2297}def + /UniqueID 4375838 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C91BC64A62485D7C863002D39D4194FF17CC8AA420E752C449BD1094F4D1EC7207B0530DDF71009828522A260EFA1903C8C21148B5AEA74F5F54E03FE286DAB2E21B3D5193F167FB7002A92B0E61DF27B872185B9CE455AEE3573114DE717C814B4AA859C109EF01BFD16EE1F768E9204B97BFF585FFDA12F204A75669FED615931BF452589E27A6D27374AF1B2D4E771E11C81EF0004711A112A87645F3400E7ACFCB0499681642748D98EF1363A336C96D92A7E5182C27D0066AC2D8FC4AF4BB66BEB9D8BAC2A8C250F895325CDAA29BE91D38B3FFA8A7A33FC9F9637CC726F92FF613BCBAE511A52E5B68630B0B459E7C4C8BFE840B4B09EFA413B167E93BC5B9DF054F335C228FD861444A72ACA566E25E2FD4081B8069C40E924FC62B52907B12DB5D3837CBA2D1748FE27E5C28ECC3F08DDFCE01B88CDB4457713DFA3BFABE45E156B5D59E36940651FABA30A1A4E96624B2B93111208C9E11D07160C8C9FC2EA165C9D6DF977CFAC09B028FC12B590513F8B0E169C20294541A930ED0320A89E869AC8D6BB8A150578D38E7BA1F718E9CAAD76B544D80E873EFAC5BE9BE27338095985A258ED232D571877DD8BA0F3E6E791A8059EAF30A5E27B2B44C6D70738472A4B72FA7AB2B54B2EB6B1A6CD01D2C0FF9B0BB9906DF7F1C545833BDF8D75DA279DEBD27646E6ED8D86EB5871CE64F4A628BE76B76BFD224B3650D5C9B0D7845B26DFAD01A6E2D45BD4848F48A6A45CAD510C805347B093737CEC01D9 + D9183EA980BA26E4784B88CC2F89BB4CED66F4AA0B3F5858361357B3F84AABA9A81F810FB18214267DC2FCF5D54F29BD5B780486D2097CE3BE070B544D142C5EBCAA99A8FBB9FE154C99DA17CDDEA12B968664BB9F424F9E25F605C906C4CA1C819A27EA3467307399DA373BEC04948EAFA84E4D8074D06D08EE94F45C7D6A564737542297169EE88FCD6367FD882593ACC12B09ADB70741C8EFD0106DCB4341BF7FDFE18FF30650FFDE29E7F8C6D175DB2C16A2BA1F1C6F941BD399566600CB3E0BF61984301EC9301AA9A635685F294186422C1696C6B3155519E0007F8AB74EEAC7A31F42177C647B61CC9F0A4CE5B9DE2213A65BCB2F382AB6D56C58ADDB87B59FE7F402FFEE1B9B09421610206D2F95BA3D67518DE65EF8AC3772E161D37980C8658738E458B308D0454AC7EB6ED21213E588EC3E649AE1BC4D9BDC6E8E0E55E663DF1683DDC1EB926A46091A8AB7F7760B9573536100D9EB1D2314762C72E32DDDF1A55FDB12F18FC40779C84E59143DA16D9E51EF4DCE116CEC0ED5DD9FEE32E486AEA166CF66A89878779BE75E64E9F454F39D1261BA533290B5388253E7F46CD51EBB3EB32E00D4AA6A64C5BBAD49AE5A81C9A9657A1D95CD626EE5933C7CAA6CAA0AF084772AD722FC96E20C280ADA43283D00700E89A00796E4FA4B3D842F2123C008881F2DC7EB2B37349D9680B845DE68897A1682519B33AB25F08491892591E0A80772F31E6B7A32C0702FA8ECB1FB92E01FD7618408030D5FACD5F944037C0FAECBE82633D9DC39B8343994DB94D342472CED4F64F4E6E829186CF70C8BB5E7B82E7E0A18F5E0353367997962F1D8DBED22F414467A48B96BA91165C8D6D0CC1894D7EC2E00991713AB7A02D73B52E5C080D3FD9638AE0D8384D41462EF3C1F7BDFC274D44DC77A954B31E2B47512BB8B91A6B30613AAA44C782BCA4C9A7ECF6C078568182823423EBCA64719801DB2A92641ACF3A2FFE5C280052976093342B3BCC8129C069877A95D03069F576E8B5FD14A96044F423847587D1C4C47579AFFD0F53455AA94D59C17B24FAD441537FE0D60B91C05AE580DF365A53E8BCD313A35339F18757EDCFE2F89D7196790F94FE47AE41250F4C1AED68273D13BBEAF98AE349E1EF2CA5811B333BA6C81E570D275EE03709C9AF92712E98A334116FD56C481B933A47D95CEC80029D51FB85B3136EC2AB1B53CCBDE107E31B08A3BBA5D2624B7E14E99C1DBEA0158131708C2D6F14E990ACFD3CEB12B22FBA129700E499A88CABEE35376C72D97C3BD2B0E5B0AA901B1781D9F4617636EE5F8F438407FD481D283812AE766B5CFBFF24B20AC99E5DEA09A08FEA2642F7433380A15FC44D647FB8D2EB06FCBBE38CCAB77A3DF98AB411452D6DE64B5AA5BD38436D5E542D528DE76B62B1CB270204AC449C74D10E48737B2608B93D1 + 731CB1D2C23A6B11516A18092FEF77395967155668A5A0E25DAAFEFACDEFFED9D2C32B715A0F9C3DBD7EF0D92F162CBCCE518791069F363F2D1EF5ADABE855CB842FFFFE02D914BB9859CCDD56656111055D5CBD0F5C1C35072FCCD8F751B7A5FED938D82F3D4464A9EAC5405522C39E0D7A69DF1CC7AFD40C815C5A26CD785ADBD565CE5BFA8B5F74C367606E0E2C5C607CF78148FF6755F2A8D6660DECE6822C20733F2835F1674DB6B8634A50A3799B4704685D9A911D274E9F0B42E8F0D3EFC9F0ACBCF68C00460907C13B7BDEFDDE7763EFE0B630523038D68FF03E788922E9A940C3E744CDC3E04D15D5B11CC9022CB09556832755A6C0B7501A40E4743E607B398C9CF64526F73B0A680941ADA5C37E3E2FD8BBD09724204F70404C298030FEF455F94375941862572AB6790B75030FCEC8834F282109B1FBF637C928E3E3ECCB890080D45A34AD93703F97D7D03578412BC61F297BC1B363C2E4F57DEFAF261D112155C29CF7A9A223D7CE1F14863B5CE0AF8EB00A37EEF0078CB2E9310894919856BA7693850CB3BDA064CD3B8CB1218EC77CEF3E4795AB0704FA578951AA3FCB58853685743FECF4 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + +%RBIEndFontSubset +/Helvetica cguidfix +/F1.1/Helvetica renmfont +%RBIBeginFontSubset: HiraKakuProN-W3 +%!FontType1-1.0: AAAAAB+HiraKakuProN-W3 001.003 %%CreationDate: 8/26/10 % Copyright �2003 Apple Computer, Inc. and its licensors, all rights reserved. 11 dict begin /FontInfo 9 dict dup begin /version (001.003) readonly def /FullName (HiraKakuProN-W3) readonly def /Weight (SnapShot) readonly def /isFixedPitch false def /UnderlinePosition 0 def /UnderlineThickness 0 def /FSType 8 def end readonly def /FontName /AAAAAB+HiraKakuProN-W3 def /PaintType 0 def /FontType 1 def /FontMatrix [0.0010 0 0 0.0010 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for readonly def /FontBBox {-386 -373 1232 1266} readonly def currentdict end currentfile eexec D9D66F633B846A989B9974B0179FC6CC4458BB4CB99E3608702C78822367AAF89059868F63F93207640A6BD5DA214789 139C491E02A37BF3866F2964E8D690D48D9F6C4A5EC22355F8123573812483E06B968AE84B5F20A982A0E65764753516 97AB8C6EA040355C5542F297D7A3AF28AB93EA0771E0D56DBF00F7CA9CE9FB9FC2E0ECB00D04D5F5F3F24B987B546D62 74971A477DEE12C44623C180BCDBA21172627610C4736632D1A4693E79719C3BC43DF5330790A52DCD4CF455ACC213F6 B1C4BA249179DB360225568161552A16682E3A3604BFC39D571B1F8F18375BEF1B05D6DE4413DDBDB2D936EF6A197BC8 7EF3384DF04E6025A3A7EFFF451D52E96886EE4B4169EC3DEEE64932AF4AECA3AAB81853B58042BA51BAD1CF1FE64675 4A29D2100BBA83E7F6E2F5DFB112F838CA7F659DA7A6373BB1B86BF204DA715F2942AD8690FB1C37539822AE991DF19E AFFBD3E70C395C40FA19CBA66F6F776EC20B6398A64B19208F0E64419A3F9DB393F17B6A206EFAE3B72BBB97405C4CB8 2801FFF79A60CA475287D576B5FAE301357949AC6E4F6EF1B8E41EC8819429C31C995A8D02C6F93131B3C3FD0563C5B2 C561EF5E734C7AC2E2F882889F4D04700D54FF4ABFEB4AC7C99214F399F62A2920477FEA7111FBD7B5EC77864EA25A03 88721F3165F5B0867D1C7C29DFA0394F00B032672FD41DA7C59FA55B9E3AF89B81799A0B27F1420BA48F9FA3B4693FDB 053C26BACF8A048849E5C5B195ED71C79113DD547B1468FEEC4C124788537CF90C3E1DB8793BD8E61BC72DD310B89670 021372EA4C700AD16A855D0917C5F105706F3206540AEBA75926DC784B77FAA8F2459B9A468E2A06318839FA8C08FA7A 8241BE54D435D7E1CE8BB877839B32897C38ECC3B2B63BFD6083CBD67A33FDFC81F548A162333DCE29E28232431AF514 37794B82CDAA0282850FBBCB8A0A9CAE35CC3991AA9FBE225251C0E9E3F59F39EC952D556BEDE7BA8BA8BCA5546B665B 2481E6F4EE3929FE02EFB2402EFDBD1FAC1C72B9CFCFE391E0291A712286845FD31A23988776578437DD63EE0C3ED76E A391B35D2355FED30B1FD068D708EA45C4BE46C0F907CAB826ECAA27734D9723CF21C18BB7B30819E095E25833FB53FA 83710AC4E86D305F2EE40138D4BECB08688944C0D68C62E39899104AD6E587EC0F3FC097CE79F16A2C519A3B4ADA4712 EFAA7D9C7A17BC5023789142657BA7D164124537929053C2A7A0D2E8E4E63CFA5179983FDCC84769897719FB24472CCA 9EA1577B22B8B29703CCC51B7A254194DD86210204BEB444EA4A0D95A73FDBE953C0BDD8ED9074555027E745D457D989 412029757A42BCAA87154D3479D568532C656227DECD1A94699177522FB013228446DE961EDC5C6CDBF3CD69FA2B5F7E 2137C9DE65C2B6327032847044CCA017F9B2E8177A4A4B6D7DDBAC578CC2E98EB131C49BE0E818CF78C8DD2B562D74A1 A9CEEEF49606115A53F15F15D080A3ABB6D990CFEA9C58779C7E388C90BF6C7C1ADCA733C293E821F528A8A25B16CEFF 39B103A0000382CE00343EB20473864E5EE271B9F16B48543620B37B95B5C016B6BDF34B868DAE1E3581207508587E0D 44760E91C5E8183D629898CD1FD0E1D2798E7DDBF7A2997AD582AB85DCF50C2301E775AC7AD675A059D273D13E77A7EA 38DA6F3B16DDF2087940136B83C511845E6A91B8D2B8E3D892958966D1E22B2BC977734ECA36565C4A0FD0DE93F30256 40B66827F52733B55B565D4C60B8A3A5AF5EA3F5DDE6901C913366D3952F3FBD1B3FA9E4DE1474E006280D61EF34D830 490F88722027E57AD7F3FAA60FF2172B435493B0B726C9BFFB996459F29609633507AF1DA7A9F84094F7C61B0EEBA767 0540DA3ABAE2EE2C565DC4B7A061BE2B5375121676FDE5B0C37B9D922C0CEF05056E77E641B66DEEDE17E1C6714DC4A7 B16764EA5D4C7331DE2B1472FC3E610FB03B5842F4B7D9D268CF3204EEE860B1B96EB272DF663849EC387B8135065F48 4863D2C1263604ECBA3F3BF4344916C70485FA8B9E61C9F6A83C70EDBBB3E3F5A63B0C9BBAE3A3B457D94E5669B60812 E2B88E0A767E549573484C03CD45364AA230827B160318E25F95D8ADBD664C1DE213CDC3454775A09DA3858AC9622DB9 4A66012A14588548B12011E64B1CAB38834EEA24AA78C7FDA24690D53CE063EF666119954BD289925D2667AB00834FD4 1EC048E6ADAFC36FE8971B9A3B776906C22414478E6D4731FD1125256E30E2ECEB7600643ADFB27EED6B7040DEEF0580 ABAF22E011D407D171ED48A915140FE722E3DDFE39AFB34043406803C8C0CD5D729243F2450E9F7AE57A85910D0C304A 290941ED125758860B66D4CA4E00F1F6BABC431CD4B2E2C0B9C2DADE8EAD2BB86D96EA93D125497F487C77BC15BA284A 04A55EE8DA4D52C365D845AD7D66672664B1B6D113376C4136E18A77579176C5BAEF5D063127ACEB217340F93AC314FE 151AC07E75980038953DE1ADBFF288C3C0CE5974F5ABCEC9B7780CA3A7949C232DCF7C36331A48DF504C45E69BE408DD D4DFAB2CE40717D026086DCD1097B8D79157EC780F6EE40798794591698E8894B0229F5541131FFC3777DA24ED84FA84 EA3C49B49D8B8168764BE94AD9CD73303A9C02C4B30273D995D77E093F9B20716ED7A8D1882A8A3ACE81154B739FDEC7 D3E560D8733BFD7A7FC51BDD337587FB4471C0E735DA3A11DE1CE7510EC7000A78EB103DD08B79D3CDC791077780EECA 983D71377D598198DF0A02F9315A92A1708B997FE3FE467B06970D58C676D1AE871F2A3AAF6E85BD087A77A92918B0AB D6DC855C54CF7A69CF96D20B74AD321DCC3B7018A7444D4F2A193451672F3A720DA457D38F60B5775C157059CC76938A 5E396C70D7FA75E105636F9F2C27F5FAC0A0DE4AC709899A15B85D546B0D6020B509DBADC91624359D5B74575D67408A 0B9D67AD007066510B5D0D1B0EC5244C1AEF02E521DA2BF5ED41CACA27127A53415F188264B610C4C837720CF95B8E78 D7B36D0C3E86CC7CEC6ACF71575B9D28BC7155C67B45CEC4DCB47D8474A1ABFC1CD4A284109F175FABC93B3020C61D0E 31C976A6D252B773FB84F044052F027ACCE86453F830BA312657154C8C25AF0D965497C02E9CD04B3BC66E08E942AC45 1D0ABC63A739E527D5ACDBFC52C6357FC7A5FD91740DB7584C3C12B1F5BEF9A0A44B5DB530603FF7F1696ADE05102600 5919B9E0923BA37B60C7611E7EF96DEAA7552F8B28AD9DD5C3A2A45D37BC3026CBFFC6429C69CB444D4C460BF6F7B15E E6523F1768568E1357DBF96488F4CDF3D9633C8CC2B3732B05A338622C30DAD2966CFF5B3EFCE688EFE2A0AE6040ADD3 567E90A16026A42A2EF287CF3D8ABA5A6E6E251938B96BC6D38EE53F70163447DFB2EFB45D5E609E135AFB66185BB12C E5950CEBFF13E5DB2848616FB0D5277EC40B2C41FA40D086E8164884A49BFB03BAE3E66B099DF735697986BBAEEA8856 2B9730476EE58E06138502D055A88DDE2CE4E944771E1B9D34A739A87A2EA404CFEC8FF65824E74D954EF758DFB4AEBB 875810571F2A6A6F75608E7B52682225EEEF094340B12E03718CACA3E6D5FAE9BBBFCA7FFD14DCFF08A057F4E379D622 A338012DE2C834A83767864DB7C9823DC75AAA381B068E57A6A4FF9773C2183470F1FB20122DBEE76D826337E5D01DDB 295036CE9D5852B3BE4E0CADC66E42B16305CB7368EF293F42E80AEDB791C6E9BD45933A9A2F17FD60E551E1548C1AEF 6B36A262D82C1ABA3C7F6C51DB913E16D8795640B2FC7ADBE003B48B62E096011398F387E77585064C481BDFCA7C47B9 CA1A3B755CEC4A0596120A4E75119FC14B8A6C13E93694D2C319653A413B8E4CBB1A55E7BC555911F2D31678D4A5DF56 8DC4218AD6573BA07D46160134286FCB4C1F803E07723552D7C854CFBC3597DE9BF1B9930B6997AB2E9D384934BD1730 BACB9586D46B81022DF89010B65E3DFBF7178C543A46BFE5CF6B6E3D2A5C74ADFEF13F131FA05AE05251FCF217F92769 26F6E5FBEA94F40F1F9910DC865321A0495A8CBB5487BB2E96CD075E3CD99EF552ECF67C331CDC1CAECA526DBBB3314B 6C8FCFE65278A70C484356867A41DA7D0C0CFCCFBC09DDE65C81D980190E539A67D8D4F02DCC8D9936CBCB796D84C8ED 7A0F35F4E73D5210A625ACB7860AD39B09F4609C1D9FDF1056D9CBA5BBB371A674045316DC6D97B4E3EBA6732EE42A5E CBDD20F8C7DC6B8EAD36AD7931D33445B38B78BF4714466CB9EFDF75F9E88622610759ABDCD6DDF314B21D5ADB663BF0 2B232EC7BE6AAFBF0E60A734037477B8E6F7FFC1290E89E251FBB5F91EF78AC3B71DBE01A7E8F0F8BCB6E62F50E3A415 8803FD7CCD69F45F274EBD2843E77369A66750D7E5C82F42AEE451D6F81E3BF18D2EF5D4A8F7BBC43D5DA3FC1EC142E8 8EFC114D9FD3E758A217D3088B31417DCC3E6658C97BBAF1C35327F1FAAD78512CEE74AE6B4E1863DBB552CCA429AA2C A39563E8FB771E2493F6340014AA43972720FB7449D1569C8EF84EA788CB9FF7B106DFA7C57A4918534F8ABE0DA68652 25D8524B0D74FD65C5981AD546696209E82579650251CA16599FC06D15C79EEC51B71E35D070C5069319943C92B6E25A 96C50995E3D26548716BDF002B6BE74EC140AC12454D62419B00F312C979E0879AB5966CDFD1A4FBFCB7C1057C4D2C01 A6B78DDEF4C368F9DE27AAD7CE33C3DB1BE034122F8E4C7BA559A394E19E1DCA4E55CADA86B0820D2F49AA88C81F0E23 194CF929CF4F3ADC4C89E3FD4900E5D694B0E81A4174F9F8E279FC45B790119811992A209263BE9BEB655592DE9E8132 6E7D45345377E356A7BA1BDF524257EAB9E61752B685890BC824AFA834605712AFE431180E9C87F09A87A1F490A9C64A 7EF8232E3685EA6DE55F4586202D727D15B0AD4ECF9337802641B344E45635D344E82AAB61E083B8DF276C80E82E9960 E00EADE00DA94EF49F30327FD659B8A60318720E9A0BAB66DF457A0191D864A080C99D75BADF49DFC668094A600E561E CF3FE3B0BC981831D569CDBDCE3E7819FC4A706848C2B52097988C0EEF4B0C1CA1B58CF82D3BE14349C5CC7E934B1E0B BA3B8D0C93C9C14E11101DEE66576FA53F7B910EBEB05C26C6BB539FEA91E9FC72B2B25E3BF532A709A4AF8E4609752F 495FDAB446FE4D04629BFCD1C961A52C913E1EAA315C7C4FB8A6C692A16FE0D08B2959FA9B31D3270701B9D050D8B2E9 8350D7416F89404CA56AAF343F1E037873E86B71E6ED894A14A9C8C70A41D6ACAB8236CD51362340C02EDC49996A9530 65999DB2E09F06376F27791E4DA56AE2AE9152B606301BE973621C0F358E3100E07C3ADD21A8EDE860477BFA33A4DB6D 45E8A1D657109D6074FDBB986F3D7CD9F61A0C313A424AFE26359E69848876E1C69D9A76D11A4D20289C2D788B469FF2 850FB4CF98FB96B14347FE1E9C195AC54203021A7E8803AE91C6AA6E4946010582040D6ED65E940D3B8BA5F4FF2BF2CF 35EC93026AD01B6D1C9C3BD77FE4284D1825A0DBD180AFF5BD78AFB25690AD1977D5956D1923802A37A5948FB006AB14 88CBCF39CDC48CFB047794CBCBBD955CA179C92806F60A51C04CD5AF79979284D49C2B8350784E8A77B8ABBDEA6395CB 006DE254798D9DECF3C9FBC7E826F4E445230EEFD7E0FE335F63EEB793AC66C5079A232528504A8729F428CB8AA722C6 B1587E3A385777CA694F072915D24415BA6C7A0014252BDDDA51FB7E8D2EAB6DCE526EB520E289AC9B878C3A79EE36A1 6D0F7B221F7A1B533FC07302411987C8B473482F8105D7987EB492F60952B9F53AE45E8CFEAB3E621040CD0E9F084752 3EDC72070DBDC97BE62602ED1EBE39D065A751A4D4B7E3B7ECB986D9D6ADC861F79C06FD992E99119ACAD8ECBC6972E0 C611266C5E2DF852D48F20BA787820E9797295DD624FDE043E2F8E732F2D40A7056566192C23128595C04B9D57792BED 1110C0698351B733A2950A53BE8E4591747EA5622906D577456D5AFCAA5468D804FCF69D3D331377E99B706E851F604A F7A5BADC977CBF4C3B6EBF0055ED81D9AAD07634B7343CFFEE27F54082BC46EA444C3D45DE9BFCC0569EFACFB45E9972 3D2DA81DCB5A9B61D114C5304C266553816928E3F69816C54B17D249EFC73D73BF7209CDF08116BB080EA8EDCA478543 CB90080BCC142A6BA4629D397CCD33F523F418450B30E53C9961202A56E8F1DC2B26CEB569989AF68BB2C7E22BDCB0D4 8EB53DB93B0F6C56ACE62DD1BC52F368DCCF019CCC499AFC89BE8D75B876F58B7554FB1EADC26C1A15F2D9DA5AA23061 F8CB2CAA187F3BA480B0F3E88453E868E94DD6FC2ACA3BBE5CA690837914603DD8BF52D9B82E345B9418CC69F91C1064 39FF0E34ADD15A95204BFE952FAAB3FD46A6FF972D3E5C01AB858B9076CD1D0056BC203BBC2B6B5BDD7FD3163673CC5E 9385C021ABB8F9BB41C915E0B70A0EB7B375EAD870C2AA26FC330D7B837224915EA521CABD0B05DB0516000EB5441DDD C715F977C4CD8CA71AB98BA5C8C09CF3D9CBBC91989BFC648E9FE64E30AEB9472D8A55A85A2E2AD545802E1FB5DB0ED0 6B3B3E1114767604572EE2ECD482790FC20D9C31C2EADF34DEE0591091BF70725DB3C08DB4829C212B387DB403AEB671 435233F888DB23D61A517A69BC729ACA0DC54DB830AA7A4075252818FD12DA5995826945DA3A02162B87888D04331575 BF739CBF4938643C7E7AC857D1F48D3401EEC9D5EF79F88A9DE5B0A1524CB2054C744F67890295C274BB3DA00754902B 56D0C7378CEB0B4B9691ED0780B2088481764119BF566CE707F88129383883971DC823DB1CC291AB831BD1A9439B31E9 36F7541F59C86DB1D6644AD6394DBFDDA6A34BF8D6CE874979743DA3E086278AB6759773E2A895862CD6BC283068F6CD 341D733D2F25F2ED98AC5FD38746F8E5062203689B2EBB03671ADBFD82E74327481D8E432C461A9EA1DA2538E2379E1F 735152CC244F73E7E61F83540367965AB032BF6FEC717B1DC5268EE16CEA459087212E2DDF2FB95B75195B34CAC09D63 AAB2E9EFA8E091A8FEC9305D43B8D25698DD38AE3144AC6C7536D643C24557BB57F4E7EBA56757AE565CD8E2EBCDC382 21F61D3057E4355F6E9BE1F8D01094ECBC0CE0707E7E97C7D728C52D31C8A7F657126AB268318BAE4314B982024C7E18 65723C492A604052869EB906B36B47959B6F0E1B106BCD9DA911B3F80E83C31E6BF969406297E02261CFA837C8D6D417 FA28CA00BB365B5929F5BF79FA67DF5C07E8C78D7AFAF485258EDEA48F95721EF0B7A60641364F069565A442FF7C0D47 C96E60E03EDDF952A7AA446E62B3B811679AEFAD99DFC2AA8557431A97A61A1CA8FBECD0C8E371A47E6F3337DCDF8D44 B89E343FD527774A47B7EED62A2C42CAEDC6530F93B01D7BBDE0B64FE479DD20288260E6CADC651B15918CA53FA06D5A E37FEB6A39CA039FE8093B9316E7ACDB7DE4192456F6B87923795F364402850D24EB7B86EF1DBA07C2B5766FD717F844 83690C81B2292635A47389310C9D526BD7DB1954261A39A2FFF662AE7C34C7A539CE4ECB5AF35E5051591DA941454754 2516AD530E95647321034441CEFE4C5097BAB5FEDF74D1C78DA517D304CB0865E91FC4BD6B9BE210EDE1A246EE8EA6B8 9685AD1FE94F7BD87F4F23EE64789BB62814BFD39467349768BCD0895ACAF4429ECEC180417BAE4FBEF9162C42464519 DC4553DA98E4A3A410EACF491FA3A91AFD5F499A82A8496618108A2BAE1FCA3F40454602EA4A2E064396D118947A1E85 98CB9DF9ABAC08B3580C52060EF5F3B5F40DBF82D4EA7D9BB075F7D7D552A717312642E28D1D8DD763C048B33A0A58E9 498169ACC4C9E8BD6B4758F8E6A181FE956C2C21B77C4EAF880CBA35004626AE78410CE513F48B923CF078140C6254A5 E6325D2198D244B14BF25335E6DEE22AEB2EF84D8D8F39B41DF5DF85E56F9E52F76751B33A2518E045B4C075BFC88630 D19430F05FE1A7CA8D08C6699954352CE3AEF7CD33355EC1FDC5DBBBDC5FA8A7E63C9B0BBECC0BD36ED093378B6BC8F6 4644AF567945DAA219C41EF808746E9BAFE2F4C2D1EC9FB758A45AAF0FE38F656D39CCB11A8ED3E3000695590CFBD757 0E6AB5CC9A8233189995777FD7D3BC58D9AD6770A67E7B99F3B1D7C27F7E781713D5DEBEF969714EFA224531443DC19A 5A24A2FF30348287C9C3FA0B60EBA57F1D020852B5AFA1C37066BB8045A2D75631964EA9A34813F0D42CA3610CFC9052 F207742D31C0B69D58353D733ABA1BE112A5A75185C138CF29A874B1310EA9F7D7AA800069519198CF3762F9DDF6BBFE 9894E98A45451587A0F2A611FFB73A088280BDAEFFB7130A2536AE538232C139667CDDAE99612166DE4E37CBFB1ECA9F 5BDAD2F3B03BB391034ADE0B84BC134B5CF66869530C3FA2D54E9081AE735EEEB61420AB9D08F856252569A789E4B94B 8A87E827012A4FA8C15EB5F07968B68AB938C5FAD581B6F2CEF87A0E1E96D571D45531A991B9879516AAF044AB17C780 93C359905990AB0E0E797DBDB99A64188AE12BD30CFD0ECA81990CC369CD1D746BF85DE8767900436BA57F9256E691BB A74FFA2F121BE405D8039B4045FE792A4EC34A5D7EAE59D3E8AFB9C36031F5179672C1EF4F482F348E081D6D161E6CCB F051B080A225D62FB0344E238635ADBFC239596B219F56100E14BE80B4EEAB7DA57ECB4E790FD76B9F1840AAA7C25510 38304F079A04AA1B65D9835E5527F7E9768F5C3ACEAF824805B580B4920707A305EED377A0BC64F28696ABA5872573AC BCA8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %!FontType1-1.0: AAAAAC+HiraKakuProN-W3 001.003 %%CreationDate: 8/26/10 % Copyright �2003 Apple Computer, Inc. and its licensors, all rights reserved. 11 dict begin /FontInfo 9 dict dup begin /version (001.003) readonly def /FullName (HiraKakuProN-W3) readonly def /Weight (SnapShot) readonly def /isFixedPitch false def /UnderlinePosition 0 def /UnderlineThickness 0 def /FSType 8 def end readonly def /FontName /AAAAAC+HiraKakuProN-W3 def /PaintType 0 def /FontType 1 def /FontMatrix [0.0010 0 0 0.0010 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /uni30FC.660 put dup 1 /uni30A4.928 put dup 2 /uni30B3.943 put dup 3 /uni30C9.965 put dup 4 /uni30CA.966 put dup 5 /uni30D0.972 put dup 6 /uni30D1.973 put dup 7 /uni30EA.998 put dup 8 /uni30EB.999 put dup 9 /uni30F3.1007 put readonly def /FontBBox {-386 -373 1232 1266} readonly def currentdict end currentfile eexec D9D66F633B846A989B9974B0179FC6CC4458BB4CB99E3608702C78822367AAF89059868F63F93207640A6BD5DA214789 139C491E02A37BF3866F2964E8D690D48D9F6C4A5EC22355F8123573812483E06B968AE84B5F20A982A0E65764753516 97AB8C6EA040355C5542F297D7A3AF28AB93EA0771E0D56DBF00F7CA9CE9FB9FC2E0ECB00D04D5F5F3F24B987B546D62 74971A477DEE12C44623C180BCDBA21172627610C4736632D1A4693E79719C3BC43DF5330790A52DCD4CF455ACC213F6 B1C4BA249179DB360225568161552A16682E3A3604BFC39D571B1F8F18375BEF1B05D6DE4413DDBDB2D936EF6A197BC8 7EF3384DF04E6025A3A7EFFF451D52E96886EE4B4169EC3DEEE64932AF4AECA3AAB81853B58042BA51BAD1CF1FE64675 4A29D2100BBA83E7F6E2F5DFB112F838CA7F659DA7A6373BB1B86BF204DA715F2942AD8690FB1C37539822AE991DF19E AFFBD3E70C395C40FA19CBA66F6F776EC20B6398A64B19208F0E64419A3F9DB393F17B6A206EFAE3B72BBB97405C4CB8 2801FFF79A60CA475287D576B5FAE301357949AC6E4F6EF1B8E41EC8819429C31C995A8D02C6F93131B3C3FD0563C5B2 C561EF5E734C7AC2E2F882889F4D04700D54FF4ABFEB4AC7C99214F399F62A2920477FEA7111FBD7B5EC77864EA25A03 88721F3165F5B0867D1C7C29DFA0394F00B032672FD41DA7C59FA55B9E3AF89B81799A0B27F1420BA48F9FA3B4693FDB 053C26BACF8A048849E5C5B195ED71C79113DD547B1468FEEC4C124788537CF90C3E1DB8793BD8E61BC72DD310B89670 021372EA4C700AD16A855D0917C5F105706F3206540AEBA75926DC784B77FAA8F2459B9A468E2A06318839FA8C08FA7A 8241BE54D435D7E1CE8BB877839B32897C38ECC3B2B63BFD6083CBD67A33FDFC81F548A162333DCE29E28232431AF514 37794B82CDAA0282850FBBCB8A0A9CAE35CC3991AA9FBE225251C0E9E3F59F39EC952D556BEDE7BA8BA8BCA5546B665B 2481E6F4EE3929FE02EFB2402EFDBD1FAC1C72B9CFCFE391E0291A712286845FD31A23988776578437DD63EE0C3ED76E A391B35D2355FED30B1FD068D708EA45C4BE46C0F907CAB826ECAA27734D9723CF21C18BB7B30819E095E25833FB53FA 83710AC4E86D305F2EE40138D4BECB08688944C0D68C62E39899104AD6E587EC0F3FC097CE79F16A2C519A3B4ADA4712 EFAA7D9C7A17BC5023789142657BA7D164124537929053C2A7A0D2E8E4E63CFA5179983FDCC84769897719FB24472CCA 9EA1577B22B8B29703CCC51B7A254194DD86210204BEB444EA4A0D95A73FDBE953C0BDD8ED9074555027E745D457D989 412029757A42BCAA87154D3479D568532C656227DECD1A94699177522FB013228446DE961EDC5C6CDBF3CD69FA2B5F7E 2137C9DE65C2B6327032847044CCA017F9B2E8177A4A4B6D7DDBAC578CC2E98EB131C49BE0E818CF78C8DD2B562D74A1 A9CEEEF49606115A53F15F15D080A3ABB6D990CFEA9C58779C7E388C90BF6C7C1ADCA733C293E821F528A8A25B16CEFF 39B103A0000382CE00343EB20473864E5EE271B9F16B48543620B37B95B5C016B6BDF34B868DAE1E3581207508587E0D 44760E91C5E8183D629898CD1FD0E1D2798E7DDBF7A2997AD582AB85DCF50C2301E775AC7AD675A059D273D13E77A7EA 38DA6F3B16DDF2087940136B83C511845E6A91B8D2B8E3D892958966D1E22B2BC977734ECA36565C4A0FD0DE93F30256 40B66827F52733B55B565D4C60B8A3A5AF5EA3F5DDE6901C913366D3952F3FBD1B3FA9E4DE1474E006280D61EF34D830 490F88722027E57AD7F3FAA60FF2172B435493B0B726C9BFFB996459F29609633507AF1DA7A9F84094F7C61B0EEBA767 0540DA3ABAE2EE2C565DC4B7A061BE2B5375121676FDE5B0C37B9D922C0CEF05056E77E641B66DEEDE17E1C6714DC4A7 B16764EA5D4C7331DE2B1472FC3E610FB03B5842F4B7D9D268CF3204EEE860B1B96EB272DF663849EC387B8135065F48 4863D2C1263604ECBA3F3BF4344916C70485FA8B9E61C9F6A83C70EDBBB3E3F5A63B0C9BBAE3A3B457D94E5669B60812 E2B88E0A767E549573484C03CD45364AA230827B160318E25F95D8ADBD664C1DE213CDC3454775A09DA3858AC9622DB9 4A66012A14588548B12011E64B1CAB38834EEA24AA78C7FDA24690D53CE063EF666119954BD289925D2667AB00834FD4 1EC048E6ADAFC36FE8971B9A3B776906C22414478E6D4731FD1125256E30E2ECEB7600643ADFB27EED6B7040DEEF0580 ABAF22E011D407D171ED48A915140FE722E3DDFE39AFB34043406803C8C0CD5D729243F2450E9F7AE57A85910D0C304A 290941ED125758860B66D4CA4E00F1F6BABC431CD4B2E2C0B9C2DADE8EAD2BB86D96EA93D125497F487C77BC15BA284A 04A55EE8DA4D52C365D845AD7D66672664B1B6D113376C4136E18A77579176C5BAEF5D063127ACEB217340F93AC314FE 151AC07E75980038953DE1ADBFF288C3C0CE5974F5ABCEC9B7780CA3A7949C232DCF7C36331A48DF504C45E69BE408DD D4DFAB2CE40717D026086DCD1097B8D79157EC780F6EE40798794591698E8894B0229F5541131FFC3777DA24ED84FA84 EA3C49B49D8B8168764BE94AD9CD73303A9C02C4B30273D995D77E093F9B20716ED7A8D1882A8A3ACE81154B739FDEC7 D3E560D8733BFD7A7FC51BDD337587FB4471C0E735DA3A11DE1CE7510EC7000A78EB103DD08B79D3CDC791077780EECA 983D71377D598198DF0A02F9315A92A1708B997FE3FE467B06970D58C676D1AE871F2A3AAF6E85BD087A77A92918B0AB D6DC855C54CF7A69CF96D20B74AD321DCC3B7018A7444D4F2A193451672F3A720DA457D38F60B5775C157059CC76938A 5E396C70D7FA75E105636F9F2C27F5FAC0A0DE4AC709899A15B85D546B0D6020B509DBADC91624359D5B74575D67408A 0B9D67AD007066510B5D0D1B0EC5244C1AEF02E521DA2BF5ED41CACA27127A53415F188264B610C4C837720CF95B8E78 D7B36D0C3E86CC7CEC6ACF71575B9D28BC7155C67B45CEC4DCB47D8474A1ABFC1CD4A284109F175FABC93B3020C61D0E 31C976A6D252B773FB84F044052F027ACCE86453F830BA312657154C8C25AF0D965497C02E9CD04B3BC66E08E942AC45 1D0ABC63A739E527D5ACDBFC52C6357FC7A5FD91740DB7584C3C12B1F5BEF9A0A44B5DB530603FF7F1696ADE05102600 5919B9E0923BA37B60C7611E7EF96DEAA7552F8B28AD9DD5C3A2A45D37BC3026CBFFC6429C69CB444D4C460BF6F7B15E E6523F1768568E1357DBF96488F4CDF3D9633C8CC2B3732B05A338622C30DAD2966CFF5B3EFCE688EFE2A0AE6040ADD3 567E90A16026A42A2EF287CF3D8ABA5A6E6E251938B96BC6D38EE53F70163447DFB2EFB45D5E609E135AFB66185BB12C E5950CEBFF13E5DB2848616FB0D5277EC40B2C41FA40D086E8164884A49BFB03BAE3E66B099DF735697986BBAEEA8856 2B9730476EE58E06138502D055A88DDE2CE4E944771E1B9D34A739A87A2EA404CFEC8FF65824E74D954EF758DFB4AEBB 875810571F2A6A6F75608E7B52682225EEEF094340B12E03718CACA3E6D5FAE9BBBFCA7FFD14DCFF08A057F4E379D622 A338012DE2C834A83767864DB7C9823DC75AAA381B068E57A6A4FF9773C2183470F1FB20122DBEE76D826337E5D01DDB 295036CE9D5852B3BE4E0CADC66E42B16305CB7368EF293F42E80AEDB791C6E9BD45933A9A2F17FD60E551E1548C1AEF 6B36A262D82C1ABA3C7F6C51DB913E16D8795640B2FC7ADBE003B48B62E096011398F387E77585064C481BDFCA7C47B9 CA1A3B755CEC4A0596120A4E75119FC14B8A6C13E93694D2C319653A413B8E4CBB1A55E7BC555911F2D31678D4A5DF56 8DC4218AD6573BA07D46160134286FCB4C1F803E07723552D7C854CFBC3597DE9BF1B9930B6997AB2E9D384934BD1730 BACB9586D46B81022DF89010B65E3DFBF7178C543A46BFE5CF6B6E3D2A5C74ADFEF13F131FA05AE05251FCF217F92769 26F6E5FBEA94F40F1F9910DC865321A0495A8CBB5487BB2E96CD075E3CD99EF552ECF67C331CDC1CAECA526DBBB3314B 6C8FCFE65278A70C484356867A41DA7D0C0CFCCFBC09DDE65C81D980190E539A67D8D4F02DCC8D9936CBCB796D84C8ED 7A0F35F4E73D5210A625ACB7860AD39B09F4609C1D9FDF1056D9CBA5BBB371A674045316DC6D97B4E3EBA6732EE42A5E CBDD20F8C7DC6B8EAD36AD7931D33445B38B78BF4714466CB9EFDF75F9E88622610759ABDCD6DDF314B21D5ADB663BF0 2B232EC7BE6AAFBF0E60A734037477B8E6F7FFC1290E89E251FBB5F91EF78AC3B71DBE01A7E8F0F8BCB6E62F50E3A415 8803FD7CCD69F45F274EBD2843E77369A66750D7E5C82F42AEE451D6F81E3BF18D2EF5D4A8F7BBC43D5DA3FC1EC142E8 8EFC114D9FD3E758A217D3088B31417DCC3E6658C97BBAF1C35327F1FAAD78512CEE74AE6B4E1863DBB552CCA429AA2C A39563E8FB771E2493F6340014AA43972720FB7449D1569C8EF84EA788CB9FF7B106DFA7C57A4918534F8ABE0DA68652 25D8524B0D74FD65C5981AD546696209E82579650251CA16599FC06D15C79EEC51B71E35D070C5069319943C92B6E25A 96C50995E3D26548716BDF002B6BE74EC140AC12454D62419B00F312C979E0879AB5966CDFD1A4FBFCB7C1057C4D2C01 A6B78DDEF4C368F9DE27AAD7CE33C3DB1BE034122F8E4C7BA559A394E19E1DCA4E55CADA86B0820D2F49AA88C81F0E23 194CF929CF4F3ADC4C89E3FD4900E5D694B0E81A4174F9F8E279FC45B790119811992A209263BE9BEB655592DE9E8132 6E7D45345377E356A7BA1BDF524257EAB9E61752B685890BC824AFA834605712AFE431180E9C87F09A87A1F490A9C64A 7EF8232E3685EA6DE55F4586202D727D15B0AD4ECF9337802641B344E45635D344E82AAB61E083B8DF276C80E82E9960 E00EADE00DA94EF49F30327FD659B8A60318720E9A0BAB66DF457A0191D864A080C99D75BADF49DFC668094A600E561E CF3FE3B0BC981831D569CDBDCE3E7819FC4A706848C2B52097988C0EEF4B0C1CA1B58CF82D3BE14349C5CC7E934B1E0B BA3B8D0C93C9C14E11101DEE66576FA53F7B910EBEB05C26C6BB539FEA91E9FC72B2B25E3BF532A709A4AF8E4609752F 495FDAB446FE4D04629BFCD1C961A52C913E1EAA315C7C4FB8A6C692A16FE0D08B2959FA9B31D3270701B9D050D8B2E9 8350D7416F89404CA56AAF343F1E037873E86B71E6ED894A14A9C8C70A41D6ACAB8236CD51362340C02EDC49996A9530 65999DB2E09F06376F27791E4DA56AE2AE9152B606301BE973621C0F358E3100E07C3ADD21A8EDE860477BFA33A4DB6D 45E8A1D657109D6074FDBB986F3D7CD9F61A0C313A424AFE26359E69848876E1C69D9A76D11A4D20289C2D788B469FF2 850FB4CF98FB96B14347FE1E9C195AC54203021A7E8803AE91C6AA6E4946010582040D6ED65E940D3B8BA5F4FF2BF2CF 35EC93026AD01B6D1C9C3BD77FE4284D1825A0DBD180AFF5BD78AFB25690AD1977D5956D1923802A37A5948FB006AB14 88CBCF39CDC48CFB047794CBCBBD955CA179C92806F60A51C04CD5AF79979284D49C2B8350784E8A77B8ABBDEA6395CB 006DE254798D9DECF3C9FBC7E826F4E445230EEFD7E0FE335F63EEB793AC66C5079A232528504A8729F428CB8AA722C6 B1587E3A385777CA694F072915D24415BA6C7A0014252BDDDA51FB7E8D2EAB6DCE526EB520E289AC9B878C3A79EE36A1 6D0F7B221F7A1B533FC07302411987C8B473482F8105D7987EB492F60952B9F53AE45E8CFEAB3E621040CD0E9F084752 3EDC72070DBDC97BE62602ED1EBE39D065A751A4D4B7E3B7ECB986D9D6ADC861F79C06FD992E99119ACAD8ECBC6972E0 C611266C5E2DF852D48F20BA787820E9797295DD624FDE043E2F8E732F2D40A7056566192C23128595C04B9D57792BED 1110C0698351B733A2950A53BE8E4591747EA5622906D577456D5AFCAA5468D804FCF69D3D331377E99B706E851F604A F7A5BADC977CBF4C3B6EBF0055ED81D9AAD07634B7343CFFEE27F54082BC46EA444C3D45DE9BFCC0569EFACFB45E9972 3D2DA81DCB5A9B61D114C5304C266553816928E3F69816C54B17D249EFC73D73BF7209CDF08116BB080EA8EDCA478543 CB90080BCC142A6BA4629D397CCD33F523F418450B30E53C9961202A56E8F1DC2B26CEB569989AF68BB2C7E22BDCB0D4 8EB53DB93B0F6C56ACE62DD1BC52F368DCCF019CCC499AFC89BE8D75B876F58B7554FB1EADC26C1A15F2D9DA5AA23061 F8CB2CAA187F3BA480B0F3E88453E868E94DD6FC2ACA3BBE5CA690837914603DD8BF52D9B82E345B9418CC69F91C1064 39FF0E34ADD15A95204BFE952FAAB3FD46A6FF972D3E5C01AB858B9076CD1D0056BC203BBC2B6B5BDD7FD3163673CC5E 9385C021ABB8F9BB41C915E0B70A0EB7B375EAD870C2AA26FC330D7B837224915EA521CABD0B05DB0516000EB5441DDD C715F977C4CD8CA71AB98BA5C8C09CF3D9CBBC91989BFC648E9FE64E30AEB9472D8A55A85A2E2AD545802E1FB5DB0ED0 6B3B3E1114767604572EE2ECD482790FC20D9C31C2EADF34DEE0591091BF70725DB3C08DB4829C212B387DB403AEB671 435233F888DB23D61A517A69BC729ACA0DC54DB830AA7A4075252818FD12DA5995826945DA3A02162B87888D04331575 BF739CBF4938643C7E7AC857D1F48D3401EEC9D5EF79F88A9DE5B0A1524CB2054C744F67890295C274BB3DA00754902B 56D0C7378CEB0B4B9691ED0780B2088481764119BF566CE707F88129383883971DC823DB1CC291AB831BD1A9439B31E9 36F7541F59C86DB1D6644AD6394DBFDDA6A34BF8D6CE874979743DA3E086278AB6759773E2A895862CD6BC283068F6CD 341D733D2F25F2ED98AC5FD38746F8E5062203689B2EBB03671ADBFD82E74327481D8E432C461A9EA1DA2538E2379E1F 735152CC244F73E7E61F83540367965AB032BF6FEC717B1DC5268EE16CEA459087212E2DDF2FB95B75195B34CAC09D63 AAB2E9EFA8E091A8FEC9305D43B8D25698DD38AE3144AC6C7536D643C24557BB57F4E7EBA56757AE565CD8E2EBCDC382 21F61D3057E4355F6E9BE1F8D01094ECBC0CE0707E7E97C7D728C52D31C8A7F657126AB268318BAE4314B982024C7E18 65723C492A604052869EB906B36B47959B6F0E1B106BCD9DA911B3F80E83C31E6BF969406297E02261CFA837C8D6D417 FA28CA00BB365B5929F5BF79FA67DF5C07E8C78D7AFAF485258EDEA48F95721EF0B7A60641364F069565A442FF7C0D47 C96E60E03EDDF952A7AA446E62B3B811679AEFAD99DFC2AA8557431A97A61A1CA8FBECD0C8E371A47E6F3337DCDF8D44 B89E343FD527774A47B7EED62A2C42CAEDC6530F93B01D7BBDE0B64FE479DD20288260E6CADC651B15918CA53FA06D5A E37FEB6A39CA039FE8093B9316E7ACDB7DE4192456F6B87923795F364402850D24EB7B86EF1DBA07C2B5766FD717F844 83690C81B2292635A47389310C9D526BD7DB1954261A39A2FFF662AE7C34C7A539CE4ECB5AF35E5051591DA941454754 2516AD530E95647321034441CEFE4C5097BAB5FEDF74D1C78DA517D304CB0865E91FC4BD6B9BE210EDE1A246EE8EA6B8 9685AD1FE94F7BD87F4F23EE64789BB62814BFD39467349768BCD0895ACAF4429ECEC180417BAE4FBEF9162C42464519 DC4553DA98E4A3A410EACF491FA3A91AFD5F499A82A8496618108A2BAE1FCA3F40454602EA4A2E064396D118947A1E85 98CB9DF9ABAC08B3580C52060EF5F3B5F40DBF82D4EA7D9BB075F7D7D552A717312642E28D1D8DD763C048B33A0A58E9 498169ACC4C9E8BD6B4758F8E6A181FE956C2C21B77C4EAF880CBA35004626AE78410CE513F48B923CF078140C6254A5 E6325D2198D244B14BF25335E6DEE22AEB2EF84D8D8F39B41DF5DF85E56F9E52F76751B33A2518E045B4C075BFC88630 D19430F05FE1A7CA8D08C6699954352CE3AEF7CD33355EC1FDC5DBBBDC5FA8A7E63C9B0BBECC0BD36ED093378B6BC8F6 4644AF567945DAA219C41EF808746E9BAFE2F4C2D1EC9FB758A45AAF0FE38F656D39CCB11A8ED3E3000695590CFBD757 0E6AB5CC9A8233189995777FD7D3BC58D9AD6770A67E7B99F3B1D7C27F7E781713D5DEBEF969714EFA224531443DC19A 5A24A2FF30348287C9C3FA0B60EBA57F1D020852B5AFA1C37066BB8045A2D75631964EA9A34813F0D42CA3610CFC9052 F207742D31C0B69D58353D733ABA1BE112A5A75185C138CF29A874B1310EA9F7D7AA800069519198CF3762F9DDF4CC3A C922C71A5CA305ACFED17BE67CCEDC97E2A65285E4721EF0116810452C321698CA1BF20FE1F7C600D77EB038F89A0920 6601C88FB3CD58C3D18310549D8A65EE02A422030884750644CEB2C900CCABAABAA8C45CFA532265EEBD5C3882E823DA 6E9FF5C7EB192E8FB00EA21FDA364636BD0EFFC295464146F3EDF05F6951504AA9F7866B7BACA4DD0F2DECF50026C2CE 8E7D02A2FF58C02B8FEF4E90E7A1463E490B736F79107F188C28DB517E6D34286DDC119CB60E8E7D779C46114CF47557 53FA85009C45AC4341CA06BC5268D611AE09F72B673E64894025449CCEFE26A7475FDF62B45DEE6038CD8BDEAB9A1967 86FE8E5F8CF554D62025559200A7A8F37C84D143DEDCFBA70E0F5DD731E3BC6A2DCF30F388D03F37C9235D00217584B9 1A410F9AAE3A1EF0AC6D76454CCB970A52362B5C49C55039604C41A29A1D9E8FA8482F382400B9E838964E42104FD0B5 8642160A8A58B03207E348CFCC43C4C6795ABDC0CAD6E497CACB60171BFF41739EE23C97FC2C817B019DED5A63833BB2 D9EE3FD57E3F3AC6F58FBBBA5398AACCD73347B25F9C4659EC774C27527F9488F0A50E96D044B2D6798630B7D5BF819A 54C3D40B0E6D76F245B44FD6A7A7C2596DCA5DF81FB3610D4F93AFDC58C3E1CEB2150D1C3FEB78B00E16F5A353C890C5 78B7FF4577D5C5C64A923C97ADB3717CFA77835CF0E505F38C25E206F33B1714296DA34F823DE947772958E600BF265D 9AB48C0986CCEBCB96D78937A69F4BD5DB8B33840A2FA3DA2771A6465CAB5546E7F3DF3AFEF312AEAA53D1D80A4E4C87 0B9642317CC5A930307C6B897CD195630326EC4A7FC5EEC4D566459126972C00F4DA7826A20E381F18CEB094CD36D708 D8FEADDCC2521B1565908E8C1D7FD8C76A9B02368AF2C332E5FF5450AD91816A1401E880C6A58BEE26B645399ECC809A 482B90028AE0044ABE844E66766505F722BFB4D4DF1F43DFC330278BF2C5A1231F4BC9C3A8EE3F7530684C91ABAE6E90 6E73AAA1F68CE0E8104BF2F9D6BDE77DD5870A5E781F2BE6B5A8DB9D0EDD2594DE0F13C0840EA19C8FC6234475885CE9 C04F3D8D0DE92D00565CEEE03F2CA3BFA3E9D03900ABEA88B18D1E58CD75B4EA467D9C74301810413A95F0CDB7ADDB18 A7B0FEF610B664DADCE7FE683CA206AA8DBD3DA0747768406278A06CF683ADE29618A1840BDC8A253EDA6C87C3B5D73A 275249AC221F210AC9E3342E236B04B42F6FA0549BEB50AEFE9E7FC2A676500E19C7D0DFFD6A2C36C2C862789DA24FD0 66FE6B36E9EF931407E4C9605A60E1261F11709B54455F5F984D1C2CFDBA87FCC244BE4C3BEC8AEC4F11C26B304F3DF6 8E0DBB279FC2A16C02C89E2BB68F1071D6D6524A4A4869A292F894420E7E4104648898B0361837EB9F654DD078881E7A 5A0ACD66806CDE1A5CFE5581A392B47645F41E37E6E7104870D5FC42B1EA4F3AC67D910759953BE2B0B203DE5E88193F EF07E3A98ED9528E7FF9EE3505E8957D8BB7B03A4E5A6E66BAE16BA776CD2965819DFFBA7E64BB87C3CB43EFD79C4393 B524ABCDDD2E60DC48AB8763C92B6989AD3359013485954B1A96642817E39213E0F9856EE285A83CC0CBC3FA3F15540B 55A68F87F8F859E0D291F6F332D72E5B5908093F60F811DC6F208656A268C8F9B711DF0AE2CEAB30A32C190FB7F3B822 1A28817056FC03E3801F35E719E0965446D0E172E49EC7A6123468AA852AEB8F8B1D9D7F69F496E4F0D4F1FE86C63FF5 BBB414DFDCCDB582505CA022CE7EF7B6F9564C6D4EABC35F69C5401FAFCB09A17B2B96EC1DEE7248574CCF9343ADDA88 A10175F4C43CEE6E42E2A7BA06DA979375BB0518687852F14D5617E9AD4C12D3C9DED7000F57AD482D3BB65C0F4F0BBD A3FF06361C8EC95F1009D866113E61130BAB0BC612C3E29021D56BA09D5FA80098F97343D6BD63052B85F53DB6A78009 FFD354BEFE44626DC6C957A65E7D85BF0874D56B5E0D726AD91DBA33ED4D3BCE59A20C70F1FAABA7DA6575F7D6B38984 ADCC56BB61797BBC187FD331344E0F2DD8A41FB33DF9272CE0F428627803C14F99365A3D55054901E4811DA610C2FF49 04212F62CF60FFBF442FD9E535EF501B14224A04F853C1934F5795028007755C0EEC39EB29682502A8F2D1D5BDC9830B DF1ACEB792628D48703B477250DF90DF08B97E3DCF8CD24476CAC6D7A2057F993C7002C49D0BAFF85FDEBA18CC87F318 576D8E1407BBF41A1C3B766917D4B972D99E185057B690C67C56A1302D5093DEFAA4633DA84D747100747C7353F4D46D 25F4D6B99CEF4FFF1E6E2E055635E3937C841282A1FD2EEC4DA0CB5D049D48601AB93E837122BD93E394469DA7F3D378 6FC50B38D6FB2A7B07C1A4D8A68980CAAE2D5E42A8100483773BC0BCAFAAA78AB4D2E400ACC4AD662A4154EA1795DBBF 84BFF17E7D3A707833E5C104087BAAA5E409550A79AD484DEFEAC789CC1507187EB66B3E8301A0D8407647E56B32AF9B EA2B7017FB9BE03858E0A4FCB2780B87384C8230C58907240B23D401F65392373CC4FE8EA51A3C45D8C5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %!FontType1-1.0: AAAAAD+HiraKakuProN-W3 001.003 %%CreationDate: 8/26/10 % Copyright �2003 Apple Computer, Inc. and its licensors, all rights reserved. 11 dict begin /FontInfo 9 dict dup begin /version (001.003) readonly def /FullName (HiraKakuProN-W3) readonly def /Weight (SnapShot) readonly def /isFixedPitch false def /UnderlinePosition 0 def /UnderlineThickness 0 def /FSType 8 def end readonly def /FontName /AAAAAD+HiraKakuProN-W3 def /PaintType 0 def /FontType 1 def /FontMatrix [0.0010 0 0 0.0010 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /uni884C.2022 put dup 1 /uni5B9F.2286 put dup 2 /uni6210.2642 put dup 3 /uni751F.2652 put readonly def /FontBBox {-386 -373 1232 1266} readonly def currentdict end currentfile eexec D9D66F633B846A989B9974B0179FC6CC4458BB4CB99E3608702C78822367AAF89059868F63F93207640A6BD5DA214789 139C491E02A37BF3866F2964E8D690D48D9F6C4A5EC22355F8123573812483E06B968AE84B5F20A982A0E65764753516 97AB8C6EA040355C5542F297D7A3AF28AB93EA0771E0D56DBF00F7CA9CE9FB9FC2E0ECB00D04D5F5F3F24B987B546D62 74971A477DEE12C44623C180BCDBA21172627610C4736632D1A4693E79719C3BC43DF5330790A52DCD4CF455ACC213F6 B1C4BA249179DB360225568161552A16682E3A3604BFC39D571B1F8F18375BEF1B05D6DE4413DDBDB2D936EF6A197BC8 7EF3384DF04E6025A3A7EFFF451D52E96886EE4B4169EC3DEEE64932AF4AECA3AAB81853B58042BA51BAD1CF1FE64675 4A29D2100BBA83E7F6E2F5DFB112F838CA7F659DA7A6373BB1B86BF204DA715F2942AD8690FB1C37539822AE991DF19E AFFBD3E70C395C40FA19CBA66F6F776EC20B6398A64B19208F0E64419A3F9DB393F17B6A206EFAE3B72BBB97405C4CB8 2801FFF79A60CA475287D576B5FAE301357949AC6E4F6EF1B8E41EC8819429C31C995A8D02C6F93131B3C3FD0563C5B2 C561EF5E734C7AC2E2F882889F4D04700D54FF4ABFEB4AC7C99214F399F62A2920477FEA7111FBD7B5EC77864EA25A03 88721F3165F5B0867D1C7C29DFA0394F00B032672FD41DA7C59FA55B9E3AF89B81799A0B27F1420BA48F9FA3B4693FDB 053C26BACF8A048849E5C5B195ED71C79113DD547B1468FEEC4C124788537CF90C3E1DB8793BD8E61BC72DD310B89670 021372EA4C700AD16A855D0917C5F105706F3206540AEBA75926DC784B77FAA8F2459B9A468E2A06318839FA8C08FA7A 8241BE54D435D7E1CE8BB877839B32897C38ECC3B2B63BFD6083CBD67A33FDFC81F548A162333DCE29E28232431AF514 37794B82CDAA0282850FBBCB8A0A9CAE35CC3991AA9FBE225251C0E9E3F59F39EC952D556BEDE7BA8BA8BCA5546B665B 2481E6F4EE3929FE02EFB2402EFDBD1FAC1C72B9CFCFE391E0291A712286845FD31A23988776578437DD63EE0C3ED76E A391B35D2355FED30B1FD068D708EA45C4BE46C0F907CAB826ECAA27734D9723CF21C18BB7B30819E095E25833FB53FA 83710AC4E86D305F2EE40138D4BECB08688944C0D68C62E39899104AD6E587EC0F3FC097CE79F16A2C519A3B4ADA4712 EFAA7D9C7A17BC5023789142657BA7D164124537929053C2A7A0D2E8E4E63CFA5179983FDCC84769897719FB24472CCA 9EA1577B22B8B29703CCC51B7A254194DD86210204BEB444EA4A0D95A73FDBE953C0BDD8ED9074555027E745D457D989 412029757A42BCAA87154D3479D568532C656227DECD1A94699177522FB013228446DE961EDC5C6CDBF3CD69FA2B5F7E 2137C9DE65C2B6327032847044CCA017F9B2E8177A4A4B6D7DDBAC578CC2E98EB131C49BE0E818CF78C8DD2B562D74A1 A9CEEEF49606115A53F15F15D080A3ABB6D990CFEA9C58779C7E388C90BF6C7C1ADCA733C293E821F528A8A25B16CEFF 39B103A0000382CE00343EB20473864E5EE271B9F16B48543620B37B95B5C016B6BDF34B868DAE1E3581207508587E0D 44760E91C5E8183D629898CD1FD0E1D2798E7DDBF7A2997AD582AB85DCF50C2301E775AC7AD675A059D273D13E77A7EA 38DA6F3B16DDF2087940136B83C511845E6A91B8D2B8E3D892958966D1E22B2BC977734ECA36565C4A0FD0DE93F30256 40B66827F52733B55B565D4C60B8A3A5AF5EA3F5DDE6901C913366D3952F3FBD1B3FA9E4DE1474E006280D61EF34D830 490F88722027E57AD7F3FAA60FF2172B435493B0B726C9BFFB996459F29609633507AF1DA7A9F84094F7C61B0EEBA767 0540DA3ABAE2EE2C565DC4B7A061BE2B5375121676FDE5B0C37B9D922C0CEF05056E77E641B66DEEDE17E1C6714DC4A7 B16764EA5D4C7331DE2B1472FC3E610FB03B5842F4B7D9D268CF3204EEE860B1B96EB272DF663849EC387B8135065F48 4863D2C1263604ECBA3F3BF4344916C70485FA8B9E61C9F6A83C70EDBBB3E3F5A63B0C9BBAE3A3B457D94E5669B60812 E2B88E0A767E549573484C03CD45364AA230827B160318E25F95D8ADBD664C1DE213CDC3454775A09DA3858AC9622DB9 4A66012A14588548B12011E64B1CAB38834EEA24AA78C7FDA24690D53CE063EF666119954BD289925D2667AB00834FD4 1EC048E6ADAFC36FE8971B9A3B776906C22414478E6D4731FD1125256E30E2ECEB7600643ADFB27EED6B7040DEEF0580 ABAF22E011D407D171ED48A915140FE722E3DDFE39AFB34043406803C8C0CD5D729243F2450E9F7AE57A85910D0C304A 290941ED125758860B66D4CA4E00F1F6BABC431CD4B2E2C0B9C2DADE8EAD2BB86D96EA93D125497F487C77BC15BA284A 04A55EE8DA4D52C365D845AD7D66672664B1B6D113376C4136E18A77579176C5BAEF5D063127ACEB217340F93AC314FE 151AC07E75980038953DE1ADBFF288C3C0CE5974F5ABCEC9B7780CA3A7949C232DCF7C36331A48DF504C45E69BE408DD D4DFAB2CE40717D026086DCD1097B8D79157EC780F6EE40798794591698E8894B0229F5541131FFC3777DA24ED84FA84 EA3C49B49D8B8168764BE94AD9CD73303A9C02C4B30273D995D77E093F9B20716ED7A8D1882A8A3ACE81154B739FDEC7 D3E560D8733BFD7A7FC51BDD337587FB4471C0E735DA3A11DE1CE7510EC7000A78EB103DD08B79D3CDC791077780EECA 983D71377D598198DF0A02F9315A92A1708B997FE3FE467B06970D58C676D1AE871F2A3AAF6E85BD087A77A92918B0AB D6DC855C54CF7A69CF96D20B74AD321DCC3B7018A7444D4F2A193451672F3A720DA457D38F60B5775C157059CC76938A 5E396C70D7FA75E105636F9F2C27F5FAC0A0DE4AC709899A15B85D546B0D6020B509DBADC91624359D5B74575D67408A 0B9D67AD007066510B5D0D1B0EC5244C1AEF02E521DA2BF5ED41CACA27127A53415F188264B610C4C837720CF95B8E78 D7B36D0C3E86CC7CEC6ACF71575B9D28BC7155C67B45CEC4DCB47D8474A1ABFC1CD4A284109F175FABC93B3020C61D0E 31C976A6D252B773FB84F044052F027ACCE86453F830BA312657154C8C25AF0D965497C02E9CD04B3BC66E08E942AC45 1D0ABC63A739E527D5ACDBFC52C6357FC7A5FD91740DB7584C3C12B1F5BEF9A0A44B5DB530603FF7F1696ADE05102600 5919B9E0923BA37B60C7611E7EF96DEAA7552F8B28AD9DD5C3A2A45D37BC3026CBFFC6429C69CB444D4C460BF6F7B15E E6523F1768568E1357DBF96488F4CDF3D9633C8CC2B3732B05A338622C30DAD2966CFF5B3EFCE688EFE2A0AE6040ADD3 567E90A16026A42A2EF287CF3D8ABA5A6E6E251938B96BC6D38EE53F70163447DFB2EFB45D5E609E135AFB66185BB12C E5950CEBFF13E5DB2848616FB0D5277EC40B2C41FA40D086E8164884A49BFB03BAE3E66B099DF735697986BBAEEA8856 2B9730476EE58E06138502D055A88DDE2CE4E944771E1B9D34A739A87A2EA404CFEC8FF65824E74D954EF758DFB4AEBB 875810571F2A6A6F75608E7B52682225EEEF094340B12E03718CACA3E6D5FAE9BBBFCA7FFD14DCFF08A057F4E379D622 A338012DE2C834A83767864DB7C9823DC75AAA381B068E57A6A4FF9773C2183470F1FB20122DBEE76D826337E5D01DDB 295036CE9D5852B3BE4E0CADC66E42B16305CB7368EF293F42E80AEDB791C6E9BD45933A9A2F17FD60E551E1548C1AEF 6B36A262D82C1ABA3C7F6C51DB913E16D8795640B2FC7ADBE003B48B62E096011398F387E77585064C481BDFCA7C47B9 CA1A3B755CEC4A0596120A4E75119FC14B8A6C13E93694D2C319653A413B8E4CBB1A55E7BC555911F2D31678D4A5DF56 8DC4218AD6573BA07D46160134286FCB4C1F803E07723552D7C854CFBC3597DE9BF1B9930B6997AB2E9D384934BD1730 BACB9586D46B81022DF89010B65E3DFBF7178C543A46BFE5CF6B6E3D2A5C74ADFEF13F131FA05AE05251FCF217F92769 26F6E5FBEA94F40F1F9910DC865321A0495A8CBB5487BB2E96CD075E3CD99EF552ECF67C331CDC1CAECA526DBBB3314B 6C8FCFE65278A70C484356867A41DA7D0C0CFCCFBC09DDE65C81D980190E539A67D8D4F02DCC8D9936CBCB796D84C8ED 7A0F35F4E73D5210A625ACB7860AD39B09F4609C1D9FDF1056D9CBA5BBB371A674045316DC6D97B4E3EBA6732EE42A5E CBDD20F8C7DC6B8EAD36AD7931D33445B38B78BF4714466CB9EFDF75F9E88622610759ABDCD6DDF314B21D5ADB663BF0 2B232EC7BE6AAFBF0E60A734037477B8E6F7FFC1290E89E251FBB5F91EF78AC3B71DBE01A7E8F0F8BCB6E62F50E3A415 8803FD7CCD69F45F274EBD2843E77369A66750D7E5C82F42AEE451D6F81E3BF18D2EF5D4A8F7BBC43D5DA3FC1EC142E8 8EFC114D9FD3E758A217D3088B31417DCC3E6658C97BBAF1C35327F1FAAD78512CEE74AE6B4E1863DBB552CCA429AA2C A39563E8FB771E2493F6340014AA43972720FB7449D1569C8EF84EA788CB9FF7B106DFA7C57A4918534F8ABE0DA68652 25D8524B0D74FD65C5981AD546696209E82579650251CA16599FC06D15C79EEC51B71E35D070C5069319943C92B6E25A 96C50995E3D26548716BDF002B6BE74EC140AC12454D62419B00F312C979E0879AB5966CDFD1A4FBFCB7C1057C4D2C01 A6B78DDEF4C368F9DE27AAD7CE33C3DB1BE034122F8E4C7BA559A394E19E1DCA4E55CADA86B0820D2F49AA88C81F0E23 194CF929CF4F3ADC4C89E3FD4900E5D694B0E81A4174F9F8E279FC45B790119811992A209263BE9BEB655592DE9E8132 6E7D45345377E356A7BA1BDF524257EAB9E61752B685890BC824AFA834605712AFE431180E9C87F09A87A1F490A9C64A 7EF8232E3685EA6DE55F4586202D727D15B0AD4ECF9337802641B344E45635D344E82AAB61E083B8DF276C80E82E9960 E00EADE00DA94EF49F30327FD659B8A60318720E9A0BAB66DF457A0191D864A080C99D75BADF49DFC668094A600E561E CF3FE3B0BC981831D569CDBDCE3E7819FC4A706848C2B52097988C0EEF4B0C1CA1B58CF82D3BE14349C5CC7E934B1E0B BA3B8D0C93C9C14E11101DEE66576FA53F7B910EBEB05C26C6BB539FEA91E9FC72B2B25E3BF532A709A4AF8E4609752F 495FDAB446FE4D04629BFCD1C961A52C913E1EAA315C7C4FB8A6C692A16FE0D08B2959FA9B31D3270701B9D050D8B2E9 8350D7416F89404CA56AAF343F1E037873E86B71E6ED894A14A9C8C70A41D6ACAB8236CD51362340C02EDC49996A9530 65999DB2E09F06376F27791E4DA56AE2AE9152B606301BE973621C0F358E3100E07C3ADD21A8EDE860477BFA33A4DB6D 45E8A1D657109D6074FDBB986F3D7CD9F61A0C313A424AFE26359E69848876E1C69D9A76D11A4D20289C2D788B469FF2 850FB4CF98FB96B14347FE1E9C195AC54203021A7E8803AE91C6AA6E4946010582040D6ED65E940D3B8BA5F4FF2BF2CF 35EC93026AD01B6D1C9C3BD77FE4284D1825A0DBD180AFF5BD78AFB25690AD1977D5956D1923802A37A5948FB006AB14 88CBCF39CDC48CFB047794CBCBBD955CA179C92806F60A51C04CD5AF79979284D49C2B8350784E8A77B8ABBDEA6395CB 006DE254798D9DECF3C9FBC7E826F4E445230EEFD7E0FE335F63EEB793AC66C5079A232528504A8729F428CB8AA722C6 B1587E3A385777CA694F072915D24415BA6C7A0014252BDDDA51FB7E8D2EAB6DCE526EB520E289AC9B878C3A79EE36A1 6D0F7B221F7A1B533FC07302411987C8B473482F8105D7987EB492F60952B9F53AE45E8CFEAB3E621040CD0E9F084752 3EDC72070DBDC97BE62602ED1EBE39D065A751A4D4B7E3B7ECB986D9D6ADC861F79C06FD992E99119ACAD8ECBC6972E0 C611266C5E2DF852D48F20BA787820E9797295DD624FDE043E2F8E732F2D40A7056566192C23128595C04B9D57792BED 1110C0698351B733A2950A53BE8E4591747EA5622906D577456D5AFCAA5468D804FCF69D3D331377E99B706E851F604A F7A5BADC977CBF4C3B6EBF0055ED81D9AAD07634B7343CFFEE27F54082BC46EA444C3D45DE9BFCC0569EFACFB45E9972 3D2DA81DCB5A9B61D114C5304C266553816928E3F69816C54B17D249EFC73D73BF7209CDF08116BB080EA8EDCA478543 CB90080BCC142A6BA4629D397CCD33F523F418450B30E53C9961202A56E8F1DC2B26CEB569989AF68BB2C7E22BDCB0D4 8EB53DB93B0F6C56ACE62DD1BC52F368DCCF019CCC499AFC89BE8D75B876F58B7554FB1EADC26C1A15F2D9DA5AA23061 F8CB2CAA187F3BA480B0F3E88453E868E94DD6FC2ACA3BBE5CA690837914603DD8BF52D9B82E345B9418CC69F91C1064 39FF0E34ADD15A95204BFE952FAAB3FD46A6FF972D3E5C01AB858B9076CD1D0056BC203BBC2B6B5BDD7FD3163673CC5E 9385C021ABB8F9BB41C915E0B70A0EB7B375EAD870C2AA26FC330D7B837224915EA521CABD0B05DB0516000EB5441DDD C715F977C4CD8CA71AB98BA5C8C09CF3D9CBBC91989BFC648E9FE64E30AEB9472D8A55A85A2E2AD545802E1FB5DB0ED0 6B3B3E1114767604572EE2ECD482790FC20D9C31C2EADF34DEE0591091BF70725DB3C08DB4829C212B387DB403AEB671 435233F888DB23D61A517A69BC729ACA0DC54DB830AA7A4075252818FD12DA5995826945DA3A02162B87888D04331575 BF739CBF4938643C7E7AC857D1F48D3401EEC9D5EF79F88A9DE5B0A1524CB2054C744F67890295C274BB3DA00754902B 56D0C7378CEB0B4B9691ED0780B2088481764119BF566CE707F88129383883971DC823DB1CC291AB831BD1A9439B31E9 36F7541F59C86DB1D6644AD6394DBFDDA6A34BF8D6CE874979743DA3E086278AB6759773E2A895862CD6BC283068F6CD 341D733D2F25F2ED98AC5FD38746F8E5062203689B2EBB03671ADBFD82E74327481D8E432C461A9EA1DA2538E2379E1F 735152CC244F73E7E61F83540367965AB032BF6FEC717B1DC5268EE16CEA459087212E2DDF2FB95B75195B34CAC09D63 AAB2E9EFA8E091A8FEC9305D43B8D25698DD38AE3144AC6C7536D643C24557BB57F4E7EBA56757AE565CD8E2EBCDC382 21F61D3057E4355F6E9BE1F8D01094ECBC0CE0707E7E97C7D728C52D31C8A7F657126AB268318BAE4314B982024C7E18 65723C492A604052869EB906B36B47959B6F0E1B106BCD9DA911B3F80E83C31E6BF969406297E02261CFA837C8D6D417 FA28CA00BB365B5929F5BF79FA67DF5C07E8C78D7AFAF485258EDEA48F95721EF0B7A60641364F069565A442FF7C0D47 C96E60E03EDDF952A7AA446E62B3B811679AEFAD99DFC2AA8557431A97A61A1CA8FBECD0C8E371A47E6F3337DCDF8D44 B89E343FD527774A47B7EED62A2C42CAEDC6530F93B01D7BBDE0B64FE479DD20288260E6CADC651B15918CA53FA06D5A E37FEB6A39CA039FE8093B9316E7ACDB7DE4192456F6B87923795F364402850D24EB7B86EF1DBA07C2B5766FD717F844 83690C81B2292635A47389310C9D526BD7DB1954261A39A2FFF662AE7C34C7A539CE4ECB5AF35E5051591DA941454754 2516AD530E95647321034441CEFE4C5097BAB5FEDF74D1C78DA517D304CB0865E91FC4BD6B9BE210EDE1A246EE8EA6B8 9685AD1FE94F7BD87F4F23EE64789BB62814BFD39467349768BCD0895ACAF4429ECEC180417BAE4FBEF9162C42464519 DC4553DA98E4A3A410EACF491FA3A91AFD5F499A82A8496618108A2BAE1FCA3F40454602EA4A2E064396D118947A1E85 98CB9DF9ABAC08B3580C52060EF5F3B5F40DBF82D4EA7D9BB075F7D7D552A717312642E28D1D8DD763C048B33A0A58E9 498169ACC4C9E8BD6B4758F8E6A181FE956C2C21B77C4EAF880CBA35004626AE78410CE513F48B923CF078140C6254A5 E6325D2198D244B14BF25335E6DEE22AEB2EF84D8D8F39B41DF5DF85E56F9E52F76751B33A2518E045B4C075BFC88630 D19430F05FE1A7CA8D08C6699954352CE3AEF7CD33355EC1FDC5DBBBDC5FA8A7E63C9B0BBECC0BD36ED093378B6BC8F6 4644AF567945DAA219C41EF808746E9BAFE2F4C2D1EC9FB758A45AAF0FE38F656D39CCB11A8ED3E3000695590CFBD757 0E6AB5CC9A8233189995777FD7D3BC58D9AD6770A67E7B99F3B1D7C27F7E781713D5DEBEF969714EFA224531443DC19A 5A24A2FF30348287C9C3FA0B60EBA57F1D020852B5AFA1C37066BB8045A2D75631964EA9A34813F0D42CA3610CFC9052 F207742D31C0B69D58353D733ABA1BE112A5A75185C138CF29A874B1310EA9F7D7AA800069519198CF3762F9DDF3108C 43C389340A664D22D6138F977CEC0B4E4D1CB62285EDCB68D864C3D343E56F7A710E5894E2E8B31D269ADC00CA54BFDC BF3AEF15CCAC13867FDC9C6FF43274EA31FE8C65303FCA30FF0E846261F9E4143413F73848F51AA2B8BFEE8762F7EA8A 4AE21F5CB2C6ED668EB21A4E4E2D332459CD3EC64FC03415E2B75E1F8A74AAC852CF590A0800F784B007BCCE2E607633 4B4200FB0C7D971CBCB2C77C61BC66C87198BF0C07869649C0ECA188119DA9878716A070A5EBBF1708E12A74EB8BEEB8 143C490B93E4CD6A49F23C68BB356463CAA0C0F1CF15074B82E7E8137A707F7439644227228B821D4A3848D7A58CF0A9 8B2A41B7C4CBE5402C538347F98FE3D3E173DA613908C2057587EB7D366F9D33B9824EAD09098BC65C7D71B320216BC9 2811D29E9B5280315EAA52F892D73CCB0CAE0C39654915272FAC8317CEFD3AE9D1A86D4E95405D8A7361907B2B18EB86 C40451CF1A0CC7611DA4BBD363AFC02D4AF93E556AB4F61D34FE469DBEDDFB92794441E8C9091CFA63BABA3298073886 6126A065797D5C478B55718C32D0416ACE39266A0E0E93456E7D9A3E9BEB30F4C7A1629BF43800F1E36C586E267750BC 98CA1E04C500148F57440B245EAA3A53975B53795C9AAA4396AC444B0CEC9475A206B27AC0242D7E875D23C27686EFAD EDD1523132324D39E135D2B3D0354FDE7AFBD7B0CAF8622273CDCCEB2BAE9615D14380730750458E8E9F1B4F305A3484 912E8E958B36F4DDB0F2BE8D34E7E05BFB37BDF4BCC31426317D3E873471B77552776509E216CCD74ECF6B690CDC7E6F 8E0441AF7E077DB725496312FC11303B7A96EBCD107E8CA86AB8854AE39C85D17A92A3FF664E3B3EF31603B63ABCEFA2 D699AECD2F6A8BB881F5FF492A7155675D97834DF2B584517D8788D057646A9384030D770B358C90FDD106519475F81B 51FB2ED3304AE3223D6825897D005DF61786ABBE06DC10E994A7C7089C6DFE5E56DEC07BCE525426F59803B762F16BF4 D4F7FD72E478F4B68642BC96D627E50A3927730FB89010D9244542A4125F8583138A1B810428CEDCCED3CBE7C3E017A0 C6913E193C656E1A465ABB7EB304AAF44CEE1D20432B36B9F801369F023AAA8328A5CA99A502065E6E90E6F08F9E11FF 3D121AA91228901B9A6FF0AB6ABA2D906B2C2D503C54A0766F2ED8AE691096BA7A1F3CE68E310445A0FA5D4CC1058891 BEF67DE9CCC5C8DF511C3ED97D9BE93206C8B4EC0A50F65E1A5F4E440DD17CFE91D1DAA9761241026EA83F57068BC2FE 63F5E85E230A56EE6442CC67DCBF33EB6A4E1ED6BB699FF8F50A453A1CA440040C1C50BA49524F5B2831EDCCD132F7F6 1E22947A7B75F445DB54C07BC6C10D80F3F350BC6072CA2CA5F786E9C41F55405752E7654E07158D6436922C43C8DD6C B31842E3124037C2F681A904F3537A18F111B2C08B2E5833CBB6ADB19AA873EAEC985C8BF70CE28A14F02F64AD23F002 AF32676034F207A0F3E98A6F13C5707090AE7BEBFB443AB4B27421004DBEACAF8038C74EAB21683850848876B90D44E7 E3C4BB448A786380B290044184EA99C7C5EBBC10951C46DAEE13DCA5A02ECAE1D6BA5205EC65F986575882BAB2A8D841 72696487E95664E01838B0A0F2B7F32EE8D9FFE36CD77540CB4B39E921E071821AA68E3645C1D0007D258EBEAECBE859 A45A010BE6332759FD1B359D30C821ED3F86F82025AE04B74B04A1041A90024D8BB8C62D80FBD7DE7B0108268B00F2E3 B4293EB4E5F0E237803FFD59CA76AEE775EA4E8507847394458893AE412A9CCBB53B2C5B9C35B7976325BC96D5715809 6A162750099961248304BCDEC0B9593F3B31910ECEDF1CE021B27915CB45430F1C992863D04C32CA7616B0E0187821AD D667285F43E38453324F483855C47660F878D2593106B2C52949CC3ADCCA61AE26E3D9C8A61E200BD1B49D87B6A1B131 715E65FA1A8E3BB1CA5DD7CBA05E1AF833D3DECBCE580ED0E6BAEC7C3A7C952BC613BEA5C17495E560CA1E9C65A06366 686A93760C302F4CD3141584A4A3AC66FBFBC8625002D3E2756889B451BF167F6F621426FC8F77954B486D52AE26940F B84F894A633902230C75C2710486FA59925D10A4525E873E400A652DE863C878BC9913FC1B5997CF8AE564D9F6DB2C99 21FD9B6B70DEA96A987022A6F7F112A9BDCE974A5A4ECA1BE264BBF82CDCF0860C62771762BF24CB8AF7F63C4D3F2E6E 37CB35707763037149765A13208517799034DAC2716717AE460805E82AECBB23D6DBD2FB522267F72F12E50B2A8BE204 FF90009BD05F0F895A475A63 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %!FontType3-1.0: HiraKakuProN-W3 19 dict dup begin /FontType 3 def /FontMatrix matrix def /FontBBox {0 0 0 0} readonly def /PaintType 0 def /StrokeWidth 0 def /BuildGlyph{save 3 1 roll 1 index dup begin /ShowProc get 3 1 roll 1 index /CharProcs get exch get exec 7 -1 roll exec end restore } bind def /BuildChar{1 index /Encoding get exch get 1 index /BuildGlyph get exec} bind def /$SP{3 -1 roll dup /SetupSubFont get exec dup setfont exch 0 0 2 index stringwidth } bind def /$SPW{4 -1 roll dup /SetupSubFont get exec dup setfont 3 1 roll 0 0 0 4 2 roll} bind def /$SPTW{5 -1 roll dup /SetupSubFont get exec dup setfont 4 1 roll neg 0 3 -1 roll 0} bind def /$RP{6 -1 roll dup /SetupSubFont get exec dup setfont 5 1 roll translate -90 rotate 0 0 0 4 2 roll} bind def /SetupSubFont{dup /PaintType get 1 index /StrokeWidth get 3 -1 roll /$SubFontArray get 4 1 roll 3 index 3 index get dup /PaintType known{dup /PaintType get}{0}ifelse 1 index /StrokeWidth known{1 index /StrokeWidth get}{0}ifelse 3 index ne exch 4 index ne or {dup length 2 add dict begin {1 index /FID eq {pop pop}{def}ifelse}forall /StrokeWidth exch def /PaintType exch def currentdict end dup /CIDFontName known {/Anonymous exch /CIDFont defineresource}{/Anonymous exch definefont}ifelse dup 4 1 roll put }{ pop pop pop get}ifelse } bind def /ShowProc{systemdict /rectfill known {0 setcachelimit}if 6 -1 roll dup /FontMatrix get exch /FontBBox get aload pop 4 index transform 4 2 roll 5 -1 roll transform 4 2 roll setcachedevice moveto dup type /stringtype eq {show}{glyphshow} ifelse } bind def /FontInfo 4 dict dup begin /Registry (Adobe/) def /Ordering (Japan1/) def /Supplement 6 def /FSType 8 def end readonly def /FontName /HiraKakuProN-W3 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /uni5B9F.2286 put dup 34 /uni884C.2022 put dup 35 /uni30D0.972 put dup 36 /uni30A4.928 put dup 37 /uni30CA.966 put dup 38 /uni30EA.998 put dup 39 /uni30B3.943 put dup 40 /uni30FC.660 put dup 41 /uni30C9.965 put dup 42 /uni751F.2652 put dup 43 /uni6210.2642 put dup 44 /uni30F3.1007 put dup 45 /uni30D1.973 put dup 46 /uni30EB.999 put readonly def /$SubFontArray [/AAAAAB+HiraKakuProN-W3 findfont /AAAAAC+HiraKakuProN-W3 findfont /AAAAAD+HiraKakuProN-W3 findfont ] def /CharProcs 16 dict dup /uniFFFD.0 {(\000) 0 $SP} 2 index /.notdef 2 index put put dup /uni30FC.660 {(\000) 1 $SP} put dup /uni30A4.928 {(\001) 1 $SP} put dup /uni30B3.943 {(\002) 1 $SP} put dup /uni30C9.965 {(\003) 1 $SP} put dup /uni30CA.966 {(\004) 1 $SP} put dup /uni30D0.972 {(\005) 1 $SP} put dup /uni30D1.973 {(\006) 1 $SP} put dup /uni30EA.998 {(\007) 1 $SP} put dup /uni30EB.999 {(\010) 1 $SP} put dup /uni30F3.1007 {(\011) 1 $SP} put dup /uni884C.2022 {(\000) 2 $SP} put dup /uni5B9F.2286 {(\001) 2 $SP} put dup /uni6210.2642 {(\002) 2 $SP} put dup /uni751F.2652 {(\003) 2 $SP} put def end dup /FontName get exch definefont pop +%RBIEndFontSubset +/HiraKakuProN-W3 cguidfix +/F2.1/HiraKakuProN-W3 renmfont +[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeA { { 1.8008 exp } bind exec} bind +def +/MatrixA [ 0.9642 1.0000 0.8249 ] def +/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def +/DecodeLMN [ { 0.9857 mul} bind { 1.0000 mul} bind { 1.3202 mul} bind ] def +end ] /Cs1 exch/ColorSpace dr pop +[ /CIEBasedABC 4 dict dup begin +/WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeABC [ { 1.8008 exp } bind { 1.8008 exp } bind { 1.8008 exp } bind ] def +/MatrixABC [ 0.4294 0.2332 0.0202 0.3278 0.6737 0.1105 0.1933 0.0938 0.9580 ] def +/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def +end ] /Cs2 exch/ColorSpace dr pop +%%EndPageSetup +/Cs1 SC +1 sc +q +0 0 279 235 rc +0 235 m +279 235 l +279 0 l +0 0 l +h +f +0.60000002 i +/Cs2 SC +1 1 1 sc +170 233 m +277 233 l +277 2 l +170 2 l +h +170 233 m +f +1 J +1 j +0 0 0 sc +1 0 0 -1 -55 307 cm +225 74 m +332 74 l +332 305 l +225 305 l +h +225 74 m +S +1 1 1 sc +CM +2 186.76915 m +95 186.76915 l +95 141.76915 l +2 141.76915 l +h +2 186.76915 m +f +0 0 0 sc +1 0 0 -1 -55 307 cm +57 120.23085 m +150 120.23085 l +150 165.23085 l +57 165.23085 l +h +57 120.23085 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 48.5 164.26915 cm +/F1.1[ 23 0 0 -23 0 0]sf +-35.802734 9 m +(!"#$%&)[ 15.340820 11.500000 6.390137 12.791504 12.791504 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +181.75 110 m +265.25 110 l +265.25 85.333038 l +181.75 85.333038 l +h +181.75 110 m +f +0 0 0 sc +1 0 0 -1 -55 307 cm +236.75 197 m +320.25 197 l +320.25 221.66696 l +236.75 221.66696 l +h +236.75 197 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 223.5 97.666519 cm +/F1.1[ 12 0 0 -12 0 0]sf +-23.229492 4 m +('')[ 6.673828 0.000000 ] xS +-10.766602 4 m +(\(\)*+,)[ 8.003906 9.996094 3.996094 3.333984 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +181.75 178 m +265.25 178 l +265.25 153.33304 l +181.75 153.33304 l +h +181.75 178 m +f +0 0 0 sc +1 0 0 -1 -55 307 cm +236.75 129 m +320.25 129 l +320.25 153.66696 l +236.75 153.66696 l +h +236.75 129 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 223.5 165.66652 cm +-9.6708984 4 m +(-!+)[ 8.003906 8.003906 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +181.75 42.774353 m +265.25 42.774353 l +265.25 18.107361 l +181.75 18.107361 l +h +181.75 42.774353 m +f +0 0 0 sc +1 0 0 -1 -55 307 cm +236.75 264.22565 m +320.25 264.22565 l +320.25 288.89264 l +236.75 288.89264 l +h +236.75 264.22565 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 223.5 30.440857 cm +/F2.1[ 12 0 0 -12 0 0]sf +-35.52 2 m +(!"#)[ 12.000000 12.000000 0.000000 ] xS +0 2 m +($)s +11.52 2 m +(%&)[ 12.000000 0.000000 ] xS +1 0 0 -1 223.5 207 cm +/F1.1[ 25 0 0 -25 0 0]sf +-31.732178 9 m +('')[ 13.903809 0.000000 ] xS +-5.7678223 9 m +(\(\))[ 16.674805 0.000000 ] xS +0.60000002 i +/Cs2 SC +0 0 0 sc +1 0 0 -1 -55 307 cm +278.5 154.16696 m +278.5 186.60001 l +S +CM +223.5 112.39999 m +226.5 120.39999 l +220.5 120.39999 l +h +223.5 112.39999 m +f +0 J +0 j +1 0 0 -1 -55 307 cm +278.5 194.60001 m +281.5 186.60001 l +275.5 186.60001 l +h +278.5 194.60001 m +S +1 J +1 j +278.5 222.16698 m +278.50003 253.82565 l +S +CM +223.50003 45.174347 m +226.50003 53.174347 l +220.50003 53.174347 l +h +223.50003 45.174347 m +f +0 J +0 j +1 0 0 -1 -55 307 cm +278.50003 261.82565 m +281.50003 253.82565 l +275.50003 253.82565 l +h +278.50003 261.82565 m +S +1 1 1 sc +CM +188.5 142.73155 m +258.5 142.73155 l +258.5 124.73155 l +188.5 124.73155 l +h +188.5 142.73155 m +f +/Cs1 SC +0 sc +0 i +1 0 0 -1 223.5 133.73155 cm +/F2.1[ 12 0 0 -12 0 0]sf +-30 2 m +('\(\)*+)[ 12.000000 12.000000 12.000000 12.000000 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +189 73.05368 m +258 73.05368 l +258 55.05368 l +189 55.05368 l +h +189 73.05368 m +f +/Cs1 SC +0 sc +0 i +1 0 0 -1 223.5 64.05368 cm +-29.219999 2 m +(',)[ 12.000000 0.000000 ] xS +-5.8199997 2 m +(-)s +5.8199997 2 m +($)s +17.220001 2 m +(.)s +1 J +1 j +0.60000002 i +/Cs2 SC +0 0 0 sc +1 0 0 -1 -55 307 cm +150.49998 142.35555 m +226.35034 141.74989 l +S +CM +179.35008 165.31398 m +171.32639 168.25002 l +171.37428 162.2502 l +h +179.35008 165.31398 m +f +0 J +0 j +1 0 0 -1 -55 307 cm +234.35008 141.68602 m +226.32639 138.74998 l +226.37428 144.7498 l +h +234.35008 141.68602 m +S +1 J +1 j +109.49767 165.71465 m +116.9977 194.45566 110.7934 233.47409 132 251.94632 c +151.30133 268.75894 193.31995 268.56058 227.03749 274.57431 c +S +CM +179.88849 30.821289 m +172.65114 35.362305 l +171.44983 29.483795 l +h +179.88849 30.821289 m +f +0 J +0 j +1 0 0 -1 -55 307 cm +234.88849 276.17871 m +227.65114 271.6377 l +226.44983 277.5162 l +h +234.88849 276.17871 m +S +1 1 1 sc +CM +113.43002 47.032623 m +147.43002 47.032623 l +147.43002 29.032623 l +113.43002 29.032623 l +h +113.43002 47.032623 m +f +/Cs1 SC +0 sc +0 i +1 0 0 -1 130.43002 38.032623 cm +-12 2 m +(!")[ 12.000000 0.000000 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +108.01886 171.93605 m +156.01886 171.93605 l +156.01886 157.93605 l +108.01886 157.93605 l +h +108.01886 171.93605 m +f +/Cs1 SC +0 sc +0 i +1 0 0 -1 132.01886 164.93605 cm +/F1.1[ 12 0 0 -12 0 0]sf +-18.999023 4 m +(../0*1")[ 2.666016 2.666016 6.000000 9.996094 3.996094 6.673828 0.000000 ] xS +ep +end +%%Trailer +%%EOF diff -r 4f3747c18585 -r 10ff440086e2 paper.pdf Binary file paper.pdf has changed diff -r 4f3747c18585 -r 10ff440086e2 paper.tex --- a/paper.tex Thu Aug 26 04:48:35 2010 +0900 +++ b/paper.tex Fri Aug 27 08:06:51 2010 +0900 @@ -44,7 +44,7 @@ % % ここにタイトル英訳 (英文の場合は和訳) を書く. % -\ejtitle{Implimentation of Regular Expression Compiler with GCC/LLVM.} +\ejtitle{Implementation of Regular Expression Engine with Dynamic Code Generation.} % % ここに著者英文表記 (英文の場合は和文表記) および % 所属 (和文および英文) を書く. @@ -236,14 +236,14 @@ この方法によって得られたDFA $D$はNFA $E$と同等の言語を認識し, またNFAの 元となる正規表現と同等である. -\subsubsection{DFAから実行バイナリの生成}\label{subsection:compile} +\subsection{DFAから実行バイナリの生成}\label{subsection:compile} DFAからの実行バイナリ生成には, 3種類の実装を行った. \begin{enumerate} \item DFA $\rightarrow$ Continuous based C $\rightarrow$ gccによるコンパ イル \item DFA $\rightarrow$ C $\rightarrow$ gccによるコンパイル -\item DFA $\rightarrow$ LLVM-API $\rightarrow$ LLVMによるコンパイル +\item DFA $\rightarrow$ LLVM中間表現 $\rightarrow$ LLVMによるコンパイル \end{enumerate} % @@ -297,8 +297,8 @@ 続を基盤としたプログラミングスタイルが望ましい. 今回コンパイラによって生 成したCbCソースコードでは,大域変数は持たず,必要な変数は全て引数に載せて いる. -CbCのstate\_1, state\_0から呼ばれているaccept, rejectはそれぞれ受理状れ受 -理と非受理を表す. accept ではテキスト行を出力して次の行へ, rejectでは次 +CbCのstate\_1, state\_0から呼ばれているaccept, rejectはそれぞれ受理と非 +受理を表す. accept ではテキスト行を出力して次の行へ, rejectでは次 の文字へと処理を移すコードセグメントへ継続を行う. 生成したCbCソースコードを, GCC上に実装したCbCコンパイラによってコンパイルす @@ -310,21 +310,70 @@ タック操作によるオーバーヘッドが予想される. \subsubsection{LLVM} -LLVM(Low Level Virtual Machine) は +LLVM(Low Level Virtual Machine) は, さまざまなコード最適化/分析機能を備 +えた, モジュール単位で利用可能なコンパイラ基盤である\cite{L}. + +CbC/Cによる実装では,DFAからCbC/Cのソースコードに変換し,GCCによってコンパ +イルを行っている. LLVMによる実装では, LLVMの中間表現であるLLVM-IRを,提供 +されているAPIを用いて直接操作を行い, コンパイルを経て実行バイナリを得る. +PythonからLLVM APIの利用は, LLVM APIのPythonラッパーであるllvm-pyを使用した. + +\begin{figure}[t] +\begin{center} +\scalebox{0.60}{\includegraphics{fig7.eps}} +\caption{LLVMを用いた実装} +\label{figure:llvm-impl} +\end{center} +\end{figure} + +LLVMによる実装でも, Cによる実装と同様に,DFAの状態遷移をswitch文と関数呼 +び出しによって表現している. + +\newpage \section{評価} +\subsection{CbC/C/LLVM - 三つの実装の比較} +本実験で実装した正規表現評価器のCbC/C/LLVMによる三つの実装に対して, +コンパイル時間及びマッチングにかかる時間の比較を行った. -\subsection{実験} -ここでは,本実験で実装した正規表現評価器を用いて実装した +{\bf コンパイル時間} +n個の単語を正規表現のOR演算で繋げたパターンに対し, 各実装のコンパイル時 +間の比較を行った. + +{\bf マッチング時間} +... +本実験で実装した正規表現評価器を用いて grep に相当するプログラムを実装し, +実際にテキストファイルからのパターンマッチを行い, それぞれの評価を行った. + + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + \\ + +\subsection{grepとの比較} +... +実験環境及びテキストファイルとして \begin{itemize} \item CPU : Core i7 950 @3.0GHz \item Memory : 16GB -\item Text : Wikipedia 日本語版全記事\\ (4.7GB, 8000万行) +\item Text : Wikipedia 日本語版全記事\\ (XML, UTF-8, 4.7GB, 8000万行) \end{itemize} +を用いた. 表\ref{table:benchmark2}に結果を示す. \begin{table}[h] -\caption{ベンチマーク} -\label{table:benchmark} +\caption{ベンチマーク:grep} +\label{table:benchmark2} \begin{tabular}[t]{|l||l|l|l|} \hline テストケース & fixed-string & simple-regex & complex-regex \\ @@ -345,27 +394,42 @@ \begin{description} \item[fixed-string]固定文字列によるマッチング\\ -pattern : ``$Wikipedia$''\\ -match : 348936行\\ +パターン : ``$Wikipedia$''\\ +マッチ行数: 348936行\\ GNU grep では, 与えられたパターン内に, 確実に含まれる文字列(固定文字列) が存在する場合は, Boyer-Moore法 等の高速な文字列探索アルゴリズムを用いて フィルタをかけることで, DFAによるマッチングを減らし,高速化している. 本実 装の grep では, そのようなフィルタリングは施しておらず, どのようなパター ンにたいしても先に述べたDFAベースのマッチングを行う. fixed-stringのテス トケースではその差が出ている. -\item[simple-regex]単純な正規表現によるマッチング\\ -pattern : ``\verb|^\*+ \[\[|''\\ -match : 3439028行\\ + +\item[simple-regex]単純な正規表現でのマッチング\\ +パターン : ``\verb|^\*+ \[\[|''\\ +マッチ行数: 3439028行\\ +このパターンは行頭から'*'の1回以上の繰り返しの後に文字列 ``\verb| \[\]|'' +が続く行にマッチする(Wikipediaにおける ``関連項目''). このパターンにも, 確実に含まれる文字列が存在するの +で, GNU grep ではBoyer-Moore法でフィルタリングを行った後マッチングを行う +ことで本実装と比べて高速な結果となっている. -\item[complex-regex]複雑な正規表現によるマッチング\\ -pattern :``$(Python|Perl|Pascall|Prolog|\\ +\item[complex-regex]複雑な正規表現でのマッチング\\ +パターン :``$(Python|Perl|Pascall|Prolog|\\ PHP|Ruby|Haskell|Lisp|Scheme)$''\\ -match : 1503行\\ -GNU grep 2.5.4 は, 188秒と, 本実装及びGNU grep 2.6.3に対して非常に遅い結 +マッチ行数: 1503行\\ +このパターンは,9個の単語をORで並べたもので,確実に含まれる文字列は存在せ +ず,先の二つに比べてGNU grep は遅い結果となっている. + +GNU grep 2.5.4 は188秒と, 本実装及びGNU grep 2.6.3に対して非常に遅い結 果となっているが, これは後述する mbrtowc(3) によるマルチバイト文字の変換 処理によるオーバーヘッドによるものである. \end{description} +3つのテストケースの結果を見てみると, 本実装はそれぞれ実行時間にあまり差 +がなく, またコンパイル時間はマッチングにかかる時間と比べて無視できるなっ +ている. また, complex-regexのテストケースではGNU grepよりも高速な結果が +出ており, 本実装は(フィルタリングを用いない)純粋なDFAマッチングにおいて +パターンに比べて検索対テキストファイルが十分に大きな場合の検索にコンパイ +ルの効果が発揮されていることが分かる. + \subsection{特徴} 本実験によって実装された正規表現評価器の特徴を, GNU grep との比較をはさ みながら説明する. @@ -373,10 +437,11 @@ {\bf 正規表現からの動的なコード生成}\\ 本実装による一番の特徴として, 正規表現から変換を行うことで得られる等価な DFAを, C/CbC/LLVM に変換しコンパイルすることで正規表現に応じた実行バイナ -リを生成することが挙げられる. -grep のような, 与えられるパターン(正規表現)に対してマッチ対象のテキスト -ファイルが十分大きい場合, 正規表現のコンパイルにかかる時間はマッチングに -かかる時間によって隠される. +リを生成することが挙げられる. またコンパイラ理論におけるさまざまな最適化 +が期待される. +grepによる検索のような, 与えられるパターン(正規表現)に対してマッチ対象の +テキストファイルが十分に大きい場合, 正規表現のコンパイルにかかる時間はマッ +チングにかかる時間によって隠される. GNU grep では, 本実装と同様にDFAベースのマッチングを行うが, DFAの各状態 は構造体よって表され, 状態遷移は各状態毎に保持している遷移先ポインタによ @@ -403,16 +468,23 @@ \end{center} \end{figure*} -{\bf 軽量な実装}\\ -本実験で実装した正規表現コンパイラは, Pythonによって実装されており,全体 -で3000行に満たない軽量なプログラムとなっている. また,コンパイラの記述に -はPythonを用いているが, 生成される正規表現評価器はC/CbCによって記述され -コンパイルされた実行バイナリなので, 高速に実行される. +{\bf 柔軟な実装}\\ +本実験で実装した正規表現評価器は, Pythonによって実装されており,全体 +で3000行程度の軽量なプログラムとなっている. 比較対象のGNU grep は, +C言語によって実装されており, プログラム全体は10000行を超える. -比べてGNU grep は, C言語によって実装されており,さまざまな正規表現の拡張 -機能(後方参照など)をサポートしており,プログラム全体は10000行を超える. +さらに,本実装から動的に生成されるコードも,コードセグメント/関数とswitch +を基準としたシンプルな記述で高い可読性を持ちつつ, 細かい最適化をGCC/LLVMの最適 +化技術を利用することで実行速度も非常に高速なものとなっていることが実験結 +果から分かる. + +... \section{まとめと今後の課題} +本実験では, 正規表現をコードセグメント/関数による状態遷移を行うコードに +変換し, GNU grep との比較を行い良好な結果を得た. + +... \begin{adjustvboxheight} % needed only when Appendix follows \begin{thebibliography}{99} @@ -424,14 +496,18 @@ \bibitem{R3} Cox, R : Regular Expression Matching in the Wild, 2010 -\bibitem{U} Hopcroft, J, E. Motowani, R. Ullman, J. : オートマトン言 +\bibitem{U} Hopcroft, J, E. Motowani, R. Ullman, J : オートマトン言 語理論計算論I (第二版), pp.~39--90. +\bibitem{L} Lattner, Chris. Adve, Vikram : The LLVM Compiler Framework + and Infrastructure, 2004 + \bibitem{K} Thompson, K : Regular Expression Search Algorithm, 1968 \bibitem{H} 長谷川 勇 : 国際正規表現ライブラリの開発 -\bibitem{Y} 与儀 健人 : 組込み向け言語Continuation based CのGCC上の実装, 2010 +\bibitem{Y} 与儀 健人 : 組込み向け言語Continuation based CのGCC上の実装, + 2010 \end{thebibliography} \end{adjustvboxheight} % needed only when Appendix follows