convert_photo_PB (2022 ,6) / 8_byte_hec to dec [2022 ,11]
Jan 17, 2020 18:08:16 GMT -5
matthew likes this
Post by hedgehog7777 on Jan 17, 2020 18:08:16 GMT -5
last edit:2022,11.18, find :new_8byte_hex_to_dec_converter.005 and new_hex_38.12.04.final
'*************************************************************************************************************************************
press [ ctrl and - ] for smaller html text
'
01:multiply
02:new_hex_38.12.04.final (version :results in screen)
03:new_8byte_hex_to_dec_converter.005 ( last update: 2022,11.18 )
04:convert_photo_PB_12.gb
05:pb_01.txt ' [ to convert into: 01.pb.jpg ]
'*************************************************************************************************************************************************************************
01:multiply with the following code:
'
'version 2.21: new_hex_38.12.23.fin
'the print-output is to be found in :"/.Test_(004).txt" ,view text with :notepad.exe ( updated:2022,11.18 )
'------------------------------------------------------------------------------------------------------------------------------------
dim f01'=true 'print multiply (long screen)
dim a,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab=200,ac=1
dim a01,a04,a10,a11,a12,a25(500),a26,a30,a31(500,500)
dim a$,a1$,a2$,a3$,a4$,a20$,a21$,a5$,a6$,a40$,ac$,af$,ag$
dim b,ba(4),b$,b2,b3
dim c$,c=40,c1,c2,c3,c5,c4(999,2),co(9,2),cr(10)
dim d(10000000),d0,dc,de$,d$(1000),d0$,d1$,d2$,d3$,d4$
dim f,f1,file
dim h1,h$
dim i,ix,iy,i1,i2,i3,i4,i5,i6,i7,i$
dim m,wf,w1,xa=2
'-------------------------------------------------------------------------------------------------------------------------
declare sub write() :declare sub cl(i) :declare sub wait(i0)
declare sub file_error() :declare sub set_window(x1,y1) :declare sub ts(x1,y1)
'-------------------------------------------------------------------------------------------------------------------------
for a=0 to 9:cr(a)=a*28:next'1000 text_colors
for i=0 to 999:i1=i/100:i2=i1*100:i3=(i-i2)/10:i4=i-i2-i3*10:c4(i,0)=cr(i1):c4(i,1)=cr(i3):c4(i,2)=cr(i4):next'1000 text_colors
'-------------------------------------------------------------------------------------------------------------------------
function sa$(i):a$=str$(i):aa=len(a$):de$=right$(a$,1):if de$ = "." then ac$=left$(a$,aa-1) else ac$=a$:endif:return ac$:end function
function st$(d$,i0):a$="":for i1=1 to i0:a$=a$+d$:next:return a$:end function
function mb(b): return mouse_button(b):end function
function cut$(ae$):b2=0:b3=0:do:b2=b2+1:af$=mid$(ae$,b2,1):if af$ ="0" then b3=b3+1:endif:loop until af$<>"0":ag$=right$(ae$,len(ae$)-b3):return ag$:end function
'
function multiply$(a1$,a3$):
for i=0 to 150:a25(i)=0:next
for i=0 to 150:for i1=0 to 150:a31(i,i1)=0:next:next
c1=val(a1$):c3=val(a3$):c5=c1*c3
a1=len(a1$):a3=len(a3$):a2=a1+a3
if f01 then cl(090):locate xa,ac-1:print a1$;"*";a3$;:locate xa,ac:print st$("-",a2+1):endif
d$(0)=a1$+"*"+a3$ :d0$=d$(0)
d$(1)=st$("-",a2+1) :d1$=d$(1)
'-------------------------------------------------------------------------------------------------------------------------
for i=1 to a3 : 'y
a6=val(mid$(a3$,i,1)):
a01=a3-i :cl(900)
for i1=a01 to 1 step -1
if f01 then locate xa+a2-i1+1,ac+i:a31(i1+i+ab,i)=0:print "0":endif
d$(i+1)="0"+d$(i+1)
next
'
a10=0 :cl(090)
for i1=a1 to 1 step -1 :
a8=val(mid$(a1$,i1,1))
a9=a6*a8+a10:a10=a9/10
a31(i1+ab-a01,i)=val(right$(a9,1))
if f01 then locate xa+i1+i,ac+i:print right$(a9,1):endif
d$(i+1)=right$(a9,1)+d$(i+1)
next
a9=a10:a31(i1+ab-a01,i)=a10
if f01 then locate xa+i1+i,ac+i:print a9 :endif
d$(i+1)=right$(a9,1)+d$(i+1)
d$(i+1)=st$("+",(a2+1)-len(d$(i+1)))+d$(i+1) :d2$=d$(i+1)
next
d$(i+1)=st$("+",a2+1)
'-------------------------------------------------------------------------------------------------------------------------
if f01 then locate xa,ac+i:print st$("+",a2+1):endif
for i5=a1+ab to 1 step -1 :'wait(1)'x
a25(i5)=0
for i6=a3 to 1 step -1 : a25(i5)=a25(i5)+a31(i5,i6) : next
a25(i5)=a25(i5)+a26:a26=0
if a25(i5)>9 then a26=a25(i5)/10:a25(i5)=a25(i5)-a26*10:endif
if f01 then cl(990):locate i5-(a1+ab)+xa+a3+a1,ac+a3+2:print a25(i5):a40$=sa$(a25(i5))+a40$ :endif
d$(i+2)=sa$(a25(i5))+d$(i+2)
next
'-------------------------------------------------------------------------------------------------------------------------
c$=cut$(a40$):
i7=i+2
'
d3$=d$(i7):
d$(i7)=cut$(d3$) : d$(i7)=" "+d$(i7)
d4$=cut$(d3$) : d2$=d$(i+1)
'-------------------------------------------------------------------------------------------------------------------------
return c$
end function
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
wf=WindowFullscreen():if wf then:w1=1920:h1=1080 else w1=1800:h1=800 :endif
if f01 then set_window(w1,h1) :ts(140,80) else set_window(400,300) :endif
'
textmode(texT_OVERLAID)
'--------------------------------------------------------------------------------
start: 'multiplication:a1$="9621677721512345" :a3$="9621677721512345" 'max.length for calculator
'
if f01 then
a1$="962167772151231234569873459879879755673456321874126765491632432345" 'max.length with long-screen
a3$="867772161231236785327184323214321989548979434612345432419543999479123"
else
a1$="96216777215123123456987345987987975567345632187412676549163243234545689038447825812346878636962914767239899968447865874412115881216454657" 'length with Test_(004).txt
a3$="86777216123123678532718432321432198954897943461234543241954399947912312347883075337418348328975681465874187452152487499879562230365454564" 'is longer than this
endif
'
a2$=multiply$(a1$,a3$)
'
if f01=0 then write():ts(30,20):
printr ".Test_(004).txt":
cl(900):printr "In basic _editor:"
cl(990):printr "open :File,Save as "
cl(666):printr "(in this folder is the file)"
else cl(099):printr:print "c$":cl(990):print c$ :
endif
'
drawtext():SwapBuffers ()
end
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sub write() :file = OpenFileWrite (".Test_(004).txt"):file_error():for i1=0 to i7:WriteLine (file,d$(i1)):next:CloseFile (file):end sub
sub file_error():if FileError () <> "" then print FileError (): end :endif:end sub
sub set_window(x1,y1):SetWindowWidth(x1):SetWindowHeight(y1):SetWindowBorder(true):UpdateWindow():end sub
sub ts(x1,y1):resizetext(x1,y1):end sub
sub cl(i):color(c4(i,0),c4(i,1),c4(i,2)):end sub'1000 colors wo comma
sub wait(i0):if i0=1 then do:m=mb(i0):loop until m : do:m=mb(i0):loop until m=0:a30=a30+1:endif:end sub
'*************************************************************************************************************************************************************************
02:new_hex_38.12.04.final (version :results in screen)
'
dim a,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab=35,ac=1
dim a01,a02,a10,a11,a12,a25(150),a26,a30,a31(150,150)
dim a$,a1$,a2$,a3$,a4$,a20$,a21$,a5$,a6$,a40$,ac$,af$,ag$
dim b,ba(4),b$,b2,b3
dim c$,c=40,c1,c2,c3,c5
dim c4(999,2),co(9,2),cr(10)
dim d(10000000),d0,dc,de$
dim f,f1
dim h1
dim h$
dim i,ix,iy,i1,i2,i3,i4,i5,i6
dim i$
dim m,mb0,mbt(1)
dim s=5'amount: 1(1 byte),3(2 bytes),5(3 bytes)
dim s0,s1,s2,s3,s4,s5,s6 'sub hex
dim s10,s11,s12 'sub col
dim s$(s),s1$(15) 'sub hex
dim tx,ty,ty2=30
dim wf,w1
dim x1=2,x2=81
'----------------------------------------------------------------------------------------------
declare sub col(i0,i1,i2):'declare sub hex(a,s):
declare sub txt(x,y,a$)
declare sub wait(i0,a11):'declare sub m(b):
declare sub db(a11)
'----------------------------------------------------------------------------------------------
reset m1:for i=0 to 15:read s1$(i):next
reset m2:for i=1 to 4:read ba(i):next 'ba=byte.amount
'----------------------------------------------------------------------------------------------
function sa$(i):a$=str$(i):aa=len(a$):de$=right$(a$,1)
if de$ = "." then ac$=left$(a$,aa-1) else ac$=a$:endif: :return ac$:
end function
function st$(d$,i0):a$="":for i1=1 to i0:a$=a$+d$:next:return a$:end function
function dec(h$):i1=len(h$)
i3=-1:dc=0
for i2=i1 to 1 step -1:i3=i3+1
i$=mid$(h$,i2,1):i4=asc(i$)
if i4>47 and i4<58 then i4=i4-48:endif:if i4>96 and i4<103 then i4=i4-87:endif
dc=dc+i4*pow(16,i3)
next
return dc
end function
'
function hex$(a,s):s=ba(s):s0=s-1:s1=a:s2=a:h$="":for s6=0 to s:s$(s6)=0:next
do:s3=-1:do:s3=s3+1:s1=s1/16:loop until s1<16
s4=s0-s3:s$(s4)=s1$(s1):s5=pow(16,s3+1)*s1:s2=s2-s5:s1=s2
loop until s1<16
s$(s)=s1$(s1):for s6=0 to s:if s$(s6)="" then s$(s6)="0":endif:h$=h$+s$(s6):next:
return h$:
end function
'
function power(a10,b10):for i=1 to b10:c=c*a10:next:return c:end function
declare sub strings_2()
'
function mb(b): return mouse_button(b):end function
'
for a=0 to 9:cr(a)=a*28:next'1000 text_colors
for i=0 to 999:i1=i/100:i2=i1*100:i3=(i-i2)/10:i4=i-i2-i3*10:c4(i,0)=cr(i1):c4(i,1)=cr(i3):c4(i,2)=cr(i4):next'1000 text_colors
declare sub cl(i)
function cut$(ae$):b2=0:do:b2=b2+1:af$=mid$(ae$,b2,1):if af$ ="0" then b3=b3+1:endif:loop until af$<>"0":ag$=right$(ae$,len(ae$)-b3):return ag$:end function
'
function multiply$(a1$,a3$):a12=0
for i=0 to 150:a25(i)=0:next
for i=0 to 150:for i1=0 to 150:a31(i,i1)=0:next:next
c1=val(a1$):c3=val(a3$):c5=c1*c3
a1=len(a1$):a3=len(a3$):a2=a1+a3
cl(090): locate x1,ac-1:print a1$;"*";a3$;
locate x1,ac:print st$("-",a2+1):
for i=1 to a3 :
a6=val(mid$(a3$,i,1)):a01=0
a02=a1+a3
cl(900):
for i1=a3-i to 1 step -1
locate x1+a1+i1+i,ac+i:a31(i1+i+15+ab,i)=0:print "0":'wait(1,i1+i+15)
a01=a01+1
if i=1 then a12=a12+1:endif:
next
cl(090): 'wait(1)
a10=0
for i1=a1 to 1 step -1 :
if i=1 then a12=a12+1:endif
a8=val(mid$(a1$,i1,1))
a9=a6*a8+a10:a10=a9/10
a31(i1+15+ab-a01,i)=val(right$(a9,1)) :locate x1+i1+i,ac+i:print right$(a9,1)':wait(1,i1+15-a01)
next
a9=a10:a31(i1+15+ab-a01,i)=a10 :locate x1+i1+i,ac+i:print a9:':wait(1,i1+15-a01)
if a9>0 and i=1 then a12=a12+1:endif
next
locate x1,ac+i:print st$("+",a2+1):
for i5=a1+15+ab to 1 step -1 :'wait(1)'x
a25(i5)=0
for i6=a3 to 1 step -1 : a25(i5)=a25(i5)+a31(i5,i6) : next 'wait(2,0):'x:i5, y:i6
a25(i5)=a25(i5)+a26:a26=0
if a25(i5)>9 then a26=a25(i5)/10:a25(i5)=a25(i5)-a26*10:endif
cl(990): locate i5-(a1+15+ab)+x1+a3+a1,ac+a3+1:print a25(i5):a40$=sa$(a25(i5))+a40$
next
c$=cut$(a40$):
locate i5-(a1+15+ab)+x1+a3+a1,ac+a3+2:cl(099):print"c$":cl(990):print c$
'
return c$
end function
'***************************************************************************************************************************************
tx=100:ty=50
textmode(texT_OVERLAID):
resizetext(tx,ty)
start:'multiplication
'
a1$="962167772151231234569873459879879755673456321874126" 'max.length without new adjustments
a3$="1677721612312367853271843232143219895489794346"
'
a2$=multiply$(a1$,a3$)
'
'a1$="16777215":a3$="16777216"
'a1$="255":a3$="256"
'locate 0,7: cl(990):print "c$";:cl(900):print a2$;
'
drawtext():SwapBuffers ()
end
'***************************************************************************************************************************************
sub db(a11):
cl(900): locate 0,ty2+03:print "281.474.959.933.440 verify"
cl(990): locate 0,ty2+04:print "a12:";a12;" "
locate 0,ty2+05:print "i1:"i1;" "
locate 0,ty2+06:print "i:" ;i;" " :
locate 0,ty2+07:print "a31(";a11;",";i;")=" ;a31(a11,i);" ";
locate 0,ty2+08:print "a01:";a01;" "
locate 0,ty2+09:print "ab:";ab;" "
cl(909): locate 0,ty2+10:print "press right MB":cl(090)
end sub
'----------------------------------------------------------------------------------------------
sub strings_2():a20$=left$(a$,4):a21$=right$(a$,4):end sub'return a20$,a21$
sub txt(x,y,a$):locate x,y:print a$:end sub
sub col(i0,i1,i2):s10=28*i0:s11=28*i1:s12=28*i2:color(s10,s11,s12):end sub
'----------------------------------------------------------------------------------------------
m1:data 0,1,2,3,4,5,6,7,8,9,a ,b ,c ,d ,e ,f
m2:data 1,3,5,7 'hex$(a,b):b=1:1 byte,b=3:2 bytes,b=5:3 bytes
'----------------------------------------------------------------------------------------------
sub wait(i0,a11):
if i0=1 then
db(a11):do:m=mb(i0):loop until m : do:m=mb(i0):loop until m=0:a30=a30+1
endif
'
if i0=2 then
locate 0,45:print "a25(";i5;")=";a25(i5);" "
locate 0,46:print "a31(";i5;",";i6;")=";a31(i5,i6);" "
do:m=mb(1):loop until m : do:m=mb(1):loop until m=0
endif
end sub
'
sub cl(i):color(c4(i,0),c4(i,1),c4(i,2)):end sub'1000 colors wo comma
'***************************************************************************************************************************************
'=-[65535*65535*65535=281462092005375 ]
'$FFFF_FFFF_FFFF = 281474976710655 bytes = 281 tera_bytes
'$FFFF_FFFF = 4294967295 bytes = 4 giga_bytes
'----------------------------------------------------------------------------------------------
'https://www.rapidtables.com/convert/number/decimal-to-hex.html
'***************************************************************************************************************************************
03: new_8byte_hex_to_dec_converter.005 ( last update: 2022,11.18 )
'-------------------------------------------------------------------------------------------------------------------------------------------------------
dim a0#,a10#
dim a,aa,a1,a2,a3,a4,a6,a8,a9,ab=35,ac=1
dim a01,a02,a10,a11,a12,a25(150),a26,a27(50),a31(150,150)
dim a$,aa$,ac$,af$,ag$,ah$
dim a1$,a2$,a3$,a4$,a5$,a6$,a7$,a8$,a9$,a20$,a21$,a22$,a23$,a40$,a41$,a42$,a43$,a44$,a45$
dim a24$,a25$
dim a50$,a51$,a52$,a53$,a54$,a55$,a56$,a57$,a58$,a59$,a60$,a61$,a62$,a63$
dim b2,b3
dim c$,c1,c2,c3,c6,c5,c7,c8,c9,ca
dim c4(999,2),co(9,2),cr(10)
dim dc,de$
dim i,i1,i2,i3,i4,i5,i6
dim i$
dim tx,ty
dim z$,z1$,zero$
dim a10$
'----------------------------------------------------------------------------------------------
declare sub txt_Y(y1) :declare sub l(y1) :declare sub cl(i) :declare sub string_4B_3B(a$)
declare sub strings_2(a$) :declare sub string_3B_2B(a$) :declare sub string_3B_3B(a$) :declare sub string_4B_4B(a$)
'----------------------------------------------------------------------------------------------
function sa$(i):a$=str$(i):aa=len(a$):de$=right$(a$,1):if de$ = "." then ac$=left$(a$,aa-1) else ac$=a$:endif:return ac$:end function
function cut$(ae$):b2=0:b3=0:do:b2=b2+1:af$=mid$(ae$,b2,1):if af$ ="0" then b3=b3+1:endif:loop until af$<>"0":ag$=right$(ae$,len(ae$)-b3):return ag$:end function
'----------------------------------------------------------------------------------------------
for a=0 to 9:cr(a)=a*28:next'1000 text_colors
for i=0 to 999:i1=i/100:i2=i1*100:i3=(i-i2)/10:i4=i-i2-i3*10:c4(i,0)=cr(i1):c4(i,1)=cr(i3):c4(i,2)=cr(i4):next'1000 text_colors
'-----------------------------------------------------------------------------------
function multiply$(a1$,a3$):a12=0
for i=0 to 150:a25(i)=0:next
for i=0 to 150:for i1=0 to 150:a31(i,i1)=0:next:next
'
c1=val(a1$):c3=val(a3$):c5=c1*c3
a1=len(a1$):a3=len(a3$):a2=a1+a3
'
for i=1 to a3 :
a6=val(mid$(a3$,i,1)):a01=0:a26=0:a40$=""
a02=a1+a3
for i1=a3-i to 1 step -1:a01=a01+1:if i=1 then a12=a12+1:endif:next
a10=0
for i1=a1 to 1 step -1 :
if i=1 then a12=a12+1:endif
a8=val(mid$(a1$,i1,1))
a9=a6*a8+a10:a10=a9/10
a31(i1+15+ab-a01,i)=val(right$(a9,1))
next
a9=a10:a31(i1+15+ab-a01,i)=a10
if a9>0 and i=1 then a12=a12+1:endif
next
'
for i5=a1+15+ab to 1 step -1
a25(i5)=0
for i6=a3 to 1 step -1 : a25(i5)=a25(i5)+a31(i5,i6) : next
a25(i5)=a25(i5)+a26:a26=0
if a25(i5)>9 then a26=a25(i5)/10:a25(i5)=a25(i5)-a26*10:endif
a40$=sa$(a25(i5))+a40$
next
c$=cut$(a40$):
return c$
end function
'
function st$(d$,i0):a$="":for i=1 to i0:a$=a$+d$:next:return a$:end function
'
function add_zeros$(a1$,a3$):a1=len(a1$):a2=len(a3$)
if a1>a2 then a41$=right$(zero$,a1):a42$=left$(a41$,a1-a2):a44$=a42$+a3$:endif
return a44$
end function
'
function add$(a1$,a2$):
a1=len(a1$):a2=len(a2$):a40$="":a26=0
if a1>a2 then a12=a1:a4$=right$(z$,len(a1$)-len(a2$)):a2$=a4$+a2$
else a12=a2 :a4$=right$(z$,len(a2$)-len(a1$)):a1$=a4$+a1$
endif
'
cl(990):locate 1,22:print a1$: locate 1,23:print a2$
'
for i5=a12 to 1 step -1
a8=val(mid$(a2$,i5,1))
a9=val(mid$(a1$,i5,1))
a10=a8+a9+a26:a27(i5)=a10:a26=0
if a27(i5)>9 then a26=a27(i5)/10:a27(i5)=a27(i5)-a26*10:endif
'
a40$=sa$(a27(i5))+a40$
cl(090):locate i5,24:print a27(i5)
next
if a26>0 then a27(i5)=a26:cl(090):locate i5,24:print a27(i5)
a40$=sa$(a27(i5))+a40$:endif
'
return a40$
end function
'
function dec(h$):i1=len(h$)
i3=-1:dc=0
for i2=i1 to 1 step -1:i3=i3+1
i$=mid$(h$,i2,1):i4=asc(i$)
'if i4>47 and i4<58 then i4=i4-48 :endif:
'if i4>96 and i4<103 then i4=i4-87 :endif '48:0,57:9____97:a,102:f_______
'if i4>64 and i4<71 then i4=i4-55 :endif '65:A,70:F
i4=-(i4>47 and i4<58)*(i4-48)-(i4>96 and i4<103)*(i4-87)-(i4>64 and i4<71)*(i4-55)
dc=dc+i4*pow(16,i3)
next
'
return dc
end function
'
function hexb(aa$) :a0#=len(aa$):a10#=a0#/2:if a10#<>int(a10#) then :a11=a10#+1 else a11=a10#:endif:return a11:end function
function hexb$(aa$):a0#=len(aa$):a10#=a0#/2:if a10#<>int(a10#) then aa$="0"+aa$ :endif:return aa$:end function'
'
function dec$(a$): a4 = hexb(a$):aa$=hexb$(a$)
if a4>0 and a4<4 then c1=dec(a$):a51$=sa$(c1):a3$=a51$:endif
if a4=4 then strings_2(a$):
c1=dec(a20$):c2=dec(a21$):c3=65536
a51$=sa$(c1):a52$=sa$(c2):a53$=sa$(c3):
a1$=multiply$(a51$,a53$):
a52$=add_zeros$(a1$,a52$):a3$=add$(a1$,a52$):
endif
if a4=5 then string_3B_2B(aa$)
c1=dec(a20$):c2=dec(a21$):c3=65536
a51$=sa$(c1):a52$=sa$(c2):a53$=sa$(c3):'
a1$=multiply$(a51$,a53$):
a52$=add_zeros$(a1$,a52$):a3$ =add$(a1$,a52$):
endif
'
if a4=6 then string_3B_3B(aa$)
c1=dec(a20$):c2=dec(a21$):c3=16777216
a51$=sa$(c1):a52$=sa$(c2):a53$=sa$(c3)
a1$=multiply$(a51$,a53$):
a52$=add_zeros$(a1$,a52$):a3$ =add$(a1$,a52$):
endif
'
if a4=7 then string_4B_3B(aa$)
c2=dec(a23$):
'4B:FFFFFFFF
strings_2(a22$)
c6=dec(a20$):c7=dec(a21$):c8=65536
a51$=sa$(c6):a52$=sa$(c7):a53$=sa$(c8)
a1$=multiply$(a51$,a53$):'FFFF0000
a52$=add_zeros$(a1$,a52$):a3$=add$(a1$,a52$):'FFFF FFFF
'FFFF_FFFF*1_000000=4294967295*c3=FFFF_FFFF_000000
ca=16777216:a56$=sa$(ca):
a9$=multiply$(a3$,a56$):
'3B:
c9=dec(a23$):a57$=sa$(c9)
a58$=add_zeros$(a9$,a57$):
a59$=add$(a9$,a58$):
a3$=a59$
'printr:printr "end":drawtext():SwapBuffers ():end
endif
'
if a4=8 then string_4B_4B(aa$)
'4B,1
strings_2(a22$) '123456789ABCDEF:1234_567
c2 =dec(a20$):c3 =dec(a21$):c6 =65536
a52$=sa$(c2) :a53$=sa$(c3) :a54$=sa$(c6)
a1$=multiply$(a52$,a54$):
a52$=add_zeros$(a1$,a53$):a3$=add$(a1$,a52$)'FFFFFFFF_00000000 *1_00000000
a54$="4294967296"'$1_0000_0000
a4$=multiply$(a3$,a54$):
a61$=a4$
'4B,2
strings_2(a23$)'$123456789ABCDEF:89AB_CDEF=89ab*65536 + cdef
c2 =dec(a20$):'89AB=35243
ca =dec(a21$):'cdef=52719
c6 =65536
a52$=sa$(c2) :a54$=sa$(c6)
a53$=sa$(ca) :
'
a10$=multiply$(a52$,a54$)'a52$="35243",(89ab)____*_____a54$=$10000=65536
a55$=add_zeros$(a10$,a53$)'a53$="52719",(cdef)
a63$=add$(a10$,a55$)
a60$=add_zeros$(a61$,a63$)
'
a62$=add$(a61$,a60$)
a3$=a62$
endif
'
return a3$:
end function
'
sub string_4B_4B(a$):a22$=left$(a$,8):a23$=right$(a$,8):end sub
sub string_4B_3B(a$):a22$=left$(a$,8):a23$=right$(a$,6):end sub
sub string_3B_3B(a$):a20$=left$(a$,6):a21$=right$(a$,6):end sub'2 returns
sub string_3B_2B(a$):a20$=left$(a$,6):a21$=right$(a$,4):end sub'2 returns
sub strings_2(a$) :a20$=left$(a$,4):a21$=right$(a$,4):end sub'return a20$,a21$
'
declare sub window(x,y)
'***************************************************************************************************************************************
window(1800,1000)
zero$=st$("0",50)
tx=120:ty=40:textmode(texT_OVERLAID):resizetext(tx,ty)'
start:'multiplication
'--------------------------------------------
a1$="655356987790137"
a3$="655371899794678" :txt_Y(2)
'--------------------------------------------
a1$="16777215123123456987345987"
a3$="16777216123123678532718432321" :txt_Y(3)
'--------------------------------------------
a1$="16777215":a3$="16777216" :txt_Y(4)
'--------------------------------------------
a1$="16777215":a3$="65536" :txt_Y(5)
'--------------------------------------------
a1$="655356987790137": a3$="655371899794678" :txt_Y(6)
'--------------------------------------------
a1$="962167772151231234569873459879879755673456321874126" 'max.length without new adjustments
a3$="1677721612312367853271843232143219895489794346" :txt_Y(7)
'-----------------------------------------------------------------
aa$ = "FFFFFFFFFFFFFFFF"
'aa$ = "1234" ':81985529216486895 '(calculator:10.1910.0.0 2019 microsoft)
'
a9$=dec$(aa$)
L(10) :cl(099) :printr "results from multiplication"
'-----------------------------------------------------------------
l(31) :cl(990): printr"$Hexa-Decimal = #Decimal"
l(32) :cl(739): print "$";aa$;"= #";a9$;" Bytes = ";:
l(33) :cl(463): print "(about 18.5 million Tera Bytes)"
l(34) :cl(197): printr "$FF:8 Bytes"
'-----------------------------------------------------------------
drawtext():SwapBuffers ():end
'***************************************************************************************************************************************
sub txt_y(y1):l(y1): a2$=multiply$(a1$,a3$): cl(990):print y1;":c$";:cl(900):print a2$;:end sub
sub cl(i):color(c4(i,0),c4(i,1),c4(i,2)):end sub'1000 colors wo comma
sub l(y1):locate 0,y1:end sub
'----------------------------------------------------------------------------------------------
'new_hex_38.23,version 1.3 12:57 PM 1/22/2020 Hedgehog_PCN
'***************************************************************************************************************************************
'https://www.calculator.net/big-number-calculator.html
'https://www.rapidtables.com/convert/number/hex-to-decimal.html
sub window(x,y):SetWindowWidth(x):SetWindowHeight(y):SetWindowBorder(true):UpdateWindow():end sub
'***************************************************************************************************************************************
04:convert_photo_PB_12.gb:
'
'copy all data (from 1st byte:ff - last byte:d9) into a notepad, save text as :pb_01.txt (into same folder)
'the file_size is :55490 (or 55492) bytes
'
'start :convert_photo_PB_12.gb to receive a new file (into same folder) : 01.pb.jpg (27471 bytes)
'This is a photo (in jpg-format) and can be viewed with a paint_programm.
'this photo is needed to demonstrate :blend_function with textures.
'------------------------------------------------------------------------------------------------------------------------------------------------------------------
'
dim a$(99),c$(99),d$(9999),da$(9999),d1$,e$,d2$(99999),rp$(9999)
dim i1,rb(100000),e,i0,wf,f,i2
'-----------------------------------------------------------------------------------------------------------------
declare function hex$(a,s) :declare function dec(h$) :declare function r0(a)
dim ba(4),s0,s1,s2,s3,s4,s5,s6,i,a,c,i001,i002,i003,i004,dc, s=5'amount: 1(1 byte),3(2 bytes),5(3 bytes)
dim h$,s$(s),s1$(15),b$,i$
reset m1:for i=0 to 15:read s1$(i):next
reset m2:for i=1 to 4:read ba(i):next 'ba=byte.amount
'convert_photo_uc08f - convert_photo_PB_12:2022,6.21 -------------------------------------------------
declare sub file_error()
dim l1,l2,ia,file,i4,i3
dim p1$,p(99999),p1
'-----------------------------------------------------------------------------------------------------------------
resizetext(100,40)
'-----------------------------------------------------------------------------------------------------------------
file = openfileread("pb_01.txt"):file_error()
i1=-1:do :i1=i1+1 :da$(i1)=readline(file) :loop until da$(i1)="":ia=i1-1
'
l2=len(da$(ia-1)) :l1=len(da$(ia)) :printr:printr da$(0):printr l2;"/";l1
'
i2=-1
for i=0 to ia
for i1=1 to len(da$(i)) step 2
p1$=mid$(da$(i),i1,2) :p1=dec(p1$)
if i=ia then print p1$;"=";p1;"/"; :endif
i2=i2+1:p(i2)=p1
next
next
'
printr:printr p(i2) 'last byte:217,d9
'
file = OpenFileWrite ("01.pb.jpg"):file_error() :for i=0 to i2:writeByte(file,p(i)):next :CloseFile (file)
end
'-----------------------------------------------------------------------------------------------------------------
function r0(a):dim x2:a=a+1:x2=(rnd()%a):return x2:end function ' 0-10
sub file_error():if FileError () <> "" then print FileError ():end:endif:end sub
function hex$(a,s):dim s0,s1,s2,s3,s4,s5,s6 as integer
s=ba(s):s0=s-1:s1=a:s2=a:h$="":for s6=0 to s:s$(s6)=0:next
do:s3=-1:do:s3=s3+1:s1=s1/16:loop until s1<16
s4=s0-s3:s$(s4)=s1$(s1):s5=pow(16,s3+1)*s1:s2=s2-s5:s1=s2
loop until s1<16
s$(s)=s1$(s1):for s6=0 to s:if s$(s6)="" then s$(s6)="0":endif:h$=h$+s$(s6):next:return h$:end function
'
function dec(h$):i001=len(h$)
i003=-1:dc=0
for i002=i001 to 1 step -1:i003=i003+1
i$=mid$(h$,i002,1):i004=asc(i$)
if i004>47 and i004<58 then i004=i004-48:endif:if i004>96 and i004<103 then i004=i004-87:endif
dc=dc+i004*pow(16,i003)
next
return dc
end function
'
m1:data 0,1,2,3,4,5,6,7,8,9,a ,b ,c ,d ,e ,f
m2:data 1,3,5,7 'hex$(a,b):b=1:1 byte,b=3:2 bytes,b=5:3 bytes
'
'*********************************************************************************************************************************************************************
'end of program:convert_photo_PB_12.gb (copy to this end)
05:pb_01.txt '1st byte:ff , last byte:d9 (use Ctrl and - for smaller text in html)
ffd8ffe000104a46494600010101006000600000ffe1002c4578696600004d4d002a000000080001013100020000000a0000001a00000000477265656e73686f7400ffdb00430007050506050407060506080707080a110b0a09090a150f100c1118151a
19181518171b1e27211b1d251d1718222e222528292b2c2b1a202f332f2a32272a2b2affdb0043010708080a090a140b0b142a1c181c2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a
2a2a2a2affc00011080162025d03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1
082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9
bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b5110002010204040304070504040001027700010203110405
2131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a9293949596979899
9aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f3ba28a2be7cef128a0d14c04a28a2810bda8a28a062d2d251480292968a60
14a3ad252d3448a29d4da70ab421453a9b4eab1052d1455210521a5a4ab44b1334d34ea69aa4212929692a8434d21a53494c421a4a5a3193c734c4368ad5b1f0fde5f2068d319380315df68bf0cd0ac4f74379eac4d633ad086ec87348f36b4d36eefa40
96d0b3e7be38aed343f86f35caefbcc9f6af56d3bc2b676118c46b9fa56b471471ae23500579d531dada266e4d9e7565f0fededdff00d5818ef8ad73e1ab6b7b36250631e9d4d75bb0163552ee133cab18e1075f7ae4f6d296ad917671ba7782ed1a7373
2443731e323a0ae9e1d26d6150b1c4a00f6ad0d81785e00a936e100f5ace552537abd00a1f614e81401df8a6dc5ac6ca1028abec71c0e95113cd73caa463a019a74cb753f7071ed552e343b79fe67453e8315b6f822aac8c4f0bd2a7dbb19807c3769186
610a93f4eb59573e188662728013ed5d83380bb4726abe41908eb5d0aab63bb470371e078796da3f2aa6be0f8564c34781ee2bd2990639159f25ba6f2cdd7b7b56b1ab3ee3e767173f83edfc93b14038ae5efbc3d35bb9da0e3b715e9172ceb280bca77f
7a858c375c328cd28d7a917a8d5468f296b2995b1b18fe14359ce8bb990e2bd36eac6d51400a0f7e9598f630dd1658c7d78ae9fac2b5ec6cab33cfc8c534d74b7fa179721fe1acc9f499635dcbf30fa5691ab1975355522ccda4a7bc4ca7914ce95a9a5c
296929690c5a28a2801b452d36810528a28a062d14514802929690d00252d2528a0028a28a041451d28a43128a28a0414b49450326a28a2ac62514b4da0028a5a4a042d028a2818b45145200a4a5a4a100b4a2928aa421d4e14d14e1568914538714da70
1c55085a29296ac414869692ad1221a6d38d21aa421b4869690d310d3494a6936e480064d5086d76de07f0a1d581b999095ce1722a0f0b7826e3589964b94648b774f5af6ed07428749b1589102803d2b8f11888c572a7a984a57d1193a4f8763b565010
0039e9deba986148e300014fd807dd18a5c718af9fa95db91161921cad43d2a4938e29a71b6b92556ec76189824d465c02cc6a403e5e3bd579bef851d2abdb2846ec2c491aef393d2924cb3e47d053e33f262924c281eb52eb5e2162223d69028c7279a4
63c66a3070a589c0ac6353debb2ac4171260902ab337f0af5a74f261b00618f4a4863fef1fa9ac79b9e61b11baec5a8548fe0eb52dd36e384e951a8d8bea6bb29cbb085dc1473c9aab3fce4e38a98e02ee6ebfcea9ce5874ea7ad6eaa348562adc47846c
ff00faea3b6b3531ef23af4a9253be411ff08eb53f98a8b91da93ad6d4562adcdb205f2c72c7a9ac99e38ec8ee8ce40eb5a1713ec6c93f7bbd61ea52338d911ceeef4539b93b4ba8ec4f71125f5bee52335913c6624d8e3007714e479edf014923d2ac31
59e1cc9c0f7ada0a70767b0d188e901621d41355ae3498a452d09e7d2a6b88124999558afbe6b36e2f2e74b6cc9b9e2f51dabab9a57b45ea68a4d15a4b2963272a463d45404115d1596a16ba94380df37a1154efb4ff002c9602b4a7886e5c935666b1a9
dcc9a2958156c5262ba8def7129334514c04a5a28a43168a28a00290d2d34f5a00296929450014518a2900514514009450692810b451450326a28a2a8625141a0d30128a28a0414b494b40c5a28a2a40290d2d25300a70a6d2d522470a514829c2ad0851
4e14da755210b45252d5a10514521ab44b10d252d21aa10da434ea4a621b8cf4aeebc11e0b9750bc8eeee93f76bcaa91547c1be177d6ee16464cc42419cf715eeda46971e9b66b1a28181e95c18bc4fb38da3b984a577643f4cd2a0b08956240303d2afb
7a0a4070b4dc9cd7cfcab3b6a4587741431016929adcd72caa6a5588641cd4521e2a7c735049cb1ae59cecae3181fe527f0a8ce0927b9a5da4714dda722b173935663b1202117351b3124b1efd050ed9205358f7fcab47349008d962145432305538e40e
9ee7d69e72aa7dea090646054b9b4ae056dbf3966392695496e074a715a457db9c7615116f601a6350c7b9e829bb42e73d053d5782c7a9a86424703bd74c2a58562276f9b18c9f6ed556e1c2b00066ad3139d918dcddea9dc7c9c6793f79bfa0aeabbb08
ac57e6eb51b827f8b02a269c2498193ed4e91fe40d81cf73dab3bf33f40b193a8cd237eed0741c9f4ace8b722fcff367a135ad22fdaa52a72b1e72cdeb505f6c317956cb8da2ba9ce32484ae66cb32db649f9d8d51b9b8223dcc703ad595195c483049c7
3daa45b48dd48619f735d1edd2b5fa0ed6386d5fc462d6e14202003cfafd4d6b5ade5b6b562390c48a8f54f0a5bdc4e4dcfdc27e55155edf453a63e6dc158f3c0aeda92a15229c5da4099564825d26ef7c2498c9e47a56f457cb776a0363762aa4f736d2
4612420b5675c092d0878bee1ed59b5ed6d7dc362ecd6e4b74cfa1aacf191c30ab36d7a268c336053e728ebc62ae13945da46b19346632e2995a6b0a347c73f5aad2daf74ae955237b1ba922b52d0c857a8a4ab2c5a28a28185369d4868012945251400b
45145200a28a280128a28a0414514521935145156312929692980514514082945252d218b45028a002928a2801696929455210a29d4d14e15689169d4da70aa10b451455a105141a4ab108690d38d36a8912b4b44d1a6d62f9218d5b67566c547a4e9926
a97cb6f1f7eb5ee5e12f0c4361021640182fa573622baa51f3329cada234bc1fe1e8747d2638d500207a574069f1a08e3da28db5f3f52a39eacc6c4656984f6a99c7a54047cc6b86a3b6c52143629a783f853338e4d2eeddf962b86553a32ac2f5350c83
03ebcd49bfe6fc0d44efdcf43445a6b502366014e6a26e4281df93ed524a01603da9157824fd4fd2a64afa0c89976d429979198fdd152cb938f56e07f5a78408028e8064d66a3cf3f24045247b940cf3e950b26d5c1eb563eeee7ea4541212a417eb9e07
726ba24e2b5b08819496c773fa54471fc3d0f7f5a95dd470c78fe2c77f6fa540c7cc38538cf523b7b0ac1ce2b44313716caafe2c7b531c6385e7dea5e36848871504cfb7213e627ae2b48bb6ac4442403201ff00788acdbd6677ce7031c01d055b972ab9
91828ace9c19d3e5cedf5abf68ed61d8a63e66254e141e5bd6a594feef84fa02703ea6a48d15179c337651d0557ba463b999b03bd5d37ad8194ee2e906630fb9fbb0e82923d82024724f7ae535b9ee8dc0487f75103c7bfbd58d335959d7ececc0ba8e46
6bba7426a2a711199e29b8ba4626d1ca01d48aade1af10cf22b5bde36f71d0d6c6ad6ef7d6ecb195822fe39dbb0f6f7af3f92ee0d275d45b3667407976fe2af5e8538e22838db527a9d96a775759338e89c85a5d3b598afad8f9bc1c608a99a78ef2c55c
7018735c749235a6acd0407e5639a9a54555a76b59a05b96b5783178268b3c366b76058ae74f1bb038aa13c01ac4bb1cb62a3b2ba11d8b0ddcd39de7056e83295ebbd9bb79606df7a7e937e2e18a3f2d56ad608b54565279158ba85bff0061ea0b2a8250
9c1c76ae8872d44e9bf8836d4de9e5923601460558815b66e2720f6a6452457966b221c9c536d6e83318c815caef6b5b61f51660ad9c553642ad56a57549307a1a575564eb5ac276dcd23268a7d28a7b0c9f7a65745ee742770a69a7e29b8a63128a3145
002d14514861486968a004a4cd2d1408296928a4326a28a2ac625252d14c425145140c2969296900b45028a401494514c0294514a2a91228a70a6d3855a10a29c29b4e1542168a28154841486968ab258d3494eab1a7d9bdfdfc56f18c976c1c761557b2
b92dd91ddfc2dd18dc5e3ddb2e57200af6b8a111818e38ae7fc15a147a3e911a05c1c574b8f9abe7f195b9ddd1cdbbb8672d4a0d348c12690301debc973717a942b9a85c7269ccdf3531cf53594a77191919a42319edc668df8e40ef51b3e1c7bd723e56
ee31cfc7d4d46546467a62a661f360f403fa54531fbc071c004fa55bb4558086438c7a9038f41ffeaa56c34381c648ebe82a26f9796ea471ed49bb2a7dc601f415cb2a9ab4506ecb165e70300d31ce00079c7273dcd4e8c02800719eb55e52646214e3b9
3e82b39a718efa80e0fb9549e307afa9f5a8b68f30b13bb0319fe94aff002c81067e518c535d82aec046077ed5a467d1f4158af3b7cd80a01c5578c10c59f84ab9b17efc9c2f607f88d5495da57e9927955f41ea69726bcef718d77dd9dbf2afa7ad5796
4200118e3b9a95d76e7a13dcd40c09e59b03155677d40a86169df3212d8e719a8ee385c2103dc7f4a95a42b190064bf402ab1566272c38ebed5b42d6f31104436c9c1c9f4f4a6ddb20461919c74a5b89fc8e46dc7d39aa12c6f37de73f3761fd4d774396
31b08e6b5ada5f6a7cc7e95cbcf2496da944f6e77b83fbdda3e551e99ee6bb0d491416520b9e467a015c26b978d0329851a4756c6d1c2815ed611b9ae40b6b73a3be9e5d4adcab9da98e116bceb5ab436975995d6339e137658fb9aecb4dbc9a6b70d732
2dbf1c8079ac1f123e9b0b66084c92c87e699fad76606f4aa380e5dcd0b5bf106931b5cbe1557b77ae56e35a173ac2bc6bb230703d4d6a8517564110e5718ae56684dbde94271b5bad77e169439a57dc52563bb4bd3259e0f4c5528265666453d7af34b6
b241169fb89dc715474f9965bc7ec335cd1a6ad2b741f526b3bb974cd4caee3b5ce6a6d7ee0ddc209aafa96c1751953939a5bc70d6bcfa55f2a738d4b6a2e85dd22665b300678150ade94d4429e3269da23eeb620566df868f5446e99353182954926267
4f7033107e3a550fed029f29ed4bf6926d403fcea8c837a922b1a74d6d219b36b3a4e33d69d37cae315cfe9b78d15e7964f19ade9be640c29ce2e9cedd0b8c8900caf1485692de4de306a72b5a58dee57db498a98ad376d4d8645453cad3718a9189494b
49400514525002d14514864d451495630a4a5a4a601451450014b494b4805a334514009452d25002d2d369c2a9085a70a68a515648ea70a68a70aa10b451455a10521a75255a25895e95f0e3c3825912f255f98f22bcd80c9c0ef5f41780ad3cbd0e262b
83b063f2ae7c4cb969b30a8fa1d642a234555e8054b9a8c714eddf2d7cc4a64039e0e2a072454c79e950b9c115c559dca4380ca822a073903f2a9430552076aa8ee4b127a6eae59d45149752921ec7818e951370c0fa734e661b40c6306a1924e7f4a89c
a315702c2c80e49e40e7150cdf3efe7009cd303ed5fd29aafb9067924e4563ed1cf46315c86ebdea23b71d7b7148ce072699b8756e73d854ca498cb3f7379fbd81c0c7526a2c08a3c3b659b938effe4d33ccc0cff17f5a787df1b02a3038cd5269ec2203
85cb0c608e327a7ad0bb190eec86c71c5211c85404f3d40eb43aed3b003d7f16359c134ee04170db54027a7415146c0ab633eac4f534f9130d973b8e7a8a6e3e65e480bce00e4d6916e33bb0e83597248aa773204c03f330e303a0ab53cac3f7631ebf28
e4fd7daaa3a6e7cb71df1fe7a574caa26ac84540b248e30339f4a8e6c4436ae3d49ec3f1ab52baa215504823eefaff009fcab3ae1b0bba4edd013fe7fc4d38ae563dca53e1cb64fe27a9fa54066468ca0ddf2f071d58fa52c923ccc7036faf1d0551b86f
29b0b9e9823d6bb295930b1475597740db768238ce383ec3d6b9396d1266607927ad7537ed1c713c931cb32e17d87a01dab8ed46e4c5bcc6768eb5ec61e2ef6425b1ce1bb6b7d5becf92792319a9f56485acdcc8d96c64015970b25c6b8ee7b0e39ea6a2
d5ee5b718c138f6ef5f42a97ef2361742fe8777e643e5b1fbbc555d7e011dcac8ab80dd6a1d0a458e562deb57bc4127da214083eed55b9311a0dea8b7a1c31dc589dfd40aa90c7e4df4a07001e299e1cb82bb909e3352dfb1595da3acda92ab28f703367
99a4d440dc4807d6b4ae5c0b6e4f6aa7a7da99a532b9e734dd53cc07683c0ad9a529a8ae81b234b42b931a1f4a86fae44da8a03eb468d1916b93dea95d8dba9ae0f39ace318bab261d11bb39d96608f4acdb3bcf35d94f6353de3b0b1fc2b1b4d38ba3f5
a54a9a706d83d19a53279574b22f1cd7430cc25b5158f751ee404549a75c1c6c26b0a91e7827d83666944fb24eb5a50b6f5ac790ed6cd5db29ba5671d8da2cba529a56ac6323229a56a996562b5195ab2cb5115a86864245348a908a6915231945291494
005145140c9a929690d50c0d25145300a28a2800a5a28a402d14514005149477a002945253855213169c29a29c2ad1228a70a68a70aa42168a052d5a105251455a259734dd367d467d900c90457d17e1bb66b3d1618dc608519af22f85d12cfabcc8c33f
74d7b90508a00e80578d985477e439a4ef2141f5a5ce01fa52531ce2be7eab71d810bbce0544cdf365ba5286ca81daa19cf20fe75c939fbb72921acff787b543bff1a1db8cd41bb07fcfad7915aa5a7a1a244ace7351b9e3df34cde73814c7719fc33fa5
28d4eac2c3e47ed4bbfe5cfa0aadbf24e7e94865c800f4ce4fe7571aaaf70b0f918b1c03480e1719c7bfa0f5a8c925b70ebbbf3a6963ebc03fad3e64ddc09038effe79a91643b00c700f03d4d544937364f41d29dbf20aa9c1e84e7ee8effd6aa2c2c59f
389da13e5cf1b877ff003cff003a63ed0bf32b640c75fd29b1b823710405e003d87a7d7b9fc05248dbd4938da01241febed9ebea781d2baa1efa2485402c04637276039c8f5fa54c154642105f19673d107f8d32352bf3b6e03dfab1f7ff000ed481b647
84e5b39393d3fc7fcf4a74eca5a832098004ece33d73d5aab3b6415c63fcf7ab27e61cf53d01eff97f215424621b764ed3dfafff005ab44b5b815e660738381dc95ebf87f8d529df7b7cb92c07de38f97e9e9562e4ee277b9948e8bd87e559d3dc6e6217
e651d970141f7ed5bc6370332e5df76c8e4da09e0f63fe3556e2560846ec90396c7f9c54d78db9497238e71ffd7ef542e27dd0600e31d00c577c15d24558e7b53bf65cab364e7ad7397ae6685f24e3dab475dcb60a313c73b471f9d62f98a22db91d3b57
d061e9a514d01836245bdfb29ebdaa4d613732b2f39a8572d7cccab9da6ae6a0df2443a66bd97a544c9e86759c8627007526b567532419ea4d67cb6857e74fad5fb325ad3731a555a7ef21a5d0a7612186e8ae715775124464835564548ef10ae4126a7b
fcb43d6a65acd30d90ed158f96c58fe75575590f9bc1ab96103456bbb1d7bd539eddee6e3e5e79e6946ded5c84f634f4c7f2ec32dc715952c9e66a408e99ad8f24259851d71597e488e60fdea69b5cd29058d4b821acc03e958f6f13472971d2af3c85c0
e38abd15a2c96fc0e7152a5ece367d476b8cb5905c0dbd48a6346d6f743d09aaf6c86d750c7635ad78a1d55c0aca5eecacb6646e3a4f9a207da8b7976e2a03718882d468e4138acd45d8b8bb1d1dadd0202b1ab980464573b6f3f4adcb49848801eb4976
66c9dc7b2d44cb5698542c293195985308a9d8544c2a0a22229314f3494806e2929f4940c928a290d50c3b5252d25300a28a2800a51494b4805a28a29009452d25300a514528aa448a29d4d14e156842d3853453aa908514b49455a1051452852cc00e49
38aa259e85f09a027569e5c1e8057b51ebcd79c7c28d39a1b291e54c1ddd7e95e8b21c1af9ecc66b9f439776c0b051cf4a61237107a76f7a6efe369a47957a7a57815aa334483205579e45f980a2593355647e4e0fd335e456c4b578a292066c8c7bd44c
d8534c6720e3f1150b4b9231d09c57136e4ee5a2476f9bf1a8d9fe6e3d0d47bcf1f4e7f3a85a4da57dc0ab51e804e5f83f5fe94cf330a4d4264f93f3fe78fe951bca01c1fa568a2c0b0b267bd31e4c66a3f314027d0e6a2328c01dff00ad6890ec4a2438
e0ede3afa5491b6c1c63db3dbeb55b215fae71f90f4fc69aae5989ec3b93de9b8b405df300c05ced19c13d7ffd74f5936f2a84b0c103a007d4ff009fa55269f60d993bbd075fa52472171bb3851c820f5f61edeff966b4a7cc9dc9668fdde19817ea49ed
f876fa55299ceee0b649e3032c7dff00faff0090a62dca13b3711c6588ff003c0fad577983332e73fc4c39c7e3dcfe3815d51b49124ad20c801b20f52bcff9fad569dfb2f07d57fcf1fd2a19e70ac413b863927f4f61fe7ad5469f00f20b632d9380beec
c6b68465b2023bb2bf31621b8c64f41ec3fcfd6b31ee010464291d38c9fc33d3f0153de4a54967382bd4918c7e07a7e3cfa2f7ac392e3121209009e481d6bbe9d3695994896e9b27033eac49e9fe1f8f35837b3e3746586d27381d0ff8d68de5c020b16e
00c74e9f4fff0050ae76fe4cb6e07393d4d7a1461a8d2333539bccca9e8bdeb98b99cace151b85eb5b3aa5c242bbcb60e3b8ce6b957b9324e5c018cf00d7d26169fbb7264cb2a72fb40db9392deb562f63691a30bfc350c32c6e3e6f94fa55c42377e15d
13ba770dc251fb927d0532cf8b519fe23d2a49b98d957b8a6db88caac0ff002b763595fdd18c36e64bd0ddb15a56f66b70c639c633d0d4b0d8383803701d08ad8b5b58aee1f2c36d997a572d6af644b667a5b0b3262940298e0d5596d45b4c6541946fd2
b59b2bbad6ed7e61f75b154c48b19682e3a76aca3396e490481268fe43f85635e232ca157d6b4da36b79898f2509a924b74940700135d109a83bf41df4112cd4d8ef23903ad4f60c0c656ac4285ed4a9e303b553b73e4dcb2939ac799cd341d4a37ffbab
d07deaf97df6a2a9eb2019148f5ab118c5964fa56d2d611625b949e4f9f1526e013359ed266e88cf7f5ab673b456d28dac34598a4c56a59dc9561cd64443e5a9a290abd6124691763ae89c49183de918566d85c1e056a704546e68576150b0ab0e2a1715
0c64469b4f229b523131494ea4a063a929692ac625145140051451408294525140c70a28a2900945149400b4a292945522470a5a414a2ac43c528a6d3aa8428a2929d5684253918a3abf7520d368aa259f48f82bc993c3d14d08037a86fd2b59ce5ab9ef
87d306f095b9036feec647a56eb3e326be53314a13b1cb01dc1c9efe95048c09e286707ae73ed55e4908c81c9ed5e2559ab6a6a8491c85c03dff002aa8ef962318f6a749229e49c64e066aa4ce7a83f4af0e5efcae6887c8f9ce0fe355e497697fc48ff3
f9546d3753d0f7a85e5cb11e9c7f87f856b180cb0eff002b1ce38cff009fcaa191fa73d0715179bb940cf5da3f5ff0a89dbf7a48e87fc6b58c064be62f233c2e17f5c9a85a4258b019f4fa9e9f90155da6d8b91c0c1207a9cd31e40a793f77af15b46051
6fce545cee381c0f73513cbf3739eb8c8eb556494ac8cee79031f376f6a8c5c1fe2c0c738f7fea6b454c762f79c0b6dcfca0f201fbbffd7a735ce70410a8a70a3b0ff1359c87cde554be0e304e003f854335df96c7cc70b83819ea3e9e9f87e75a2a3727
4350b0563b79623273d71514b73248e553200e39aa4b3c8f1a9552887f8883cff89f7e9482e1227259832af2cdd48fe9f414d526893403ec8d59986dcf049c213ec3ab9fa7151c92aab0df9258feee32b9c9f5da3afd7a0a83ed1f36e27cb239739f9803
db27247e42b3ee7558e18d8c3186673f7df2777d49ebfcbdab7a74d499362e4f705c0690edc9cc607ccc7dc761f5e49f5acf92fd220023ec21bb93f29f53dc1fc8fb9e9541eee69a63248ed2cb21c9c1f99c77f7c01e981556e2ef748c8eaa8abd635fba
9ec4f4c9efd4f6af429d3b3b8f948eeafe4927608198afddcae368f61dbf2aa811e45606400f273d79f4f403d49fd4f152ca015e242873ca000051eadee7b67a5417cf8418f4e011c7e5debb6295ca2ac8e07076b11d08e6b1efa6ea33918f5ab93bb2a9
925232d9c7218fe5d87e15cf6a17585c67af5c9aefa14af2030f5dbd2d279119c0ea6b14120f1562746967959470bc9aaf8afa6a71508248e77ab2d46cb2260f0d57ad5f7c78ee2b2e1389056858e4cec074a8a8b42e2cb71072c70a4d5a11c531556043
8ef8a9ec229109902eec73b6aec82dee7062c2c98e4579b3a9691571d6329b4991657cc67bd696a364d194bdb07fde7751deaad81b79ac9ecee80128e067a9a811ee74b94c6ecd22638cf6ae292729dd6ff999bd475d5f34f1069936cabd4d215b7d42d7
e439907a7ad2d9bc7a84acacb863d45472e96da65d07849c37f0d52e54f97660450a3f966290723a13daaec368218b2e383eb4c8437db94dc8c2b1e2ba2d42cd5b4bdd175c6735955abcb24bb89b3256cd843bd3815817cc61b927be6ba2d22e4dc44637
3823839ac6f12db796db92b4a126aaf24871dae62dd4de748bc9ab8f2edb3c7b554b0b76b86e3d6b55ecd522218e78aefa928c5a89472a2526eb3ef5b3ff002c01aa5716445ce501c66accdba3b700e6ba26d4ad62513dbbe54d383624aab68495352f47
ac5c75651b7632004735bb13875e2b94b69304735b76b72428e6b99e8cd62cbee2a16a977065c8a89aa5964469a453cd262a4636929d498a401452515450525145310514514005145140c5a5a28a90109a283475a620a51494a2a900e14a290528ab2470
a753453855210b451455a10518a3bd06a8967b77c2cd516e3c36b0160cf16508efc575ece18107a5790fc2abcf2752b880b6376180af52b89f6371c1af91ceaa28d4d4c231b3b0f69b660367fdeaad2cca09196c9e791c532494c8b807f015160ecf99ba
75af93a959cb45b1aa4124dd79c93e86aabcbce3f2cd365936fa9cff00b3551e607a37d73c1a98c2e5d89246e73dfa55667e4e0f247ea28924ca8c9cfb8aab2b8208ce0f6ae984444b2ca449e99cff00206a07b9e0a93ce4fe02a369b3827a67f2e2a9dd
b2a6ece4920f4ae9842fa0ee5a6b91274f9bae3f4c524b388f049e73903dfd4d65c175e5b3798eb85e081c2afe27ad60ebbe27b6b66f2a39725b3ca8240aeca7859d49f2c50b9d2d59bf2de0924f2d5817cf3ce71f9753ed40bc19da8a491d5db03f324e
07d0570abe33b5b58582c72cac4f61807ffad58f75e38bf964c5a18ed803c71b987e3dbf0af5e9e55565d3ef2255a27a65eeae6dff0075e66ee7a6edaa3fa9a8ada59a77dc922a9ecd1c6cedfcb8fae6bcc60d7a7dc3cf218e79c93cfe35b71eb50941b8
0618e4808e3f1f9588fc715bbcb650e84aab13b7fb4b06f98c4cfd393bcfe3f37f5a6bdfb2e30e9b8f46523207fb38185fc327deb98b3d4a09dd764a803700792a7ff4023f90ad39674fb9e6ac39f4818337b7cd802b92786707668d54932fc774d21f2a
35caaf25429207b9f53ee4d364649a6c961249c0550de6b1f6da9f2a8fa9aaf1286b7e4aec4390a48da3dcb1e33f9d35ee2ea7431a4e648fba29da9ffeafe759a8a4c64b2165475210aab02eccc1501fa0fbc7d893545a42b20211b6670a48dbcf739f5f
7ebf4a984c616504233af4f97711f40781f9538a457120fb4dd451f1c2ed32bfe80e0fb007eb5b41740d8a92c4de5f98a14460f2ce76c60fb0ce49fccfad5296c269c339902a019264c2f1ea077fa7eb57b548ce11ad229814e37ca0866ff741e47e42b1
649ae18b33b631dd8f27f9d75d3beec467dca842c0380bfdec67358b7ebc13dfeb5bd705dfe727b7563d3f015426b3132e4f3ee7bd7a14a6a2eec6f638bba493cd2ce0f3d0fa8aafcf4aea6e6cd78128e7ad411585ab4a9e6a363bd7b10af168c5a312d2
de49e60b1a927f957496ba6a59c3ba420bb77f5ab16eb0db1648231b8742bce7daaedbe9b71773a99b318ce40f4ae7af88496a090b6288ea7e6dad8c0503ad44f6af15c82d1ed2a738f5ad79a3b645fb3c88d14918cab74cfbd52b6945dac9131fdea9c0
3dcd7951a8dde4b61962f6c84f6a97b10092a0cf1de961f2751894ef065ee2abd9ea645bcb6774ac245e327d2a092d9ed97ed76848f503bd25197c327af427cc92f2c66d2ee16e6d7e703ef0a9e3b8fed128ce7156b4cbf5d4ac4c6e9f31e0e6b2af94e9
572a482133cd28de6f925f1211a7abda81a7878fef272315a3a2dda6a3a4f96cc376318a2068efb4cca2e54ad724269b48d571113e53b72076ac61075a0e9fda42eb72d5fc72e8da8168cfc8e79f6a6ddb7db6db775c8eb5a5a95b1bfb40c3924564d947
2f986060703b9ae9a72528a93dd1495b420d3e0f2b22b423b2690e5ba5365b710cebcf7e715b902a2db038ed535ab35ef2ea3dce75ad545d0523bd49a9e9ea2d72abdaa4ba957edc31c735a3728b2d89c63a5375251716238db74db915232f39a57431dc
32fbd38f0b5e8b7adc686c4d89315a304a56b255b32d5f57c27159d445a366d67cf04d596ac6b49be6ad756dcb59346a98869314ea4c548c6d2538d140c65252d21a6509451453012969297340828a28a063851494b52021a28a4a602d28a4a51c552247
0a70a68a70ab10a29d4da755a100a5a28aa420a4a5a4ab259b7e13bf6d3fc410c8bf749c37d2bdade6fb45bab2f208ce6be7c82468675914e0a9c8af60f0bebab75a4ac6c46f51d09af9bcf308e7055a3ba337a3350c8d1c8371c0f5a65c4ce10949b683
d3bd57b8b862c430e3eb59d7536d5c939c57c6d383be85a2e35e8d9fbd9c861c709d6aacda8428086b8c01d7e4273f974ae6752d4d933e5bba9ff7ab86f106bba8c91b449732043f7b0715ece172c957924899cacaecf4bb9f12e9305ca42d7aa9239daa
ae08c9fe94e92fa324ee257be7a8fcebc3b48be4fedcb58aec6e8e69963624f232719af774d1a530edb23b9b8511bf3938fd2bde970eb50bd395df99c73c5284929752acae5e17453f7860fb551d4ae26874f8db3870760671c9e3f9d57d4af6fecee8d9
3e9d2f9dbf8789b807d4fa0f7e949a24d3788359b71764882d831daa36fcd9c67f4a8c2e4f59d4b545648ba9884a1cc88ad3c2d772598bcd4523756195fb44a79efc01d3eb583ae58e9f6b6d24d2a08028ce51c918af56d5ac8cfa783136483b71827b67
f3c678ff000af05f8850ea7f6b8d638a63641797442549f722bec218785282491e65394ab54d59cc5fea61a66fb3f0b9e09eb5a9e0db05d6b5178e72cc9100cca38c8cfaf6a7f873c0d79adc49712248b6edf77cb5cb3ff40335eada1f86ecfc2d6b2ca2
dd23b9b851b541ced0bc03cf5febcd6d4e0a52b58ebad3853834b729eade1dd0a1b58d61d3bc99907cec5b21d4f2a73ebd474ae724d22ccb936be642cbce431adfd475377774936e31f7b1d7d6b15ef15b2472b9c123a8c1edf9d7a9ec29b8ea8f3a3cef
5b95a2b2b957204c661fc2b211c1faf5addd06f1e6876f92d1c8b912aa3e1548e0e41e3b56679fd18e307040c76ad1f0e4ab16baedf20fb447b70dce4af3f9919fcabe6b38c0463465529f43d0c3d692972c8da36f33302617518ce46d1c7a8f94ff003a
7c96dfbbf9998f73ba65e3fe03b6ba186cedc2121371eca49f9be9fe79155afb4f1b711a96c90766d07f43fd08af815884e5667aa99cf343e5e4ed774039dbb957f402a9cf73b541588a63d26c7e9935d11b4c459d848070d8b7208faf06ab3429220896
38db39e0707f315d31acb728e75650eade60524f4cb1247fe3c3f955436b1bc4de598cc99e4ee24fea4ff2ae9574a00aa22485813b86cdd81f9e7f4a5874f5552cfbc03dbbe3f115bfd6147611ca8d2ae1d58ec539efbf3504b66d1a80c39ec00c575573
6912a128ac0f750a7fc6abf95198428b57c75f982f35ac712dea2672434b8e424dcc6ed93c2a9efea4d4834d8036443c8ed8ae89ed631921761f418c545e5c8b90a76a91c71c56ff005993ea49461b4b6b78c332a83ea074a49ef6d923654670ea386e98
a921fde3cf6f732c7951c7cbd47d6aad9416f796b3db998191095054e48f4e68df5908a5761e5b74ba24baa91bcfb53af6c058cd6faadabfeedb89140edeb567c36f1cf6775a5ce019232549639c8f5a669373327db3499b0c22242b11daba1ca516d2e9
f8a646e43a95ac7789f6bb363caf2c3bd5af0adc25fe9d25bcc54ba12a6aa6893794d358cbcec63b41f4acd9925d075d13464ac53b6180e956e1cf1951beab541e64d712cbe1cd68720c12b7523a56a6ba8b7ba6f9a9cb15ce6a8f895a3b8d3848c738e6
b4b43f26f3444591b276e3153376846b3dd68c2dd0afe1299e5b031c928014e306a9f89ad4a4c1a13bf9aac226d3b5ff002a1dc23739c57433c114e8a198127d4d39354eb7b55b3256a8ada3ea6b258889f1bd463069e96b24f705e3c28fa5529ac8d8cd
e6c43e5ef5b7a46dbb8f717c7ad6355a827521b32918daac3e4329dd922b46de7f36cd47b547e22b611ae63e69da3cd0bdaed63f30a527cd454823b9957f0aee2c31ba96d2e4f9451cfe756b51877cf98b9fc2a849198d8678ae88b53824cbb14aec0170
48aaf707116456c49a789e30c3ad65dd5bb471956ed5d74e71764229da8323715699b6f068d36305b06acdd5be2b49c973d83a0db66c30ad8825f940ac6890eccd5ab798e706b296e5c59af453226dca335262a4d06d18a5a28190d14b4869162514514c
028a4a5a04145145218b4b4828a000d25293494c05a51498a5aa448e14e14d14e1548428a70a6d3855210b451455882929692ad12c4fa5747e1ebd92d2f1137363fd935ce54b6f2324eac1b073d73438a9c5c59125a1ecbb5a6b712a1ce47422b2afdd96
33bc01f4a87c3da9f9b6eb13bee38ea4f4ad5bbb35906e0335f018ec2fd4f116e8f61c1dce075356604e291b498edecf6cb0abf9abcee19e3daba2bcd2848f92381dab5efecad5e182527313aed181ca11d6bebb87650a9ced6e8e5c65ecac78b68fe166
d63e2459dbc11edb58241733b7658d0e7f5381f8d7bad9ddc4b7dba460119f9e3fce2b99b9bdb4b18dd2ce358d9f97931cb7b7d2aa2ea663c301c918c673935f5d182dbb9e3d6729b5e46f78bec52e5e29ed76fca1f6cb1c859b239c1e73cf1db1587a22
c7a75908d5879edf78eece4f2719a48f5592e2129b511586785009edf5acfb9b878b0a02803b85c574fb056b333e77cb63b38b549a38f71c3a363746dcab73e9eb59df6fb5fb64ed15b42aad216daa48c0e9b403d7fa735cff00f6c0f288663c0c2e1bbd
442f44a9bd9b0c4e3eb8acfd94a2f52395b474526ab0411b8fb3a95e38618c7cc39fe95cdeabaa3ed763cb9c9fbb8da33d87a556b8bc8522de5f0a00e7dfd2b12e75157c9c121f3f5fc6b78c55ef6348539115e5c395e5817619c371f5acf13ec911ae11
9b6924a83fa7b0aaf35c3310304bb8c8fa1fff005554331dc48620e724d6ae563be30b23552f4cc49738cf5c0e073d07a0ab904ed1e2546daca41523b376fc88ae7d2560a491dfd6b5f49867d4afa1b3b603cd95b1923a0c753ec066bcac7d48c693e6d8
7c977a1eb9a2dd3df69b15c22008f1ab6d61d0fa7e073f87d6adbee9d364aaf220ee570cbef9e87f1fd6ad69d6305a588b7b78f09101962319c0031fa52cd088e4dc01718381d3dfafd335f8eceac5d56e27ad04f97532da360ae3cc756dd81c633d8f1d
3f2c7d2aa5d5b99366cd8c8bc9655e9db919c7e63f115ab2db0767daa3e5505863938c8edd4107f0aaf24890b18d80328190fc82483827e9d39f7fad74426ef745946de1f21152605918e3e5ce17f03dbf9548d2dac6c51c15c75c1e87dc1feb562384cb
082814eee083c63d88edfe3daa336ec73b8062bf9f1fd453e64dea233eea3b69572acaa00ce193017dc63a542aa1ad903281bb2c5586723f1ed57278625dc86310ee19c7afb8edcfb64555bb5965b73f66dc33c0087214faf1c7e58fa56f077495c96659
61704b409c77dac4e476e338ac8599db518ad91f1111d77743feed58d41dad7cb82101a693a60673cf5fff0051047a52cf691e9966f70fb818d32599b3cfd2bd48a515ebb11729cecd6fad0f2cefdca43fca78acfb2677f115d2a2e3701c0e01ad5f0fcd
fda692dc34c76fdd50ff0030aa3a5107c5f7db8a98d78dc87bd74a7caa717ba42b91595bb5a6bb3863b649318f6aaebe6da78b1a3c9db30e49abf70603e3181636671b72c09a87c4d2797e26d3d900505b18cf5ad232729d9f5888a3acc5f63f105abc6e
0190fcd83d6acf89e32d0c0ec9850c096a4f1a1416d6f711aa2c91b8c6da3520f7de1cf305c65b603b7deb4a6db54e6fd03b97a6d32deef453f3ee3b6b9bd027974fbc680b6549e01ed5bbe1a7b89348db728ca40c648aced3ad16f3c52608fa6793441f
2aa94e6ee903dee5dbb83ed572927753d8526e305c2f079e2badd46d6df49d39a5f2f25475ae6f422fadde3cbb4794a7815cb4eb73d373b7ba84f7b1a6f6cb3da7cc7922b1b4d0d67aab41b8e09e00aea6f4c7656e3e4038c57236d3eff10671bb27b546
1db9c25d84f73a6beb1496d8b3919c7a57296a7c9d54c60fcb9ed5d95f41e6d99db9cedae02395acf5862ff37cdd2af0779c24ae37a34755751c6b06e51ce2b9d9a5f364c1c706ba16b83716bf770315cade0f26762b9eb5ae16376d3dcd257b1d05845b
a1e3d2b1f584d8e73c55ad22fdc26d355f586f37249ad29c651ada8475465da3ec9aaedc4bbab3a21892ade0b115d934b9ae0f627850347503931cdf8d685ba623aa574bfbcaca12bcac2342d65ca8cd5c539ac7b772a0569412645686a993e2929d4948
64145145235128a28a04251451400b45140a0628a28a3352006929692a805a5a4a5154891c294520a515421c29c29a29c2ac42d1451568414869692a8962629314a692a908e8345bd68b19c2e0f535e8da65c8bdb30549623a9af2182421862bd07c0733
c8ce8d9db5e4e6f87856c3372e867b33766407208ac5d6279adecf6e485192bf5aeb2e6dd7cc181593ae5889b4f6c0cb28c815f3191660b0b8b8b97c32d18eb439e279adddd798d9671c76cd547d5372796c7e60319a8b52502ea4dac170795c564e19a5
20f1b4e09afd7e9548dee794e92b1d1e9d2ff190c79c822ae33f98183907772bea2aad84126cdac08e38c8c56bdbd9c32a8cf9b296230228998f3d31c60e6b4af8ca54dd9bd4ca345b39cbe864563b190ee396e4d673de4f6edceff5e01e3f3aec66b340
ad1c0e401c10ca467f122b0af74a2f952179e719a71c4d3a8b46354dc7468e72e3529a77249c0e4e00efdc9aa925e36f3b42be07193b80fcab4ae7459d7ee45b8f5fba31540d9cc8fe5c9100dd7246302939a4cda29145e4cbfcd92c4637134d2589ce58
f1f955d6d267c33adb48115771e4118f5a7dae9ad296091c9d06fc237e55cb56b28eeec6a8af02c9b46c193e857f5af49f87ba53405ef255dd733801495cf931f5c9c7f131e80e38ac9d0fc37e72933e510f5078240fe42bd2b45b58eded563b787ca841
c0550467e991924fa9af8ccfb31a7ec9d1a6eedefd8da9424e5766bc680c380080bc823b8ebc532556d8a02e5972073d7e5c63f3a949202a93ce0938fd07f9f4a843853c1cb63258fe55f9fabdee7a296852742be66d248d841f6c920567bfef5d564384
725549e48cae08cfe5f955b79becf12120b7c9c807b00481fa7eb50b168fcb0514ae0039efc63f991f957a10ba42210264244646779dd91d1b6f27e848391ef55a669ae15bb81cbed24330ea338ebc719f55ab3236fb878f1c16fbc0e3208f5f5fba7fe0
26a5489a3b8dfb7391bbaf209ec7fe047f235bf35bd49667c8f71b523d892229dc1988c30fcf8cf7c54371a888e154b742ef839c0c8ebfc5f8f6fc41156a48ade470f236cce588c606debc7a1aaefae58d824a4f96b09fba800f9801db1d4f23f31d8f1a
c22e5b46e67239d165702e26bdba6590c8c481bb207b03fa763597a95fcba8dbb58da969c1fbe4af2bedcf5356ef5a6f135eedb4f32cec7761f076994fd3d3ebcd6ecd6365a3699bfcc530c6bc973d4fd4d7a7ed15371e657976ec45ce5ad2fe2d134b16
e194c9dd48c9a8b44b56d396e2fef701a4cbb7b0351e916fff0009078905f4f094810f51d08f7f5ad3f18cb0c568b6766c44b70c111546723bd74c9af69ec56f2f8896fa987a538d47c55717b147985576ab74a83c432fdb7c476f1c6877458c8eff005a
ee2cf49b2d2b41405c46c91e5cb0c738ae2b418cea9e2e9ef5589881e78e8074ad28d68ce53aab68ab20f2175fb19e58a16765312b827775ad03676e965b9810557233567c576ad2dac696f2872641f211cd4779349169c909d85dd7685ef9a955253a70
b770b9ada7bc13787d99141665eddab9cf084c20f134d1c8a1896e0fa574fa5c7169fa44714bf2b91ce57359ba7e8a2f35d92fa2ca146c71c06ae684e0a3562f662dd9d1f89079fa2ce3682761c5711e01bf104b2d9b8f981adcf136bcb6309b51f348c3
181543c29a43b48d7d22f965ba0c52a11f678392a9b3d83ed686cf88c34963941c8ae374d7106b2acfd49ef5db6b6c22b41ba4c66b97b4b25bbd4036efba7a8abc2492a2d3d86f73ab9ee09b4cede0ad70ed12cfa9b84196ddeb5decb005d3c8f45ae261
b67fed632c638cd2c14925268197cdbcf141f374f4acbb98d646fbb5d3dc2335af38ce3b8ae565256660cc3ad7461e4e5765f3683a18c443e5e2aa5e92d9c734e9a578d4956fd6b3a3bc696460d5df0a6dbe61c591249b67c1f5ad58c700d63c9ff1f20f
bd6a2498879f4ad6aad15865a1701462aa4cdbdb22a112179302a754e7359f2a888700428ab76ae7233509dbe5d3ad9be714a2ee35b9aa3a52d221cad2d59a15e8a283506a251452531052d251400b45140a43168a28a401494514c05a51494a2a90870a
5a414a2ad123853853453855210a28a28ab420a4a5a4ab44b10d34d38d2550896dce1c719af41f03395b9656e01e6bcfa1711b038aed7c1577bf585461b415e2b931d1be1a6bc8ce47a5cd182b9159f728194e7a015ace9f2e7b1aa573100b8f5afc9a9c
acce9479478a746c5cbcd10c07ed589a268ef3df8debb618bf7b239ec074fcebd275bb40f132b0ce3b8158f34c6e2d56d74f80248301c91d4fbd7e9f93e6bed28f2547aafc4e2ab4ecf42ac76466b769dced51c91ce73c11f856ae84c079ca1951d4a3a1
2718dadd3f5a57b67b5d2de291de5217976fe23dea958388e67f9f682a431cfdd1d727db8aed9d56a6afd4c2d7d8d2f174bb2fa7877878c0525474271cfd2b8d95ddc91e7cb851f2a9208fd45741ad4e2e649645da772af2bd09c7e95ccc9f7cd54ea750
49a1119918075dc80725243193fcc54921882831583bbe4e59ef571f97979a84311f4a52e76e2a5621f7fc4762b4ef72edb505bc498c12199b39ebc600a8e45b9bcc5bdd5dcd711678894f9683fe02b8fd69e43166ad4d26c6494891d6e1573f7957683f
8e7fa572e2715ca9b2e2997f47b211a8586d9d769040dbc13eca0f27ddb38aecb4f856d909e7cd61f33e7851e83d3b7d6b1b4e80c1262577033f2ef7624fe78fe55b69111c93b401950a31c57c7632ab9cacd9d54e362df0012d9e993efedf9556b89184
7c95dc474fe9f99c523cc42e47403fcfeb501958152a3bf563c0503afe67ea6b8210d4e8125897e54c65b68cf3cf71514c8cb0ee182c0838ed9dc0d4f1a12bd58b1c6093c8ebfaf34f7b72d11da483c6056aa7cad2626ae64c93b19a39562015b0a33cfa
30fd1987e3566064f24995d5508da4fa1c01fd0fe55622b10620c3048ec7b7f90298cf1416e637527038c0ce315b39a9e8912f431af23b79e67f325f355b2761e79ea47a773f97bd54b1d16cb9791177fde5667cf1d78fcff5abb73244c0632109dac5b8
f6fe5fcab065d2b4c9212e97d22b282cb1b4f80719040fc3a57a54fde872f335e8652d0b977a8da5934896051ee0a1c2750de99c74233d7d2b164f0fde6ad87d5ee5a46072234c05f6e9d6ae41691594c82d6682442aad1ed6cef5238fd3f97b574115ab
244166bb86d50f42c474f5cd6ee52a36f67bbebd4cdb473a258bc3f6690c606f90ed58b6f2df8559d2bc3a7ed2752be1fe90c372e7eea2f6fc6ac4763a01d562925d4d6499bee5d38dc91b76ddedc76abbab5cdf5d4220b236f35db03b4c5267691d7df1
5d1530b8be58f245fbdbb33e74d9c878cb529af265d1ec087279976f6f4e699e19d11f42479ae9983c839e6adf87b41b9b6d4a497505c4ecc77a91cab7bd6b78926b98b4d923b587e5da77c8cbc20a539ba76c1c3e63e9732d648b53ba678d03a464aee5
f5fa5636ade4c1af59c4ad95ce4e4fddad0f0d4d37d9160b2b469c93f3023073ea0d589fc3b76b3493eab672472e77296390476e6b54bd8d46a5a25a05ee6c4a8ed1864dac9b7eb53691088e167c8f98e6b1f499a5b8b95490feefa107b5686bd7d169b6
255233cf0a54e2bcd9d39737b25bb1dfa9c5f8951bfe122320f9e30c01f6aeff004953fd951150a4151daa8787f44b4bad34dcddc464790e4b139a7ea920d3628e1b394a9660a12b5af555651a11de225a6a56d7a037aeb181855e4e2b1749ff0042d536
20dcb9ee2bbe86ce286cfce9d95895c924d72d1db34dacbdc44a0425b8e2a68574e1287445347412c0b7166db54824560476696f210c39cd75519c5bf041c0e95cadfdc4897cfc7cbe95861dc9b71436477a372e0647e35cddf69fc175241ade92f576fc
e87eb59d732acaa7674af56839408b1cecb13f96d9cd6540ac92b67a66ba491d042fb85610f9a46c7ad7b3464da6691187e696accb2ed8b15030d8d9351ccfbba1ad6d7b163eda43e6e4d699907962b2a201454e66f940a9a91bb1742c19cf229f6b27ef
0557886feb52a8d8d59bb2d048de8a505454b9cf4acb8a421466ae472e57ad4c5dcd45a0d141a936129296929805145140052d252d20168a28a402514514c05a5a4a5aa421453853453aad123853853453aa9085a281455a105252f6a435689129b4e34d
354227b755dd96aeb7c1cd1c9ada94e71c66b8bcd74de0a976eb8996dab8c57163d37859a5d8867b3ffaeda070aa39a8e48c3cbbbb28a7c6e3ecff002739e0524842c38039afc8b54ce98ad0e6b50e6e8a0190324906b9fb7711eb0cbd89e6b78af9b717
120539276e71d2b9bb86d9abb11debe8f03374e575d0ceac7dd36b5a511e9e2403e56040233fe7ad71e25c5c126431ae7e6c75c743c77ebd2bb3be7fb6f85a6da06e847afb5707c3cd903a9ef5f5588ab77192d8c211562fcf29b992490396dc06770c31
3819ee7dc649ac9907cdcd5f52ca846481e99e954a4e188aa955f74cada90e3d29b8f5a9d40a6630d8358aaa57290a43be52323d81cf3f9574ba65b343087291c51e006654d9ff008f39c93f406b0edd64798840e78c9084027daba4d344b095f2ed4854
19332aeedb9ecb9e59bf21fceb8f1136d6e5c51b761045d6287cadddf66d2dee3a13f538157a50bb46d3bb1cf26aa427e5c2ab0c8e4b1cee3f5ee077f5e953a83cb027f1febfcebe72a5dcae74446aa6f219c0eb9c66acadb0604e3a609fe7491af739c6
3d7b0fe5f4a901cac6afd08dcdefe958c9be8590b288e419e06719ff003f8d38950a475f97352c8a1be604e49c01fce98f1000b0eaa3a50a49ee1a15b945273d466a8b972a5994bae4f4efdbff0089fceafcab88db07ee91cfa0dcc2a0857f7cca395e87
df078fd0fe95d30b25725b30e79aca68e48a5fdd316e8e300d725ae5a5bc7049b6552546507527907ffadffeaaef754d352e1dd94738e2b9eb8d1ecade6fb5ea1224501539f33a0edfcce0fd73d8d7b580ad152bc6fe8633b35a9c7c7632db5bc323ef8e
d012564231e58273827d8f4fad4baccd696b1c30da5d34f26093b9b017b607f7aa7d6b5882cec6f2c1238efa02ac8374851a1cf1c1fafaf4ae36d8b496a8b3a92e0632dc9e3a57d8d082ab25565f71cef6d0e9f4fbd17162d0bb2473a3641c679f43ed55
9efe7b5d520b9f3584d18c6f57c1e3bd63457135b4aac8f82a31f87a7bd25d5e4f14cb7137ef0b02adf28c053e80f435ee74b98d8f5d9f5f3afe9c97a5fc9d5ade2dc8f80de781d4363a71deb9cd76eee355d2567b69ddfcc405d11b233dc1fcab99d275
230dec690cd8997958e4efdc019fff0057d2b123d6ef13c413adb21844cdcc530dbf37bfa66b9e746973f3a8ab8d2675de13d79f43d4585d7cd0be32718fff0055771a86bd7fab4420d1ad646320c0793a0fc2bcca5d5a5bf916dee6d658655254b320fc
891d7eb5d6586a7aa69fa3aac33b3fa6e51903a6462bc2c66591c462156492975d74652764743e17d16d96e1d751ba8e39ff008e2618fd297c53aa685696b243ba19651c7966b9ff00edfbdbd914dd42b2321ca3270dcf079ac7d7acff00b4195da12b26
3aaf5fc6ae395d158853ab37744f349a0b4f19ddd81315bc69f67cf0be95d5e870af88dd6fe64d8c060291c579f5be8f2a4a04921553c0256bd43c0f6d3dac0eb36c7871c305c60d679be0f0ce939e195a65c24d3d4d49fc3b13c63e723e8d5143a4c106
557a8ad3d4ef52d2ccb1e7e839ac1b3d45ee260633b8679c8af87953ad04d367445dcb33c11c687236fd2b99d4e24673b32c49e735d8cb00971b881c563ded9c69212315587abcaf52ac72935b955c01c564df0f263271d7d2ba8b98faed38ac89ecfcce
b5ed51aaaf7664dd8e42ee425368aa00347f3575b369f1ed6dcbcd60ded9b450b11d335ed51ad192b14999972fbd46da62a9c73562380b28c8a93c8cf00575f324ac3b95c74a4e73560c0476a4309ed4b9905c9206dab4e6930d51852298d926a2c9b1dc
d38a4fdd8a9e3978acd4621454e926073595acc699b1494b49507505252d25300a28a281052d252d218a28a0514804a28a2980b4514b54891453a9b4eab421c29c29a3a53aa9085a29052d5a105252d275ab258869a69d4954842574be19b5df2097a608
c1ac3b3b296f6609103d793e95e8fa0e87f64b74cf2735c58caf1a74dabea6727d0ed74d467863ddc2a8e3deac5f324580319614fb18bfd19547551cd43a8405e45c1e7a735f956215b12d33a60ee8cbc0fb2cacca324e4738ae23515d97818631bb1c57
a05d811dbc821dbf2a81f31c5709ae2ed915b18c3026bd1c0caf2f514b52d585da2595d44e0b1922200cf078e8411cd7268bfbc19c1c77adb8a5dadf28072380791598c989d8e7209383eb5f431ab7a4a2fa18dac98a4e739aa5370c6ac3139aad31c9cd
68a6d9958683c534f2d9a607a96252cc29dec513c16c659171b00c64877da0fe35d5699632c9b4a888aaaf552eca3fa56769ba72cbb59c48474ca90aabff000235d6dac022444c0c638192d9fc4f5fc057958ac469645c50d580a2855c71c0603b7e753a
c64124fe18f4ff001a9f92bedfed75fc3d05270bcaf4f535e3f3b66a344600c6368c631edfe1fcea166dd213fa7f9ff3cd4b2cc029e49f5f7aae8e064b9e7a71ea7aff009f6a693dc09048c0c6a48049e7dce3a7e743965b72a3e7f940dd9e4e7ffd54d4
1963230ced5c0ff78f5fe82a474db081fe78ff00269e8985ca539322805701c15c13d78ddfd4d4168f2af50181049ff781c1e7f2356dd3e541dc483f96292302391f00fcb26ec7a8239ae8bd9681d0a1a85fc91ab08a2dae38f9b915e79e27d42f658a48
bb8f98103eeb636b75ea08cf1fed1af5264e0a6013c819ee474ae5fc4da5c7710f99120dd2608c7a1ea3f97fdf55ed6538a8c2b454918cd268f1781e459492c4fb939348d71300ad86c20c2807a75fd2b42eec5adb5074c119c803154b6969da339f6fc6
bf4b5cb34a48e5d875bdcc32cca1e55009f9864641e9f43fd693573736d6b22aaee8d97e62011807ebe9fe7a543f658fcf21c6037e956af35477b15b1955589caee3c371c63deb1af2ab06b9367b8d5990595d4925942f28dcabf2e00cb2e3b8febeb5ad
717369a95bc52cb162fa220ace98c4a9fe22b1b4d93c84920b85daa1b2a5c71f427b1a74b7ab6d2bc36cca1998ee122e551b04641ec7f9f19cd6fcc946ec56bb3aa7905e471ee951a655dd1cc9caccbe87d08f7e869ebab5e582a433248d0b83b641dc77
da7be3b8ae4f4dd4afe29e6b2b894c2661b81083938ec7b71deba3d34dadae986001e495e4321f31bef1f55cf439fce8b2a8896b94d9b686ee5bc867b7c46ae03a19305481dbdbe95d178827974fd2c5ec7670dcc6797953384f661d57f956369b736724
71c4a1572aa5b2b8dc3b939e9cd6b5aeab2c36ef6928496de45f9a09890c476d84753cf435cb88c252aead357b11ccd6c60dbf8a6c1b064b45424750d904fd0d69a78d241115b680ae3b28ae1b598a28f519c42bbedf7911963865e7a71deabc1a82db4e
ad9752a7a0e723d8d72bc1d25eeb46a9df53d474bd706bcde43e16e13ac458671eb5bb676b1dbc8722bc9bc2be6ffc2451dc5a0658de4c920f51df22bd80cc1a1e1d5bd8d7c3e6f87587adcb07a33a60ee874bf3a920d625f170c7703b7d455e927d9ffe
bacdbdbb210eeaf3a8c5a65b4cc699cac9fde151b0f929cd2c72312c307da98f9db91c8f4af5923292b946ede3542ac393deb0ae7322ec5e56b5ef6277639040acd303237b57a346c95c0ad1d8e633da90da941c8ad03fbb518a9366e8b26b6f6b233949
a325a0079c537ecd9ed579d38c53e240462afda3b5cabe8669b6f6a89adbd2b5e48702ab15e7a55c6a5c95233fcac5215c55b7519a81fad68a4d96a46bd2514523bc4a28a29805145140052d2514805a5a4a29005147d28a602d2d369c2ad122d3a9b4e1
5421c29c29a296ad085a5a28aa420a4a5a43564b10d68695a4cba8c9c02101e4fad56b5b66bab858d3bf5af4df0fe9096b6a995c60735c78cc52a10d37666df423d0fc3f1da22fc9cd75122c76f6d9181819ace9f5286ddc468c01ac0f10f880f906de07
fde49f28e6bc98602be2eb46737ee98b9a48ed3c29a92dea5c9dd921ca8fc2b62e07cb9ee39ae53c0c163b23147c98d70cdea7a9ae9ef1f1137ae2be473ce4faf38c15ac75504f93531afb8b760a7990f3cf5ae7b51b40725870a0e33f4ae9a442f6e1b0
71b81cedc8ff00eb566eab6ea438e01719049e0561879f2b48d1ee716a8c980dd4543328c8357ae418ef363e70ea0a96ef55665e08af762fa99cd19d2719fad5597ee9356e6c0aa729c2d76c0c6c4283737b66b4ad22dec3033f4aa1163d2b5acfe551c6
73dbd68aaec8b4ae747a5dbb8d8090a473d72dfaf0bfceb74111aed3c9ea79fe67bfe35cee9f78a24291c88114e5ca7381eec7a0f7e49f6ad8f3b0338c8c66bc2c4425cda9a22dee0dff00023ce7bd364946d207e87fcff9e6aa19782ccd80bc67f99a72
166c13f5dd8e0e6b9b92c31e5b39c13f80e7fcf4fd3d2a482d84a01e83be3fa7e8292281bf8b000e09fe9fe35707caa147f9ff003ffd6f5a252b68807b46a1495ce17a0155aee4544600f21481f97ff5ead16daa0739ea73552e23595c16e2b18efa8588
49ddf32f237e47f9fa511465a425ba903fa53c4402b20fee93fa62a58463264fc0fe35ab968265794159030e31229fd40feb546e238de368e41b9124edd704e7affbac3fef9ab97d2288dc21f98afafd7fad53cb4924aca3b8241ee3fcf15d7465c91bf5
2796e72baf78385c33dca4855cbee185cf43d7f1e7f3ae1b57d01a12668b27693f2e3b75c7f3af62b892e8c051231f522b9bbcd226ba7324a9c672d818afa1c1e6d5a0d734ee8874d58f29b98018c3f23b31c7eb59b770a4d3c45d827243639008effe7b
1f6af57d53c1af2c2d3456c51b904751d6bceb57f0fdd5b6ad048030566da79c6d23ff00adfcabebb0b9a51c55a31dcc791ad4b16977fe8bf60d482b4582ab2103e5c8c6d638c95fe470454765a02dddf7d97021bae889238db27a296e993c60f7cd2cd1
a85d87a63bff000e3a0fa53222c840009685700f53b3fba477039e3ffad5ea56a7cf07dcca2da7a1af0d958daa496b7b3a25d5b9e2dee54c6f0b77193fcba565cfa8428156485d242d81953f30fe44fe22ba1d6ac0f897c391eab19dd7b649e548c79692
3ec0fa91d8f523dc73c7a5e4a102b8703271b9bdb19f7ffeb579b83acdc5abea9d9f9329abbbb35749d60c9aa9b7b92d0a3f0b8700e718ce7a13ec6ba69ecef2d36bc91c8c073e615396f41b7b67d6b97d3a559428994707e5caf071fcebadd275392dd6
3b29c1bab12dfead9be788ff007949edea29d7ab5e9fbf4ecfc985a2ce4bc41a80babb409a7cfe6a90b23b2b0e3b003bfad59b6f0f5dead2016b672bee008382a17ea4d7a7c70dac2a2e2368e5b690650b0c86f6fa8abcb73e62e235560bfc18e47d3fc8
35f3d5f3cacae942ccb505d0c3f0878260d057ceb995dae641863bb2a3f0f5addbdb1923fde5bb82a073db1f5a517cfb08890ce0758d88debffc50fa8cd645cea579cac6be5a7f73ae3e9fe15f3539d7c4557526f5368c5892caeafc8da7b91d0d43236f
6c11cfad10cfe68dac013d307a538c65385e549ce0f6ad6d62a5229cb6d1b372307da95ad808c146ce3b5248c4cc4679f435283f2e4d6d792465b942500aed917045509610dc2d5eba9b6f6c8aa1b84a7284823b1aeaa77b5c4f44569edf0013c537a45e
d535c390b871c5537942a900d7546ed19ee46ff778a6c526d7c1a400b7d298786e4574c569616ecbec415aaaea39a449f2706964395e2a145a626eccab2e09e2a9c8a77715698f3513ae4f4aeb80ae6a52514533d6128a28a0028a28a0414514b4318514
0a5a40251451400a29452528ab42628a70a6d3aac91c294520a70aa42168a4a5ab420a3a9c0a0d496d8fb4c7bba6ea7b10cebbc1da0b49209e71d7a0f4af429ad4416bc71c561f872e6186d959b8e3a545e22f15470298d1f2c7a006bc0952ad8cc42496
88e794ada99fa915123312001d4d70fa84d2b6a9e69cf969d056b3ea125dc9cb6727a565ead28f305b41f34ade9ea6bec1525468da4f6305ab3d57e192f9be1dbab9ddb99e62339f4e315d3dff0036f9ebed583f0df4b934bf08f93264b3317fccd6fdda
968b0477afc5f339f3e3e73e8d9e8d2d228624656cd0e4a90a3041c1ff00ebfd2b36f161620ba8271f7b1d40ed5b0e07d846402318c1ac49482473ca9391e9fe7fad72d16dbb8ee729addbac4d2ca154383950492e4fa9f4fa5676e13dbacabd1bf435d6
eb16be642544ed10233b50aafeb5c65bff00a1dc4969213e5c9ca31c6037a7535f438697b4a77ea876e6455b85c5665c56cdcafca6b22e0715e9517730b598cb7059c01deb6202372ae7a119ac78090e08eb5b3a7c6c64f91247e33f276fa93d29d63589
afa722b2f9688a40209da99504742727e635ae13f77b8ee2719c360927d4e2a9e9f1efdc76abe0601e5b1ebcf4fe95ad1c5f28fe2f524e47e9c578b889fbc1d4af1c6ce724601e14b0cb31ff00657fad68db5b7cb96e0e70727247b13fd052c3085cb118
c8c939c123dcf6156578c003000e06318fc3b0f6ea6b8aa54be886051572138cf4ff00eb53514eeebfa74ff3fe14f7e41c7e38eb8f414a4851cfd4d61711148df362ab7df9941e986352b498625bf8739ff3f526a04e58963801467f99ad62b418e3f7c9
edb08fd6a54e62e7a1e6a3dbd01f4e4fbe6a61c8c0f4e94988a33d8ef395f5191f8e0ff31524566236c3727953f81ab41832e07f17f502958aa12ec42ae3249e83dea9ce56b011b263000fa53440bbb760608eff00e7fcf35338c8e7a639ff003fe7a528
04a8247cdd4fb1ce0ff9f73529b132b443878d861a33b7f0edfa5646ade1eb6d4236cc6327a8dbd6b6e484991645241504633d47bd4c91e465bf3ad215e54a6a707a9163c535bf055e59bffa246d2a03847620e38fbadf87427823f1c730914d6b707ed1
1149a13f323ae378c723f1e99fc6be8db8b3496260cbb95b823a63fcf5fd7b1ae62ffc0d6da9c809203c63e462307e9f4f6fc2bee305c4ae314b12b4eeb732f66ba1c9f805e3692e6d5c79914e03206f9b721f53ebfcf19eb583e2af064f617cd7360ad7
16b2b13c7553fd0f63ef83df8f42d1bc3336997c14db85873962a7a1eb91fafeb5d44964855964446de30c31f787f9ff003cd79f3cdfd963655a96aa5bafeba9528ab1f3cc7a75eef436d6b36e61c0317dee48cf4f5aeab44d23513b5ae22f2a063b83ca
3f0e9db9f5f6f515e973db476ea5046ac801ca9190c0f5fceb32794408b1cdbaead2560b14c18170c7eeae4ff1e3852787e5586786f729e632c4c7489898d286b246d3f72cb1c995f2a46c24c7a9d8dff2ce41d7078e33d0165e621d75b4dd50c62e7ce0
a70864f95947f7597b11dc0e3b8241cd743adcd6f6761fe99244d6920262940233b4f6e73c11cae77c64641c6193c96f35096ef5792e518bfcc4073866619ea7800fd703d4f3cd77470b4aac2cd5ca3e80d2ee2cb58b08ae366d661cec7cfe469d79a7ab
a9defbd719572391f522b86f87ba839864462815b076a9eac7ebfd727dabb8172f1be54e7b727e53f8ff009fc2be1b1986961b112845e9d0da33b997359ac4432e4301fe7eb514b287e24c2bf4cf635a57a233864f9091968f3d3dc7b567b801d79a5093
92bb0b5ccab80d1c98719f5f6152290e83636f5f53d452c886763b3071fc24751ed4d8a3da994aebbab12ec849200c089147b35665c46b0bf030735a33dc1c631f5159d7322b290f8ada973195eeca9752064159d2f22ae1c1519e57d7d2abcd18519072
2bd0a7a680fc88a33f2d0c40fbd4819557af5a6c83756bd486d222c8dd9153a36579aae46d34e4901ad2c46ec6cdc1e2a124d3e5906714d0062b58ec5c6269d251da8a67aa14945140051451400514514805a5a28a0043cd14514c0514b494a2a912c752
8a4a5aa4038528a414e15689168a28aa421c91b4ae12305998e0015d4587865a0804f7232e4640f4abde0af0e89e41753ae49fba08e95d0f8aaee3d26c4ed5064230a2bcbad8ce6aca853dce7948e4eeae27b58fca84fcc7d3b560cb148cecf70db9dbb9
ec2b76ce29275f327e4b727351ea168acd91d7b0afa7c353e589c8ddddcc2f396cf927e623815278634c9efb5c6bdb856f2f3f2e475ad2d3fc2d3ea3741dc1db9ef5e99a2786a3b5863508005f6af97cef3ea54a2e9537766f4e9f566d787d585a1c8c20
1802ad5c81e59ab30c222b5210600aab74fb61fad7e5b3a92ab53999d6b42bcd2816654f25874358cc374cc46464f5c73f8d6a38df1b0f4e45509e211c99e402bd47f235d54acb42914ae1caa14dc76f4033d4f61cf4fe55c46ad6f9999d594b86cb7186
07d08edfcabb6bb426362d8c77c8c8fc7dbf9706b95be8775cb8cb48338e4f23dabd9c1c94752a267c6fe7c19ee3861ef546e613922af08d609f2bb806e1d58631ef44f167dfdebd38c945e844e3d51910ae241f5adeb250ca110966272542eefd0f03ea
4fe1595b36c95a9633b084aa2e029196ee49e8abee7d7a819e95a5477411d8e9ed2336e104bb59dbd064afa0cf4fc856ac31f03158da6ccb3843b831ea481819ff000ec3d856c5bbef5057a11dfb0af9ec426a5a88b2a0741dbf43fd4d2938381fcffcff
009e298b91c0cf1fe7f3a53c2d7200a1f033d2a19a5da791f28a42c075ed4c77f94773fd7fc9a718eb71d884bee5600e7381fd4d485724a1fe390271f99a6845cae0632d522a305571cf24815ab63b0efbdf37f7b9fe669572645238c007f5a639221039
c8519e3da96dd1a43c0c6471f97ff5a9696b8ac490ae368f61ff00b2d48c9fba391daa45014f23be3f97f8513b844ce78ac9caec9217213240caf0d81fcbf43f9d0a0866e790793ee38fd4106981b6a7b818c7af3ffd6fd6951ca6415f403ea011fe15a7
d9b0344aabd2a5d9b78ed8fcea35911feef07a81fe7f0a9d9959382001cfe1516b3d48216c36549fa1c743d8ff002fd3de9140e58023fa1ff3fa7d2a09a70b9cfae0e471fe79fc89a6dbb3bbee72c3231d79faff009f7f5aea9b4e009169bdf39f6eb55a
799123f9f0bb012a36e7db1eff004ee0e2a727239a82752ea4751df35cf4a4d31b5739dd475486de10b712a96dfb5977e590e33807b9c1c807048f52083c45dfc41d111258e473387dd14f6cd1121f3c1ce78c763f9f51f375face9314e8e5d4004609c0
c63a739e08f66ca9f515e3be30d2cdadf2bcaaa858f964853f31edf31e4103f85b90318665c11fa1652e8d68dba9cee3a9535af1436a52cb683ce6b1326e0256fde360614b1fe265e9bbab0c6724035891b97c6570ddfb6eff001ff3f5a73c3870d9dc7b
96ebfe7b54b1c066658f0a49e95f4ba4501dc78023696e0480b6c03695c039e3d7fa7f3eb5e98c856dc302244ce0a74c1f4f6fc78fa5723e07d15b4fd3cbc83963953d08ff003fe45759239461b4f5e01eb9f61fe1d7b827a57c36675155c4b711ec57b8
28d0e09202b6d2083c1fe60ff9e7ad42b6e5971b83ae323d47f88f7a8a79e3137ef0718c1e474f63d08fd3fdd3481a58f2d13b3213c01c107fa1f6ebf5ae3f66d22d4b419347e492bd307953d41febfe79aa724dd4a100f7f7ab1752a4aa3e5c75391c63
d7fcfe62b1e7976b7273e8dfe3fe7f3ae8a74f98cb709e6ce7b1aa1292ca68926c9e6aacf3b2fddfff005d7753a761ec23af00a1fa8355259bff00ae29ed39ebe9fa5519ee1587039ef8aed841df5121fe602d81532b7154e3e6ac236de1ab4944ca7a92
4872bcd55dd86e2a591aa00bb7249a715a0e08648df367350bce4375a64ae779c1e2a3cd74a89a5ce9a83451589e9094514500145145300a05140a402f6a5a28a4025141a050028a51494b568438528a414a2ad0870a70a68a70aa448b4f8b066407a6e1
4cabda4d9b5ddfc6a07ca08268949462db265a23d6fc1f088ec5091ce2a6f106936f3fefeef076f201ed563458c59e9a246e02ad709e2cf15bea5a90d26c589663fbc653f7457c7e5d42a6271aeaf44724da4882eee3ccb9f26c17705e091d2b4f47f0ec
f752092ec1c75c56f7867c371c5688ee9dbb8aea63b448c61540aefcfb3aa9421ec28bb5c54a1777653d2f488e3da15318adbf2047f2af6a92d2311c658d2c6419199abe05a5514799eb267531b1ff00aa607a8cd64de9f940f7abe65db2499e39e2b32f
1b27e9cd39c629c794229dc585415fc6aa5fae07cbff00ebff00f555b88e147d2abdf73174e7391530f8cbea529edf7db9318f9faf5c0fa7e35ccdc5ae2e9d5f7373d59704d75e8775b0dbf80fe958b7810ca4024953d08e9f43dbe95e861ea34da29339
7b9b790b104ee407839c8a84c0eb0f232a3d3b56dcf10d9b9b241e3729e41f461fd6a6d36dd5989c0c11c8238fcabd2f6fcb1b94f6391922cb7a53ad7a30e7001fc0773f5c71f8d6eeafa74513132c6600df76441b973ee3b563adbb42fced646e8c8d90
7fcfa57653aaa71ba1451b3a64ac2144ca86624bff00b23a9fa9c607e26ba2b4dcd182c3033c76c1fa7b573fa646cade671f31da30bc9f503fa9ae9ed622065ce7b82457958b92b8a489c021724546e7f4eb568ae23ea7fc2aabaedce78f4f6af362ee49
0c9c7e14dd83283f13fcbfc69f8dcd80391fce9ca9c9cfdde07d6b5bd8637682fbb1c28c548bd87e1fca8e831ebfe7fad28ea7ebc527a8c705ced07b91fd2ac5bc623553fec8ff003fad409f33007a73fa559fe1aca57d84c1c2b31c5569e02e8429e7e9
539ebf85267d7fcff9fe94a374c92bc70055e7ae3a9a5741b7a647bd4a4e7aff009ff3cd4529f94e7f13569b6ca255892452c9f758719ec7d298f6f200db181c7229f66ff29181bbf9d4c0f07d33d0f6a9726990ca715a8466f3007078c91dab16ff00c4
569a15e8b4d54bc424cb4136dcac8a3b67b30e841eb8e339ae85df835c0fc51b3fb4e810ce87f7d6f2e507660472b9ed9c647bad7a596d38623131a55b6919cae968689f1d68c033adceec71b55492ddf81df8048c67201c64822a24f881a2cca36cac72
3e5db86dc7a803ea0657d7a75e2bc464555fde4726e0e3201e323e9eb9ff001aacd21c16c81bb93c67767d7fcfe75f6dfead613bbfbccf9d9f4145aa586b16c973a75ca4a8c0b2946c371c1f70477c8e3b8ae5fc4ba1fdbede48d23f3372918299fa00b9
fc42e70792854f07caecf53bab297ccb596489c306c8272180e1877c8f51dbd46457a37867c649af2ad8dfed4bedb85200db38ebc0e993c9dbd0ff000e0f030965d5b2e97b6a0f9a2befb0efcc70d67e0cd5ee2e0c3f67e870650729e99cfa7f8e0d74da
37811ad6e166d44a10a0318c1ce0f7fcba1fd4574cd7535a5e3145dcafc3aeec86f7f7ef83f50475cd9fed142a09183c1073823df3fa67b74391d26be6588a8acb44fb0f96c588f6247b5154af42be9f97f9fa8a65c4c7cb29f7d7a73c91df0dfcc1fe5d
6aabdc6e3853b4a9c640c01f876fa76ed552462cd86241e8196bc78c35bb1b4473cdbb7705f072d9249c7f33f5ebf5a745f77e53b978c7bff9fcbe953469e680cc36c80e4951c30f5f63fe7ad44f1fd9e4f321fb8df790b6029f6278e7f2adee9e88cdb2
3ba3b9094243672549e73fe7f11ee2b0e77ce4af5eff008ff3febec6b525937bbe46c2a30770c6df661dbf9560de3bf98caca55979e707afafa8f71c1fad76e1e3d1902429e6ab9e4f3dbf9d432c2e1f603c9e391496d3ed2ebf77271827a7e357615698
38de19c2e541fe31e9f5aebb38b225330a74955cac830ca7045552993c75ad79e3058eec9f43e9555e1f9b918f7ae98cf41295cab1655aac1c15a735b9ea067de944240e7a50e49ea4b6ae563953cf22a17977363a55d963c0e99155248b2723ad5c5a60
a7a95245e6a3c55a64f5a8cc7cd7429177b9d0d068a2b03d6128a28a601451450014b494520169690514802814514c05a514da70eb568438528a4a515448e14e14d14eaa4214576be0cd34cb329dbd7926b8d890bcaaaa3249000f5af62f0969a2c74f47
946188c9cf6af3732a9cb4b93b98d47d0d9d593ecfa032c7d42f6ef5e63e0ff0b5ccfac4d797a8434921639fad7a6cd72b75fbb1ca74c53ed628e03f2003e95e7bc6470341c628e651e6669dac420b7545ec2a63f2f355e29b06a467cd7c1e33112c4d4e
6676423645d2fb6db02aa894893daa33236dc678a41c735c9ab4ae5d826f9db238cd576883c873e953b366a32d8aa4da19021f907d2abde3661e0e307f5a9d8056cf6c9aa974c0823f85860ff435d1057911d48637fddfe39aa776aafb987de5fe553a9c
44491ce706abcebb99594900f5f6aeb82b328a17d6ee177ae73b79da79c7f5152e9887a8e7f1c549729244815c6e8c8dc39c153ec7d7da934fe2500f46efe95d2e57a65742cde47be120a06078287f8bdbebedf9572d3e9a44be65a66446382b8e54f704
7b5765709f29cf231cee1918f7f51fa8ac49adc99485f95b856ddce47a37a8f471d2af0b52c849d8974c885ca01c9854e093c1931e98e8b9fceb72318000e2a9d8c42340806dc00aabe9fe3574715c75a7cd2064ac4050b8049e950c88431c0e4631f5ed
52420ee2c7ab0efd87ad4930c807a119da2b9d3b3114963da7e5e7d3dffc9fe54101385e83f5e3ff00af531c0e9e9c7d3a0aad23fcb9f5e6b54db10879fe9467e6fc293690b934a1732051e99fc2a8a2cc3c20627b7f339a97a0c7f9ff003d6a25e9ed9f
f3fa0a52c7fcff009f7ac9eac963cf41fafe42a3ce0f3cff009fff005d29395ebdff00ad318f19a1210e2dc7e3fe7fcfbd559d80523b54a48cf5c0f5aab236e9517d4f3fe7f0ad60b519691f0ff374e338ab0c739e81b1907d455077ee3b706a58a5de00
ee3953e87d3e87afe349c6fa8895d8e3d0fa66b98f196d93c3d72853cc25385cf271cf1fed0c061f4ae82798004e702b1b50db708d14801079e7a039e0fe7fa1aebc1fb95633eccce5b1e0d73c3b2641c1cb606467fbc3dbfa551dc5989dbbb9e7b924ff
009fc7ea39dbf11db0b0d5e648432c796083a1519fba7dc723e98ac2924e3695072320fa1ee3f1ebfe457eb94e6a70525d4e6ea441be604741d31ceeeffe47e239c8a74531464961277a302a739c1ce474fcff00daf66151b1f99d73c724e79c7ae7f99f
fbe877a10ee90ab70d9c9247e2738fcce3fde1572b5b52cf59b2d622d674a4ba4ff5aa02dc46792ad8cee1ea0f5cf71cf506b62c3c8bbb731be0eee411d41f5ff1ae2bc2304f0d84d70f1ee8a61b190afcd9073907f5c7723239e2b62c6f0db4fb037cb9
f95cf1c76cfb7bf6af8ac5e1e2a7254dec6dd0dc934d313611b23ebf95345ba85c1c807a8f7ff3f97d2ad2dcf9a836f520900f5f718fe9f8d4723fcbbb27071b803c8f43fe07f0af3139f5316ec40ca51707b1c7f9ff003cd51b998e010327a919ebf9ff
002ef56a4ba58e448e4c6f3c2606049ec33d0ffb26b3aea4ca9580921f2ad1919cfa800f53edd6ba69d36dea66e48ceb8946e0b149b802422eedacbecadd8ffb2dd7b564df4a0fcb3e1c1240902edc377047f037a83f29f6eb576e1cb2ec0d92ca554e37
9651c9001fbe07753861dab1ee24f37257058ae33bb72bafa13fc4be84fccbd0d7b7461dc8bf6220cd1ca09cba018e3b0cff009e0d5f8a65c650e0f556ace47e1b6139e986fe5f852a37f77853d7fd93fe15aca3721abea683ccaec4f7e8d4ef2d4a104e
4f6a8230170c41cf43eded532f2f83d0f435cf221b51d87403631493bf43eb53bdbaaae0720fe948b1860449c7a1f4a7296e6393ef0e9ee2b36eeee61295ca52c7b78ea3d6a9c9167915a131c13fad53939236d74c1bb0e372a491fcbc8a84ae3b568c88
0a8f5a81a2c9e2b68c8d94b53428a28a67ba2514514c028a28a0028a28a403a928ed4b400868141a28017bd2d20a51568438528a4a515421c29c29b56ac60fb4de471f504f355b2b92dd8eb3c11e1e37572b753a703ee823a577fae4bf61b011c1f7b151
7876dd2d6c942819c51ac40f70fea2be0f1d8b94f1a9cb64733774cceb2bc9042a3f8aba0b2577505ab36c2c499064702ae5feb967a4a112c8a303d6bcdc556a989a9cb15765c128ee6c2058d72d48b2ef3c74ae5a2f10b6a23317084f06b7ecce60526b
82b61a7474a9a3348c949e85c079e6866a6e7d2a366ae648d0796a6935116c75a58ceee6aac21ee995aa170a7666b4d39c93e955678f2a71ea6ae9cacc931c3e1f6fe34b0c0657312b60104ae6ada5b0e778e9d2a65b741b5d7ae3f5aea7512d866399bc
d8a4b69d487438c1ee33dbdc54369f2ccbd08271cf7abbabc00e2751871c1f7a8608993cb917ee9e735d0a49c2e8ae869c8bf281cfe079cfb7f9e6b34c40499e0607181c0f523dbd57b56ab9df18c8c123a553953e6ea739c839e41ff3f98f7ac694acac
4841c1e9ff00eaf6ab67ee8fd6aac3f4fc2ad800e3159cf719229c2e4f5fe548cc0820f19fd3fcff003348781822a3049eff00e7fcff002a848436442771c800027e9c63155a5388ce78e40feb570b0db503aab6030e9cd6917618c933e4c6a3a96ff0a7
420ef66efc81f4ebfd294e3a9ed447203328ff006bfa1aae803f3f747aa67f90a01e7ea7ff0066a40d8914f6db8c7a73512480451e7ae47fe8553622e4a4fee188f4cfea698cd81c7386e9481ffd1881dd0e7f335119943119e4039fc81aa516484afb47
b6322a0539b86e7eef7ff3f4a64b2e7e539ce48e3ea47f5a13e58c1db862391ef5ba8d90c9259360e3b9ed504174a18ae7dc0f6ffeb1fe74db97ca1ea7d7159523ee6ebf32f3907fcf5e0d6d4e9a9226e685eddf5e71ebedeffcbf3acf7b8de081c9e9cf
3fe7d3f2ac6f106ad269370ad2c72cd65326410bf3293d07bf4618eb9db54ad3c49a75db7eeae63775665c06e5b68c9c0eb82b861f8fa57ab4b0553d929c55d19f32135ed1df568a52a83cf046d6007cc7dfea38fcab8593c29aaa39cc07e53c2920679c
8af479ae51a3330906d519620e72b8ce47e1c8a9d2749d30aca59402cc39078e1be8473f4cfa57ab87c757c343962aebf225a4cf1dfec2bf3aa5ada490c917daa4f2e22c36fcdfddfafa7e55db68de08b6b4b96372eb3489cc6ad95071c153e9cf1edb87
635b3ac6996face9b2d8ccfb1cfcf148a798e41d1bf3fd0d32c750b9bfd2165bf3b350b63e5dd92392c3e51291ff008eb7a8e6bbaa63ea56a775a746bf27fa0bd0962f2ada15b74450b821015d9df001f4e46d3fdd6008eb59d202f705973c74e3a8fe5f
e71e9525dc8656576cae3990104ed3d09f7e3008ea400698c8cea0a16dc38c290c589190076248e54ff18c83cd71c55ddcbbd8d1b0b8620445b1fdde719f419fe44fd0f4ab93cc3ae0b1248036e093df8f5f55efd456119da20b382a4377192a723aff00
ba71cfa75ea1a9e6ea59a205cfcc7030c76ffba18ffe82ff0081acde1fdeb99489af248ee10ac8aae8e3905b861d8eeedecddba1ac496e25b4565bb769a2cecf39d7e620769075cafa8e47046455b92e4b37018b3311d304b77e3a07c751d18567dcdc17
4ca1531b8c7cc7e523a6d6ef81f9a9e3915d9461cba743121be909f30336f8db1962dd7d0b11d7fd99073d8d65c8db8b799c8279cf049f5ff7b1f81ab71c2cca563dd85e8ac3953dc7bfd3a1155fcbea3000ee33dbfc3f957645a5a0aeb62254f9b07eb9
f5f7a7f9a1599b1ce30e9fd6a58e3f30f96cc437f0b1e3fc9a64b193ce3e64382bfe7b53bdf7052e84f6b2f761923875f6ecc2af6d1c63a76acc8d0a8ca0248e473dbb8ad18406846c3904653fc2b9ea257b99548f62c06ca8cd319f38527047dd3e9ed5
116f949f6a8db2ddf91592898f2ea3a7fdea165e187de15449da6ac492955571d47071dc547285750e9d2b68a2934885e4245081b14a4820629eb280b8ad4b8dcb541a28ab3df128f5a28a60145145300a28a2a405ed4b4514201293bd145301453c5145
5201452d1455103ab5341ff90a47f5a28a25f0b227b1ec3a67fc7ba7d2ac4d4515f9ae3ffde19cf1dc48ce2ddc8e0e2bc67c6d34adaab8691c8f42c68a2bd2e1eff7c0a9f09d97873fe41707d0577b69fea17e94515c59d7fbccbd4ba259ed51375a28af
091d043274a9e1ff005628a2adec04c9d2a27e8df5a28a88ee24577eb48a7f767e868a2b61329dff0030c99fee8fe469348f9ad0eee7e6eff4a28ae8ff0097452d8b927083e954ee78271e8ffd28a2a698047feb1aada74fc3fa9a28a531b09bef37d4d4
5fe7f4a28a94488df747d2a33d4fd28a2a90c63ff4a8613fbf1fe7b51456b1d989924a4f9679aaea4fc9f51ffa328a2aa1b10c7464ecfc0ffe846a82b1fed09c64e36c5c7fdb234515bd3fb5fd75247db127049c9c9ebf5152c9fd3fa0a28a52dc644fd3
f05fe7588c7fd2b1db61fe6f4515d743a9122878c006f09485864843827b7cca6bc6350f943b0e1811823a8f9851457d9e47feeefd598bdcdcf0d5d5c7d976f9f2e1235d8379f97172a063d30091f89ae83447659ad76b1187be8c60f4559576afd064e0
76a28ad313f0cffaee1d4bed23ee8cef6ce13bff00bffe03f2156ed003afc408e1d5030f5051b39fc8514579b57e17e80b733598865c1231b48c1e989703f4e29d8021b95030145e803d0290ca3f03c8f434515a531b1b77feb6e87612f03eab193fa927
f135043f37900f20cac841eebb578fa51456e66f62bfde11eee775a3eecf7c138cfd2a93125c12492d144c4fa93c13f5a28ab8993dc8a2255cede3e46e9ec78a9af801749818fdee3f020668a2abed11f68ae07ee73df683ff008f115249cc8a4f528727
d78145155d4649001ba2e3fe5a30a7da7503b79b45158c8898f6ff005928edbcff002a823fe1fa5145490364fba7f1aae87f76df534515b2d89437f87f3a88d1455a3a56c7ffd9
'
'*************************************************************************************************************************************
press [ ctrl and - ] for smaller html text
'
01:multiply
02:new_hex_38.12.04.final (version :results in screen)
03:new_8byte_hex_to_dec_converter.005 ( last update: 2022,11.18 )
04:convert_photo_PB_12.gb
05:pb_01.txt ' [ to convert into: 01.pb.jpg ]
'*************************************************************************************************************************************************************************
01:multiply with the following code:
'
'version 2.21: new_hex_38.12.23.fin
'the print-output is to be found in :"/.Test_(004).txt" ,view text with :notepad.exe ( updated:2022,11.18 )
'------------------------------------------------------------------------------------------------------------------------------------
dim f01'=true 'print multiply (long screen)
dim a,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab=200,ac=1
dim a01,a04,a10,a11,a12,a25(500),a26,a30,a31(500,500)
dim a$,a1$,a2$,a3$,a4$,a20$,a21$,a5$,a6$,a40$,ac$,af$,ag$
dim b,ba(4),b$,b2,b3
dim c$,c=40,c1,c2,c3,c5,c4(999,2),co(9,2),cr(10)
dim d(10000000),d0,dc,de$,d$(1000),d0$,d1$,d2$,d3$,d4$
dim f,f1,file
dim h1,h$
dim i,ix,iy,i1,i2,i3,i4,i5,i6,i7,i$
dim m,wf,w1,xa=2
'-------------------------------------------------------------------------------------------------------------------------
declare sub write() :declare sub cl(i) :declare sub wait(i0)
declare sub file_error() :declare sub set_window(x1,y1) :declare sub ts(x1,y1)
'-------------------------------------------------------------------------------------------------------------------------
for a=0 to 9:cr(a)=a*28:next'1000 text_colors
for i=0 to 999:i1=i/100:i2=i1*100:i3=(i-i2)/10:i4=i-i2-i3*10:c4(i,0)=cr(i1):c4(i,1)=cr(i3):c4(i,2)=cr(i4):next'1000 text_colors
'-------------------------------------------------------------------------------------------------------------------------
function sa$(i):a$=str$(i):aa=len(a$):de$=right$(a$,1):if de$ = "." then ac$=left$(a$,aa-1) else ac$=a$:endif:return ac$:end function
function st$(d$,i0):a$="":for i1=1 to i0:a$=a$+d$:next:return a$:end function
function mb(b): return mouse_button(b):end function
function cut$(ae$):b2=0:b3=0:do:b2=b2+1:af$=mid$(ae$,b2,1):if af$ ="0" then b3=b3+1:endif:loop until af$<>"0":ag$=right$(ae$,len(ae$)-b3):return ag$:end function
'
function multiply$(a1$,a3$):
for i=0 to 150:a25(i)=0:next
for i=0 to 150:for i1=0 to 150:a31(i,i1)=0:next:next
c1=val(a1$):c3=val(a3$):c5=c1*c3
a1=len(a1$):a3=len(a3$):a2=a1+a3
if f01 then cl(090):locate xa,ac-1:print a1$;"*";a3$;:locate xa,ac:print st$("-",a2+1):endif
d$(0)=a1$+"*"+a3$ :d0$=d$(0)
d$(1)=st$("-",a2+1) :d1$=d$(1)
'-------------------------------------------------------------------------------------------------------------------------
for i=1 to a3 : 'y
a6=val(mid$(a3$,i,1)):
a01=a3-i :cl(900)
for i1=a01 to 1 step -1
if f01 then locate xa+a2-i1+1,ac+i:a31(i1+i+ab,i)=0:print "0":endif
d$(i+1)="0"+d$(i+1)
next
'
a10=0 :cl(090)
for i1=a1 to 1 step -1 :
a8=val(mid$(a1$,i1,1))
a9=a6*a8+a10:a10=a9/10
a31(i1+ab-a01,i)=val(right$(a9,1))
if f01 then locate xa+i1+i,ac+i:print right$(a9,1):endif
d$(i+1)=right$(a9,1)+d$(i+1)
next
a9=a10:a31(i1+ab-a01,i)=a10
if f01 then locate xa+i1+i,ac+i:print a9 :endif
d$(i+1)=right$(a9,1)+d$(i+1)
d$(i+1)=st$("+",(a2+1)-len(d$(i+1)))+d$(i+1) :d2$=d$(i+1)
next
d$(i+1)=st$("+",a2+1)
'-------------------------------------------------------------------------------------------------------------------------
if f01 then locate xa,ac+i:print st$("+",a2+1):endif
for i5=a1+ab to 1 step -1 :'wait(1)'x
a25(i5)=0
for i6=a3 to 1 step -1 : a25(i5)=a25(i5)+a31(i5,i6) : next
a25(i5)=a25(i5)+a26:a26=0
if a25(i5)>9 then a26=a25(i5)/10:a25(i5)=a25(i5)-a26*10:endif
if f01 then cl(990):locate i5-(a1+ab)+xa+a3+a1,ac+a3+2:print a25(i5):a40$=sa$(a25(i5))+a40$ :endif
d$(i+2)=sa$(a25(i5))+d$(i+2)
next
'-------------------------------------------------------------------------------------------------------------------------
c$=cut$(a40$):
i7=i+2
'
d3$=d$(i7):
d$(i7)=cut$(d3$) : d$(i7)=" "+d$(i7)
d4$=cut$(d3$) : d2$=d$(i+1)
'-------------------------------------------------------------------------------------------------------------------------
return c$
end function
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
wf=WindowFullscreen():if wf then:w1=1920:h1=1080 else w1=1800:h1=800 :endif
if f01 then set_window(w1,h1) :ts(140,80) else set_window(400,300) :endif
'
textmode(texT_OVERLAID)
'--------------------------------------------------------------------------------
start: 'multiplication:a1$="9621677721512345" :a3$="9621677721512345" 'max.length for calculator
'
if f01 then
a1$="962167772151231234569873459879879755673456321874126765491632432345" 'max.length with long-screen
a3$="867772161231236785327184323214321989548979434612345432419543999479123"
else
a1$="96216777215123123456987345987987975567345632187412676549163243234545689038447825812346878636962914767239899968447865874412115881216454657" 'length with Test_(004).txt
a3$="86777216123123678532718432321432198954897943461234543241954399947912312347883075337418348328975681465874187452152487499879562230365454564" 'is longer than this
endif
'
a2$=multiply$(a1$,a3$)
'
if f01=0 then write():ts(30,20):
printr ".Test_(004).txt":
cl(900):printr "In basic _editor:"
cl(990):printr "open :File,Save as "
cl(666):printr "(in this folder is the file)"
else cl(099):printr:print "c$":cl(990):print c$ :
endif
'
drawtext():SwapBuffers ()
end
'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sub write() :file = OpenFileWrite (".Test_(004).txt"):file_error():for i1=0 to i7:WriteLine (file,d$(i1)):next:CloseFile (file):end sub
sub file_error():if FileError () <> "" then print FileError (): end :endif:end sub
sub set_window(x1,y1):SetWindowWidth(x1):SetWindowHeight(y1):SetWindowBorder(true):UpdateWindow():end sub
sub ts(x1,y1):resizetext(x1,y1):end sub
sub cl(i):color(c4(i,0),c4(i,1),c4(i,2)):end sub'1000 colors wo comma
sub wait(i0):if i0=1 then do:m=mb(i0):loop until m : do:m=mb(i0):loop until m=0:a30=a30+1:endif:end sub
'*************************************************************************************************************************************************************************
02:new_hex_38.12.04.final (version :results in screen)
'
dim a,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab=35,ac=1
dim a01,a02,a10,a11,a12,a25(150),a26,a30,a31(150,150)
dim a$,a1$,a2$,a3$,a4$,a20$,a21$,a5$,a6$,a40$,ac$,af$,ag$
dim b,ba(4),b$,b2,b3
dim c$,c=40,c1,c2,c3,c5
dim c4(999,2),co(9,2),cr(10)
dim d(10000000),d0,dc,de$
dim f,f1
dim h1
dim h$
dim i,ix,iy,i1,i2,i3,i4,i5,i6
dim i$
dim m,mb0,mbt(1)
dim s=5'amount: 1(1 byte),3(2 bytes),5(3 bytes)
dim s0,s1,s2,s3,s4,s5,s6 'sub hex
dim s10,s11,s12 'sub col
dim s$(s),s1$(15) 'sub hex
dim tx,ty,ty2=30
dim wf,w1
dim x1=2,x2=81
'----------------------------------------------------------------------------------------------
declare sub col(i0,i1,i2):'declare sub hex(a,s):
declare sub txt(x,y,a$)
declare sub wait(i0,a11):'declare sub m(b):
declare sub db(a11)
'----------------------------------------------------------------------------------------------
reset m1:for i=0 to 15:read s1$(i):next
reset m2:for i=1 to 4:read ba(i):next 'ba=byte.amount
'----------------------------------------------------------------------------------------------
function sa$(i):a$=str$(i):aa=len(a$):de$=right$(a$,1)
if de$ = "." then ac$=left$(a$,aa-1) else ac$=a$:endif: :return ac$:
end function
function st$(d$,i0):a$="":for i1=1 to i0:a$=a$+d$:next:return a$:end function
function dec(h$):i1=len(h$)
i3=-1:dc=0
for i2=i1 to 1 step -1:i3=i3+1
i$=mid$(h$,i2,1):i4=asc(i$)
if i4>47 and i4<58 then i4=i4-48:endif:if i4>96 and i4<103 then i4=i4-87:endif
dc=dc+i4*pow(16,i3)
next
return dc
end function
'
function hex$(a,s):s=ba(s):s0=s-1:s1=a:s2=a:h$="":for s6=0 to s:s$(s6)=0:next
do:s3=-1:do:s3=s3+1:s1=s1/16:loop until s1<16
s4=s0-s3:s$(s4)=s1$(s1):s5=pow(16,s3+1)*s1:s2=s2-s5:s1=s2
loop until s1<16
s$(s)=s1$(s1):for s6=0 to s:if s$(s6)="" then s$(s6)="0":endif:h$=h$+s$(s6):next:
return h$:
end function
'
function power(a10,b10):for i=1 to b10:c=c*a10:next:return c:end function
declare sub strings_2()
'
function mb(b): return mouse_button(b):end function
'
for a=0 to 9:cr(a)=a*28:next'1000 text_colors
for i=0 to 999:i1=i/100:i2=i1*100:i3=(i-i2)/10:i4=i-i2-i3*10:c4(i,0)=cr(i1):c4(i,1)=cr(i3):c4(i,2)=cr(i4):next'1000 text_colors
declare sub cl(i)
function cut$(ae$):b2=0:do:b2=b2+1:af$=mid$(ae$,b2,1):if af$ ="0" then b3=b3+1:endif:loop until af$<>"0":ag$=right$(ae$,len(ae$)-b3):return ag$:end function
'
function multiply$(a1$,a3$):a12=0
for i=0 to 150:a25(i)=0:next
for i=0 to 150:for i1=0 to 150:a31(i,i1)=0:next:next
c1=val(a1$):c3=val(a3$):c5=c1*c3
a1=len(a1$):a3=len(a3$):a2=a1+a3
cl(090): locate x1,ac-1:print a1$;"*";a3$;
locate x1,ac:print st$("-",a2+1):
for i=1 to a3 :
a6=val(mid$(a3$,i,1)):a01=0
a02=a1+a3
cl(900):
for i1=a3-i to 1 step -1
locate x1+a1+i1+i,ac+i:a31(i1+i+15+ab,i)=0:print "0":'wait(1,i1+i+15)
a01=a01+1
if i=1 then a12=a12+1:endif:
next
cl(090): 'wait(1)
a10=0
for i1=a1 to 1 step -1 :
if i=1 then a12=a12+1:endif
a8=val(mid$(a1$,i1,1))
a9=a6*a8+a10:a10=a9/10
a31(i1+15+ab-a01,i)=val(right$(a9,1)) :locate x1+i1+i,ac+i:print right$(a9,1)':wait(1,i1+15-a01)
next
a9=a10:a31(i1+15+ab-a01,i)=a10 :locate x1+i1+i,ac+i:print a9:':wait(1,i1+15-a01)
if a9>0 and i=1 then a12=a12+1:endif
next
locate x1,ac+i:print st$("+",a2+1):
for i5=a1+15+ab to 1 step -1 :'wait(1)'x
a25(i5)=0
for i6=a3 to 1 step -1 : a25(i5)=a25(i5)+a31(i5,i6) : next 'wait(2,0):'x:i5, y:i6
a25(i5)=a25(i5)+a26:a26=0
if a25(i5)>9 then a26=a25(i5)/10:a25(i5)=a25(i5)-a26*10:endif
cl(990): locate i5-(a1+15+ab)+x1+a3+a1,ac+a3+1:print a25(i5):a40$=sa$(a25(i5))+a40$
next
c$=cut$(a40$):
locate i5-(a1+15+ab)+x1+a3+a1,ac+a3+2:cl(099):print"c$":cl(990):print c$
'
return c$
end function
'***************************************************************************************************************************************
tx=100:ty=50
textmode(texT_OVERLAID):
resizetext(tx,ty)
start:'multiplication
'
a1$="962167772151231234569873459879879755673456321874126" 'max.length without new adjustments
a3$="1677721612312367853271843232143219895489794346"
'
a2$=multiply$(a1$,a3$)
'
'a1$="16777215":a3$="16777216"
'a1$="255":a3$="256"
'locate 0,7: cl(990):print "c$";:cl(900):print a2$;
'
drawtext():SwapBuffers ()
end
'***************************************************************************************************************************************
sub db(a11):
cl(900): locate 0,ty2+03:print "281.474.959.933.440 verify"
cl(990): locate 0,ty2+04:print "a12:";a12;" "
locate 0,ty2+05:print "i1:"i1;" "
locate 0,ty2+06:print "i:" ;i;" " :
locate 0,ty2+07:print "a31(";a11;",";i;")=" ;a31(a11,i);" ";
locate 0,ty2+08:print "a01:";a01;" "
locate 0,ty2+09:print "ab:";ab;" "
cl(909): locate 0,ty2+10:print "press right MB":cl(090)
end sub
'----------------------------------------------------------------------------------------------
sub strings_2():a20$=left$(a$,4):a21$=right$(a$,4):end sub'return a20$,a21$
sub txt(x,y,a$):locate x,y:print a$:end sub
sub col(i0,i1,i2):s10=28*i0:s11=28*i1:s12=28*i2:color(s10,s11,s12):end sub
'----------------------------------------------------------------------------------------------
m1:data 0,1,2,3,4,5,6,7,8,9,a ,b ,c ,d ,e ,f
m2:data 1,3,5,7 'hex$(a,b):b=1:1 byte,b=3:2 bytes,b=5:3 bytes
'----------------------------------------------------------------------------------------------
sub wait(i0,a11):
if i0=1 then
db(a11):do:m=mb(i0):loop until m : do:m=mb(i0):loop until m=0:a30=a30+1
endif
'
if i0=2 then
locate 0,45:print "a25(";i5;")=";a25(i5);" "
locate 0,46:print "a31(";i5;",";i6;")=";a31(i5,i6);" "
do:m=mb(1):loop until m : do:m=mb(1):loop until m=0
endif
end sub
'
sub cl(i):color(c4(i,0),c4(i,1),c4(i,2)):end sub'1000 colors wo comma
'***************************************************************************************************************************************
'=-[65535*65535*65535=281462092005375 ]
'$FFFF_FFFF_FFFF = 281474976710655 bytes = 281 tera_bytes
'$FFFF_FFFF = 4294967295 bytes = 4 giga_bytes
'----------------------------------------------------------------------------------------------
'https://www.rapidtables.com/convert/number/decimal-to-hex.html
'***************************************************************************************************************************************
03: new_8byte_hex_to_dec_converter.005 ( last update: 2022,11.18 )
'-------------------------------------------------------------------------------------------------------------------------------------------------------
dim a0#,a10#
dim a,aa,a1,a2,a3,a4,a6,a8,a9,ab=35,ac=1
dim a01,a02,a10,a11,a12,a25(150),a26,a27(50),a31(150,150)
dim a$,aa$,ac$,af$,ag$,ah$
dim a1$,a2$,a3$,a4$,a5$,a6$,a7$,a8$,a9$,a20$,a21$,a22$,a23$,a40$,a41$,a42$,a43$,a44$,a45$
dim a24$,a25$
dim a50$,a51$,a52$,a53$,a54$,a55$,a56$,a57$,a58$,a59$,a60$,a61$,a62$,a63$
dim b2,b3
dim c$,c1,c2,c3,c6,c5,c7,c8,c9,ca
dim c4(999,2),co(9,2),cr(10)
dim dc,de$
dim i,i1,i2,i3,i4,i5,i6
dim i$
dim tx,ty
dim z$,z1$,zero$
dim a10$
'----------------------------------------------------------------------------------------------
declare sub txt_Y(y1) :declare sub l(y1) :declare sub cl(i) :declare sub string_4B_3B(a$)
declare sub strings_2(a$) :declare sub string_3B_2B(a$) :declare sub string_3B_3B(a$) :declare sub string_4B_4B(a$)
'----------------------------------------------------------------------------------------------
function sa$(i):a$=str$(i):aa=len(a$):de$=right$(a$,1):if de$ = "." then ac$=left$(a$,aa-1) else ac$=a$:endif:return ac$:end function
function cut$(ae$):b2=0:b3=0:do:b2=b2+1:af$=mid$(ae$,b2,1):if af$ ="0" then b3=b3+1:endif:loop until af$<>"0":ag$=right$(ae$,len(ae$)-b3):return ag$:end function
'----------------------------------------------------------------------------------------------
for a=0 to 9:cr(a)=a*28:next'1000 text_colors
for i=0 to 999:i1=i/100:i2=i1*100:i3=(i-i2)/10:i4=i-i2-i3*10:c4(i,0)=cr(i1):c4(i,1)=cr(i3):c4(i,2)=cr(i4):next'1000 text_colors
'-----------------------------------------------------------------------------------
function multiply$(a1$,a3$):a12=0
for i=0 to 150:a25(i)=0:next
for i=0 to 150:for i1=0 to 150:a31(i,i1)=0:next:next
'
c1=val(a1$):c3=val(a3$):c5=c1*c3
a1=len(a1$):a3=len(a3$):a2=a1+a3
'
for i=1 to a3 :
a6=val(mid$(a3$,i,1)):a01=0:a26=0:a40$=""
a02=a1+a3
for i1=a3-i to 1 step -1:a01=a01+1:if i=1 then a12=a12+1:endif:next
a10=0
for i1=a1 to 1 step -1 :
if i=1 then a12=a12+1:endif
a8=val(mid$(a1$,i1,1))
a9=a6*a8+a10:a10=a9/10
a31(i1+15+ab-a01,i)=val(right$(a9,1))
next
a9=a10:a31(i1+15+ab-a01,i)=a10
if a9>0 and i=1 then a12=a12+1:endif
next
'
for i5=a1+15+ab to 1 step -1
a25(i5)=0
for i6=a3 to 1 step -1 : a25(i5)=a25(i5)+a31(i5,i6) : next
a25(i5)=a25(i5)+a26:a26=0
if a25(i5)>9 then a26=a25(i5)/10:a25(i5)=a25(i5)-a26*10:endif
a40$=sa$(a25(i5))+a40$
next
c$=cut$(a40$):
return c$
end function
'
function st$(d$,i0):a$="":for i=1 to i0:a$=a$+d$:next:return a$:end function
'
function add_zeros$(a1$,a3$):a1=len(a1$):a2=len(a3$)
if a1>a2 then a41$=right$(zero$,a1):a42$=left$(a41$,a1-a2):a44$=a42$+a3$:endif
return a44$
end function
'
function add$(a1$,a2$):
a1=len(a1$):a2=len(a2$):a40$="":a26=0
if a1>a2 then a12=a1:a4$=right$(z$,len(a1$)-len(a2$)):a2$=a4$+a2$
else a12=a2 :a4$=right$(z$,len(a2$)-len(a1$)):a1$=a4$+a1$
endif
'
cl(990):locate 1,22:print a1$: locate 1,23:print a2$
'
for i5=a12 to 1 step -1
a8=val(mid$(a2$,i5,1))
a9=val(mid$(a1$,i5,1))
a10=a8+a9+a26:a27(i5)=a10:a26=0
if a27(i5)>9 then a26=a27(i5)/10:a27(i5)=a27(i5)-a26*10:endif
'
a40$=sa$(a27(i5))+a40$
cl(090):locate i5,24:print a27(i5)
next
if a26>0 then a27(i5)=a26:cl(090):locate i5,24:print a27(i5)
a40$=sa$(a27(i5))+a40$:endif
'
return a40$
end function
'
function dec(h$):i1=len(h$)
i3=-1:dc=0
for i2=i1 to 1 step -1:i3=i3+1
i$=mid$(h$,i2,1):i4=asc(i$)
'if i4>47 and i4<58 then i4=i4-48 :endif:
'if i4>96 and i4<103 then i4=i4-87 :endif '48:0,57:9____97:a,102:f_______
'if i4>64 and i4<71 then i4=i4-55 :endif '65:A,70:F
i4=-(i4>47 and i4<58)*(i4-48)-(i4>96 and i4<103)*(i4-87)-(i4>64 and i4<71)*(i4-55)
dc=dc+i4*pow(16,i3)
next
'
return dc
end function
'
function hexb(aa$) :a0#=len(aa$):a10#=a0#/2:if a10#<>int(a10#) then :a11=a10#+1 else a11=a10#:endif:return a11:end function
function hexb$(aa$):a0#=len(aa$):a10#=a0#/2:if a10#<>int(a10#) then aa$="0"+aa$ :endif:return aa$:end function'
'
function dec$(a$): a4 = hexb(a$):aa$=hexb$(a$)
if a4>0 and a4<4 then c1=dec(a$):a51$=sa$(c1):a3$=a51$:endif
if a4=4 then strings_2(a$):
c1=dec(a20$):c2=dec(a21$):c3=65536
a51$=sa$(c1):a52$=sa$(c2):a53$=sa$(c3):
a1$=multiply$(a51$,a53$):
a52$=add_zeros$(a1$,a52$):a3$=add$(a1$,a52$):
endif
if a4=5 then string_3B_2B(aa$)
c1=dec(a20$):c2=dec(a21$):c3=65536
a51$=sa$(c1):a52$=sa$(c2):a53$=sa$(c3):'
a1$=multiply$(a51$,a53$):
a52$=add_zeros$(a1$,a52$):a3$ =add$(a1$,a52$):
endif
'
if a4=6 then string_3B_3B(aa$)
c1=dec(a20$):c2=dec(a21$):c3=16777216
a51$=sa$(c1):a52$=sa$(c2):a53$=sa$(c3)
a1$=multiply$(a51$,a53$):
a52$=add_zeros$(a1$,a52$):a3$ =add$(a1$,a52$):
endif
'
if a4=7 then string_4B_3B(aa$)
c2=dec(a23$):
'4B:FFFFFFFF
strings_2(a22$)
c6=dec(a20$):c7=dec(a21$):c8=65536
a51$=sa$(c6):a52$=sa$(c7):a53$=sa$(c8)
a1$=multiply$(a51$,a53$):'FFFF0000
a52$=add_zeros$(a1$,a52$):a3$=add$(a1$,a52$):'FFFF FFFF
'FFFF_FFFF*1_000000=4294967295*c3=FFFF_FFFF_000000
ca=16777216:a56$=sa$(ca):
a9$=multiply$(a3$,a56$):
'3B:
c9=dec(a23$):a57$=sa$(c9)
a58$=add_zeros$(a9$,a57$):
a59$=add$(a9$,a58$):
a3$=a59$
'printr:printr "end":drawtext():SwapBuffers ():end
endif
'
if a4=8 then string_4B_4B(aa$)
'4B,1
strings_2(a22$) '123456789ABCDEF:1234_567
c2 =dec(a20$):c3 =dec(a21$):c6 =65536
a52$=sa$(c2) :a53$=sa$(c3) :a54$=sa$(c6)
a1$=multiply$(a52$,a54$):
a52$=add_zeros$(a1$,a53$):a3$=add$(a1$,a52$)'FFFFFFFF_00000000 *1_00000000
a54$="4294967296"'$1_0000_0000
a4$=multiply$(a3$,a54$):
a61$=a4$
'4B,2
strings_2(a23$)'$123456789ABCDEF:89AB_CDEF=89ab*65536 + cdef
c2 =dec(a20$):'89AB=35243
ca =dec(a21$):'cdef=52719
c6 =65536
a52$=sa$(c2) :a54$=sa$(c6)
a53$=sa$(ca) :
'
a10$=multiply$(a52$,a54$)'a52$="35243",(89ab)____*_____a54$=$10000=65536
a55$=add_zeros$(a10$,a53$)'a53$="52719",(cdef)
a63$=add$(a10$,a55$)
a60$=add_zeros$(a61$,a63$)
'
a62$=add$(a61$,a60$)
a3$=a62$
endif
'
return a3$:
end function
'
sub string_4B_4B(a$):a22$=left$(a$,8):a23$=right$(a$,8):end sub
sub string_4B_3B(a$):a22$=left$(a$,8):a23$=right$(a$,6):end sub
sub string_3B_3B(a$):a20$=left$(a$,6):a21$=right$(a$,6):end sub'2 returns
sub string_3B_2B(a$):a20$=left$(a$,6):a21$=right$(a$,4):end sub'2 returns
sub strings_2(a$) :a20$=left$(a$,4):a21$=right$(a$,4):end sub'return a20$,a21$
'
declare sub window(x,y)
'***************************************************************************************************************************************
window(1800,1000)
zero$=st$("0",50)
tx=120:ty=40:textmode(texT_OVERLAID):resizetext(tx,ty)'
start:'multiplication
'--------------------------------------------
a1$="655356987790137"
a3$="655371899794678" :txt_Y(2)
'--------------------------------------------
a1$="16777215123123456987345987"
a3$="16777216123123678532718432321" :txt_Y(3)
'--------------------------------------------
a1$="16777215":a3$="16777216" :txt_Y(4)
'--------------------------------------------
a1$="16777215":a3$="65536" :txt_Y(5)
'--------------------------------------------
a1$="655356987790137": a3$="655371899794678" :txt_Y(6)
'--------------------------------------------
a1$="962167772151231234569873459879879755673456321874126" 'max.length without new adjustments
a3$="1677721612312367853271843232143219895489794346" :txt_Y(7)
'-----------------------------------------------------------------
aa$ = "FFFFFFFFFFFFFFFF"
'aa$ = "1234" ':81985529216486895 '(calculator:10.1910.0.0 2019 microsoft)
'
a9$=dec$(aa$)
L(10) :cl(099) :printr "results from multiplication"
'-----------------------------------------------------------------
l(31) :cl(990): printr"$Hexa-Decimal = #Decimal"
l(32) :cl(739): print "$";aa$;"= #";a9$;" Bytes = ";:
l(33) :cl(463): print "(about 18.5 million Tera Bytes)"
l(34) :cl(197): printr "$FF:8 Bytes"
'-----------------------------------------------------------------
drawtext():SwapBuffers ():end
'***************************************************************************************************************************************
sub txt_y(y1):l(y1): a2$=multiply$(a1$,a3$): cl(990):print y1;":c$";:cl(900):print a2$;:end sub
sub cl(i):color(c4(i,0),c4(i,1),c4(i,2)):end sub'1000 colors wo comma
sub l(y1):locate 0,y1:end sub
'----------------------------------------------------------------------------------------------
'new_hex_38.23,version 1.3 12:57 PM 1/22/2020 Hedgehog_PCN
'***************************************************************************************************************************************
'https://www.calculator.net/big-number-calculator.html
'https://www.rapidtables.com/convert/number/hex-to-decimal.html
sub window(x,y):SetWindowWidth(x):SetWindowHeight(y):SetWindowBorder(true):UpdateWindow():end sub
'***************************************************************************************************************************************
04:convert_photo_PB_12.gb:
'
'copy all data (from 1st byte:ff - last byte:d9) into a notepad, save text as :pb_01.txt (into same folder)
'the file_size is :55490 (or 55492) bytes
'
'start :convert_photo_PB_12.gb to receive a new file (into same folder) : 01.pb.jpg (27471 bytes)
'This is a photo (in jpg-format) and can be viewed with a paint_programm.
'this photo is needed to demonstrate :blend_function with textures.
'------------------------------------------------------------------------------------------------------------------------------------------------------------------
'
dim a$(99),c$(99),d$(9999),da$(9999),d1$,e$,d2$(99999),rp$(9999)
dim i1,rb(100000),e,i0,wf,f,i2
'-----------------------------------------------------------------------------------------------------------------
declare function hex$(a,s) :declare function dec(h$) :declare function r0(a)
dim ba(4),s0,s1,s2,s3,s4,s5,s6,i,a,c,i001,i002,i003,i004,dc, s=5'amount: 1(1 byte),3(2 bytes),5(3 bytes)
dim h$,s$(s),s1$(15),b$,i$
reset m1:for i=0 to 15:read s1$(i):next
reset m2:for i=1 to 4:read ba(i):next 'ba=byte.amount
'convert_photo_uc08f - convert_photo_PB_12:2022,6.21 -------------------------------------------------
declare sub file_error()
dim l1,l2,ia,file,i4,i3
dim p1$,p(99999),p1
'-----------------------------------------------------------------------------------------------------------------
resizetext(100,40)
'-----------------------------------------------------------------------------------------------------------------
file = openfileread("pb_01.txt"):file_error()
i1=-1:do :i1=i1+1 :da$(i1)=readline(file) :loop until da$(i1)="":ia=i1-1
'
l2=len(da$(ia-1)) :l1=len(da$(ia)) :printr:printr da$(0):printr l2;"/";l1
'
i2=-1
for i=0 to ia
for i1=1 to len(da$(i)) step 2
p1$=mid$(da$(i),i1,2) :p1=dec(p1$)
if i=ia then print p1$;"=";p1;"/"; :endif
i2=i2+1:p(i2)=p1
next
next
'
printr:printr p(i2) 'last byte:217,d9
'
file = OpenFileWrite ("01.pb.jpg"):file_error() :for i=0 to i2:writeByte(file,p(i)):next :CloseFile (file)
end
'-----------------------------------------------------------------------------------------------------------------
function r0(a):dim x2:a=a+1:x2=(rnd()%a):return x2:end function ' 0-10
sub file_error():if FileError () <> "" then print FileError ():end:endif:end sub
function hex$(a,s):dim s0,s1,s2,s3,s4,s5,s6 as integer
s=ba(s):s0=s-1:s1=a:s2=a:h$="":for s6=0 to s:s$(s6)=0:next
do:s3=-1:do:s3=s3+1:s1=s1/16:loop until s1<16
s4=s0-s3:s$(s4)=s1$(s1):s5=pow(16,s3+1)*s1:s2=s2-s5:s1=s2
loop until s1<16
s$(s)=s1$(s1):for s6=0 to s:if s$(s6)="" then s$(s6)="0":endif:h$=h$+s$(s6):next:return h$:end function
'
function dec(h$):i001=len(h$)
i003=-1:dc=0
for i002=i001 to 1 step -1:i003=i003+1
i$=mid$(h$,i002,1):i004=asc(i$)
if i004>47 and i004<58 then i004=i004-48:endif:if i004>96 and i004<103 then i004=i004-87:endif
dc=dc+i004*pow(16,i003)
next
return dc
end function
'
m1:data 0,1,2,3,4,5,6,7,8,9,a ,b ,c ,d ,e ,f
m2:data 1,3,5,7 'hex$(a,b):b=1:1 byte,b=3:2 bytes,b=5:3 bytes
'
'*********************************************************************************************************************************************************************
'end of program:convert_photo_PB_12.gb (copy to this end)
05:pb_01.txt '1st byte:ff , last byte:d9 (use Ctrl and - for smaller text in html)
ffd8ffe000104a46494600010101006000600000ffe1002c4578696600004d4d002a000000080001013100020000000a0000001a00000000477265656e73686f7400ffdb00430007050506050407060506080707080a110b0a09090a150f100c1118151a
19181518171b1e27211b1d251d1718222e222528292b2c2b1a202f332f2a32272a2b2affdb0043010708080a090a140b0b142a1c181c2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a
2a2a2a2affc00011080162025d03012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1
082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9
bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b5110002010204040304070504040001027700010203110405
2131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a9293949596979899
9aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00f3ba28a2be7cef128a0d14c04a28a2810bda8a28a062d2d251480292968a60
14a3ad252d3448a29d4da70ab421453a9b4eab1052d1455210521a5a4ab44b1334d34ea69aa4212929692a8434d21a53494c421a4a5a3193c734c4368ad5b1f0fde5f2068d319380315df68bf0cd0ac4f74379eac4d633ad086ec87348f36b4d36eefa40
96d0b3e7be38aed343f86f35caefbcc9f6af56d3bc2b676118c46b9fa56b471471ae23500579d531dada266e4d9e7565f0fededdff00d5818ef8ad73e1ab6b7b36250631e9d4d75bb0163552ee133cab18e1075f7ae4f6d296ad917671ba7782ed1a7373
2443731e323a0ae9e1d26d6150b1c4a00f6ad0d81785e00a936e100f5ace552537abd00a1f614e81401df8a6dc5ac6ca1028abec71c0e95113cd73caa463a019a74cb753f7071ed552e343b79fe67453e8315b6f822aac8c4f0bd2a7dbb19807c3769186
610a93f4eb59573e188662728013ed5d83380bb4726abe41908eb5d0aab63bb470371e078796da3f2aa6be0f8564c34781ee2bd2990639159f25ba6f2cdd7b7b56b1ab3ee3e767173f83edfc93b14038ae5efbc3d35bb9da0e3b715e9172ceb280bca77f
7a858c375c328cd28d7a917a8d5468f296b2995b1b18fe14359ce8bb990e2bd36eac6d51400a0f7e9598f630dd1658c7d78ae9fac2b5ec6cab33cfc8c534d74b7fa179721fe1acc9f499635dcbf30fa5691ab1975355522ccda4a7bc4ca7914ce95a9a5c
296929690c5a28a2801b452d36810528a28a062d14514802929690d00252d2528a0028a28a041451d28a43128a28a0414b49450326a28a2ac62514b4da0028a5a4a042d028a2818b45145200a4a5a4a100b4a2928aa421d4e14d14e1568914538714da70
1c55085a29296ac414869692ad1221a6d38d21aa421b4869690d310d3494a6936e480064d5086d76de07f0a1d581b999095ce1722a0f0b7826e3589964b94648b774f5af6ed07428749b1589102803d2b8f11888c572a7a984a57d1193a4f8763b565010
0039e9deba986148e300014fd807dd18a5c718af9fa95db91161921cad43d2a4938e29a71b6b92556ec76189824d465c02cc6a403e5e3bd579bef851d2abdb2846ec2c491aef393d2924cb3e47d053e33f262924c281eb52eb5e2162223d69028c7279a4
63c66a3070a589c0ac6353debb2ac4171260902ab337f0af5a74f261b00618f4a4863fef1fa9ac79b9e61b11baec5a8548fe0eb52dd36e384e951a8d8bea6bb29cbb085dc1473c9aab3fce4e38a98e02ee6ebfcea9ce5874ea7ad6eaa348562adc47846c
ff00faea3b6b3531ef23af4a9253be411ff08eb53f98a8b91da93ad6d4562adcdb205f2c72c7a9ac99e38ec8ee8ce40eb5a1713ec6c93f7bbd61ea52338d911ceeef4539b93b4ba8ec4f71125f5bee52335913c6624d8e3007714e479edf014923d2ac31
59e1cc9c0f7ada0a70767b0d188e901621d41355ae3498a452d09e7d2a6b88124999558afbe6b36e2f2e74b6cc9b9e2f51dabab9a57b45ea68a4d15a4b2963272a463d45404115d1596a16ba94380df37a1154efb4ff002c9602b4a7886e5c935666b1a9
dcc9a2958156c5262ba8def7129334514c04a5a28a43168a28a00290d2d34f5a00296929450014518a2900514514009450692810b451450326a28a2a8625141a0d30128a28a0414b494b40c5a28a2a40290d2d25300a70a6d2d522470a514829c2ad0851
4e14da755210b45252d5a10514521ab44b10d252d21aa10da434ea4a621b8cf4aeebc11e0b9750bc8eeee93f76bcaa91547c1be177d6ee16464cc42419cf715eeda46971e9b66b1a28181e95c18bc4fb38da3b984a577643f4cd2a0b08956240303d2afb
7a0a4070b4dc9cd7cfcab3b6a4587741431016929adcd72caa6a5588641cd4521e2a7c735049cb1ae59cecae3181fe527f0a8ce0927b9a5da4714dda722b173935663b1202117351b3124b1efd050ed9205358f7fcab47349008d962145432305538e40e
9ee7d69e72aa7dea090646054b9b4ae056dbf3966392695496e074a715a457db9c7615116f601a6350c7b9e829bb42e73d053d5782c7a9a86424703bd74c2a58562276f9b18c9f6ed556e1c2b00066ad3139d918dcddea9dc7c9c6793f79bfa0aeabbb08
ac57e6eb51b827f8b02a269c2498193ed4e91fe40d81cf73dab3bf33f40b193a8cd237eed0741c9f4ace8b722fcff367a135ad22fdaa52a72b1e72cdeb505f6c317956cb8da2ba9ce32484ae66cb32db649f9d8d51b9b8223dcc703ad595195c483049c7
3daa45b48dd48619f735d1edd2b5fa0ed6386d5fc462d6e14202003cfafd4d6b5ade5b6b562390c48a8f54f0a5bdc4e4dcfdc27e55155edf453a63e6dc158f3c0aeda92a15229c5da4099564825d26ef7c2498c9e47a56f457cb776a0363762aa4f736d2
4612420b5675c092d0878bee1ed59b5ed6d7dc362ecd6e4b74cfa1aacf191c30ab36d7a268c336053e728ebc62ae13945da46b19346632e2995a6b0a347c73f5aad2daf74ae955237b1ba922b52d0c857a8a4ab2c5a28a28185369d4868012945251400b
45145200a28a280128a28a0414514521935145156312929692980514514082945252d218b45028a002928a2801696929455210a29d4d14e15689169d4da70aa10b451455a105141a4ab108690d38d36a8912b4b44d1a6d62f9218d5b67566c547a4e9926
a97cb6f1f7eb5ee5e12f0c4361021640182fa573622baa51f3329cada234bc1fe1e8747d2638d500207a574069f1a08e3da28db5f3f52a39eacc6c4656984f6a99c7a54047cc6b86a3b6c52143629a783f853338e4d2eeddf962b86553a32ac2f5350c83
03ebcd49bfe6fc0d44efdcf43445a6b502366014e6a26e4281df93ed524a01603da9157824fd4fd2a64afa0c89976d429979198fdd152cb938f56e07f5a78408028e8064d66a3cf3f24045247b940cf3e950b26d5c1eb563eeee7ea4541212a417eb9e07
726ba24e2b5b08819496c773fa54471fc3d0f7f5a95dd470c78fe2c77f6fa540c7cc38538cf523b7b0ac1ce2b44313716caafe2c7b531c6385e7dea5e36848871504cfb7213e627ae2b48bb6ac4442403201ff00788acdbd6677ce7031c01d055b972ab9
91828ace9c19d3e5cedf5abf68ed61d8a63e66254e141e5bd6a594feef84fa02703ea6a48d15179c337651d0557ba463b999b03bd5d37ad8194ee2e906630fb9fbb0e82923d82024724f7ae535b9ee8dc0487f75103c7bfbd58d335959d7ececc0ba8e46
6bba7426a2a711199e29b8ba4626d1ca01d48aade1af10cf22b5bde36f71d0d6c6ad6ef7d6ecb195822fe39dbb0f6f7af3f92ee0d275d45b3667407976fe2af5e8538e22838db527a9d96a775759338e89c85a5d3b598afad8f9bc1c608a99a78ef2c55c
7018735c749235a6acd0407e5639a9a54555a76b59a05b96b5783178268b3c366b76058ae74f1bb038aa13c01ac4bb1cb62a3b2ba11d8b0ddcd39de7056e83295ebbd9bb79606df7a7e937e2e18a3f2d56ad608b54565279158ba85bff0061ea0b2a8250
9c1c76ae8872d44e9bf8836d4de9e5923601460558815b66e2720f6a6452457966b221c9c536d6e83318c815caef6b5b61f51660ad9c553642ad56a57549307a1a575564eb5ac276dcd23268a7d28a7b0c9f7a65745ee742770a69a7e29b8a63128a3145
002d14514861486968a004a4cd2d1408296928a4326a28a2ac625252d14c425145140c2969296900b45028a401494514c0294514a2a91228a70a6d3855a10a29c29b4e1542168a28154841486968ab258d3494eab1a7d9bdfdfc56f18c976c1c761557b2
b92dd91ddfc2dd18dc5e3ddb2e57200af6b8a111818e38ae7fc15a147a3e911a05c1c574b8f9abe7f195b9ddd1cdbbb8672d4a0d348c12690301debc973717a942b9a85c7269ccdf3531cf53594a77191919a42319edc668df8e40ef51b3e1c7bd723e56
ee31cfc7d4d46546467a62a661f360f403fa54531fbc071c004fa55bb4558086438c7a9038f41ffeaa56c34381c648ebe82a26f9796ea471ed49bb2a7dc601f415cb2a9ab4506ecb165e70300d31ce00079c7273dcd4e8c02800719eb55e52646214e3b9
3e82b39a718efa80e0fb9549e307afa9f5a8b68f30b13bb0319fe94aff002c81067e518c535d82aec046077ed5a467d1f4158af3b7cd80a01c5578c10c59f84ab9b17efc9c2f607f88d5495da57e9927955f41ea69726bcef718d77dd9dbf2afa7ad5796
4200118e3b9a95d76e7a13dcd40c09e59b03155677d40a86169df3212d8e719a8ee385c2103dc7f4a95a42b190064bf402ab1566272c38ebed5b42d6f31104436c9c1c9f4f4a6ddb20461919c74a5b89fc8e46dc7d39aa12c6f37de73f3761fd4d774396
31b08e6b5ada5f6a7cc7e95cbcf2496da944f6e77b83fbdda3e551e99ee6bb0d491416520b9e467a015c26b978d0329851a4756c6d1c2815ed611b9ae40b6b73a3be9e5d4adcab9da98e116bceb5ab436975995d6339e137658fb9aecb4dbc9a6b70d732
2dbf1c8079ac1f123e9b0b66084c92c87e699fad76606f4aa380e5dcd0b5bf106931b5cbe1557b77ae56e35a173ac2bc6bb230703d4d6a8517564110e5718ae56684dbde94271b5bad77e169439a57dc52563bb4bd3259e0f4c5528265666453d7af34b6
b241169fb89dc715474f9965bc7ec335cd1a6ad2b741f526b3bb974cd4caee3b5ce6a6d7ee0ddc209aafa96c1751953939a5bc70d6bcfa55f2a738d4b6a2e85dd22665b300678150ade94d4429e3269da23eeb620566df868f5446e99353182954926267
4f7033107e3a550fed029f29ed4bf6926d403fcea8c837a922b1a74d6d219b36b3a4e33d69d37cae315cfe9b78d15e7964f19ade9be640c29ce2e9cedd0b8c8900caf1485692de4de306a72b5a58dee57db498a98ad376d4d8645453cad3718a9189494b
49400514525002d14514864d451495630a4a5a4a601451450014b494b4805a334514009452d25002d2d369c2a9085a70a68a515648ea70a68a70aa10b451455a10521a75255a25895e95f0e3c3825912f255f98f22bcd80c9c0ef5f41780ad3cbd0e262b
83b063f2ae7c4cb969b30a8fa1d642a234555e8054b9a8c714eddf2d7cc4a64039e0e2a072454c79e950b9c115c559dca4380ca822a073903f2a9430552076aa8ee4b127a6eae59d45149752921ec7818e951370c0fa734e661b40c6306a1924e7f4a89c
a315702c2c80e49e40e7150cdf3efe7009cd303ed5fd29aafb9067924e4563ed1cf46315c86ebdea23b71d7b7148ce072699b8756e73d854ca498cb3f7379fbd81c0c7526a2c08a3c3b659b938effe4d33ccc0cff17f5a787df1b02a3038cd5269ec2203
85cb0c608e327a7ad0bb190eec86c71c5211c85404f3d40eb43aed3b003d7f16359c134ee04170db54027a7415146c0ab633eac4f534f9130d973b8e7a8a6e3e65e480bce00e4d6916e33bb0e83597248aa773204c03f330e303a0ab53cac3f7631ebf28
e4fd7daaa3a6e7cb71df1fe7a574caa26ac84540b248e30339f4a8e6c4436ae3d49ec3f1ab52baa215504823eefaff009fcab3ae1b0bba4edd013fe7fc4d38ae563dca53e1cb64fe27a9fa54066468ca0ddf2f071d58fa52c923ccc7036faf1d0551b86f
29b0b9e9823d6bb295930b1475597740db768238ce383ec3d6b9396d1266607927ad7537ed1c713c931cb32e17d87a01dab8ed46e4c5bcc6768eb5ec61e2ef6425b1ce1bb6b7d5becf92792319a9f56485acdcc8d96c64015970b25c6b8ee7b0e39ea6a2
d5ee5b718c138f6ef5f42a97ef2361742fe8777e643e5b1fbbc555d7e011dcac8ab80dd6a1d0a458e562deb57bc4127da214083eed55b9311a0dea8b7a1c31dc589dfd40aa90c7e4df4a07001e299e1cb82bb909e3352dfb1595da3acda92ab28f703367
99a4d440dc4807d6b4ae5c0b6e4f6aa7a7da99a532b9e734dd53cc07683c0ad9a529a8ae81b234b42b931a1f4a86fae44da8a03eb468d1916b93dea95d8dba9ae0f39ace318bab261d11bb39d96608f4acdb3bcf35d94f6353de3b0b1fc2b1b4d38ba3f5
a54a9a706d83d19a53279574b22f1cd7430cc25b5158f751ee404549a75c1c6c26b0a91e7827d83666944fb24eb5a50b6f5ac790ed6cd5db29ba5671d8da2cba529a56ac6323229a56a996562b5195ab2cb5115a86864245348a908a6915231945291494
005145140c9a929690d50c0d25145300a28a2800a5a28a402d14514005149477a002945253855213169c29a29c2ad1228a70a68a70aa42168a052d5a105251455a259734dd367d467d900c90457d17e1bb66b3d1618dc608519af22f85d12cfabcc8c33f
74d7b90508a00e80578d985477e439a4ef2141f5a5ce01fa52531ce2be7eab71d810bbce0544cdf365ba5286ca81daa19cf20fe75c939fbb72921acff787b543bff1a1db8cd41bb07fcfad7915aa5a7a1a244ace7351b9e3df34cde73814c7719fc33fa5
28d4eac2c3e47ed4bbfe5cfa0aadbf24e7e94865c800f4ce4fe7571aaaf70b0f918b1c03480e1719c7bfa0f5a8c925b70ebbbf3a6963ebc03fad3e64ddc09038effe79a91643b00c700f03d4d544937364f41d29dbf20aa9c1e84e7ee8effd6aa2c2c59f
389da13e5cf1b877ff003cff003a63ed0bf32b640c75fd29b1b823710405e003d87a7d7b9fc05248dbd4938da01241febed9ebea781d2baa1efa2485402c04637276039c8f5fa54c154642105f19673d107f8d32352bf3b6e03dfab1f7ff000ed481b647
84e5b39393d3fc7fcf4a74eca5a832098004ece33d73d5aab3b6415c63fcf7ab27e61cf53d01eff97f215424621b764ed3dfafff005ab44b5b815e660738381dc95ebf87f8d529df7b7cb92c07de38f97e9e9562e4ee277b9948e8bd87e559d3dc6e6217
e651d970141f7ed5bc6370332e5df76c8e4da09e0f63fe3556e2560846ec90396c7f9c54d78db9497238e71ffd7ef542e27dd0600e31d00c577c15d24558e7b53bf65cab364e7ad7397ae6685f24e3dab475dcb60a313c73b471f9d62f98a22db91d3b57
d061e9a514d01836245bdfb29ebdaa4d613732b2f39a8572d7cccab9da6ae6a0df2443a66bd97a544c9e86759c8627007526b567532419ea4d67cb6857e74fad5fb325ad3731a555a7ef21a5d0a7612186e8ae715775124464835564548ef10ae4126a7b
fcb43d6a65acd30d90ed158f96c58fe75575590f9bc1ab96103456bbb1d7bd539eddee6e3e5e79e6946ded5c84f634f4c7f2ec32dc715952c9e66a408e99ad8f24259851d71597e488e60fdea69b5cd29058d4b821acc03e958f6f13472971d2af3c85c0
e38abd15a2c96fc0e7152a5ece367d476b8cb5905c0dbd48a6346d6f743d09aaf6c86d750c7635ad78a1d55c0aca5eecacb6646e3a4f9a207da8b7976e2a03718882d468e4138acd45d8b8bb1d1dadd0202b1ab980464573b6f3f4adcb49848801eb4976
66c9dc7b2d44cb5698542c293195985308a9d8544c2a0a22229314f3494806e2929f4940c928a290d50c3b5252d25300a28a2800a51494b4805a28a29009452d25300a514528aa448a29d4d14e156842d3853453aa908514b49455a1051452852cc00e49
38aa259e85f09a027569e5c1e8057b51ebcd79c7c28d39a1b291e54c1ddd7e95e8b21c1af9ecc66b9f439776c0b051cf4a61237107a76f7a6efe369a47957a7a57815aa334483205579e45f980a2593355647e4e0fd335e456c4b578a292066c8c7bd44c
d8534c6720e3f1150b4b9231d09c57136e4ee5a2476f9bf1a8d9fe6e3d0d47bcf1f4e7f3a85a4da57dc0ab51e804e5f83f5fe94cf330a4d4264f93f3fe78fe951bca01c1fa568a2c0b0b267bd31e4c66a3f314027d0e6a2328c01dff00ad6890ec4a2438
e0ede3afa5491b6c1c63db3dbeb55b215fae71f90f4fc69aae5989ec3b93de9b8b405df300c05ced19c13d7ffd74f5936f2a84b0c103a007d4ff009fa55269f60d993bbd075fa52472171bb3851c820f5f61edeff966b4a7cc9dc9668fdde19817ea49ed
f876fa55299ceee0b649e3032c7dff00faff0090a62dca13b3711c6588ff003c0fad577983332e73fc4c39c7e3dcfe3815d51b49124ad20c801b20f52bcff9fad569dfb2f07d57fcf1fd2a19e70ac413b863927f4f61fe7ad5469f00f20b632d9380beec
c6b68465b2023bb2bf31621b8c64f41ec3fcfd6b31ee010464291d38c9fc33d3f0153de4a54967382bd4918c7e07a7e3cfa2f7ac392e3121209009e481d6bbe9d3695994896e9b27033eac49e9fe1f8f35837b3e3746586d27381d0ff8d68de5c020b16e
00c74e9f4fff0050ae76fe4cb6e07393d4d7a1461a8d2333539bccca9e8bdeb98b99cace151b85eb5b3aa5c242bbcb60e3b8ce6b957b9324e5c018cf00d7d26169fbb7264cb2a72fb40db9392deb562f63691a30bfc350c32c6e3e6f94fa55c42377e15d
13ba770dc251fb927d0532cf8b519fe23d2a49b98d957b8a6db88caac0ff002b763595fdd18c36e64bd0ddb15a56f66b70c639c633d0d4b0d8383803701d08ad8b5b58aee1f2c36d997a572d6af644b667a5b0b3262940298e0d5596d45b4c6541946fd2
b59b2bbad6ed7e61f75b154c48b19682e3a76aca3396e490481268fe43f85635e232ca157d6b4da36b79898f2509a924b74940700135d109a83bf41df4112cd4d8ef23903ad4f60c0c656ac4285ed4a9e303b553b73e4dcb2939ac799cd341d4a37ffbab
d07deaf97df6a2a9eb2019148f5ab118c5964fa56d2d611625b949e4f9f1526e013359ed266e88cf7f5ab673b456d28dac34598a4c56a59dc9561cd64443e5a9a290abd6124691763ae89c49183de918566d85c1e056a704546e68576150b0ab0e2a1715
0c64469b4f229b523131494ea4a063a929692ac625145140051451408294525140c70a28a2900945149400b4a292945522470a5a414a2ac43c528a6d3aa8428a2929d5684253918a3abf7520d368aa259f48f82bc993c3d14d08037a86fd2b59ce5ab9ef
87d306f095b9036feec647a56eb3e326be53314a13b1cb01dc1c9efe95048c09e286707ae73ed55e4908c81c9ed5e2559ab6a6a8491c85c03dff002aa8ef962318f6a749229e49c64e066aa4ce7a83f4af0e5efcae6887c8f9ce0fe355e497697fc48ff3
f9546d3753d0f7a85e5cb11e9c7f87f856b180cb0eff002b1ce38cff009fcaa191fa73d0715179bb940cf5da3f5ff0a89dbf7a48e87fc6b58c064be62f233c2e17f5c9a85a4258b019f4fa9e9f90155da6d8b91c0c1207a9cd31e40a793f77af15b46051
6fce545cee381c0f73513cbf3739eb8c8eb556494ac8cee79031f376f6a8c5c1fe2c0c738f7fea6b454c762f79c0b6dcfca0f201fbbffd7a735ce70410a8a70a3b0ff1359c87cde554be0e304e003f854335df96c7cc70b83819ea3e9e9f87e75a2a3727
4350b0563b79623273d71514b73248e553200e39aa4b3c8f1a9552887f8883cff89f7e9482e1227259832af2cdd48fe9f414d526893403ec8d59986dcf049c213ec3ab9fa7151c92aab0df9258feee32b9c9f5da3afd7a0a83ed1f36e27cb239739f9803
db27247e42b3ee7558e18d8c3186673f7df2777d49ebfcbdab7a74d499362e4f705c0690edc9cc607ccc7dc761f5e49f5acf92fd220023ec21bb93f29f53dc1fc8fb9e9541eee69a63248ed2cb21c9c1f99c77f7c01e981556e2ef748c8eaa8abd635fba
9ec4f4c9efd4f6af429d3b3b8f948eeafe4927608198afddcae368f61dbf2aa811e45606400f273d79f4f403d49fd4f152ca015e242873ca000051eadee7b67a5417cf8418f4e011c7e5debb6295ca2ac8e07076b11d08e6b1efa6ea33918f5ab93bb2a9
925232d9c7218fe5d87e15cf6a17585c67af5c9aefa14af2030f5dbd2d279119c0ea6b14120f1562746967959470bc9aaf8afa6a71508248e77ab2d46cb2260f0d57ad5f7c78ee2b2e1389056858e4cec074a8a8b42e2cb71072c70a4d5a11c531556043
8ef8a9ec229109902eec73b6aec82dee7062c2c98e4579b3a9691571d6329b4991657cc67bd696a364d194bdb07fde7751deaad81b79ac9ecee80128e067a9a811ee74b94c6ecd22638cf6ae292729dd6ff999bd475d5f34f1069936cabd4d215b7d42d7
e439907a7ad2d9bc7a84acacb863d45472e96da65d07849c37f0d52e54f97660450a3f966290723a13daaec368218b2e383eb4c8437db94dc8c2b1e2ba2d42cd5b4bdd175c6735955abcb24bb89b3256cd843bd3815817cc61b927be6ba2d22e4dc44637
3823839ac6f12db796db92b4a126aaf24871dae62dd4de748bc9ab8f2edb3c7b554b0b76b86e3d6b55ecd522218e78aefa928c5a89472a2526eb3ef5b3ff002c01aa5716445ce501c66accdba3b700e6ba26d4ad62513dbbe54d383624aab68495352f47
ac5c75651b7632004735bb13875e2b94b69304735b76b72428e6b99e8cd62cbee2a16a977065c8a89aa5964469a453cd262a4636929d498a401452515450525145310514514005145140c5a5a28a90109a283475a620a51494a2a900e14a290528ab2470
a753453855210b451455a10518a3bd06a8967b77c2cd516e3c36b0160cf16508efc575ece18107a5790fc2abcf2752b880b6376180af52b89f6371c1af91ceaa28d4d4c231b3b0f69b660367fdeaad2cca09196c9e791c532494c8b807f015160ecf99ba
75af93a959cb45b1aa4124dd79c93e86aabcbce3f2cd365936fa9cff00b3551e607a37d73c1a98c2e5d89246e73dfa55667e4e0f247ea28924ca8c9cfb8aab2b8208ce0f6ae984444b2ca449e99cff00206a07b9e0a93ce4fe02a369b3827a67f2e2a9dd
b2a6ece4920f4ae9842fa0ee5a6b91274f9bae3f4c524b388f049e73903dfd4d65c175e5b3798eb85e081c2afe27ad60ebbe27b6b66f2a39725b3ca8240aeca7859d49f2c50b9d2d59bf2de0924f2d5817cf3ce71f9753ed40bc19da8a491d5db03f324e
07d0570abe33b5b58582c72cac4f61807ffad58f75e38bf964c5a18ed803c71b987e3dbf0af5e9e55565d3ef2255a27a65eeae6dff0075e66ee7a6edaa3fa9a8ada59a77dc922a9ecd1c6cedfcb8fae6bcc60d7a7dc3cf218e79c93cfe35b71eb50941b8
0618e4808e3f1f9588fc715bbcb650e84aab13b7fb4b06f98c4cfd393bcfe3f37f5a6bdfb2e30e9b8f46523207fb38185fc327deb98b3d4a09dd764a803700792a7ff4023f90ad39674fb9e6ac39f4818337b7cd802b92786707668d54932fc774d21f2a
35caaf25429207b9f53ee4d364649a6c961249c0550de6b1f6da9f2a8fa9aaf1286b7e4aec4390a48da3dcb1e33f9d35ee2ea7431a4e648fba29da9ffeafe759a8a4c64b2165475210aab02eccc1501fa0fbc7d893545a42b20211b6670a48dbcf739f5f
7ebf4a984c616504233af4f97711f40781f9538a457120fb4dd451f1c2ed32bfe80e0fb007eb5b41740d8a92c4de5f98a14460f2ce76c60fb0ce49fccfad5296c269c339902a019264c2f1ea077fa7eb57b548ce11ad229814e37ca0866ff741e47e42b1
649ae18b33b631dd8f27f9d75d3beec467dca842c0380bfdec67358b7ebc13dfeb5bd705dfe727b7563d3f015426b3132e4f3ee7bd7a14a6a2eec6f638bba493cd2ce0f3d0fa8aafcf4aea6e6cd78128e7ad411585ab4a9e6a363bd7b10af168c5a312d2
de49e60b1a927f957496ba6a59c3ba420bb77f5ab16eb0db1648231b8742bce7daaedbe9b71773a99b318ce40f4ae7af88496a090b6288ea7e6dad8c0503ad44f6af15c82d1ed2a738f5ad79a3b645fb3c88d14918cab74cfbd52b6945dac9131fdea9c0
3dcd7951a8dde4b61962f6c84f6a97b10092a0cf1de961f2751894ef065ee2abd9ea645bcb6774ac245e327d2a092d9ed97ed76848f503bd25197c327af427cc92f2c66d2ee16e6d7e703ef0a9e3b8fed128ce7156b4cbf5d4ac4c6e9f31e0e6b2af94e9
572a482133cd28de6f925f1211a7abda81a7878fef272315a3a2dda6a3a4f96cc376318a2068efb4cca2e54ad724269b48d571113e53b72076ac61075a0e9fda42eb72d5fc72e8da8168cfc8e79f6a6ddb7db6db775c8eb5a5a95b1bfb40c3924564d947
2f986060703b9ae9a72528a93dd1495b420d3e0f2b22b423b2690e5ba5365b710cebcf7e715b902a2db038ed535ab35ef2ea3dce75ad545d0523bd49a9e9ea2d72abdaa4ba957edc31c735a3728b2d89c63a5375251716238db74db915232f39a57431dc
32fbd38f0b5e8b7adc686c4d89315a304a56b255b32d5f57c27159d445a366d67cf04d596ac6b49be6ad756dcb59346a98869314ea4c548c6d2538d140c65252d21a6509451453012969297340828a28a063851494b52021a28a4a602d28a4a51c552247
0a70a68a70ab10a29d4da755a100a5a28aa420a4a5a4ab259b7e13bf6d3fc410c8bf749c37d2bdade6fb45bab2f208ce6be7c82468675914e0a9c8af60f0bebab75a4ac6c46f51d09af9bcf308e7055a3ba337a3350c8d1c8371c0f5a65c4ce10949b683
d3bd57b8b862c430e3eb59d7536d5c939c57c6d383be85a2e35e8d9fbd9c861c709d6aacda8428086b8c01d7e4273f974ae6752d4d933e5bba9ff7ab86f106bba8c91b449732043f7b0715ece172c957924899cacaecf4bb9f12e9305ca42d7aa9239daa
ae08c9fe94e92fa324ee257be7a8fcebc3b48be4fedcb58aec6e8e69963624f232719af774d1a530edb23b9b8511bf3938fd2bde970eb50bd395df99c73c5284929752acae5e17453f7860fb551d4ae26874f8db3870760671c9e3f9d57d4af6fecee8d9
3e9d2f9dbf8789b807d4fa0f7e949a24d3788359b71764882d831daa36fcd9c67f4a8c2e4f59d4b545648ba9884a1cc88ad3c2d772598bcd4523756195fb44a79efc01d3eb583ae58e9f6b6d24d2a08028ce51c918af56d5ac8cfa783136483b71827b67
f3c678ff000af05f8850ea7f6b8d638a63641797442549f722bec218785282491e65394ab54d59cc5fea61a66fb3f0b9e09eb5a9e0db05d6b5178e72cc9100cca38c8cfaf6a7f873c0d79adc49712248b6edf77cb5cb3ff40335eada1f86ecfc2d6b2ca2
dd23b9b851b541ced0bc03cf5febcd6d4e0a52b58ebad3853834b729eade1dd0a1b58d61d3bc99907cec5b21d4f2a73ebd474ae724d22ccb936be642cbce431adfd475377774936e31f7b1d7d6b15ef15b2472b9c123a8c1edf9d7a9ec29b8ea8f3a3cef
5b95a2b2b957204c661fc2b211c1faf5addd06f1e6876f92d1c8b912aa3e1548e0e41e3b56679fd18e307040c76ad1f0e4ab16baedf20fb447b70dce4af3f9919fcabe6b38c0463465529f43d0c3d692972c8da36f33302617518ce46d1c7a8f94ff003a
7c96dfbbf9998f73ba65e3fe03b6ba186cedc2121371eca49f9be9fe79155afb4f1b711a96c90766d07f43fd08af815884e5667aa99cf343e5e4ed774039dbb957f402a9cf73b541588a63d26c7e9935d11b4c459d848070d8b7208faf06ab3429220896
38db39e0707f315d31acb728e75650eade60524f4cb1247fe3c3f955436b1bc4de598cc99e4ee24fea4ff2ae9574a00aa22485813b86cdd81f9e7f4a5874f5552cfbc03dbbe3f115bfd6147611ca8d2ae1d58ec539efbf3504b66d1a80c39ec00c575573
6912a128ac0f750a7fc6abf95198428b57c75f982f35ac712dea2672434b8e424dcc6ed93c2a9efea4d4834d8036443c8ed8ae89ed631921761f418c545e5c8b90a76a91c71c56ff005993ea49461b4b6b78c332a83ea074a49ef6d923654670ea386e98
a921fde3cf6f732c7951c7cbd47d6aad9416f796b3db998191095054e48f4e68df5908a5761e5b74ba24baa91bcfb53af6c058cd6faadabfeedb89140edeb567c36f1cf6775a5ce019232549639c8f5a669373327db3499b0c22242b11daba1ca516d2e9
f8a646e43a95ac7789f6bb363caf2c3bd5af0adc25fe9d25bcc54ba12a6aa6893794d358cbcec63b41f4acd9925d075d13464ac53b6180e956e1cf1951beab541e64d712cbe1cd68720c12b7523a56a6ba8b7ba6f9a9cb15ce6a8f895a3b8d3848c738e6
b4b43f26f3444591b276e3153376846b3dd68c2dd0afe1299e5b031c928014e306a9f89ad4a4c1a13bf9aac226d3b5ff002a1dc23739c57433c114e8a198127d4d39354eb7b55b3256a8ada3ea6b258889f1bd463069e96b24f705e3c28fa5529ac8d8cd
e6c43e5ef5b7a46dbb8f717c7ad6355a827521b32918daac3e4329dd922b46de7f36cd47b547e22b611ae63e69da3cd0bdaed63f30a527cd454823b9957f0aee2c31ba96d2e4f9451cfe756b51877cf98b9fc2a849198d8678ae88b53824cbb14aec0170
48aaf707116456c49a789e30c3ad65dd5bb471956ed5d74e71764229da8323715699b6f068d36305b06acdd5be2b49c973d83a0db66c30ad8825f940ac6890eccd5ab798e706b296e5c59af453226dca335262a4d06d18a5a28190d14b4869162514514c
028a4a5a04145145218b4b4828a000d25293494c05a51498a5aa448e14e14d14e1548428a70a6d3855210b451455882929692ad12c4fa5747e1ebd92d2f1137363fd935ce54b6f2324eac1b073d73438a9c5c59125a1ecbb5a6b712a1ce47422b2afdd96
33bc01f4a87c3da9f9b6eb13bee38ea4f4ad5bbb35906e0335f018ec2fd4f116e8f61c1dce075356604e291b498edecf6cb0abf9abcee19e3daba2bcd2848f92381dab5efecad5e182527313aed181ca11d6bebb87650a9ced6e8e5c65ecac78b68fe166
d63e2459dbc11edb58241733b7658d0e7f5381f8d7bad9ddc4b7dba460119f9e3fce2b99b9bdb4b18dd2ce358d9f97931cb7b7d2aa2ea663c301c918c673935f5d182dbb9e3d6729b5e46f78bec52e5e29ed76fca1f6cb1c859b239c1e73cf1db1587a22
c7a75908d5879edf78eece4f2719a48f5592e2129b511586785009edf5acfb9b878b0a02803b85c574fb056b333e77cb63b38b549a38f71c3a363746dcab73e9eb59df6fb5fb64ed15b42aad216daa48c0e9b403d7fa735cff00f6c0f288663c0c2e1bbd
442f44a9bd9b0c4e3eb8acfd94a2f52395b474526ab0411b8fb3a95e38618c7cc39fe95cdeabaa3ed763cb9c9fbb8da33d87a556b8bc8522de5f0a00e7dfd2b12e75157c9c121f3f5fc6b78c55ef6348539115e5c395e5817619c371f5acf13ec911ae11
9b6924a83fa7b0aaf35c3310304bb8c8fa1fff005554331dc48620e724d6ae563be30b23552f4cc49738cf5c0e073d07a0ab904ed1e2546daca41523b376fc88ae7d2560a491dfd6b5f49867d4afa1b3b603cd95b1923a0c753ec066bcac7d48c693e6d8
7c977a1eb9a2dd3df69b15c22008f1ab6d61d0fa7e073f87d6adbee9d364aaf220ee570cbef9e87f1fd6ad69d6305a588b7b78f09101962319c0031fa52cd088e4dc01718381d3dfafd335f8eceac5d56e27ad04f97532da360ae3cc756dd81c633d8f1d
3f2c7d2aa5d5b99366cd8c8bc9655e9db919c7e63f115ab2db0767daa3e5505863938c8edd4107f0aaf24890b18d80328190fc82483827e9d39f7fad74426ef745946de1f21152605918e3e5ce17f03dbf9548d2dac6c51c15c75c1e87dc1feb562384cb
082814eee083c63d88edfe3daa336ec73b8062bf9f1fd453e64dea233eea3b69572acaa00ce193017dc63a542aa1ad903281bb2c5586723f1ed57278625dc86310ee19c7afb8edcfb64555bb5965b73f66dc33c0087214faf1c7e58fa56f077495c96659
61704b409c77dac4e476e338ac8599db518ad91f1111d77743feed58d41dad7cb82101a693a60673cf5fff0051047a52cf691e9966f70fb818d32599b3cfd2bd48a515ebb11729cecd6fad0f2cefdca43fca78acfb2677f115d2a2e3701c0e01ad5f0fcd
fda692dc34c76fdd50ff0030aa3a5107c5f7db8a98d78dc87bd74a7caa717ba42b91595bb5a6bb3863b649318f6aaebe6da78b1a3c9db30e49abf70603e3181636671b72c09a87c4d2797e26d3d900505b18cf5ad232729d9f5888a3acc5f63f105abc6e
0190fcd83d6acf89e32d0c0ec9850c096a4f1a1416d6f711aa2c91b8c6da3520f7de1cf305c65b603b7deb4a6db54e6fd03b97a6d32deef453f3ee3b6b9bd027974fbc680b6549e01ed5bbe1a7b89348db728ca40c648aced3ad16f3c52608fa6793441f
2aa94e6ee903dee5dbb83ed572927753d8526e305c2f079e2badd46d6df49d39a5f2f25475ae6f422fadde3cbb4794a7815cb4eb73d373b7ba84f7b1a6f6cb3da7cc7922b1b4d0d67aab41b8e09e00aea6f4c7656e3e4038c57236d3eff10671bb27b546
1db9c25d84f73a6beb1496d8b3919c7a57296a7c9d54c60fcb9ed5d95f41e6d99db9cedae02395acf5862ff37cdd2af0779c24ae37a34755751c6b06e51ce2b9d9a5f364c1c706ba16b83716bf770315cade0f26762b9eb5ae16376d3dcd257b1d05845b
a1e3d2b1f584d8e73c55ad22fdc26d355f586f37249ad29c651ada8475465da3ec9aaedc4bbab3a21892ade0b115d934b9ae0f627850347503931cdf8d685ba623aa574bfbcaca12bcac2342d65ca8cd5c539ac7b772a0569412645686a993e2929d4948
64145145235128a28a04251451400b45140a0628a28a3352006929692a805a5a4a5154891c294520a515421c29c29a29c2ac42d1451568414869692a8962629314a692a908e8345bd68b19c2e0f535e8da65c8bdb30549623a9af2182421862bd07c0733
c8ce8d9db5e4e6f87856c3372e867b33766407208ac5d6279adecf6e485192bf5aeb2e6dd7cc181593ae5889b4f6c0cb28c815f3191660b0b8b8b97c32d18eb439e279adddd798d9671c76cd547d5372796c7e60319a8b52502ea4dac170795c564e19a5
20f1b4e09afd7e9548dee794e92b1d1e9d2ff190c79c822ae33f98183907772bea2aad84126cdac08e38c8c56bdbd9c32a8cf9b296230228998f3d31c60e6b4af8ca54dd9bd4ca345b39cbe864563b190ee396e4d673de4f6edceff5e01e3f3aec66b340
ad1c0e401c10ca467f122b0af74a2f952179e719a71c4d3a8b46354dc7468e72e3529a77249c0e4e00efdc9aa925e36f3b42be07193b80fcab4ae7459d7ee45b8f5fba31540d9cc8fe5c9100dd7246302939a4cda29145e4cbfcd92c4637134d2589ce58
f1f955d6d267c33adb48115771e4118f5a7dae9ad296091c9d06fc237e55cb56b28eeec6a8af02c9b46c193e857f5af49f87ba53405ef255dd733801495cf931f5c9c7f131e80e38ac9d0fc37e72933e510f5078240fe42bd2b45b58eded563b787ca841
c0550467e991924fa9af8ccfb31a7ec9d1a6eedefd8da9424e5766bc680c380080bc823b8ebc532556d8a02e5972073d7e5c63f3a949202a93ce0938fd07f9f4a843853c1cb63258fe55f9fabdee7a296852742be66d248d841f6c920567bfef5d564384
725549e48cae08cfe5f955b79becf12120b7c9c807b00481fa7eb50b168fcb0514ae0039efc63f991f957a10ba42210264244646779dd91d1b6f27e848391ef55a669ae15bb81cbed24330ea338ebc719f55ab3236fb878f1c16fbc0e3208f5f5fba7fe0
26a5489a3b8dfb7391bbaf209ec7fe047f235bf35bd49667c8f71b523d892229dc1988c30fcf8cf7c54371a888e154b742ef839c0c8ebfc5f8f6fc41156a48ade470f236cce588c606debc7a1aaefae58d824a4f96b09fba800f9801db1d4f23f31d8f1a
c22e5b46e67239d165702e26bdba6590c8c481bb207b03fa763597a95fcba8dbb58da969c1fbe4af2bedcf5356ef5a6f135eedb4f32cec7761f076994fd3d3ebcd6ecd6365a3699bfcc530c6bc973d4fd4d7a7ed15371e657976ec45ce5ad2fe2d134b16
e194c9dd48c9a8b44b56d396e2fef701a4cbb7b0351e916fff0009078905f4f094810f51d08f7f5ad3f18cb0c568b6766c44b70c111546723bd74c9af69ec56f2f8896fa987a538d47c55717b147985576ab74a83c432fdb7c476f1c6877458c8eff005a
ee2cf49b2d2b41405c46c91e5cb0c738ae2b418cea9e2e9ef5589881e78e8074ad28d68ce53aab68ab20f2175fb19e58a16765312b827775ad03676e965b9810557233567c576ad2dac696f2872641f211cd4779349169c909d85dd7685ef9a955253a70
b770b9ada7bc13787d99141665eddab9cf084c20f134d1c8a1896e0fa574fa5c7169fa44714bf2b91ce57359ba7e8a2f35d92fa2ca146c71c06ae684e0a3562f662dd9d1f89079fa2ce3682761c5711e01bf104b2d9b8f981adcf136bcb6309b51f348c3
181543c29a43b48d7d22f965ba0c52a11f678392a9b3d83ed686cf88c34963941c8ae374d7106b2acfd49ef5db6b6c22b41ba4c66b97b4b25bbd4036efba7a8abc2492a2d3d86f73ab9ee09b4cede0ad70ed12cfa9b84196ddeb5decb005d3c8f45ae261
b67fed632c638cd2c14925268197cdbcf141f374f4acbb98d646fbb5d3dc2335af38ce3b8ae565256660cc3ad7461e4e5765f3683a18c443e5e2aa5e92d9c734e9a578d4956fd6b3a3bc696460d5df0a6dbe61c591249b67c1f5ad58c700d63c9ff1f20f
bd6a2498879f4ad6aad15865a1701462aa4cdbdb22a112179302a754e7359f2a888700428ab76ae7233509dbe5d3ad9be714a2ee35b9aa3a52d221cad2d59a15e8a283506a251452531052d251400b45140a43168a28a401494514c05a51494a2a90870a
5a414a2ad123853853453855210a28a28ab420a4a5a4ab44b10d34d38d2550896dce1c719af41f03395b9656e01e6bcfa1711b038aed7c1577bf585461b415e2b931d1be1a6bc8ce47a5cd182b9159f728194e7a015ace9f2e7b1aa573100b8f5afc9a9c
acce9479478a746c5cbcd10c07ed589a268ef3df8debb618bf7b239ec074fcebd275bb40f132b0ce3b8158f34c6e2d56d74f80248301c91d4fbd7e9f93e6bed28f2547aafc4e2ab4ecf42ac76466b769dced51c91ce73c11f856ae84c079ca1951d4a3a1
2718dadd3f5a57b67b5d2de291de5217976fe23dea958388e67f9f682a431cfdd1d727db8aed9d56a6afd4c2d7d8d2f174bb2fa7877878c0525474271cfd2b8d95ddc91e7cb851f2a9208fd45741ad4e2e649645da772af2bd09c7e95ccc9f7cd54ea750
49a1119918075dc80725243193fcc54921882831583bbe4e59ef571f97979a84311f4a52e76e2a5621f7fc4762b4ef72edb505bc498c12199b39ebc600a8e45b9bcc5bdd5dcd711678894f9683fe02b8fd69e43166ad4d26c6494891d6e1573f7957683f
8e7fa572e2715ca9b2e2997f47b211a8586d9d769040dbc13eca0f27ddb38aecb4f856d909e7cd61f33e7851e83d3b7d6b1b4e80c1262577033f2ef7624fe78fe55b69111c93b401950a31c57c7632ab9cacd9d54e362df0012d9e993efedf9556b89184
7c95dc474fe9f99c523cc42e47403fcfeb501958152a3bf563c0503afe67ea6b8210d4e8125897e54c65b68cf3cf71514c8cb0ee182c0838ed9dc0d4f1a12bd58b1c6093c8ebfaf34f7b72d11da483c6056aa7cad2626ae64c93b19a39562015b0a33cfa
30fd1987e3566064f24995d5508da4fa1c01fd0fe55622b10620c3048ec7b7f90298cf1416e637527038c0ce315b39a9e8912f431af23b79e67f325f355b2761e79ea47a773f97bd54b1d16cb9791177fde5667cf1d78fcff5abb73244c0632109dac5b8
f6fe5fcab065d2b4c9212e97d22b282cb1b4f80719040fc3a57a54fde872f335e8652d0b977a8da5934896051ee0a1c2750de99c74233d7d2b164f0fde6ad87d5ee5a46072234c05f6e9d6ae41691594c82d6682442aad1ed6cef5238fd3f97b574115ab
244166bb86d50f42c474f5cd6ee52a36f67bbebd4cdb473a258bc3f6690c606f90ed58b6f2df8559d2bc3a7ed2752be1fe90c372e7eea2f6fc6ac4763a01d562925d4d6499bee5d38dc91b76ddedc76abbab5cdf5d4220b236f35db03b4c5267691d7df1
5d1530b8be58f245fbdbb33e74d9c878cb529af265d1ec087279976f6f4e699e19d11f42479ae9983c839e6adf87b41b9b6d4a497505c4ecc77a91cab7bd6b78926b98b4d923b587e5da77c8cbc20a539ba76c1c3e63e9732d648b53ba678d03a464aee5
f5fa5636ade4c1af59c4ad95ce4e4fddad0f0d4d37d9160b2b469c93f3023073ea0d589fc3b76b3493eab672472e77296390476e6b54bd8d46a5a25a05ee6c4a8ed1864dac9b7eb53691088e167c8f98e6b1f499a5b8b95490feefa107b5686bd7d169b6
255233cf0a54e2bcd9d39737b25bb1dfa9c5f8951bfe122320f9e30c01f6aeff004953fd951150a4151daa8787f44b4bad34dcddc464790e4b139a7ea920d3628e1b394a9660a12b5af555651a11de225a6a56d7a037aeb181855e4e2b1749ff0042d536
20dcb9ee2bbe86ce286cfce9d95895c924d72d1db34dacbdc44a0425b8e2a68574e1287445347412c0b7166db54824560476696f210c39cd75519c5bf041c0e95cadfdc4897cfc7cbe95861dc9b71436477a372e0647e35cddf69fc175241ade92f576fc
e87eb59d732acaa7674af56839408b1cecb13f96d9cd6540ac92b67a66ba491d042fb85610f9a46c7ad7b3464da6691187e696accb2ed8b15030d8d9351ccfbba1ad6d7b163eda43e6e4d699907962b2a201454e66f940a9a91bb1742c19cf229f6b27ef
0557886feb52a8d8d59bb2d048de8a505454b9cf4acb8a421466ae472e57ad4c5dcd45a0d141a936129296929805145140052d252d20168a28a402514514c05a5a4a5aa421453853453aad123853853453aa9085a281455a105252f6a435689129b4e34d
354227b755dd96aeb7c1cd1c9ada94e71c66b8bcd74de0a976eb8996dab8c57163d37859a5d8867b3ffaeda070aa39a8e48c3cbbbb28a7c6e3ecff002739e0524842c38039afc8b54ce98ad0e6b50e6e8a0190324906b9fb7711eb0cbd89e6b78af9b717
120539276e71d2b9bb86d9abb11debe8f03374e575d0ceac7dd36b5a511e9e2403e56040233fe7ad71e25c5c126431ae7e6c75c743c77ebd2bb3be7fb6f85a6da06e847afb5707c3cd903a9ef5f5588ab77192d8c211562fcf29b992490396dc06770c31
3819ee7dc649ac9907cdcd5f52ca846481e99e954a4e188aa955f74cada90e3d29b8f5a9d40a6630d8358aaa57290a43be52323d81cf3f9574ba65b343087291c51e006654d9ff008f39c93f406b0edd64798840e78c9084027daba4d344b095f2ed4854
19332aeedb9ecb9e59bf21fceb8f1136d6e5c51b761045d6287cadddf66d2dee3a13f538157a50bb46d3bb1cf26aa427e5c2ab0c8e4b1cee3f5ee077f5e953a83cb027f1febfcebe72a5dcae74446aa6f219c0eb9c66acadb0604e3a609fe7491af739c6
3d7b0fe5f4a901cac6afd08dcdefe958c9be8590b288e419e06719ff003f8d38950a475f97352c8a1be604e49c01fce98f1000b0eaa3a50a49ee1a15b945273d466a8b972a5994bae4f4efdbff0089fceafcab88db07ee91cfa0dcc2a0857f7cca395e87
df078fd0fe95d30b25725b30e79aca68e48a5fdd316e8e300d725ae5a5bc7049b6552546507527907ffadffeaaef754d352e1dd94738e2b9eb8d1ecade6fb5ea1224501539f33a0edfcce0fd73d8d7b580ad152bc6fe8633b35a9c7c7632db5bc323ef8e
d012564231e58273827d8f4fad4baccd696b1c30da5d34f26093b9b017b607f7aa7d6b5882cec6f2c1238efa02ac8374851a1cf1c1fafaf4ae36d8b496a8b3a92e0632dc9e3a57d8d082ab25565f71cef6d0e9f4fbd17162d0bb2473a3641c679f43ed55
9efe7b5d520b9f3584d18c6f57c1e3bd63457135b4aac8f82a31f87a7bd25d5e4f14cb7137ef0b02adf28c053e80f435ee74b98d8f5d9f5f3afe9c97a5fc9d5ade2dc8f80de781d4363a71deb9cd76eee355d2567b69ddfcc405d11b233dc1fcab99d275
230dec690cd8997958e4efdc019fff0057d2b123d6ef13c413adb21844cdcc530dbf37bfa66b9e746973f3a8ab8d2675de13d79f43d4585d7cd0be32718fff0055771a86bd7fab4420d1ad646320c0793a0fc2bcca5d5a5bf916dee6d658655254b320fc
891d7eb5d6586a7aa69fa3aac33b3fa6e51903a6462bc2c66591c462156492975d74652764743e17d16d96e1d751ba8e39ff008e2618fd297c53aa685696b243ba19651c7966b9ff00edfbdbd914dd42b2321ca3270dcf079ac7d7acff00b4195da12b26
3aaf5fc6ae395d158853ab37744f349a0b4f19ddd81315bc69f67cf0be95d5e870af88dd6fe64d8c060291c579f5be8f2a4a04921553c0256bd43c0f6d3dac0eb36c7871c305c60d679be0f0ce939e195a65c24d3d4d49fc3b13c63e723e8d5143a4c106
557a8ad3d4ef52d2ccb1e7e839ac1b3d45ee260633b8679c8af87953ad04d367445dcb33c11c687236fd2b99d4e24673b32c49e735d8cb00971b881c563ded9c69212315587abcaf52ac72935b955c01c564df0f263271d7d2ba8b98faed38ac89ecfcce
b5ed51aaaf7664dd8e42ee425368aa00347f3575b369f1ed6dcbcd60ded9b450b11d335ed51ad192b14999972fbd46da62a9c73562380b28c8a93c8cf00575f324ac3b95c74a4e73560c0476a4309ed4b9905c9206dab4e6930d51852298d926a2c9b1dc
d38a4fdd8a9e3978acd4621454e926073595acc699b1494b49507505252d25300a28a281052d252d218a28a0514804a28a2980b4514b54891453a9b4eab421c29c29a3a53aa9085a29052d5a105252d275ab258869a69d4954842574be19b5df2097a608
c1ac3b3b296f6609103d793e95e8fa0e87f64b74cf2735c58caf1a74dabea6727d0ed74d467863ddc2a8e3deac5f324580319614fb18bfd19547551cd43a8405e45c1e7a735f956215b12d33a60ee8cbc0fb2cacca324e4738ae23515d97818631bb1c57
a05d811dbc821dbf2a81f31c5709ae2ed915b18c3026bd1c0caf2f514b52d585da2595d44e0b1922200cf078e8411cd7268bfbc19c1c77adb8a5dadf28072380791598c989d8e7209383eb5f431ab7a4a2fa18dac98a4e739aa5370c6ac3139aad31c9cd
68a6d9958683c534f2d9a607a96252cc29dec513c16c659171b00c64877da0fe35d5699632c9b4a888aaaf552eca3fa56769ba72cbb59c48474ca90aabff000235d6dac022444c0c638192d9fc4f5fc057958ac469645c50d580a2855c71c0603b7e753a
c64124fe18f4ff001a9f92bedfed75fc3d05270bcaf4f535e3f3b66a344600c6368c631edfe1fcea166dd213fa7f9ff3cd4b2cc029e49f5f7aae8e064b9e7a71ea7aff009f6a693dc09048c0c6a48049e7dce3a7e743965b72a3e7f940dd9e4e7ffd54d4
1963230ced5c0ff78f5fe82a474db081fe78ff00269e8985ca539322805701c15c13d78ddfd4d4168f2af50181049ff781c1e7f2356dd3e541dc483f96292302391f00fcb26ec7a8239ae8bd9681d0a1a85fc91ab08a2dae38f9b915e79e27d42f658a48
bb8f98103eeb636b75ea08cf1fed1af5264e0a6013c819ee474ae5fc4da5c7710f99120dd2608c7a1ea3f97fdf55ed6538a8c2b454918cd268f1781e459492c4fb939348d71300ad86c20c2807a75fd2b42eec5adb5074c119c803154b6969da339f6fc6
bf4b5cb34a48e5d875bdcc32cca1e55009f9864641e9f43fd693573736d6b22aaee8d97e62011807ebe9fe7a543f658fcf21c6037e956af35477b15b1955589caee3c371c63deb1af2ab06b9367b8d5990595d4925942f28dcabf2e00cb2e3b8febeb5ad
717369a95bc52cb162fa220ace98c4a9fe22b1b4d93c84920b85daa1b2a5c71f427b1a74b7ab6d2bc36cca1998ee122e551b04641ec7f9f19cd6fcc946ec56bb3aa7905e471ee951a655dd1cc9caccbe87d08f7e869ebab5e582a433248d0b83b641dc77
da7be3b8ae4f4dd4afe29e6b2b894c2661b81083938ec7b71deba3d34dadae986001e495e4321f31bef1f55cf439fce8b2a8896b94d9b686ee5bc867b7c46ae03a19305481dbdbe95d178827974fd2c5ec7670dcc6797953384f661d57f956369b736724
71c4a1572aa5b2b8dc3b939e9cd6b5aeab2c36ef6928496de45f9a09890c476d84753cf435cb88c252aead357b11ccd6c60dbf8a6c1b064b45424750d904fd0d69a78d241115b680ae3b28ae1b598a28f519c42bbedf7911963865e7a71deabc1a82db4e
ad9752a7a0e723d8d72bc1d25eeb46a9df53d474bd706bcde43e16e13ac458671eb5bb676b1dbc8722bc9bc2be6ffc2451dc5a0658de4c920f51df22bd80cc1a1e1d5bd8d7c3e6f87587adcb07a33a60ee874bf3a920d625f170c7703b7d455e927d9ffe
bacdbdbb210eeaf3a8c5a65b4cc699cac9fde151b0f929cd2c72312c307da98f9db91c8f4af5923292b946ede3542ac393deb0ae7322ec5e56b5ef6277639040acd303237b57a346c95c0ad1d8e633da90da941c8ad03fbb518a9366e8b26b6f6b233949
a325a0079c537ecd9ed579d38c53e240462afda3b5cabe8669b6f6a89adbd2b5e48702ab15e7a55c6a5c95233fcac5215c55b7519a81fad68a4d96a46bd2514523bc4a28a29805145140052d2514805a5a4a29005147d28a602d2d369c2ad122d3a9b4e1
5421c29c29a296ad085a5a28aa420a4a5a43564b10d68695a4cba8c9c02101e4fad56b5b66bab858d3bf5af4df0fe9096b6a995c60735c78cc52a10d37666df423d0fc3f1da22fc9cd75122c76f6d9181819ace9f5286ddc468c01ac0f10f880f906de07
fde49f28e6bc98602be2eb46737ee98b9a48ed3c29a92dea5c9dd921ca8fc2b62e07cb9ee39ae53c0c163b23147c98d70cdea7a9ae9ef1f1137ae2be473ce4faf38c15ac75504f93531afb8b760a7990f3cf5ae7b51b40725870a0e33f4ae9a442f6e1b0
71b81cedc8ff00eb566eab6ea438e01719049e0561879f2b48d1ee716a8c980dd4543328c8357ae418ef363e70ea0a96ef55665e08af762fa99cd19d2719fad5597ee9356e6c0aa729c2d76c0c6c4283737b66b4ad22dec3033f4aa1163d2b5acfe551c6
73dbd68aaec8b4ae747a5dbb8d8090a473d72dfaf0bfceb74111aed3c9ea79fe67bfe35cee9f78a24291c88114e5ca7381eec7a0f7e49f6ad8f3b0338c8c66bc2c4425cda9a22dee0dff00023ce7bd364946d207e87fcff9e6aa19782ccd80bc67f99a72
166c13f5dd8e0e6b9b92c31e5b39c13f80e7fcf4fd3d2a482d84a01e83be3fa7e8292281bf8b000e09fe9fe35707caa147f9ff003ffd6f5a252b68807b46a1495ce17a0155aee4544600f21481f97ff5ead16daa0739ea73552e23595c16e2b18efa8588
49ddf32f237e47f9fa511465a425ba903fa53c4402b20fee93fa62a58463264fc0fe35ab968265794159030e31229fd40feb546e238de368e41b9124edd704e7affbac3fef9ab97d2288dc21f98afafd7fad53cb4924aca3b8241ee3fcf15d7465c91bf5
2796e72baf78385c33dca4855cbee185cf43d7f1e7f3ae1b57d01a12668b27693f2e3b75c7f3af62b892e8c051231f522b9bbcd226ba7324a9c672d818afa1c1e6d5a0d734ee8874d58f29b98018c3f23b31c7eb59b770a4d3c45d827243639008effe7b
1f6af57d53c1af2c2d3456c51b904751d6bceb57f0fdd5b6ad048030566da79c6d23ff00adfcabebb0b9a51c55a31dcc791ad4b16977fe8bf60d482b4582ab2103e5c8c6d638c95fe470454765a02dddf7d97021bae889238db27a296e993c60f7cd2cd1
a85d87a63bff000e3a0fa53222c840009685700f53b3fba477039e3ffad5ea56a7cf07dcca2da7a1af0d958daa496b7b3a25d5b9e2dee54c6f0b77193fcba565cfa8428156485d242d81953f30fe44fe22ba1d6ac0f897c391eab19dd7b649e548c79692
3ec0fa91d8f523dc73c7a5e4a102b8703271b9bdb19f7ffeb579b83acdc5abea9d9f9329abbbb35749d60c9aa9b7b92d0a3f0b8700e718ce7a13ec6ba69ecef2d36bc91c8c073e615396f41b7b67d6b97d3a559428994707e5caf071fcebadd275392dd6
3b29c1bab12dfead9be788ff007949edea29d7ab5e9fbf4ecfc985a2ce4bc41a80babb409a7cfe6a90b23b2b0e3b003bfad59b6f0f5dead2016b672bee008382a17ea4d7a7c70dac2a2e2368e5b690650b0c86f6fa8abcb73e62e235560bfc18e47d3fc8
35f3d5f3cacae942ccb505d0c3f0878260d057ceb995dae641863bb2a3f0f5addbdb1923fde5bb82a073db1f5a517cfb08890ce0758d88debffc50fa8cd645cea579cac6be5a7f73ae3e9fe15f3539d7c4557526f5368c5892caeafc8da7b91d0d43236f
6c11cfad10cfe68dac013d307a538c65385e549ce0f6ad6d62a5229cb6d1b372307da95ad808c146ce3b5248c4cc4679f435283f2e4d6d792465b942500aed917045509610dc2d5eba9b6f6c8aa1b84a7284823b1aeaa77b5c4f44569edf0013c537a45e
d535c390b871c5537942a900d7546ed19ee46ff778a6c526d7c1a400b7d298786e4574c569616ecbec415aaaea39a449f2706964395e2a145a626eccab2e09e2a9c8a77715698f3513ae4f4aeb80ae6a52514533d6128a28a0028a28a0414514b4318514
0a5a40251451400a29452528ab42628a70a6d3aac91c294520a70aa42168a4a5ab420a3a9c0a0d496d8fb4c7bba6ea7b10cebbc1da0b49209e71d7a0f4af429ad4416bc71c561f872e6186d959b8e3a545e22f15470298d1f2c7a006bc0952ad8cc42496
88e794ada99fa915123312001d4d70fa84d2b6a9e69cf969d056b3ea125dc9cb6727a565ead28f305b41f34ade9ea6bec1525468da4f6305ab3d57e192f9be1dbab9ddb99e62339f4e315d3dff0036f9ebed583f0df4b934bf08f93264b3317fccd6fdda
968b0477afc5f339f3e3e73e8d9e8d2d228624656cd0e4a90a3041c1ff00ebfd2b36f161620ba8271f7b1d40ed5b0e07d846402318c1ac49482473ca9391e9fe7fad72d16dbb8ee729addbac4d2ca154383950492e4fa9f4fa5676e13dbacabd1bf435d6
eb16be642544ed10233b50aafeb5c65bff00a1dc4969213e5c9ca31c6037a7535f438697b4a77ea876e6455b85c5665c56cdcafca6b22e0715e9517730b598cb7059c01deb6202372ae7a119ac78090e08eb5b3a7c6c64f91247e33f276fa93d29d63589
afa722b2f9688a40209da99504742727e635ae13f77b8ee2719c360927d4e2a9e9f1efdc76abe0601e5b1ebcf4fe95ad1c5f28fe2f524e47e9c578b889fbc1d4af1c6ce724601e14b0cb31ff00657fad68db5b7cb96e0e70727247b13fd052c3085cb118
c8c939c123dcf6156578c003000e06318fc3b0f6ea6b8aa54be886051572138cf4ff00eb53514eeebfa74ff3fe14f7e41c7e38eb8f414a4851cfd4d61711148df362ab7df9941e986352b498625bf8739ff3f526a04e58963801467f99ad62b418e3f7c9
edb08fd6a54e62e7a1e6a3dbd01f4e4fbe6a61c8c0f4e94988a33d8ef395f5191f8e0ff31524566236c3727953f81ab41832e07f17f502958aa12ec42ae3249e83dea9ce56b011b263000fa53440bbb760608eff00e7fcf35338c8e7a639ff003fe7a528
04a8247cdd4fb1ce0ff9f73529b132b443878d861a33b7f0edfa5646ade1eb6d4236cc6327a8dbd6b6e484991645241504633d47bd4c91e465bf3ad215e54a6a707a9163c535bf055e59bffa246d2a03847620e38fbadf87427823f1c730914d6b707ed1
1149a13f323ae378c723f1e99fc6be8db8b3496260cbb95b823a63fcf5fd7b1ae62ffc0d6da9c809203c63e462307e9f4f6fc2bee305c4ae314b12b4eeb732f66ba1c9f805e3692e6d5c79914e03206f9b721f53ebfcf19eb583e2af064f617cd7360ad7
16b2b13c7553fd0f63ef83df8f42d1bc3336997c14db85873962a7a1eb91fafeb5d44964855964446de30c31f787f9ff003cd79f3cdfd963655a96aa5bafeba9528ab1f3cc7a75eef436d6b36e61c0317dee48cf4f5aeab44d23513b5ae22f2a063b83ca
3f0e9db9f5f6f515e973db476ea5046ac801ca9190c0f5fceb32794408b1cdbaead2560b14c18170c7eeae4ff1e3852787e5586786f729e632c4c7489898d286b246d3f72cb1c995f2a46c24c7a9d8dff2ce41d7078e33d0165e621d75b4dd50c62e7ce0
a70864f95947f7597b11dc0e3b8241cd743adcd6f6761fe99244d6920262940233b4f6e73c11cae77c64641c6193c96f35096ef5792e518bfcc4073866619ea7800fd703d4f3cd77470b4aac2cd5ca3e80d2ee2cb58b08ae366d661cec7cfe469d79a7ab
a9defbd719572391f522b86f87ba839864462815b076a9eac7ebfd727dabb8172f1be54e7b727e53f8ff009fc2be1b1986961b112845e9d0da33b997359ac4432e4301fe7eb514b287e24c2bf4cf635a57a233864f9091968f3d3dc7b567b801d79a5093
92bb0b5ccab80d1c98719f5f6152290e83636f5f53d452c886763b3071fc24751ed4d8a3da994aebbab12ec849200c089147b35665c46b0bf030735a33dc1c631f5159d7322b290f8ada973195eeca9752064159d2f22ae1c1519e57d7d2abcd18519072
2bd0a7a680fc88a33f2d0c40fbd4819557af5a6c83756bd486d222c8dd9153a36579aae46d34e4901ad2c46ec6cdc1e2a124d3e5906714d0062b58ec5c6269d251da8a67aa14945140051451400514514805a5a28a0043cd14514c0514b494a2a912c752
8a4a5aa4038528a414e15689168a28aa421c91b4ae12305998e0015d4587865a0804f7232e4640f4abde0af0e89e41753ae49fba08e95d0f8aaee3d26c4ed5064230a2bcbad8ce6aca853dce7948e4eeae27b58fca84fcc7d3b560cb148cecf70db9dbb9
ec2b76ce29275f327e4b727351ea168acd91d7b0afa7c353e589c8ddddcc2f396cf927e623815278634c9efb5c6bdb856f2f3f2e475ad2d3fc2d3ea3741dc1db9ef5e99a2786a3b5863508005f6af97cef3ea54a2e9537766f4e9f566d787d585a1c8c20
1802ad5c81e59ab30c222b5210600aab74fb61fad7e5b3a92ab53999d6b42bcd2816654f25874358cc374cc46464f5c73f8d6a38df1b0f4e45509e211c99e402bd47f235d54acb42914ae1caa14dc76f4033d4f61cf4fe55c46ad6f9999d594b86cb7186
07d08edfcabb6bb426362d8c77c8c8fc7dbf9706b95be8775cb8cb48338e4f23dabd9c1c94752a267c6fe7c19ee3861ef546e613922af08d609f2bb806e1d58631ef44f167dfdebd38c945e844e3d51910ae241f5adeb250ca110966272542eefd0f03ea
4fe1595b36c95a9633b084aa2e029196ee49e8abee7d7a819e95a5477411d8e9ed2336e104bb59dbd064afa0cf4fc856ac31f03158da6ccb3843b831ea481819ff000ec3d856c5bbef5057a11dfb0af9ec426a5a88b2a0741dbf43fd4d2938381fcffcff
009e298b91c0cf1fe7f3a53c2d7200a1f033d2a19a5da791f28a42c075ed4c77f94773fd7fc9a718eb71d884bee5600e7381fd4d485724a1fe390271f99a6845cae0632d522a305571cf24815ab63b0efbdf37f7b9fe669572645238c007f5a639221039
c8519e3da96dd1a43c0c6471f97ff5a9696b8ac490ae368f61ff00b2d48c9fba391daa45014f23be3f97f8513b844ce78ac9caec9217213240caf0d81fcbf43f9d0a0866e790793ee38fd4106981b6a7b818c7af3ffd6fd6951ca6415f403ea011fe15a7
d9b0344aabd2a5d9b78ed8fcea35911feef07a81fe7f0a9d9959382001cfe1516b3d48216c36549fa1c743d8ff002fd3de9140e58023fa1ff3fa7d2a09a70b9cfae0e471fe79fc89a6dbb3bbee72c3231d79faff009f7f5aea9b4e009169bdf39f6eb55a
799123f9f0bb012a36e7db1eff004ee0e2a727239a82752ea4751df35cf4a4d31b5739dd475486de10b712a96dfb5977e590e33807b9c1c807048f52083c45dfc41d111258e473387dd14f6cd1121f3c1ce78c763f9f51f375face9314e8e5d4004609c0
c63a739e08f66ca9f515e3be30d2cdadf2bcaaa858f964853f31edf31e4103f85b90318665c11fa1652e8d68dba9cee3a9535af1436a52cb683ce6b1326e0256fde360614b1fe265e9bbab0c6724035891b97c6570ddfb6eff001ff3f5a73c3870d9dc7b
96ebfe7b54b1c066658f0a49e95f4ba4501dc78023696e0480b6c03695c039e3d7fa7f3eb5e98c856dc302244ce0a74c1f4f6fc78fa5723e07d15b4fd3cbc83963953d08ff003fe45759239461b4f5e01eb9f61fe1d7b827a57c36675155c4b711ec57b8
28d0e09202b6d2083c1fe60ff9e7ad42b6e5971b83ae323d47f88f7a8a79e3137ef0718c1e474f63d08fd3fdd3481a58f2d13b3213c01c107fa1f6ebf5ae3f66d22d4b419347e492bd307953d41febfe79aa724dd4a100f7f7ab1752a4aa3e5c75391c63
d7fcfe62b1e7976b7273e8dfe3fe7f3ae8a74f98cb709e6ce7b1aa1292ca68926c9e6aacf3b2fddfff005d7753a761ec23af00a1fa8355259bff00ae29ed39ebe9fa5519ee1587039ef8aed841df5121fe602d81532b7154e3e6ac236de1ab4944ca7a92
4872bcd55dd86e2a591aa00bb7249a715a0e08648df367350bce4375a64ae779c1e2a3cd74a89a5ce9a83451589e9094514500145145300a05140a402f6a5a28a4025141a050028a51494b568438528a414a2ad0870a70a68a70aa448b4f8b066407a6e1
4cabda4d9b5ddfc6a07ca08268949462db265a23d6fc1f088ec5091ce2a6f106936f3fefeef076f201ed563458c59e9a246e02ad709e2cf15bea5a90d26c589663fbc653f7457c7e5d42a6271aeaf44724da4882eee3ccb9f26c17705e091d2b4f47f0ec
f752092ec1c75c56f7867c371c5688ee9dbb8aea63b448c61540aefcfb3aa9421ec28bb5c54a1777653d2f488e3da15318adbf2047f2af6a92d2311c658d2c6419199abe05a5514799eb267531b1ff00aa607a8cd64de9f940f7abe65db2499e39e2b32f
1b27e9cd39c629c794229dc585415fc6aa5fae07cbff00ebff00f555b88e147d2abdf73174e7391530f8cbea529edf7db9318f9faf5c0fa7e35ccdc5ae2e9d5f7373d59704d75e8775b0dbf80fe958b7810ca4024953d08e9f43dbe95e861ea34da29339
7b9b790b104ee407839c8a84c0eb0f232a3d3b56dcf10d9b9b241e3729e41f461fd6a6d36dd5989c0c11c8238fcabd2f6fcb1b94f6391922cb7a53ad7a30e7001fc0773f5c71f8d6eeafa74513132c6600df76441b973ee3b563adbb42fced646e8c8d90
7fcfa57653aaa71ba1451b3a64ac2144ca86624bff00b23a9fa9c607e26ba2b4dcd182c3033c76c1fa7b573fa646cade671f31da30bc9f503fa9ae9ed622065ce7b82457958b92b8a489c021724546e7f4eb568ae23ea7fc2aabaedce78f4f6af362ee49
0c9c7e14dd83283f13fcbfc69f8dcd80391fce9ca9c9cfdde07d6b5bd8637682fbb1c28c548bd87e1fca8e831ebfe7fad28ea7ebc527a8c705ced07b91fd2ac5bc623553fec8ff003fad409f33007a73fa559fe1aca57d84c1c2b31c5569e02e8429e7e9
539ebf85267d7fcff9fe94a374c92bc70055e7ae3a9a5741b7a647bd4a4e7aff009ff3cd4529f94e7f13569b6ca255892452c9f758719ec7d298f6f200db181c7229f66ff29181bbf9d4c0f07d33d0f6a9726990ca715a8466f3007078c91dab16ff00c4
569a15e8b4d54bc424cb4136dcac8a3b67b30e841eb8e339ae85df835c0fc51b3fb4e810ce87f7d6f2e507660472b9ed9c647bad7a596d38623131a55b6919cae968689f1d68c033adceec71b55492ddf81df8048c67201c64822a24f881a2cca36cac72
3e5db86dc7a803ea0657d7a75e2bc464555fde4726e0e3201e323e9eb9ff001aacd21c16c81bb93c67767d7fcfe75f6dfead613bbfbccf9d9f4145aa586b16c973a75ca4a8c0b2946c371c1f70477c8e3b8ae5fc4ba1fdbede48d23f3372918299fa00b9
fc42e70792854f07caecf53bab297ccb596489c306c8272180e1877c8f51dbd46457a37867c649af2ad8dfed4bedb85200db38ebc0e993c9dbd0ff000e0f030965d5b2e97b6a0f9a2befb0efcc70d67e0cd5ee2e0c3f67e870650729e99cfa7f8e0d74da
37811ad6e166d44a10a0318c1ce0f7fcba1fd4574cd7535a5e3145dcafc3aeec86f7f7ef83f50475cd9fed142a09183c1073823df3fa67b74391d26be6588a8acb44fb0f96c588f6247b5154af42be9f97f9fa8a65c4c7cb29f7d7a73c91df0dfcc1fe5d
6aabdc6e3853b4a9c640c01f876fa76ed552462cd86241e8196bc78c35bb1b4473cdbb7705f072d9249c7f33f5ebf5a745f77e53b978c7bff9fcbe953469e680cc36c80e4951c30f5f63fe7ad44f1fd9e4f321fb8df790b6029f6278e7f2adee9e88cdb2
3ba3b9094243672549e73fe7f11ee2b0e77ce4af5eff008ff3febec6b525937bbe46c2a30770c6df661dbf9560de3bf98caca55979e707afafa8f71c1fad76e1e3d1902429e6ab9e4f3dbf9d432c2e1f603c9e391496d3ed2ebf77271827a7e357615698
38de19c2e541fe31e9f5aebb38b225330a74955cac830ca7045552993c75ad79e3058eec9f43e9555e1f9b918f7ae98cf41295cab1655aac1c15a735b9ea067de944240e7a50e49ea4b6ae563953cf22a17977363a55d963c0e99155248b2723ad5c5a60
a7a95245e6a3c55a64f5a8cc7cd7429177b9d0d068a2b03d6128a28a601451450014b494520169690514802814514c05a514da70eb568438528a4a515448e14e14d14eaa4214576be0cd34cb329dbd7926b8d890bcaaaa3249000f5af62f0969a2c74f47
946188c9cf6af3732a9cb4b93b98d47d0d9d593ecfa032c7d42f6ef5e63e0ff0b5ccfac4d797a8434921639fad7a6cd72b75fbb1ca74c53ed628e03f2003e95e7bc6470341c628e651e6669dac420b7545ec2a63f2f355e29b06a467cd7c1e33112c4d4e
6676423645d2fb6db02aa894893daa33236dc678a41c735c9ab4ae5d826f9db238cd576883c873e953b366a32d8aa4da19021f907d2abde3661e0e307f5a9d8056cf6c9aa974c0823f85860ff435d1057911d48637fddfe39aa776aafb987de5fe553a9c
44491ce706abcebb99594900f5f6aeb82b328a17d6ee177ae73b79da79c7f5152e9887a8e7f1c549729244815c6e8c8dc39c153ec7d7da934fe2500f46efe95d2e57a65742cde47be120a06078287f8bdbebedf9572d3e9a44be65a66446382b8e54f704
7b5765709f29cf231cee1918f7f51fa8ac49adc99485f95b856ddce47a37a8f471d2af0b52c849d8974c885ca01c9854e093c1931e98e8b9fceb72318000e2a9d8c42340806dc00aabe9fe3574715c75a7cd2064ac4050b8049e950c88431c0e4631f5ed
52420ee2c7ab0efd87ad4930c807a119da2b9d3b3114963da7e5e7d3dffc9fe54101385e83f5e3ff00af531c0e9e9c7d3a0aad23fcb9f5e6b54db10879fe9467e6fc293690b934a1732051e99fc2a8a2cc3c20627b7f339a97a0c7f9ff003d6a25e9ed9f
f3fa0a52c7fcff009f7ac9eac963cf41fafe42a3ce0f3cff009fff005d29395ebdff00ad318f19a1210e2dc7e3fe7fcfbd559d80523b54a48cf5c0f5aab236e9517d4f3fe7f0ad60b519691f0ff374e338ab0c739e81b1907d455077ee3b706a58a5de00
ee3953e87d3e87afe349c6fa8895d8e3d0fa66b98f196d93c3d72853cc25385cf271cf1fed0c061f4ae82798004e702b1b50db708d14801079e7a039e0fe7fa1aebc1fb95633eccce5b1e0d73c3b2641c1cb606467fbc3dbfa551dc5989dbbb9e7b924ff
009fc7ea39dbf11db0b0d5e648432c796083a1519fba7dc723e98ac2924e3695072320fa1ee3f1ebfe457eb94e6a70525d4e6ea441be604741d31ceeeffe47e239c8a74531464961277a302a739c1ce474fcff00daf66151b1f99d73c724e79c7ae7f99f
fbe877a10ee90ab70d9c9247e2738fcce3fde1572b5b52cf59b2d622d674a4ba4ff5aa02dc46792ad8cee1ea0f5cf71cf506b62c3c8bbb731be0eee411d41f5ff1ae2bc2304f0d84d70f1ee8a61b190afcd9073907f5c7723239e2b62c6f0db4fb037cb9
f95cf1c76cfb7bf6af8ac5e1e2a7254dec6dd0dc934d313611b23ebf95345ba85c1c807a8f7ff3f97d2ad2dcf9a836f520900f5f718fe9f8d4723fcbbb27071b803c8f43fe07f0af3139f5316ec40ca51707b1c7f9ff003cd51b998e010327a919ebf9ff
002ef56a4ba58e448e4c6f3c2606049ec33d0ffb26b3aea4ca9580921f2ad1919cfa800f53edd6ba69d36dea66e48ceb8946e0b149b802422eedacbecadd8ffb2dd7b564df4a0fcb3e1c1240902edc377047f037a83f29f6eb576e1cb2ec0d92ca554e37
9651c9001fbe07753861dab1ee24f37257058ae33bb72bafa13fc4be84fccbd0d7b7461dc8bf6220cd1ca09cba018e3b0cff009e0d5f8a65c650e0f556ace47e1b6139e986fe5f852a37f77853d7fd93fe15aca3721abea683ccaec4f7e8d4ef2d4a104e
4f6a8230170c41cf43eded532f2f83d0f435cf221b51d87403631493bf43eb53bdbaaae0720fe948b1860449c7a1f4a7296e6393ef0e9ee2b36eeee61295ca52c7b78ea3d6a9c9167915a131c13fad53939236d74c1bb0e372a491fcbc8a84ae3b568c88
0a8f5a81a2c9e2b68c8d94b53428a28a67ba2514514c028a28a0028a28a403a928ed4b400868141a28017bd2d20a51568438528a4a515421c29c29b56ac60fb4de471f504f355b2b92dd8eb3c11e1e37572b753a703ee823a577fae4bf61b011c1f7b151
7876dd2d6c942819c51ac40f70fea2be0f1d8b94f1a9cb64733774cceb2bc9042a3f8aba0b2577505ab36c2c499064702ae5feb967a4a112c8a303d6bcdc556a989a9cb15765c128ee6c2058d72d48b2ef3c74ae5a2f10b6a23317084f06b7ecce60526b
82b61a7474a9a3348c949e85c079e6866a6e7d2a366ae648d0796a6935116c75a58ceee6aac21ee995aa170a7666b4d39c93e955678f2a71ea6ae9cacc931c3e1f6fe34b0c0657312b60104ae6ada5b0e778e9d2a65b741b5d7ae3f5aea7512d866399bc
d8a4b69d487438c1ee33dbdc54369f2ccbd08271cf7abbabc00e2751871c1f7a8608993cb917ee9e735d0a49c2e8ae869c8bf281cfe079cfb7f9e6b34c40499e0607181c0f523dbd57b56ab9df18c8c123a553953e6ea739c839e41ff3f98f7ac694acac
4841c1e9ff00eaf6ab67ee8fd6aac3f4fc2ad800e3159cf719229c2e4f5fe548cc0820f19fd3fcff003348781822a3049eff00e7fcff002a848436442771c800027e9c63155a5388ce78e40feb570b0db503aab6030e9cd6917618c933e4c6a3a96ff0a7
420ef66efc81f4ebfd294e3a9ed447203328ff006bfa1aae803f3f747aa67f90a01e7ea7ff0066a40d8914f6db8c7a73512480451e7ae47fe8553622e4a4fee188f4cfea698cd81c7386e9481ffd1881dd0e7f335119943119e4039fc81aa516484afb47
b6322a0539b86e7eef7ff3f4a64b2e7e539ce48e3ea47f5a13e58c1db862391ef5ba8d90c9259360e3b9ed504174a18ae7dc0f6ffeb1fe74db97ca1ea7d7159523ee6ebf32f3907fcf5e0d6d4e9a9226e685eddf5e71ebedeffcbf3acf7b8de081c9e9cf
3fe7d3f2ac6f106ad269370ad2c72cd65326410bf3293d07bf4618eb9db54ad3c49a75db7eeae63775665c06e5b68c9c0eb82b861f8fa57ab4b0553d929c55d19f32135ed1df568a52a83cf046d6007cc7dfea38fcab8593c29aaa39cc07e53c2920679c
8af479ae51a3330906d519620e72b8ce47e1c8a9d2749d30aca59402cc39078e1be8473f4cfa57ab87c757c343962aebf225a4cf1dfec2bf3aa5ada490c917daa4f2e22c36fcdfddfafa7e55db68de08b6b4b96372eb3489cc6ad95071c153e9cf1edb87
635b3ac6996face9b2d8ccfb1cfcf148a798e41d1bf3fd0d32c750b9bfd2165bf3b350b63e5dd92392c3e51291ff008eb7a8e6bbaa63ea56a775a746bf27fa0bd0962f2ada15b74450b821015d9df001f4e46d3fdd6008eb59d202f705973c74e3a8fe5f
e71e9525dc8656576cae3990104ed3d09f7e3008ea400698c8cea0a16dc38c290c589190076248e54ff18c83cd71c55ddcbbd8d1b0b8620445b1fdde719f419fe44fd0f4ab93cc3ae0b1248036e093df8f5f55efd456119da20b382a4377192a723aff00
ba71cfa75ea1a9e6ea59a205cfcc7030c76ffba18ffe82ff0081acde1fdeb99489af248ee10ac8aae8e3905b861d8eeedecddba1ac496e25b4565bb769a2cecf39d7e620769075cafa8e47046455b92e4b37018b3311d304b77e3a07c751d18567dcdc17
4ca1531b8c7cc7e523a6d6ef81f9a9e3915d9461cba743121be909f30336f8db1962dd7d0b11d7fd99073d8d65c8db8b799c8279cf049f5ff7b1f81ab71c2cca563dd85e8ac3953dc7bfd3a1155fcbea3000ee33dbfc3f957645a5a0aeb62254f9b07eb9
f5f7a7f9a1599b1ce30e9fd6a58e3f30f96cc437f0b1e3fc9a64b193ce3e64382bfe7b53bdf7052e84f6b2f761923875f6ecc2af6d1c63a76acc8d0a8ca0248e473dbb8ad18406846c3904653fc2b9ea257b99548f62c06ca8cd319f38527047dd3e9ed5
116f949f6a8db2ddf91592898f2ea3a7fdea165e187de15449da6ac492955571d47071dc547285750e9d2b68a2934885e4245081b14a4820629eb280b8ad4b8dcb541a28ab3df128f5a28a60145145300a28a2a405ed4b4514201293bd145301453c5145
5201452d1455103ab5341ff90a47f5a28a25f0b227b1ec3a67fc7ba7d2ac4d4515f9ae3ffde19cf1dc48ce2ddc8e0e2bc67c6d34adaab8691c8f42c68a2bd2e1eff7c0a9f09d97873fe41707d0577b69fea17e94515c59d7fbccbd4ba259ed51375a28af
091d043274a9e1ff005628a2adec04c9d2a27e8df5a28a88ee24577eb48a7f767e868a2b61329dff0030c99fee8fe469348f9ad0eee7e6eff4a28ae8ff0097452d8b927083e954ee78271e8ffd28a2a698047feb1aada74fc3fa9a28a531b09bef37d4d4
5fe7f4a28a94488df747d2a33d4fd28a2a90c63ff4a8613fbf1fe7b51456b1d989924a4f9679aaea4fc9f51ffa328a2aa1b10c7464ecfc0ffe846a82b1fed09c64e36c5c7fdb234515bd3fb5fd75247db127049c9c9ebf5152c9fd3fa0a28a52dc644fd3
f05fe7588c7fd2b1db61fe6f4515d743a9122878c006f09485864843827b7cca6bc6350f943b0e1811823a8f9851457d9e47feeefd598bdcdcf0d5d5c7d976f9f2e1235d8379f97172a063d30091f89ae83447659ad76b1187be8c60f4559576afd064e0
76a28ad313f0cffaee1d4bed23ee8cef6ce13bff00bffe03f2156ed003afc408e1d5030f5051b39fc8514579b57e17e80b733598865c1231b48c1e989703f4e29d8021b95030145e803d0290ca3f03c8f434515a531b1b77feb6e87612f03eab193fa927
f135043f37900f20cac841eebb578fa51456e66f62bfde11eee775a3eecf7c138cfd2a93125c12492d144c4fa93c13f5a28ab8993dc8a2255cede3e46e9ec78a9af801749818fdee3f020668a2abed11f68ae07ee73df683ff008f115249cc8a4f528727
d78145155d4649001ba2e3fe5a30a7da7503b79b45158c8898f6ff005928edbcff002a823fe1fa5145490364fba7f1aae87f76df534515b2d89437f87f3a88d1455a3a56c7ffd9
'